@sarthak03dot/romantic-animations 1.2.0 → 1.2.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"romantic-animations.es.js","sources":["../src/core/engine.js","../src/animations/floatingHearts.js","../src/animations/heartTrail.js","../src/animations/heartBurst.js","../src/animations/sparkles.js","../src/animations/loveRain.js","../src/animations/confetti.js","../src/animations/fireworks.js","../src/animations/starField.js","../src/animations/butterfly.js","../src/animations/magicDust.js","../src/animations/floatingOrbs.js","../src/animations/shootingStars.js","../src/index.js"],"sourcesContent":["/**\n * romantic-animations — core engine\n * Handles canvas creation, sizing, resize observation, and cleanup.\n */\n\nconst DEFAULT_OPTIONS = {\n zIndex: 0,\n};\n\n/**\n * Initialises a canvas inside the given container element.\n *\n * @param {string|HTMLElement} containerIdOrEl – element id OR element reference\n * @param {object} userOptions – optional overrides\n * @returns {{ canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D,\n * options: object, destroy: Function }}\n */\nexport function initCanvas(containerIdOrEl, userOptions = {}) {\n const options = Object.assign({}, DEFAULT_OPTIONS, userOptions);\n\n const container =\n typeof containerIdOrEl === 'string'\n ? document.getElementById(containerIdOrEl)\n : containerIdOrEl;\n\n if (!container) {\n throw new Error(\n `[romantic-animations] Container \"${containerIdOrEl}\" not found in the DOM.`\n );\n }\n\n // Remove any pre-existing canvas we created (clean slate when re-triggering)\n const old = container.querySelector('canvas[data-ra]');\n if (old) old.remove();\n\n const canvas = document.createElement('canvas');\n canvas.setAttribute('data-ra', '1');\n canvas.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: ${options.zIndex};\n `;\n\n const resize = () => {\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n };\n resize();\n\n container.style.position = container.style.position || 'relative';\n container.appendChild(canvas);\n\n // Keep canvas sized to container\n const ro = new ResizeObserver(resize);\n ro.observe(container);\n\n const ctx = canvas.getContext('2d');\n\n /** Tear-down helper – call the returned destroy() to stop & clean up */\n function destroy() {\n ro.disconnect();\n canvas.remove();\n }\n\n return { canvas, ctx, options, destroy };\n}\n\n/**\n * Merge user options with animation-specific defaults.\n */\nexport function mergeOptions(defaults, userOptions = {}) {\n return Object.assign({}, defaults, userOptions);\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n count: 0.12, // hearts spawned per frame (probability)\n minSize: 14,\n maxSize: 32,\n minSpeed: 0.8,\n maxSpeed: 2.4,\n colors: ['#ff6b8a', '#ff4d6d', '#ff85a1', '#ffc2d1', '#ff0a54', '#ff477e'],\n wobble: true, // horizontal sine drift\n glow: true,\n};\n\n/**\n * Draw a proper heart shape centred at (cx, cy) with given radius.\n */\nfunction drawHeartShape(ctx, cx, cy, r, color, alpha = 1, glow = false) {\n ctx.save();\n ctx.globalAlpha = alpha;\n if (glow) {\n ctx.shadowColor = color;\n ctx.shadowBlur = r * 1.2;\n }\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(cx, cy + r * 0.3);\n // left lobe\n ctx.bezierCurveTo(cx - r * 1.1, cy - r * 0.5, cx - r * 1.6, cy + r * 0.5, cx, cy + r * 1.4);\n // right lobe\n ctx.bezierCurveTo(cx + r * 1.6, cy + r * 0.5, cx + r * 1.1, cy - r * 0.5, cx, cy + r * 0.3);\n ctx.fill();\n ctx.restore();\n}\n\nexport function floatingHearts(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n const hearts = [];\n let running = true;\n let frame = 0;\n\n function createHeart() {\n const size = opts.minSize + Math.random() * (opts.maxSize - opts.minSize);\n return {\n x: Math.random() * canvas.width,\n y: canvas.height + size * 2,\n size,\n speed: opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed),\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\n alpha: 0.7 + Math.random() * 0.3,\n wobbleOffset: Math.random() * Math.PI * 2,\n wobbleSpeed: 0.02 + Math.random() * 0.03,\n wobbleAmount: 0.5 + Math.random() * 1.5,\n };\n }\n\n function animate() {\n if (!running) return;\n frame++;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (Math.random() < opts.count) hearts.push(createHeart());\n\n for (let i = hearts.length - 1; i >= 0; i--) {\n const h = hearts[i];\n h.y -= h.speed;\n h.wobbleOffset += h.wobbleSpeed;\n const xOffset = opts.wobble ? Math.sin(h.wobbleOffset) * h.wobbleAmount * h.size * 0.5 : 0;\n\n // Fade out near top\n const fadeAlpha = Math.min(h.alpha, h.y / (canvas.height * 0.2));\n if (fadeAlpha <= 0 || h.y < -h.size * 3) {\n hearts.splice(i, 1);\n continue;\n }\n\n drawHeartShape(ctx, h.x + xOffset, h.y, h.size, h.color, Math.max(0, fadeAlpha), opts.glow);\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n minSize: 6,\n maxSize: 16,\n decay: 0.025,\n colors: ['#ff6b8a', '#ff4d6d', '#ff85a1', '#ffc2d1', '#c9184a'],\n glow: true,\n};\n\nfunction drawHeart(ctx, cx, cy, r, color, alpha, glow) {\n ctx.save();\n ctx.globalAlpha = Math.max(0, alpha);\n if (glow) {\n ctx.shadowColor = color;\n ctx.shadowBlur = r * 2;\n }\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(cx, cy + r * 0.3);\n ctx.bezierCurveTo(cx - r * 1.1, cy - r * 0.5, cx - r * 1.6, cy + r * 0.5, cx, cy + r * 1.4);\n ctx.bezierCurveTo(cx + r * 1.6, cy + r * 0.5, cx + r * 1.1, cy - r * 0.5, cx, cy + r * 0.3);\n ctx.fill();\n ctx.restore();\n}\n\nexport function heartTrail(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n const hearts = [];\n let running = true;\n\n function addHeart(x, y) {\n hearts.push({\n x,\n y,\n size: opts.minSize + Math.random() * (opts.maxSize - opts.minSize),\n alpha: 0.9 + Math.random() * 0.1,\n decay: opts.decay * (0.8 + Math.random() * 0.4),\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\n vy: -(0.3 + Math.random() * 0.6), // drift upward\n });\n }\n\n // Mouse support\n const onMouseMove = (e) => {\n const rect = canvas.getBoundingClientRect();\n addHeart(e.clientX - rect.left, e.clientY - rect.top);\n };\n\n // Touch support\n const onTouchMove = (e) => {\n const rect = canvas.getBoundingClientRect();\n Array.from(e.touches).forEach((t) => {\n addHeart(t.clientX - rect.left, t.clientY - rect.top);\n });\n };\n\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('touchmove', onTouchMove, { passive: true });\n\n function animate() {\n if (!running) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n for (let i = hearts.length - 1; i >= 0; i--) {\n const h = hearts[i];\n h.y += h.vy;\n drawHeart(ctx, h.x, h.y, h.size, h.color, h.alpha, opts.glow);\n h.alpha -= h.decay;\n if (h.alpha <= 0) hearts.splice(i, 1);\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('touchmove', onTouchMove);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n count: 20, // hearts per burst\n minSize: 8,\n maxSize: 20,\n minSpeed: 2,\n maxSpeed: 7,\n gravity: 0.08,\n decay: 0.018,\n colors: ['#ff0a54', '#ff477e', '#ff7096', '#ff85a1', '#fbb1bd', '#ff4d6d'],\n glow: true,\n symbols: ['heart'], // 'heart' | 'star' | 'sparkle'\n};\n\nfunction drawSymbol(ctx, type, cx, cy, r, color, alpha, glow) {\n ctx.save();\n ctx.globalAlpha = Math.max(0, alpha);\n if (glow) { ctx.shadowColor = color; ctx.shadowBlur = r * 2; }\n ctx.fillStyle = color;\n\n if (type === 'star') {\n // 5-point star\n ctx.beginPath();\n for (let i = 0; i < 5; i++) {\n const outer = (Math.PI / 2) + (i * 2 * Math.PI) / 5;\n const inner = outer + Math.PI / 5;\n if (i === 0) ctx.moveTo(cx + r * Math.cos(outer), cy - r * Math.sin(outer));\n else ctx.lineTo(cx + r * Math.cos(outer), cy - r * Math.sin(outer));\n ctx.lineTo(cx + (r * 0.4) * Math.cos(inner), cy - (r * 0.4) * Math.sin(inner));\n }\n ctx.closePath();\n ctx.fill();\n } else if (type === 'sparkle') {\n // 4-point sparkle\n for (let i = 0; i < 4; i++) {\n const a = (i * Math.PI) / 2;\n ctx.beginPath();\n ctx.ellipse(cx + Math.cos(a) * r * 0.5, cy + Math.sin(a) * r * 0.5, r * 0.18, r * 0.7, a, 0, Math.PI * 2);\n ctx.fill();\n }\n } else {\n // heart\n ctx.beginPath();\n ctx.moveTo(cx, cy + r * 0.3);\n ctx.bezierCurveTo(cx - r * 1.1, cy - r * 0.5, cx - r * 1.6, cy + r * 0.5, cx, cy + r * 1.4);\n ctx.bezierCurveTo(cx + r * 1.6, cy + r * 0.5, cx + r * 1.1, cy - r * 0.5, cx, cy + r * 0.3);\n ctx.fill();\n }\n ctx.restore();\n}\n\nexport function heartBurst(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n const particles = [];\n let running = true;\n\n function spawnBurst(x, y) {\n for (let i = 0; i < opts.count; i++) {\n const angle = Math.random() * Math.PI * 2;\n const speed = opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed);\n particles.push({\n x, y,\n size: opts.minSize + Math.random() * (opts.maxSize - opts.minSize),\n vx: Math.cos(angle) * speed,\n vy: Math.sin(angle) * speed,\n alpha: 1,\n decay: opts.decay * (0.8 + Math.random() * 0.4),\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\n symbol: opts.symbols[Math.floor(Math.random() * opts.symbols.length)],\n });\n }\n }\n\n const onClick = (e) => {\n const rect = canvas.getBoundingClientRect();\n spawnBurst(e.clientX - rect.left, e.clientY - rect.top);\n };\n const onTouch = (e) => {\n const rect = canvas.getBoundingClientRect();\n Array.from(e.changedTouches).forEach((t) => spawnBurst(t.clientX - rect.left, t.clientY - rect.top));\n };\n\n window.addEventListener('click', onClick);\n window.addEventListener('touchend', onTouch, { passive: true });\n\n function animate() {\n if (!running) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n for (let i = particles.length - 1; i >= 0; i--) {\n const p = particles[i];\n p.x += p.vx;\n p.y += p.vy;\n p.vy += opts.gravity; // gravity\n p.alpha -= p.decay;\n drawSymbol(ctx, p.symbol, p.x, p.y, p.size, p.color, p.alpha, opts.glow);\n if (p.alpha <= 0) particles.splice(i, 1);\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n window.removeEventListener('click', onClick);\n window.removeEventListener('touchend', onTouch);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n count: 80, // number of sparkles alive at once\n minSize: 2,\n maxSize: 6,\n speed: 0.5,\n twinkleSpeed: 0.04,\n colors: ['#fff', '#ffe4e8', '#ffb3c1', '#ff85a1', '#ffd6ff', '#e7c6ff'],\n glow: true,\n};\n\nexport function sparkles(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n const stars = [];\n let running = true;\n\n function createStar() {\n return {\n x: Math.random() * canvas.width,\n y: Math.random() * canvas.height,\n size: opts.minSize + Math.random() * (opts.maxSize - opts.minSize),\n alpha: Math.random(),\n alphaDir: Math.random() > 0.5 ? 1 : -1,\n twinkleSpeed: opts.twinkleSpeed * (0.5 + Math.random()),\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\n vx: (Math.random() - 0.5) * opts.speed,\n vy: (Math.random() - 0.5) * opts.speed,\n };\n }\n\n // Populate initial stars\n for (let i = 0; i < opts.count; i++) stars.push(createStar());\n\n function drawStar(s) {\n ctx.save();\n ctx.globalAlpha = Math.max(0, Math.min(1, s.alpha));\n if (opts.glow) { ctx.shadowColor = s.color; ctx.shadowBlur = s.size * 3; }\n ctx.fillStyle = s.color;\n\n // Cross / sparkle shape\n const r = s.size;\n ctx.beginPath();\n for (let i = 0; i < 4; i++) {\n const a = (i * Math.PI) / 2;\n ctx.ellipse(\n s.x + Math.cos(a) * r * 0.35,\n s.y + Math.sin(a) * r * 0.35,\n r * 0.15, r * 0.7, a, 0, Math.PI * 2\n );\n }\n ctx.fill();\n\n // Tiny centre dot\n ctx.beginPath();\n ctx.arc(s.x, s.y, r * 0.2, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n }\n\n function animate() {\n if (!running) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n for (let i = 0; i < stars.length; i++) {\n const s = stars[i];\n s.x += s.vx;\n s.y += s.vy;\n s.alpha += s.alphaDir * s.twinkleSpeed;\n\n if (s.alpha >= 1) { s.alpha = 1; s.alphaDir = -1; }\n else if (s.alpha <= 0) { s.alpha = 0; s.alphaDir = 1; }\n\n // Wrap edges\n if (s.x < -10) s.x = canvas.width + 10;\n if (s.x > canvas.width + 10) s.x = -10;\n if (s.y < -10) s.y = canvas.height + 10;\n if (s.y > canvas.height + 10) s.y = -10;\n\n drawStar(s);\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n density: 0.15, // probability of a new drop per frame\n symbols: ['❤', '💕', '✨', '💖', '💗', '⭐', '×'],\n minSize: 12,\n maxSize: 28,\n minSpeed: 1,\n maxSpeed: 3.5,\n colors: ['#ff6b8a', '#ff4d6d', '#ffc2d1', '#ff85a1', '#ff0a54', '#a2d2ff'],\n opacity: 0.85,\n glow: true,\n};\n\nexport function loveRain(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n const drops = [];\n let running = true;\n\n function createDrop() {\n const size = opts.minSize + Math.random() * (opts.maxSize - opts.minSize);\n return {\n x: Math.random() * canvas.width,\n y: -size * 2,\n size,\n speed: opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed),\n symbol: opts.symbols[Math.floor(Math.random() * opts.symbols.length)],\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\n alpha: 0.4 + Math.random() * 0.6,\n angle: (Math.random() - 0.5) * 0.4, // slight tilt\n wobble: Math.random() * Math.PI * 2,\n wobbleSpeed: 0.02 + Math.random() * 0.02,\n };\n }\n\n function animate() {\n if (!running) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (Math.random() < opts.density) drops.push(createDrop());\n\n for (let i = drops.length - 1; i >= 0; i--) {\n const d = drops[i];\n d.y += d.speed;\n d.wobble += d.wobbleSpeed;\n const xOff = Math.sin(d.wobble) * d.size * 0.3;\n\n ctx.save();\n ctx.globalAlpha = d.alpha * opts.opacity;\n ctx.font = `${d.size}px serif`;\n ctx.fillStyle = d.color;\n if (opts.glow) { ctx.shadowColor = d.color; ctx.shadowBlur = d.size * 0.8; }\n ctx.translate(d.x + xOff, d.y);\n ctx.rotate(d.angle);\n ctx.fillText(d.symbol, 0, 0);\n ctx.restore();\n\n if (d.y > canvas.height + d.size * 2) drops.splice(i, 1);\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n density: 0.18,\n colors: ['#ff6b8a','#ff4d6d','#ffd6ff','#e7c6ff','#c77dff','#48cae4','#ffe66d','#06d6a0'],\n minSize: 6,\n maxSize: 14,\n minSpeed: 1.5,\n maxSpeed: 4,\n gravity: 0.06,\n drag: 0.99,\n shapes: ['rect', 'circle', 'ribbon'],\n};\n\nexport function confetti(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n const pieces = [];\n let running = true;\n\n function createPiece() {\n const size = opts.minSize + Math.random() * (opts.maxSize - opts.minSize);\n const speed = opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed);\n return {\n x: Math.random() * canvas.width,\n y: -size * 2,\n w: size,\n h: size * (0.4 + Math.random() * 0.8),\n vx: (Math.random() - 0.5) * 3,\n vy: speed,\n angle: Math.random() * Math.PI * 2,\n spin: (Math.random() - 0.5) * 0.15,\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\n alpha: 0.8 + Math.random() * 0.2,\n shape: opts.shapes[Math.floor(Math.random() * opts.shapes.length)],\n };\n }\n\n function drawPiece(p) {\n ctx.save();\n ctx.globalAlpha = p.alpha;\n ctx.fillStyle = p.color;\n ctx.strokeStyle = p.color;\n ctx.translate(p.x, p.y);\n ctx.rotate(p.angle);\n\n if (p.shape === 'circle') {\n ctx.beginPath();\n ctx.ellipse(0, 0, p.w / 2, p.h / 2, 0, 0, Math.PI * 2);\n ctx.fill();\n } else if (p.shape === 'ribbon') {\n ctx.beginPath();\n ctx.moveTo(-p.w / 2, 0);\n ctx.quadraticCurveTo(0, -p.h, p.w / 2, 0);\n ctx.quadraticCurveTo(0, p.h, -p.w / 2, 0);\n ctx.fill();\n } else {\n ctx.fillRect(-p.w / 2, -p.h / 2, p.w, p.h);\n }\n ctx.restore();\n }\n\n function animate() {\n if (!running) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (Math.random() < opts.density) pieces.push(createPiece());\n\n for (let i = pieces.length - 1; i >= 0; i--) {\n const p = pieces[i];\n p.vy += opts.gravity;\n p.vx *= opts.drag;\n p.vy *= opts.drag;\n p.x += p.vx;\n p.y += p.vy;\n p.angle += p.spin;\n\n drawPiece(p);\n\n if (p.y > canvas.height + 20) pieces.splice(i, 1);\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n interval: 1200, // ms between auto-launches\n trailLength: 28,\n particleCount: 80,\n colors: ['#ff6b8a','#ff4d6d','#ffd6ff','#e7c6ff','#ffe66d','#06d6a0','#48cae4','#ffffff'],\n gravity: 0.09,\n decay: 0.014,\n glow: true,\n};\n\nexport function fireworks(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n let running = true;\n\n const rockets = []; // { x, y, vx, vy, trail[], color }\n const particles = []; // burst particles\n\n function launchRocket() {\n const x = canvas.width * (0.2 + Math.random() * 0.6);\n const targetY = canvas.height * (0.1 + Math.random() * 0.4);\n const dy = targetY - canvas.height;\n const speed = 8 + Math.random() * 5;\n const color = opts.colors[Math.floor(Math.random() * opts.colors.length)];\n rockets.push({ x, y: canvas.height, vy: -Math.abs(speed), targetY, trail: [], color });\n }\n\n function burst(x, y, color) {\n for (let i = 0; i < opts.particleCount; i++) {\n const angle = Math.random() * Math.PI * 2;\n const speed = 1 + Math.random() * 5;\n particles.push({\n x, y,\n vx: Math.cos(angle) * speed,\n vy: Math.sin(angle) * speed,\n alpha: 1,\n decay: opts.decay * (0.7 + Math.random() * 0.6),\n size: 2 + Math.random() * 3,\n color,\n });\n }\n }\n\n // Auto-launch interval\n const iv = setInterval(() => { if (running) launchRocket(); }, opts.interval);\n launchRocket(); // fire one immediately\n\n function animate() {\n if (!running) return;\n\n // Clear canvas instead of using a solid fill to keep background transparent\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // Draw rockets\n for (let i = rockets.length - 1; i >= 0; i--) {\n const r = rockets[i];\n r.y += r.vy;\n r.trail.push({ x: r.x, y: r.y });\n if (r.trail.length > opts.trailLength) r.trail.shift();\n\n // Draw trail\n for (let t = 0; t < r.trail.length; t++) {\n const alpha = (t / r.trail.length) * 0.8;\n ctx.save();\n ctx.globalAlpha = alpha;\n if (opts.glow) { ctx.shadowColor = r.color; ctx.shadowBlur = 6; }\n ctx.fillStyle = r.color;\n ctx.beginPath();\n ctx.arc(r.trail[t].x, r.trail[t].y, 2.5 * (t / r.trail.length), 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n }\n\n if (r.y <= r.targetY) {\n burst(r.x, r.y, r.color);\n rockets.splice(i, 1);\n }\n }\n\n // Draw burst particles\n for (let i = particles.length - 1; i >= 0; i--) {\n const p = particles[i];\n p.x += p.vx;\n p.y += p.vy;\n p.vy += opts.gravity;\n p.alpha -= p.decay;\n\n ctx.save();\n ctx.globalAlpha = Math.max(0, p.alpha);\n if (opts.glow) { ctx.shadowColor = p.color; ctx.shadowBlur = p.size * 2; }\n ctx.fillStyle = p.color;\n ctx.beginPath();\n ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n\n if (p.alpha <= 0) particles.splice(i, 1);\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n clearInterval(iv);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n starCount: 120,\n speed: 0.4,\n colors: ['#ffffff', '#ffe4e8', '#ffc2d1', '#e7c6ff', '#a2d2ff'],\n minSize: 1,\n maxSize: 3.5,\n twinkle: true,\n connectDist: 100, // draw faint lines between close stars\n connectOpacity: 0.08,\n};\n\nexport function starField(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n const stars = [];\n let running = true;\n\n function createStar(randomY = false) {\n return {\n x: Math.random() * canvas.width,\n y: randomY ? Math.random() * canvas.height : Math.random() * canvas.height,\n size: opts.minSize + Math.random() * (opts.maxSize - opts.minSize),\n alpha: 0.3 + Math.random() * 0.7,\n alphaDir: Math.random() > 0.5 ? 1 : -1,\n twinkleSpeed: 0.008 + Math.random() * 0.015,\n vx: (Math.random() - 0.5) * opts.speed,\n vy: (Math.random() - 0.5) * opts.speed,\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\n };\n }\n\n for (let i = 0; i < opts.starCount; i++) stars.push(createStar(true));\n\n function animate() {\n if (!running) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // Draw connections\n if (opts.connectDist > 0) {\n for (let i = 0; i < stars.length; i++) {\n for (let j = i + 1; j < stars.length; j++) {\n const dx = stars[i].x - stars[j].x;\n const dy = stars[i].y - stars[j].y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist < opts.connectDist) {\n ctx.save();\n ctx.globalAlpha = opts.connectOpacity * (1 - dist / opts.connectDist);\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 0.5;\n ctx.beginPath();\n ctx.moveTo(stars[i].x, stars[i].y);\n ctx.lineTo(stars[j].x, stars[j].y);\n ctx.stroke();\n ctx.restore();\n }\n }\n }\n }\n\n // Draw stars\n for (let i = 0; i < stars.length; i++) {\n const s = stars[i];\n s.x += s.vx;\n s.y += s.vy;\n\n if (opts.twinkle) {\n s.alpha += s.alphaDir * s.twinkleSpeed;\n if (s.alpha >= 1) { s.alpha = 1; s.alphaDir = -1; }\n if (s.alpha <= 0.1) { s.alpha = 0.1; s.alphaDir = 1; }\n }\n\n // Wrap\n if (s.x < -5) s.x = canvas.width + 5;\n if (s.x > canvas.width + 5) s.x = -5;\n if (s.y < -5) s.y = canvas.height + 5;\n if (s.y > canvas.height + 5) s.y = -5;\n\n ctx.save();\n ctx.globalAlpha = s.alpha;\n ctx.shadowColor = s.color;\n ctx.shadowBlur = s.size * 3;\n ctx.fillStyle = s.color;\n ctx.beginPath();\n ctx.arc(s.x, s.y, s.size, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n density: 0.05, // Spawn probability per frame\n colors: ['#c77dff', '#ff85a1', '#ffc2d1', '#48cae4', '#e7c6ff', '#fbb1bd'],\n minSize: 10,\n maxSize: 22,\n minSpeed: 0.8,\n maxSpeed: 2.2,\n glow: true,\n};\n\nexport function butterflies(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n const items = [];\n let running = true;\n let time = 0;\n\n function spawn() {\n const size = opts.minSize + Math.random() * (opts.maxSize - opts.minSize);\n return {\n x: -size * 2,\n y: canvas.height * 0.1 + Math.random() * (canvas.height * 0.8),\n size,\n speed: opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed),\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\n alpha: 0,\n flapSpeed: 0.1 + Math.random() * 0.15,\n flapOffset: Math.random() * Math.PI * 2,\n wobbleSpeed: 0.01 + Math.random() * 0.02,\n wobbleOffset: Math.random() * Math.PI * 2,\n };\n }\n\n function animate() {\n if (!running) return;\n time++;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (Math.random() < opts.density) items.push(spawn());\n\n for (let i = items.length - 1; i >= 0; i--) {\n const b = items[i];\n b.x += b.speed;\n b.y += Math.sin(time * b.wobbleSpeed + b.wobbleOffset) * 1.5;\n \n // Fade in smoothly\n if (b.alpha < 1 && b.x < canvas.width / 2) b.alpha += 0.02;\n \n // Flapping wing calculation\n const wingSpread = Math.abs(Math.sin(time * b.flapSpeed + b.flapOffset));\n\n ctx.save();\n ctx.globalAlpha = Math.min(1, b.alpha);\n ctx.translate(b.x, b.y);\n // Slight tilt upwards\n ctx.rotate(-0.1 - (wingSpread * 0.1));\n \n if (opts.glow) {\n ctx.shadowColor = b.color;\n ctx.shadowBlur = b.size * 1.5;\n }\n ctx.fillStyle = b.color;\n \n // Draw wings\n ctx.beginPath();\n // Left/back wing (narrower based on wingSpread)\n ctx.ellipse(-b.size * 0.2, 0, b.size * 0.4 * wingSpread, b.size * 0.5, 0.3, 0, Math.PI * 2);\n ctx.fill();\n \n ctx.beginPath();\n // Right/front wing\n ctx.ellipse(b.size * 0.3 * wingSpread, -b.size * 0.1, b.size * 0.5 * wingSpread, b.size * 0.6, -0.2, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n\n if (b.x > canvas.width + b.size * 2) {\n items.splice(i, 1);\n }\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n particleCount: 150,\n minSize: 1,\n maxSize: 4,\n colors: ['#ffd6ff', '#e7c6ff', '#c77dff', '#ffb3c1', '#ffffff'],\n speed: 0.8,\n glow: true,\n};\n\nexport function magicDust(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n const dusts = [];\n let running = true;\n let time = 0;\n\n function createDust() {\n return {\n x: Math.random() * canvas.width,\n y: Math.random() * canvas.height,\n size: opts.minSize + Math.random() * (opts.maxSize - opts.minSize),\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\n angle: Math.random() * Math.PI * 2,\n orbitRadius: 20 + Math.random() * 80,\n orbitSpeed: (0.01 + Math.random() * 0.03) * (Math.random() > 0.5 ? 1 : -1),\n centerX: Math.random() * canvas.width,\n centerY: canvas.height + 50, // Start below and move up\n upwardSpeed: opts.speed + Math.random() * 1.5,\n alpha: 0,\n };\n }\n\n for (let i = 0; i < opts.particleCount; i++) {\n dusts.push(createDust());\n // Scatter initial positions so they aren't all at the bottom\n dusts[i].centerY = Math.random() * canvas.height;\n dusts[i].alpha = Math.random();\n }\n\n function animate() {\n if (!running) return;\n time++;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n for (let i = 0; i < dusts.length; i++) {\n const d = dusts[i];\n d.angle += d.orbitSpeed;\n d.centerY -= d.upwardSpeed;\n\n // Swirling calculation\n d.x = d.centerX + Math.cos(d.angle) * d.orbitRadius + Math.sin(time * 0.01 + d.angle) * 30;\n d.y = d.centerY + Math.sin(d.angle) * (d.orbitRadius * 0.5);\n\n if (d.alpha < 1 && d.centerY > 0) d.alpha += 0.01;\n\n // Reset when they reach top\n if (d.y < -50) {\n Object.assign(d, createDust());\n d.centerY = canvas.height + 50;\n d.centerX = Math.random() * canvas.width;\n }\n\n ctx.save();\n ctx.globalAlpha = d.alpha;\n if (opts.glow) {\n ctx.shadowColor = d.color;\n ctx.shadowBlur = d.size * 3;\n }\n ctx.fillStyle = d.color;\n ctx.beginPath();\n ctx.arc(d.x, d.y, d.size, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n orbCount: 15,\n minSize: 50,\n maxSize: 150,\n colors: ['#ff4d6d', '#c77dff', '#48cae4', '#ffe66d'],\n speed: 0.5,\n glow: true,\n};\n\nexport function floatingOrbs(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n const orbs = [];\n let running = true;\n\n function createOrb() {\n const size = opts.minSize + Math.random() * (opts.maxSize - opts.minSize);\n return {\n x: Math.random() * canvas.width,\n y: Math.random() * canvas.height,\n size,\n vx: (Math.random() - 0.5) * opts.speed,\n vy: (Math.random() - 0.5) * opts.speed,\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\n alpha: 0,\n };\n }\n\n for (let i = 0; i < opts.orbCount; i++) {\n const orb = createOrb();\n orb.alpha = Math.random() * 0.5 + 0.1;\n orbs.push(orb);\n }\n\n function animate() {\n if (!running) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n for (let i = 0; i < orbs.length; i++) {\n const b = orbs[i];\n b.x += b.vx;\n b.y += b.vy;\n\n // Bounce off walls\n if (b.x < -b.size) b.x = canvas.width + b.size;\n if (b.x > canvas.width + b.size) b.x = -b.size;\n if (b.y < -b.size) b.y = canvas.height + b.size;\n if (b.y > canvas.height + b.size) b.y = -b.size;\n\n ctx.save();\n ctx.globalAlpha = b.alpha;\n ctx.globalCompositeOperation = 'screen';\n \n const gradient = ctx.createRadialGradient(b.x, b.y, 0, b.x, b.y, b.size);\n gradient.addColorStop(0, b.color);\n gradient.addColorStop(1, 'rgba(0,0,0,0)');\n \n ctx.fillStyle = gradient;\n ctx.beginPath();\n ctx.arc(b.x, b.y, b.size, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","import { mergeOptions } from '../core/engine.js';\n\nconst DEFAULTS = {\n density: 0.02,\n minSpeed: 10,\n maxSpeed: 25,\n colors: ['#ffffff', '#e7c6ff', '#48cae4', '#ffe66d'],\n glow: true,\n};\n\nexport function shootingStars(canvas, userOptions = {}) {\n const opts = mergeOptions(DEFAULTS, userOptions);\n const ctx = canvas.getContext('2d');\n const stars = [];\n let running = true;\n\n function createStar() {\n return {\n x: Math.random() * canvas.width * 1.5,\n y: -50,\n length: 50 + Math.random() * 100,\n thickness: 1 + Math.random() * 2,\n speed: opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed),\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\n angle: (Math.PI / 4) + (Math.random() * 0.2 - 0.1), // Roughly 45 degrees\n opacity: 1,\n };\n }\n\n function animate() {\n if (!running) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (Math.random() < opts.density) {\n stars.push(createStar());\n }\n\n for (let i = stars.length - 1; i >= 0; i--) {\n const s = stars[i];\n const vx = -Math.cos(s.angle) * s.speed;\n const vy = Math.sin(s.angle) * s.speed;\n \n s.x += vx;\n s.y += vy;\n s.opacity -= 0.01;\n\n ctx.save();\n ctx.globalAlpha = Math.max(0, s.opacity);\n if (opts.glow) {\n ctx.shadowColor = s.color;\n ctx.shadowBlur = s.thickness * 4;\n }\n \n const grad = ctx.createLinearGradient(s.x, s.y, s.x - vx * (s.length / s.speed), s.y - vy * (s.length / s.speed));\n grad.addColorStop(0, s.color);\n grad.addColorStop(1, 'rgba(255,255,255,0)');\n \n ctx.strokeStyle = grad;\n ctx.lineWidth = s.thickness;\n ctx.lineCap = 'round';\n \n ctx.beginPath();\n ctx.moveTo(s.x, s.y);\n ctx.lineTo(s.x - vx * (s.length / s.speed), s.y - vy * (s.length / s.speed));\n ctx.stroke();\n ctx.restore();\n\n if (s.opacity <= 0 || s.x < -100 || s.y > canvas.height + 100) {\n stars.splice(i, 1);\n }\n }\n\n requestAnimationFrame(animate);\n }\n\n animate();\n\n return function stop() {\n running = false;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n}\n","/**\n * romantic-animations v2.0.0\n * ───────────────────────────────────────────────────────\n * A rich collection of canvas-based romantic & celebratory\n * animations for the web.\n *\n * Usage (ESM):\n * import { startFloatingHearts, stopAll } from '@sarthak03dot/romantic-animations';\n * startFloatingHearts('my-container');\n *\n * Usage (UMD / CDN):\n * <script src=\"...romantic-animations.umd.js\"></script>\n * <script>\n * RomanticAnimations.startFloatingHearts('my-container');\n * </script>\n * ───────────────────────────────────────────────────────\n */\n\nimport { initCanvas } from './core/engine.js';\nimport { floatingHearts } from './animations/floatingHearts.js';\nimport { heartTrail } from './animations/heartTrail.js';\nimport { heartBurst } from './animations/heartBurst.js';\nimport { sparkles } from './animations/sparkles.js';\nimport { loveRain } from './animations/loveRain.js';\nimport { confetti } from './animations/confetti.js';\nimport { fireworks } from './animations/fireworks.js';\nimport { starField } from './animations/starField.js';\nimport { butterflies } from './animations/butterfly.js';\nimport { magicDust } from './animations/magicDust.js';\nimport { floatingOrbs } from './animations/floatingOrbs.js';\nimport { shootingStars } from './animations/shootingStars.js';\n\n// Track active sessions so stopAll() can clean up everything\nconst _sessions = new Map(); // containerId → { destroy, stop }\nlet _sessionId = 0;\n\n/**\n * Internal helper — boots a canvas and starts an animation fn.\n * Returns a numeric session id that can be passed to stopAnimation().\n *\n * @param {string|HTMLElement} containerId\n * @param {Function} animFn – the animation factory\n * @param {object} options – user options forwarded to the animation\n * @returns {number} session id\n */\nfunction _run(containerId, animFn, options = {}) {\n const { canvas, destroy } = initCanvas(containerId, options);\n const stop = animFn(canvas, options);\n const id = ++_sessionId;\n _sessions.set(id, { destroy, stop });\n return id;\n}\n\n/**\n * Stop a single animation by its session id.\n * @param {number} id – returned by a start* call\n */\nexport function stopAnimation(id) {\n if (_sessions.has(id)) {\n const s = _sessions.get(id);\n if (typeof s.stop === 'function') s.stop();\n s.destroy();\n _sessions.delete(id);\n }\n}\n\n/**\n * Stop every running animation and clean up all canvases.\n */\nexport function stopAll() {\n _sessions.forEach((s) => {\n if (typeof s.stop === 'function') s.stop();\n s.destroy();\n });\n _sessions.clear();\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\n/**\n * Floating hearts rising from the bottom.\n * @param {string|HTMLElement} containerId\n * @param {object} [options]\n * @param {number} [options.count=0.12] – spawn probability per frame (0–1)\n * @param {number} [options.minSize=14]\n * @param {number} [options.maxSize=32]\n * @param {number} [options.minSpeed=0.8]\n * @param {number} [options.maxSpeed=2.4]\n * @param {string[]} [options.colors]\n * @param {boolean} [options.wobble=true] – sine-wave horizontal drift\n * @param {boolean} [options.glow=true]\n * @returns {number} session id\n */\nexport function startFloatingHearts(containerId, options = {}) {\n return _run(containerId, floatingHearts, options);\n}\n\n/**\n * Heart trail that follows the cursor / touch.\n * @param {string|HTMLElement} containerId\n * @param {object} [options]\n * @param {number} [options.minSize=6]\n * @param {number} [options.maxSize=16]\n * @param {number} [options.decay=0.025]\n * @param {string[]} [options.colors]\n * @param {boolean} [options.glow=true]\n * @returns {number} session id\n */\nexport function startHeartTrail(containerId, options = {}) {\n return _run(containerId, heartTrail, options);\n}\n\n/**\n * Heart burst on click / tap.\n * @param {string|HTMLElement} containerId\n * @param {object} [options]\n * @param {number} [options.count=20] – particles per burst\n * @param {string[]} [options.symbols] – 'heart' | 'star' | 'sparkle'\n * @param {boolean} [options.glow=true]\n * @returns {number} session id\n */\nexport function startHeartBurst(containerId, options = {}) {\n return _run(containerId, heartBurst, options);\n}\n\n/**\n * Twinkling sparkle stars.\n * @param {string|HTMLElement} containerId\n * @param {object} [options]\n * @param {number} [options.count=80]\n * @param {number} [options.speed=0.5]\n * @param {boolean} [options.glow=true]\n * @returns {number} session id\n */\nexport function startSparkles(containerId, options = {}) {\n return _run(containerId, sparkles, options);\n}\n\n/**\n * Rain of love emojis / symbols drifting downward.\n * @param {string|HTMLElement} containerId\n * @param {object} [options]\n * @param {number} [options.density=0.15]\n * @param {string[]} [options.symbols] – array of strings / emoji\n * @param {boolean} [options.glow=true]\n * @returns {number} session id\n */\nexport function startLoveRain(containerId, options = {}) {\n return _run(containerId, loveRain, options);\n}\n\n/**\n * Colourful confetti raining down.\n * @param {string|HTMLElement} containerId\n * @param {object} [options]\n * @param {number} [options.density=0.18]\n * @param {string[]} [options.colors]\n * @param {string[]} [options.shapes] – 'rect' | 'circle' | 'ribbon'\n * @returns {number} session id\n */\nexport function startConfetti(containerId, options = {}) {\n return _run(containerId, confetti, options);\n}\n\n/**\n * Fireworks that auto-launch on an interval.\n * @param {string|HTMLElement} containerId\n * @param {object} [options]\n * @param {number} [options.interval=1200] – ms between launches\n * @param {number} [options.particleCount=80]\n * @param {boolean} [options.glow=true]\n * @returns {number} session id\n */\nexport function startFireworks(containerId, options = {}) {\n return _run(containerId, fireworks, options);\n}\n\n/**\n * Drifting star field with optional constellation lines.\n * @param {string|HTMLElement} containerId\n * @param {object} [options]\n * @param {number} [options.starCount=120]\n * @param {number} [options.speed=0.4]\n * @param {boolean} [options.twinkle=true]\n * @param {number} [options.connectDist=100] – set to 0 to disable lines\n * @returns {number} session id\n */\nexport function startStarField(containerId, options = {}) {\n return _run(containerId, starField, options);\n}\n\nexport function startButterflies(containerId, options = {}) {\n return _run(containerId, butterflies, options);\n}\n\nexport function startMagicDust(containerId, options = {}) {\n return _run(containerId, magicDust, options);\n}\n\nexport function startFloatingOrbs(containerId, options = {}) {\n return _run(containerId, floatingOrbs, options);\n}\n\nexport function startShootingStars(containerId, options = {}) {\n return _run(containerId, shootingStars, options);\n}\n\n// ─── Default export (convenient for UMD / CDN namespace) ──────────────────────\nexport default {\n startFloatingHearts,\n startHeartTrail,\n startHeartBurst,\n startSparkles,\n startLoveRain,\n startConfetti,\n startFireworks,\n startStarField,\n startButterflies,\n startMagicDust,\n startFloatingOrbs,\n startShootingStars,\n stopAnimation,\n stopAll,\n};\n"],"names":["DEFAULT_OPTIONS","initCanvas","containerIdOrEl","userOptions","options","container","old","canvas","resize","ro","ctx","destroy","mergeOptions","defaults","DEFAULTS","drawHeartShape","cx","cy","r","color","alpha","glow","floatingHearts","opts","hearts","running","createHeart","size","animate","i","h","xOffset","fadeAlpha","drawHeart","heartTrail","addHeart","x","y","onMouseMove","e","rect","onTouchMove","t","drawSymbol","type","outer","inner","a","heartBurst","particles","spawnBurst","angle","speed","onClick","onTouch","p","sparkles","stars","createStar","drawStar","s","loveRain","drops","createDrop","d","xOff","confetti","pieces","createPiece","drawPiece","fireworks","rockets","launchRocket","targetY","burst","iv","starField","randomY","j","dx","dy","dist","butterflies","items","time","spawn","b","wingSpread","magicDust","dusts","createDust","floatingOrbs","orbs","createOrb","orb","gradient","shootingStars","vx","vy","grad","_sessions","_sessionId","_run","containerId","animFn","stop","id","stopAnimation","stopAll","startFloatingHearts","startHeartTrail","startHeartBurst","startSparkles","startLoveRain","startConfetti","startFireworks","startStarField","startButterflies","startMagicDust","startFloatingOrbs","startShootingStars","index"],"mappings":"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"}
1
+ {"version":3,"file":"romantic-animations.es.js","sources":["../src/core/engine.js","../src/animations/floatingHearts.js","../src/animations/heartTrail.js","../src/animations/heartBurst.js","../src/animations/sparkles.js","../src/animations/loveRain.js","../src/animations/confetti.js","../src/animations/fireworks.js","../src/animations/starField.js","../src/animations/butterfly.js","../src/animations/magicDust.js","../src/animations/floatingOrbs.js","../src/animations/shootingStars.js","../src/index.js"],"sourcesContent":["/**\r\n * romantic-animations — core engine\r\n * Handles canvas creation, sizing, resize observation, and cleanup.\r\n */\r\n\r\nconst DEFAULT_OPTIONS = {\r\n zIndex: 0,\r\n};\r\n\r\n/**\r\n * Initialises a canvas inside the given container element.\r\n *\r\n * @param {string|HTMLElement} containerIdOrEl – element id OR element reference\r\n * @param {object} userOptions – optional overrides\r\n * @returns {{ canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D,\r\n * options: object, destroy: Function }}\r\n */\r\nexport function initCanvas(containerIdOrEl, userOptions = {}) {\r\n const options = Object.assign({}, DEFAULT_OPTIONS, userOptions);\r\n\r\n const container =\r\n typeof containerIdOrEl === 'string'\r\n ? document.getElementById(containerIdOrEl)\r\n : containerIdOrEl;\r\n\r\n if (!container) {\r\n throw new Error(\r\n `[romantic-animations] Container \"${containerIdOrEl}\" not found in the DOM.`\r\n );\r\n }\r\n\r\n // Remove any pre-existing canvas we created (clean slate when re-triggering)\r\n const old = container.querySelector('canvas[data-ra]');\r\n if (old) old.remove();\r\n\r\n const canvas = document.createElement('canvas');\r\n canvas.setAttribute('data-ra', '1');\r\n canvas.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n pointer-events: none;\r\n z-index: ${options.zIndex};\r\n `;\r\n\r\n const resize = () => {\r\n canvas.width = window.innerWidth;\r\n canvas.height = window.innerHeight;\r\n };\r\n resize();\r\n\r\n container.style.position = container.style.position || 'relative';\r\n container.appendChild(canvas);\r\n\r\n // Keep canvas sized to container\r\n const ro = new ResizeObserver(resize);\r\n ro.observe(container);\r\n\r\n const ctx = canvas.getContext('2d');\r\n\r\n /** Tear-down helper – call the returned destroy() to stop & clean up */\r\n function destroy() {\r\n ro.disconnect();\r\n canvas.remove();\r\n }\r\n\r\n return { canvas, ctx, options, destroy };\r\n}\r\n\r\n/**\r\n * Merge user options with animation-specific defaults.\r\n */\r\nexport function mergeOptions(defaults, userOptions = {}) {\r\n return Object.assign({}, defaults, userOptions);\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n count: 0.12, // hearts spawned per frame (probability)\r\n minSize: 14,\r\n maxSize: 32,\r\n minSpeed: 0.8,\r\n maxSpeed: 2.4,\r\n colors: ['#ff6b8a', '#ff4d6d', '#ff85a1', '#ffc2d1', '#ff0a54', '#ff477e'],\r\n wobble: true, // horizontal sine drift\r\n glow: true,\r\n};\r\n\r\n/**\r\n * Draw a proper heart shape centred at (cx, cy) with given radius.\r\n */\r\nfunction drawHeartShape(ctx, cx, cy, r, color, alpha = 1, glow = false) {\r\n ctx.save();\r\n ctx.globalAlpha = alpha;\r\n if (glow) {\r\n ctx.shadowColor = color;\r\n ctx.shadowBlur = r * 1.2;\r\n }\r\n ctx.fillStyle = color;\r\n ctx.beginPath();\r\n ctx.moveTo(cx, cy + r * 0.3);\r\n // left lobe\r\n ctx.bezierCurveTo(cx - r * 1.1, cy - r * 0.5, cx - r * 1.6, cy + r * 0.5, cx, cy + r * 1.4);\r\n // right lobe\r\n ctx.bezierCurveTo(cx + r * 1.6, cy + r * 0.5, cx + r * 1.1, cy - r * 0.5, cx, cy + r * 0.3);\r\n ctx.fill();\r\n ctx.restore();\r\n}\r\n\r\nexport function floatingHearts(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n const hearts = [];\r\n let running = true;\r\n let frame = 0;\r\n\r\n function createHeart() {\r\n const size = opts.minSize + Math.random() * (opts.maxSize - opts.minSize);\r\n return {\r\n x: Math.random() * canvas.width,\r\n y: canvas.height + size * 2,\r\n size,\r\n speed: opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed),\r\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\r\n alpha: 0.7 + Math.random() * 0.3,\r\n wobbleOffset: Math.random() * Math.PI * 2,\r\n wobbleSpeed: 0.02 + Math.random() * 0.03,\r\n wobbleAmount: 0.5 + Math.random() * 1.5,\r\n };\r\n }\r\n\r\n function animate() {\r\n if (!running) return;\r\n frame++;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n if (Math.random() < opts.count) hearts.push(createHeart());\r\n\r\n for (let i = hearts.length - 1; i >= 0; i--) {\r\n const h = hearts[i];\r\n h.y -= h.speed;\r\n h.wobbleOffset += h.wobbleSpeed;\r\n const xOffset = opts.wobble ? Math.sin(h.wobbleOffset) * h.wobbleAmount * h.size * 0.5 : 0;\r\n\r\n // Fade out near top\r\n const fadeAlpha = Math.min(h.alpha, h.y / (canvas.height * 0.2));\r\n if (fadeAlpha <= 0 || h.y < -h.size * 3) {\r\n hearts.splice(i, 1);\r\n continue;\r\n }\r\n\r\n drawHeartShape(ctx, h.x + xOffset, h.y, h.size, h.color, Math.max(0, fadeAlpha), opts.glow);\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n minSize: 6,\r\n maxSize: 16,\r\n decay: 0.025,\r\n colors: ['#ff6b8a', '#ff4d6d', '#ff85a1', '#ffc2d1', '#c9184a'],\r\n glow: true,\r\n};\r\n\r\nfunction drawHeart(ctx, cx, cy, r, color, alpha, glow) {\r\n ctx.save();\r\n ctx.globalAlpha = Math.max(0, alpha);\r\n if (glow) {\r\n ctx.shadowColor = color;\r\n ctx.shadowBlur = r * 2;\r\n }\r\n ctx.fillStyle = color;\r\n ctx.beginPath();\r\n ctx.moveTo(cx, cy + r * 0.3);\r\n ctx.bezierCurveTo(cx - r * 1.1, cy - r * 0.5, cx - r * 1.6, cy + r * 0.5, cx, cy + r * 1.4);\r\n ctx.bezierCurveTo(cx + r * 1.6, cy + r * 0.5, cx + r * 1.1, cy - r * 0.5, cx, cy + r * 0.3);\r\n ctx.fill();\r\n ctx.restore();\r\n}\r\n\r\nexport function heartTrail(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n const hearts = [];\r\n let running = true;\r\n\r\n function addHeart(x, y) {\r\n hearts.push({\r\n x,\r\n y,\r\n size: opts.minSize + Math.random() * (opts.maxSize - opts.minSize),\r\n alpha: 0.9 + Math.random() * 0.1,\r\n decay: opts.decay * (0.8 + Math.random() * 0.4),\r\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\r\n vy: -(0.3 + Math.random() * 0.6), // drift upward\r\n });\r\n }\r\n\r\n // Mouse support\r\n const onMouseMove = (e) => {\r\n const rect = canvas.getBoundingClientRect();\r\n addHeart(e.clientX - rect.left, e.clientY - rect.top);\r\n };\r\n\r\n // Touch support\r\n const onTouchMove = (e) => {\r\n const rect = canvas.getBoundingClientRect();\r\n Array.from(e.touches).forEach((t) => {\r\n addHeart(t.clientX - rect.left, t.clientY - rect.top);\r\n });\r\n };\r\n\r\n window.addEventListener('mousemove', onMouseMove);\r\n window.addEventListener('touchmove', onTouchMove, { passive: true });\r\n\r\n function animate() {\r\n if (!running) return;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n for (let i = hearts.length - 1; i >= 0; i--) {\r\n const h = hearts[i];\r\n h.y += h.vy;\r\n drawHeart(ctx, h.x, h.y, h.size, h.color, h.alpha, opts.glow);\r\n h.alpha -= h.decay;\r\n if (h.alpha <= 0) hearts.splice(i, 1);\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n window.removeEventListener('mousemove', onMouseMove);\r\n window.removeEventListener('touchmove', onTouchMove);\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n count: 20, // hearts per burst\r\n minSize: 8,\r\n maxSize: 20,\r\n minSpeed: 2,\r\n maxSpeed: 7,\r\n gravity: 0.08,\r\n decay: 0.018,\r\n colors: ['#ff0a54', '#ff477e', '#ff7096', '#ff85a1', '#fbb1bd', '#ff4d6d'],\r\n glow: true,\r\n symbols: ['heart'], // 'heart' | 'star' | 'sparkle'\r\n};\r\n\r\nfunction drawSymbol(ctx, type, cx, cy, r, color, alpha, glow) {\r\n ctx.save();\r\n ctx.globalAlpha = Math.max(0, alpha);\r\n if (glow) { ctx.shadowColor = color; ctx.shadowBlur = r * 2; }\r\n ctx.fillStyle = color;\r\n\r\n if (type === 'star') {\r\n // 5-point star\r\n ctx.beginPath();\r\n for (let i = 0; i < 5; i++) {\r\n const outer = (Math.PI / 2) + (i * 2 * Math.PI) / 5;\r\n const inner = outer + Math.PI / 5;\r\n if (i === 0) ctx.moveTo(cx + r * Math.cos(outer), cy - r * Math.sin(outer));\r\n else ctx.lineTo(cx + r * Math.cos(outer), cy - r * Math.sin(outer));\r\n ctx.lineTo(cx + (r * 0.4) * Math.cos(inner), cy - (r * 0.4) * Math.sin(inner));\r\n }\r\n ctx.closePath();\r\n ctx.fill();\r\n } else if (type === 'sparkle') {\r\n // 4-point sparkle\r\n for (let i = 0; i < 4; i++) {\r\n const a = (i * Math.PI) / 2;\r\n ctx.beginPath();\r\n ctx.ellipse(cx + Math.cos(a) * r * 0.5, cy + Math.sin(a) * r * 0.5, r * 0.18, r * 0.7, a, 0, Math.PI * 2);\r\n ctx.fill();\r\n }\r\n } else {\r\n // heart\r\n ctx.beginPath();\r\n ctx.moveTo(cx, cy + r * 0.3);\r\n ctx.bezierCurveTo(cx - r * 1.1, cy - r * 0.5, cx - r * 1.6, cy + r * 0.5, cx, cy + r * 1.4);\r\n ctx.bezierCurveTo(cx + r * 1.6, cy + r * 0.5, cx + r * 1.1, cy - r * 0.5, cx, cy + r * 0.3);\r\n ctx.fill();\r\n }\r\n ctx.restore();\r\n}\r\n\r\nexport function heartBurst(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n const particles = [];\r\n let running = true;\r\n\r\n function spawnBurst(x, y) {\r\n for (let i = 0; i < opts.count; i++) {\r\n const angle = Math.random() * Math.PI * 2;\r\n const speed = opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed);\r\n particles.push({\r\n x, y,\r\n size: opts.minSize + Math.random() * (opts.maxSize - opts.minSize),\r\n vx: Math.cos(angle) * speed,\r\n vy: Math.sin(angle) * speed,\r\n alpha: 1,\r\n decay: opts.decay * (0.8 + Math.random() * 0.4),\r\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\r\n symbol: opts.symbols[Math.floor(Math.random() * opts.symbols.length)],\r\n });\r\n }\r\n }\r\n\r\n const onClick = (e) => {\r\n const rect = canvas.getBoundingClientRect();\r\n spawnBurst(e.clientX - rect.left, e.clientY - rect.top);\r\n };\r\n const onTouch = (e) => {\r\n const rect = canvas.getBoundingClientRect();\r\n Array.from(e.changedTouches).forEach((t) => spawnBurst(t.clientX - rect.left, t.clientY - rect.top));\r\n };\r\n\r\n window.addEventListener('click', onClick);\r\n window.addEventListener('touchend', onTouch, { passive: true });\r\n\r\n function animate() {\r\n if (!running) return;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n for (let i = particles.length - 1; i >= 0; i--) {\r\n const p = particles[i];\r\n p.x += p.vx;\r\n p.y += p.vy;\r\n p.vy += opts.gravity; // gravity\r\n p.alpha -= p.decay;\r\n drawSymbol(ctx, p.symbol, p.x, p.y, p.size, p.color, p.alpha, opts.glow);\r\n if (p.alpha <= 0) particles.splice(i, 1);\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n window.removeEventListener('click', onClick);\r\n window.removeEventListener('touchend', onTouch);\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n count: 80, // number of sparkles alive at once\r\n minSize: 2,\r\n maxSize: 6,\r\n speed: 0.5,\r\n twinkleSpeed: 0.04,\r\n colors: ['#fff', '#ffe4e8', '#ffb3c1', '#ff85a1', '#ffd6ff', '#e7c6ff'],\r\n glow: true,\r\n};\r\n\r\nexport function sparkles(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n const stars = [];\r\n let running = true;\r\n\r\n function createStar() {\r\n return {\r\n x: Math.random() * canvas.width,\r\n y: Math.random() * canvas.height,\r\n size: opts.minSize + Math.random() * (opts.maxSize - opts.minSize),\r\n alpha: Math.random(),\r\n alphaDir: Math.random() > 0.5 ? 1 : -1,\r\n twinkleSpeed: opts.twinkleSpeed * (0.5 + Math.random()),\r\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\r\n vx: (Math.random() - 0.5) * opts.speed,\r\n vy: (Math.random() - 0.5) * opts.speed,\r\n };\r\n }\r\n\r\n // Populate initial stars\r\n for (let i = 0; i < opts.count; i++) stars.push(createStar());\r\n\r\n function drawStar(s) {\r\n ctx.save();\r\n ctx.globalAlpha = Math.max(0, Math.min(1, s.alpha));\r\n if (opts.glow) { ctx.shadowColor = s.color; ctx.shadowBlur = s.size * 3; }\r\n ctx.fillStyle = s.color;\r\n\r\n // Cross / sparkle shape\r\n const r = s.size;\r\n ctx.beginPath();\r\n for (let i = 0; i < 4; i++) {\r\n const a = (i * Math.PI) / 2;\r\n ctx.ellipse(\r\n s.x + Math.cos(a) * r * 0.35,\r\n s.y + Math.sin(a) * r * 0.35,\r\n r * 0.15, r * 0.7, a, 0, Math.PI * 2\r\n );\r\n }\r\n ctx.fill();\r\n\r\n // Tiny centre dot\r\n ctx.beginPath();\r\n ctx.arc(s.x, s.y, r * 0.2, 0, Math.PI * 2);\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n\r\n function animate() {\r\n if (!running) return;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n for (let i = 0; i < stars.length; i++) {\r\n const s = stars[i];\r\n s.x += s.vx;\r\n s.y += s.vy;\r\n s.alpha += s.alphaDir * s.twinkleSpeed;\r\n\r\n if (s.alpha >= 1) { s.alpha = 1; s.alphaDir = -1; }\r\n else if (s.alpha <= 0) { s.alpha = 0; s.alphaDir = 1; }\r\n\r\n // Wrap edges\r\n if (s.x < -10) s.x = canvas.width + 10;\r\n if (s.x > canvas.width + 10) s.x = -10;\r\n if (s.y < -10) s.y = canvas.height + 10;\r\n if (s.y > canvas.height + 10) s.y = -10;\r\n\r\n drawStar(s);\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n density: 0.15, // probability of a new drop per frame\r\n symbols: ['❤', '💕', '✨', '💖', '💗', '⭐', '×'],\r\n minSize: 12,\r\n maxSize: 28,\r\n minSpeed: 1,\r\n maxSpeed: 3.5,\r\n colors: ['#ff6b8a', '#ff4d6d', '#ffc2d1', '#ff85a1', '#ff0a54', '#a2d2ff'],\r\n opacity: 0.85,\r\n glow: true,\r\n};\r\n\r\nexport function loveRain(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n const drops = [];\r\n let running = true;\r\n\r\n function createDrop() {\r\n const size = opts.minSize + Math.random() * (opts.maxSize - opts.minSize);\r\n return {\r\n x: Math.random() * canvas.width,\r\n y: -size * 2,\r\n size,\r\n speed: opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed),\r\n symbol: opts.symbols[Math.floor(Math.random() * opts.symbols.length)],\r\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\r\n alpha: 0.4 + Math.random() * 0.6,\r\n angle: (Math.random() - 0.5) * 0.4, // slight tilt\r\n wobble: Math.random() * Math.PI * 2,\r\n wobbleSpeed: 0.02 + Math.random() * 0.02,\r\n };\r\n }\r\n\r\n function animate() {\r\n if (!running) return;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n if (Math.random() < opts.density) drops.push(createDrop());\r\n\r\n for (let i = drops.length - 1; i >= 0; i--) {\r\n const d = drops[i];\r\n d.y += d.speed;\r\n d.wobble += d.wobbleSpeed;\r\n const xOff = Math.sin(d.wobble) * d.size * 0.3;\r\n\r\n ctx.save();\r\n ctx.globalAlpha = d.alpha * opts.opacity;\r\n ctx.font = `${d.size}px serif`;\r\n ctx.fillStyle = d.color;\r\n if (opts.glow) { ctx.shadowColor = d.color; ctx.shadowBlur = d.size * 0.8; }\r\n ctx.translate(d.x + xOff, d.y);\r\n ctx.rotate(d.angle);\r\n ctx.fillText(d.symbol, 0, 0);\r\n ctx.restore();\r\n\r\n if (d.y > canvas.height + d.size * 2) drops.splice(i, 1);\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n density: 0.18,\r\n colors: ['#ff6b8a','#ff4d6d','#ffd6ff','#e7c6ff','#c77dff','#48cae4','#ffe66d','#06d6a0'],\r\n minSize: 6,\r\n maxSize: 14,\r\n minSpeed: 1.5,\r\n maxSpeed: 4,\r\n gravity: 0.06,\r\n drag: 0.99,\r\n shapes: ['rect', 'circle', 'ribbon'],\r\n};\r\n\r\nexport function confetti(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n const pieces = [];\r\n let running = true;\r\n\r\n function createPiece() {\r\n const size = opts.minSize + Math.random() * (opts.maxSize - opts.minSize);\r\n const speed = opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed);\r\n return {\r\n x: Math.random() * canvas.width,\r\n y: -size * 2,\r\n w: size,\r\n h: size * (0.4 + Math.random() * 0.8),\r\n vx: (Math.random() - 0.5) * 3,\r\n vy: speed,\r\n angle: Math.random() * Math.PI * 2,\r\n spin: (Math.random() - 0.5) * 0.15,\r\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\r\n alpha: 0.8 + Math.random() * 0.2,\r\n shape: opts.shapes[Math.floor(Math.random() * opts.shapes.length)],\r\n };\r\n }\r\n\r\n function drawPiece(p) {\r\n ctx.save();\r\n ctx.globalAlpha = p.alpha;\r\n ctx.fillStyle = p.color;\r\n ctx.strokeStyle = p.color;\r\n ctx.translate(p.x, p.y);\r\n ctx.rotate(p.angle);\r\n\r\n if (p.shape === 'circle') {\r\n ctx.beginPath();\r\n ctx.ellipse(0, 0, p.w / 2, p.h / 2, 0, 0, Math.PI * 2);\r\n ctx.fill();\r\n } else if (p.shape === 'ribbon') {\r\n ctx.beginPath();\r\n ctx.moveTo(-p.w / 2, 0);\r\n ctx.quadraticCurveTo(0, -p.h, p.w / 2, 0);\r\n ctx.quadraticCurveTo(0, p.h, -p.w / 2, 0);\r\n ctx.fill();\r\n } else {\r\n ctx.fillRect(-p.w / 2, -p.h / 2, p.w, p.h);\r\n }\r\n ctx.restore();\r\n }\r\n\r\n function animate() {\r\n if (!running) return;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n if (Math.random() < opts.density) pieces.push(createPiece());\r\n\r\n for (let i = pieces.length - 1; i >= 0; i--) {\r\n const p = pieces[i];\r\n p.vy += opts.gravity;\r\n p.vx *= opts.drag;\r\n p.vy *= opts.drag;\r\n p.x += p.vx;\r\n p.y += p.vy;\r\n p.angle += p.spin;\r\n\r\n drawPiece(p);\r\n\r\n if (p.y > canvas.height + 20) pieces.splice(i, 1);\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n interval: 1200, // ms between auto-launches\r\n trailLength: 28,\r\n particleCount: 80,\r\n colors: ['#ff6b8a','#ff4d6d','#ffd6ff','#e7c6ff','#ffe66d','#06d6a0','#48cae4','#ffffff'],\r\n gravity: 0.09,\r\n decay: 0.014,\r\n glow: true,\r\n};\r\n\r\nexport function fireworks(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n let running = true;\r\n\r\n const rockets = []; // { x, y, vx, vy, trail[], color }\r\n const particles = []; // burst particles\r\n\r\n function launchRocket() {\r\n const x = canvas.width * (0.2 + Math.random() * 0.6);\r\n const targetY = canvas.height * (0.1 + Math.random() * 0.4);\r\n const dy = targetY - canvas.height;\r\n const speed = 8 + Math.random() * 5;\r\n const color = opts.colors[Math.floor(Math.random() * opts.colors.length)];\r\n rockets.push({ x, y: canvas.height, vy: -Math.abs(speed), targetY, trail: [], color });\r\n }\r\n\r\n function burst(x, y, color) {\r\n for (let i = 0; i < opts.particleCount; i++) {\r\n const angle = Math.random() * Math.PI * 2;\r\n const speed = 1 + Math.random() * 5;\r\n particles.push({\r\n x, y,\r\n vx: Math.cos(angle) * speed,\r\n vy: Math.sin(angle) * speed,\r\n alpha: 1,\r\n decay: opts.decay * (0.7 + Math.random() * 0.6),\r\n size: 2 + Math.random() * 3,\r\n color,\r\n });\r\n }\r\n }\r\n\r\n // Auto-launch interval\r\n const iv = setInterval(() => { if (running) launchRocket(); }, opts.interval);\r\n launchRocket(); // fire one immediately\r\n\r\n function animate() {\r\n if (!running) return;\r\n\r\n // Clear canvas instead of using a solid fill to keep background transparent\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n // Draw rockets\r\n for (let i = rockets.length - 1; i >= 0; i--) {\r\n const r = rockets[i];\r\n r.y += r.vy;\r\n r.trail.push({ x: r.x, y: r.y });\r\n if (r.trail.length > opts.trailLength) r.trail.shift();\r\n\r\n // Draw trail\r\n for (let t = 0; t < r.trail.length; t++) {\r\n const alpha = (t / r.trail.length) * 0.8;\r\n ctx.save();\r\n ctx.globalAlpha = alpha;\r\n if (opts.glow) { ctx.shadowColor = r.color; ctx.shadowBlur = 6; }\r\n ctx.fillStyle = r.color;\r\n ctx.beginPath();\r\n ctx.arc(r.trail[t].x, r.trail[t].y, 2.5 * (t / r.trail.length), 0, Math.PI * 2);\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n\r\n if (r.y <= r.targetY) {\r\n burst(r.x, r.y, r.color);\r\n rockets.splice(i, 1);\r\n }\r\n }\r\n\r\n // Draw burst particles\r\n for (let i = particles.length - 1; i >= 0; i--) {\r\n const p = particles[i];\r\n p.x += p.vx;\r\n p.y += p.vy;\r\n p.vy += opts.gravity;\r\n p.alpha -= p.decay;\r\n\r\n ctx.save();\r\n ctx.globalAlpha = Math.max(0, p.alpha);\r\n if (opts.glow) { ctx.shadowColor = p.color; ctx.shadowBlur = p.size * 2; }\r\n ctx.fillStyle = p.color;\r\n ctx.beginPath();\r\n ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);\r\n ctx.fill();\r\n ctx.restore();\r\n\r\n if (p.alpha <= 0) particles.splice(i, 1);\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n clearInterval(iv);\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n starCount: 120,\r\n speed: 0.4,\r\n colors: ['#ffffff', '#ffe4e8', '#ffc2d1', '#e7c6ff', '#a2d2ff'],\r\n minSize: 1,\r\n maxSize: 3.5,\r\n twinkle: true,\r\n connectDist: 100, // draw faint lines between close stars\r\n connectOpacity: 0.08,\r\n};\r\n\r\nexport function starField(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n const stars = [];\r\n let running = true;\r\n\r\n function createStar(randomY = false) {\r\n return {\r\n x: Math.random() * canvas.width,\r\n y: randomY ? Math.random() * canvas.height : Math.random() * canvas.height,\r\n size: opts.minSize + Math.random() * (opts.maxSize - opts.minSize),\r\n alpha: 0.3 + Math.random() * 0.7,\r\n alphaDir: Math.random() > 0.5 ? 1 : -1,\r\n twinkleSpeed: 0.008 + Math.random() * 0.015,\r\n vx: (Math.random() - 0.5) * opts.speed,\r\n vy: (Math.random() - 0.5) * opts.speed,\r\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\r\n };\r\n }\r\n\r\n for (let i = 0; i < opts.starCount; i++) stars.push(createStar(true));\r\n\r\n function animate() {\r\n if (!running) return;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n // Draw connections\r\n if (opts.connectDist > 0) {\r\n for (let i = 0; i < stars.length; i++) {\r\n for (let j = i + 1; j < stars.length; j++) {\r\n const dx = stars[i].x - stars[j].x;\r\n const dy = stars[i].y - stars[j].y;\r\n const dist = Math.sqrt(dx * dx + dy * dy);\r\n if (dist < opts.connectDist) {\r\n ctx.save();\r\n ctx.globalAlpha = opts.connectOpacity * (1 - dist / opts.connectDist);\r\n ctx.strokeStyle = '#ffffff';\r\n ctx.lineWidth = 0.5;\r\n ctx.beginPath();\r\n ctx.moveTo(stars[i].x, stars[i].y);\r\n ctx.lineTo(stars[j].x, stars[j].y);\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Draw stars\r\n for (let i = 0; i < stars.length; i++) {\r\n const s = stars[i];\r\n s.x += s.vx;\r\n s.y += s.vy;\r\n\r\n if (opts.twinkle) {\r\n s.alpha += s.alphaDir * s.twinkleSpeed;\r\n if (s.alpha >= 1) { s.alpha = 1; s.alphaDir = -1; }\r\n if (s.alpha <= 0.1) { s.alpha = 0.1; s.alphaDir = 1; }\r\n }\r\n\r\n // Wrap\r\n if (s.x < -5) s.x = canvas.width + 5;\r\n if (s.x > canvas.width + 5) s.x = -5;\r\n if (s.y < -5) s.y = canvas.height + 5;\r\n if (s.y > canvas.height + 5) s.y = -5;\r\n\r\n ctx.save();\r\n ctx.globalAlpha = s.alpha;\r\n ctx.shadowColor = s.color;\r\n ctx.shadowBlur = s.size * 3;\r\n ctx.fillStyle = s.color;\r\n ctx.beginPath();\r\n ctx.arc(s.x, s.y, s.size, 0, Math.PI * 2);\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n density: 0.05, // Spawn probability per frame\r\n colors: ['#c77dff', '#ff85a1', '#ffc2d1', '#48cae4', '#e7c6ff', '#fbb1bd'],\r\n minSize: 10,\r\n maxSize: 22,\r\n minSpeed: 0.8,\r\n maxSpeed: 2.2,\r\n glow: true,\r\n};\r\n\r\nexport function butterflies(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n const items = [];\r\n let running = true;\r\n let time = 0;\r\n\r\n function spawn() {\r\n const size = opts.minSize + Math.random() * (opts.maxSize - opts.minSize);\r\n return {\r\n x: -size * 2,\r\n y: canvas.height * 0.1 + Math.random() * (canvas.height * 0.8),\r\n size,\r\n speed: opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed),\r\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\r\n alpha: 0,\r\n flapSpeed: 0.1 + Math.random() * 0.15,\r\n flapOffset: Math.random() * Math.PI * 2,\r\n wobbleSpeed: 0.01 + Math.random() * 0.02,\r\n wobbleOffset: Math.random() * Math.PI * 2,\r\n };\r\n }\r\n\r\n function animate() {\r\n if (!running) return;\r\n time++;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n if (Math.random() < opts.density) items.push(spawn());\r\n\r\n for (let i = items.length - 1; i >= 0; i--) {\r\n const b = items[i];\r\n b.x += b.speed;\r\n b.y += Math.sin(time * b.wobbleSpeed + b.wobbleOffset) * 1.5;\r\n \r\n // Fade in smoothly\r\n if (b.alpha < 1 && b.x < canvas.width / 2) b.alpha += 0.02;\r\n \r\n // Flapping wing calculation\r\n const wingSpread = Math.abs(Math.sin(time * b.flapSpeed + b.flapOffset));\r\n\r\n ctx.save();\r\n ctx.globalAlpha = Math.min(1, b.alpha);\r\n ctx.translate(b.x, b.y);\r\n // Slight tilt upwards\r\n ctx.rotate(-0.1 - (wingSpread * 0.1));\r\n \r\n if (opts.glow) {\r\n ctx.shadowColor = b.color;\r\n ctx.shadowBlur = b.size * 1.5;\r\n }\r\n ctx.fillStyle = b.color;\r\n \r\n // Draw wings\r\n ctx.beginPath();\r\n // Left/back wing (narrower based on wingSpread)\r\n ctx.ellipse(-b.size * 0.2, 0, b.size * 0.4 * wingSpread, b.size * 0.5, 0.3, 0, Math.PI * 2);\r\n ctx.fill();\r\n \r\n ctx.beginPath();\r\n // Right/front wing\r\n ctx.ellipse(b.size * 0.3 * wingSpread, -b.size * 0.1, b.size * 0.5 * wingSpread, b.size * 0.6, -0.2, 0, Math.PI * 2);\r\n ctx.fill();\r\n ctx.restore();\r\n\r\n if (b.x > canvas.width + b.size * 2) {\r\n items.splice(i, 1);\r\n }\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n particleCount: 150,\r\n minSize: 1,\r\n maxSize: 4,\r\n colors: ['#ffd6ff', '#e7c6ff', '#c77dff', '#ffb3c1', '#ffffff'],\r\n speed: 0.8,\r\n glow: true,\r\n};\r\n\r\nexport function magicDust(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n const dusts = [];\r\n let running = true;\r\n let time = 0;\r\n\r\n function createDust() {\r\n return {\r\n x: Math.random() * canvas.width,\r\n y: Math.random() * canvas.height,\r\n size: opts.minSize + Math.random() * (opts.maxSize - opts.minSize),\r\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\r\n angle: Math.random() * Math.PI * 2,\r\n orbitRadius: 20 + Math.random() * 80,\r\n orbitSpeed: (0.01 + Math.random() * 0.03) * (Math.random() > 0.5 ? 1 : -1),\r\n centerX: Math.random() * canvas.width,\r\n centerY: canvas.height + 50, // Start below and move up\r\n upwardSpeed: opts.speed + Math.random() * 1.5,\r\n alpha: 0,\r\n };\r\n }\r\n\r\n for (let i = 0; i < opts.particleCount; i++) {\r\n dusts.push(createDust());\r\n // Scatter initial positions so they aren't all at the bottom\r\n dusts[i].centerY = Math.random() * canvas.height;\r\n dusts[i].alpha = Math.random();\r\n }\r\n\r\n function animate() {\r\n if (!running) return;\r\n time++;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n for (let i = 0; i < dusts.length; i++) {\r\n const d = dusts[i];\r\n d.angle += d.orbitSpeed;\r\n d.centerY -= d.upwardSpeed;\r\n\r\n // Swirling calculation\r\n d.x = d.centerX + Math.cos(d.angle) * d.orbitRadius + Math.sin(time * 0.01 + d.angle) * 30;\r\n d.y = d.centerY + Math.sin(d.angle) * (d.orbitRadius * 0.5);\r\n\r\n if (d.alpha < 1 && d.centerY > 0) d.alpha += 0.01;\r\n\r\n // Reset when they reach top\r\n if (d.y < -50) {\r\n Object.assign(d, createDust());\r\n d.centerY = canvas.height + 50;\r\n d.centerX = Math.random() * canvas.width;\r\n }\r\n\r\n ctx.save();\r\n ctx.globalAlpha = d.alpha;\r\n if (opts.glow) {\r\n ctx.shadowColor = d.color;\r\n ctx.shadowBlur = d.size * 3;\r\n }\r\n ctx.fillStyle = d.color;\r\n ctx.beginPath();\r\n ctx.arc(d.x, d.y, d.size, 0, Math.PI * 2);\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n orbCount: 15,\r\n minSize: 50,\r\n maxSize: 150,\r\n colors: ['#ff4d6d', '#c77dff', '#48cae4', '#ffe66d'],\r\n speed: 0.5,\r\n glow: true,\r\n};\r\n\r\nexport function floatingOrbs(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n const orbs = [];\r\n let running = true;\r\n\r\n function createOrb() {\r\n const size = opts.minSize + Math.random() * (opts.maxSize - opts.minSize);\r\n return {\r\n x: Math.random() * canvas.width,\r\n y: Math.random() * canvas.height,\r\n size,\r\n vx: (Math.random() - 0.5) * opts.speed,\r\n vy: (Math.random() - 0.5) * opts.speed,\r\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\r\n alpha: 0,\r\n };\r\n }\r\n\r\n for (let i = 0; i < opts.orbCount; i++) {\r\n const orb = createOrb();\r\n orb.alpha = Math.random() * 0.5 + 0.1;\r\n orbs.push(orb);\r\n }\r\n\r\n function animate() {\r\n if (!running) return;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n for (let i = 0; i < orbs.length; i++) {\r\n const b = orbs[i];\r\n b.x += b.vx;\r\n b.y += b.vy;\r\n\r\n // Bounce off walls\r\n if (b.x < -b.size) b.x = canvas.width + b.size;\r\n if (b.x > canvas.width + b.size) b.x = -b.size;\r\n if (b.y < -b.size) b.y = canvas.height + b.size;\r\n if (b.y > canvas.height + b.size) b.y = -b.size;\r\n\r\n ctx.save();\r\n ctx.globalAlpha = b.alpha;\r\n ctx.globalCompositeOperation = 'screen';\r\n \r\n const gradient = ctx.createRadialGradient(b.x, b.y, 0, b.x, b.y, b.size);\r\n gradient.addColorStop(0, b.color);\r\n gradient.addColorStop(1, 'rgba(0,0,0,0)');\r\n \r\n ctx.fillStyle = gradient;\r\n ctx.beginPath();\r\n ctx.arc(b.x, b.y, b.size, 0, Math.PI * 2);\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","import { mergeOptions } from '../core/engine.js';\r\n\r\nconst DEFAULTS = {\r\n density: 0.02,\r\n minSpeed: 10,\r\n maxSpeed: 25,\r\n colors: ['#ffffff', '#e7c6ff', '#48cae4', '#ffe66d'],\r\n glow: true,\r\n};\r\n\r\nexport function shootingStars(canvas, userOptions = {}) {\r\n const opts = mergeOptions(DEFAULTS, userOptions);\r\n const ctx = canvas.getContext('2d');\r\n const stars = [];\r\n let running = true;\r\n\r\n function createStar() {\r\n return {\r\n x: Math.random() * canvas.width * 1.5,\r\n y: -50,\r\n length: 50 + Math.random() * 100,\r\n thickness: 1 + Math.random() * 2,\r\n speed: opts.minSpeed + Math.random() * (opts.maxSpeed - opts.minSpeed),\r\n color: opts.colors[Math.floor(Math.random() * opts.colors.length)],\r\n angle: (Math.PI / 4) + (Math.random() * 0.2 - 0.1), // Roughly 45 degrees\r\n opacity: 1,\r\n };\r\n }\r\n\r\n function animate() {\r\n if (!running) return;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n if (Math.random() < opts.density) {\r\n stars.push(createStar());\r\n }\r\n\r\n for (let i = stars.length - 1; i >= 0; i--) {\r\n const s = stars[i];\r\n const vx = -Math.cos(s.angle) * s.speed;\r\n const vy = Math.sin(s.angle) * s.speed;\r\n \r\n s.x += vx;\r\n s.y += vy;\r\n s.opacity -= 0.01;\r\n\r\n ctx.save();\r\n ctx.globalAlpha = Math.max(0, s.opacity);\r\n if (opts.glow) {\r\n ctx.shadowColor = s.color;\r\n ctx.shadowBlur = s.thickness * 4;\r\n }\r\n \r\n const grad = ctx.createLinearGradient(s.x, s.y, s.x - vx * (s.length / s.speed), s.y - vy * (s.length / s.speed));\r\n grad.addColorStop(0, s.color);\r\n grad.addColorStop(1, 'rgba(255,255,255,0)');\r\n \r\n ctx.strokeStyle = grad;\r\n ctx.lineWidth = s.thickness;\r\n ctx.lineCap = 'round';\r\n \r\n ctx.beginPath();\r\n ctx.moveTo(s.x, s.y);\r\n ctx.lineTo(s.x - vx * (s.length / s.speed), s.y - vy * (s.length / s.speed));\r\n ctx.stroke();\r\n ctx.restore();\r\n\r\n if (s.opacity <= 0 || s.x < -100 || s.y > canvas.height + 100) {\r\n stars.splice(i, 1);\r\n }\r\n }\r\n\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animate();\r\n\r\n return function stop() {\r\n running = false;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n };\r\n}\r\n","/**\r\n * romantic-animations v2.0.0\r\n * ───────────────────────────────────────────────────────\r\n * A rich collection of canvas-based romantic & celebratory\r\n * animations for the web.\r\n *\r\n * Usage (ESM):\r\n * import { startFloatingHearts, stopAll } from '@sarthak03dot/romantic-animations';\r\n * startFloatingHearts('my-container');\r\n *\r\n * Usage (UMD / CDN):\r\n * <script src=\"...romantic-animations.umd.js\"></script>\r\n * <script>\r\n * RomanticAnimations.startFloatingHearts('my-container');\r\n * </script>\r\n * ───────────────────────────────────────────────────────\r\n */\r\n\r\nimport { initCanvas } from './core/engine.js';\r\nimport { floatingHearts } from './animations/floatingHearts.js';\r\nimport { heartTrail } from './animations/heartTrail.js';\r\nimport { heartBurst } from './animations/heartBurst.js';\r\nimport { sparkles } from './animations/sparkles.js';\r\nimport { loveRain } from './animations/loveRain.js';\r\nimport { confetti } from './animations/confetti.js';\r\nimport { fireworks } from './animations/fireworks.js';\r\nimport { starField } from './animations/starField.js';\r\nimport { butterflies } from './animations/butterfly.js';\r\nimport { magicDust } from './animations/magicDust.js';\r\nimport { floatingOrbs } from './animations/floatingOrbs.js';\r\nimport { shootingStars } from './animations/shootingStars.js';\r\n\r\n// Track active sessions so stopAll() can clean up everything\r\nconst _sessions = new Map(); // containerId → { destroy, stop }\r\nlet _sessionId = 0;\r\n\r\n/**\r\n * Internal helper — boots a canvas and starts an animation fn.\r\n * Returns a numeric session id that can be passed to stopAnimation().\r\n *\r\n * @param {string|HTMLElement} containerId\r\n * @param {Function} animFn – the animation factory\r\n * @param {object} options – user options forwarded to the animation\r\n * @returns {number} session id\r\n */\r\nfunction _run(containerId, animFn, options = {}) {\r\n const { canvas, destroy } = initCanvas(containerId, options);\r\n const stop = animFn(canvas, options);\r\n const id = ++_sessionId;\r\n _sessions.set(id, { destroy, stop });\r\n return id;\r\n}\r\n\r\n/**\r\n * Stop a single animation by its session id.\r\n * @param {number} id – returned by a start* call\r\n */\r\nexport function stopAnimation(id) {\r\n if (_sessions.has(id)) {\r\n const s = _sessions.get(id);\r\n if (typeof s.stop === 'function') s.stop();\r\n s.destroy();\r\n _sessions.delete(id);\r\n }\r\n}\r\n\r\n/**\r\n * Stop every running animation and clean up all canvases.\r\n */\r\nexport function stopAll() {\r\n _sessions.forEach((s) => {\r\n if (typeof s.stop === 'function') s.stop();\r\n s.destroy();\r\n });\r\n _sessions.clear();\r\n}\r\n\r\n// ─── Public API ───────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Floating hearts rising from the bottom.\r\n * @param {string|HTMLElement} containerId\r\n * @param {object} [options]\r\n * @param {number} [options.count=0.12] – spawn probability per frame (0–1)\r\n * @param {number} [options.minSize=14]\r\n * @param {number} [options.maxSize=32]\r\n * @param {number} [options.minSpeed=0.8]\r\n * @param {number} [options.maxSpeed=2.4]\r\n * @param {string[]} [options.colors]\r\n * @param {boolean} [options.wobble=true] – sine-wave horizontal drift\r\n * @param {boolean} [options.glow=true]\r\n * @returns {number} session id\r\n */\r\nexport function startFloatingHearts(containerId, options = {}) {\r\n return _run(containerId, floatingHearts, options);\r\n}\r\n\r\n/**\r\n * Heart trail that follows the cursor / touch.\r\n * @param {string|HTMLElement} containerId\r\n * @param {object} [options]\r\n * @param {number} [options.minSize=6]\r\n * @param {number} [options.maxSize=16]\r\n * @param {number} [options.decay=0.025]\r\n * @param {string[]} [options.colors]\r\n * @param {boolean} [options.glow=true]\r\n * @returns {number} session id\r\n */\r\nexport function startHeartTrail(containerId, options = {}) {\r\n return _run(containerId, heartTrail, options);\r\n}\r\n\r\n/**\r\n * Heart burst on click / tap.\r\n * @param {string|HTMLElement} containerId\r\n * @param {object} [options]\r\n * @param {number} [options.count=20] – particles per burst\r\n * @param {string[]} [options.symbols] – 'heart' | 'star' | 'sparkle'\r\n * @param {boolean} [options.glow=true]\r\n * @returns {number} session id\r\n */\r\nexport function startHeartBurst(containerId, options = {}) {\r\n return _run(containerId, heartBurst, options);\r\n}\r\n\r\n/**\r\n * Twinkling sparkle stars.\r\n * @param {string|HTMLElement} containerId\r\n * @param {object} [options]\r\n * @param {number} [options.count=80]\r\n * @param {number} [options.speed=0.5]\r\n * @param {boolean} [options.glow=true]\r\n * @returns {number} session id\r\n */\r\nexport function startSparkles(containerId, options = {}) {\r\n return _run(containerId, sparkles, options);\r\n}\r\n\r\n/**\r\n * Rain of love emojis / symbols drifting downward.\r\n * @param {string|HTMLElement} containerId\r\n * @param {object} [options]\r\n * @param {number} [options.density=0.15]\r\n * @param {string[]} [options.symbols] – array of strings / emoji\r\n * @param {boolean} [options.glow=true]\r\n * @returns {number} session id\r\n */\r\nexport function startLoveRain(containerId, options = {}) {\r\n return _run(containerId, loveRain, options);\r\n}\r\n\r\n/**\r\n * Colourful confetti raining down.\r\n * @param {string|HTMLElement} containerId\r\n * @param {object} [options]\r\n * @param {number} [options.density=0.18]\r\n * @param {string[]} [options.colors]\r\n * @param {string[]} [options.shapes] – 'rect' | 'circle' | 'ribbon'\r\n * @returns {number} session id\r\n */\r\nexport function startConfetti(containerId, options = {}) {\r\n return _run(containerId, confetti, options);\r\n}\r\n\r\n/**\r\n * Fireworks that auto-launch on an interval.\r\n * @param {string|HTMLElement} containerId\r\n * @param {object} [options]\r\n * @param {number} [options.interval=1200] – ms between launches\r\n * @param {number} [options.particleCount=80]\r\n * @param {boolean} [options.glow=true]\r\n * @returns {number} session id\r\n */\r\nexport function startFireworks(containerId, options = {}) {\r\n return _run(containerId, fireworks, options);\r\n}\r\n\r\n/**\r\n * Drifting star field with optional constellation lines.\r\n * @param {string|HTMLElement} containerId\r\n * @param {object} [options]\r\n * @param {number} [options.starCount=120]\r\n * @param {number} [options.speed=0.4]\r\n * @param {boolean} [options.twinkle=true]\r\n * @param {number} [options.connectDist=100] – set to 0 to disable lines\r\n * @returns {number} session id\r\n */\r\nexport function startStarField(containerId, options = {}) {\r\n return _run(containerId, starField, options);\r\n}\r\n\r\nexport function startButterflies(containerId, options = {}) {\r\n return _run(containerId, butterflies, options);\r\n}\r\n\r\nexport function startMagicDust(containerId, options = {}) {\r\n return _run(containerId, magicDust, options);\r\n}\r\n\r\nexport function startFloatingOrbs(containerId, options = {}) {\r\n return _run(containerId, floatingOrbs, options);\r\n}\r\n\r\nexport function startShootingStars(containerId, options = {}) {\r\n return _run(containerId, shootingStars, options);\r\n}\r\n\r\n// ─── Default export (convenient for UMD / CDN namespace) ──────────────────────\r\nexport default {\r\n startFloatingHearts,\r\n startHeartTrail,\r\n startHeartBurst,\r\n startSparkles,\r\n startLoveRain,\r\n startConfetti,\r\n startFireworks,\r\n startStarField,\r\n startButterflies,\r\n startMagicDust,\r\n startFloatingOrbs,\r\n startShootingStars,\r\n stopAnimation,\r\n stopAll,\r\n};\r\n"],"names":["DEFAULT_OPTIONS","initCanvas","containerIdOrEl","userOptions","options","container","old","canvas","resize","ro","ctx","destroy","mergeOptions","defaults","DEFAULTS","drawHeartShape","cx","cy","r","color","alpha","glow","floatingHearts","opts","hearts","running","createHeart","size","animate","i","h","xOffset","fadeAlpha","drawHeart","heartTrail","addHeart","x","y","onMouseMove","e","rect","onTouchMove","t","drawSymbol","type","outer","inner","a","heartBurst","particles","spawnBurst","angle","speed","onClick","onTouch","p","sparkles","stars","createStar","drawStar","s","loveRain","drops","createDrop","d","xOff","confetti","pieces","createPiece","drawPiece","fireworks","rockets","launchRocket","targetY","burst","iv","starField","randomY","j","dx","dy","dist","butterflies","items","time","spawn","b","wingSpread","magicDust","dusts","createDust","floatingOrbs","orbs","createOrb","orb","gradient","shootingStars","vx","vy","grad","_sessions","_sessionId","_run","containerId","animFn","stop","id","stopAnimation","stopAll","startFloatingHearts","startHeartTrail","startHeartBurst","startSparkles","startLoveRain","startConfetti","startFireworks","startStarField","startButterflies","startMagicDust","startFloatingOrbs","startShootingStars","index"],"mappings":"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"}