sparkfx 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/styles.ts","../src/core/engine.ts","../src/effects/basic/bounce.ts","../src/effects/basic/pulse.ts","../src/effects/basic/lift.ts","../src/effects/basic/scale.ts","../src/effects/basic/shake.ts","../src/effects/basic/fade.ts","../src/effects/basic/slide.ts","../src/effects/basic/rotate.ts","../src/effects/premium/glow.ts","../src/effects/premium/ripple.ts","../src/effects/premium/magnetic.ts","../src/effects/premium/tilt.ts","../src/effects/premium/elastic.ts","../src/effects/premium/jelly.ts","../src/effects/premium/rubber.ts","../src/effects/premium/morph.ts","../src/effects/visual/glitch.ts","../src/effects/visual/blur.ts","../src/effects/visual/neon.ts","../src/effects/visual/glass.ts","../src/effects/visual/shimmer.ts","../src/effects/visual/gradient.ts","../src/effects/visual/spotlight.ts","../src/effects/visual/hologram.ts","../src/effects/celebration/confetti.ts","../src/effects/celebration/sparkle.ts","../src/effects/celebration/firework.ts","../src/effects/celebration/celebrate.ts","../src/effects/text/typewriter.ts","../src/effects/text/scramble.ts","../src/effects/text/wave.ts","../src/effects/text/highlight.ts","../src/index.ts"],"names":["SPARK_STYLE_ID","stylesInjected","injectedAnimations","baseStyles","injectBaseStyles","style","injectAnimation","name","keyframes","styleEl","generateCSSVars","options","vars","getEasingValue","easing","prefersReducedMotion","defaults","mergeOptions","effectDefaults","shouldAnimate","applyIntensity","value","intensity","getRelativeMousePosition","event","element","rect","x","y","percentX","percentY","random","min","max","randomItem","array","throttle","fn","limit","inThrottle","args","defaultOptions","bounce","opts","bounceHeight","animationName","step","i","upPercent","downPercent","currentHeight","cssVars","activate","deactivate","pulse","scaleValue","iterationCount","lift","distance","shadowStyle","e","target","scale","shake","fade","targetOpacity","slide","getTransform","rotate","angle","direction","glow","spread","glowShadow","ripple","size","rippleEl","magnetic","maxDistance","handleMouseMove","moveX","moveY","handleMouseLeave","tilt","maxAngle","glareEl","rotateY","rotateX","glareX","glareY","handleMouseEnter","elastic","stretch","jelly","wobble","rubber","morph","radius","glitch","blur","blurAmount","neon","color","neonTextShadow","neonBoxShadow","glass","bgOpacity","borderOpacity","shimmer","gradient","colors","gradientDirection","spotlight","overlayEl","hologram","confetti","originX","originY","container","particle","velocity","startX","startY","endX","duration","sparkle","intervalId","containerEl","createSparkle","sparkleEl","firework","count","endY","celebrate","confettiResult","sparkleResult","typewriter","initTypewriter","originalText","currentIndex","type","scramble","isAnimating","chars","iterations","interval","currentIteration","scrambleInterval","progress","scrambled","wave","height","text","char","delay","highlight","spark","src_default"],"mappings":"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","file":"chunk-5QFFUSHL.js","sourcesContent":["/**\r\n * @lynch/spark - CSS Injection System\r\n * Handles dynamic CSS injection for effects\r\n */\r\n\r\nconst SPARK_STYLE_ID = 'lynch-spark-styles'\r\n\r\nlet stylesInjected = false\r\nconst injectedAnimations = new Set<string>()\r\n\r\n/**\r\n * Base CSS that's always injected\r\n */\r\nconst baseStyles = `\r\n/* @lynch/spark base styles */\r\n.spark-effect {\r\n transition-property: transform, box-shadow, filter, opacity;\r\n transition-timing-function: var(--spark-easing, ease-out);\r\n transition-duration: var(--spark-duration, 300ms);\r\n will-change: transform;\r\n}\r\n\r\n.spark-reduced-motion {\r\n transition: none !important;\r\n animation: none !important;\r\n}\r\n\r\n/* Ripple container */\r\n.spark-ripple-container {\r\n position: relative;\r\n overflow: hidden;\r\n}\r\n\r\n.spark-ripple {\r\n position: absolute;\r\n border-radius: 50%;\r\n transform: scale(0);\r\n animation: spark-ripple-animation 0.6s linear;\r\n pointer-events: none;\r\n}\r\n\r\n@keyframes spark-ripple-animation {\r\n to {\r\n transform: scale(4);\r\n opacity: 0;\r\n }\r\n}\r\n\r\n/* Confetti */\r\n.spark-confetti-container {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n z-index: 9999;\r\n overflow: hidden;\r\n}\r\n\r\n.spark-confetti-particle {\r\n position: absolute;\r\n width: 10px;\r\n height: 10px;\r\n animation: spark-confetti-fall var(--spark-duration, 3s) ease-out forwards;\r\n}\r\n\r\n@keyframes spark-confetti-fall {\r\n 0% {\r\n transform: translateY(0) rotate(0deg);\r\n opacity: 1;\r\n }\r\n 100% {\r\n transform: translateY(100vh) rotate(720deg);\r\n opacity: 0;\r\n }\r\n}\r\n\r\n/* Shimmer */\r\n.spark-shimmer {\r\n position: relative;\r\n overflow: hidden;\r\n}\r\n\r\n.spark-shimmer::after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: -100%;\r\n width: 100%;\r\n height: 100%;\r\n background: linear-gradient(\r\n 90deg,\r\n transparent,\r\n rgba(255, 255, 255, 0.3),\r\n transparent\r\n );\r\n animation: spark-shimmer-move var(--spark-duration, 1.5s) infinite;\r\n}\r\n\r\n@keyframes spark-shimmer-move {\r\n to {\r\n left: 100%;\r\n }\r\n}\r\n\r\n/* Glitch */\r\n.spark-glitch {\r\n position: relative;\r\n}\r\n\r\n.spark-glitch::before,\r\n.spark-glitch::after {\r\n content: attr(data-text);\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n opacity: 0;\r\n}\r\n\r\n.spark-glitch:hover::before,\r\n.spark-glitch:hover::after {\r\n opacity: 0.8;\r\n}\r\n\r\n.spark-glitch:hover::before {\r\n color: var(--spark-glitch-color1, #ff0000);\r\n animation: spark-glitch-1 0.3s infinite;\r\n}\r\n\r\n.spark-glitch:hover::after {\r\n color: var(--spark-glitch-color2, #00ffff);\r\n animation: spark-glitch-2 0.3s infinite;\r\n}\r\n\r\n@keyframes spark-glitch-1 {\r\n 0%, 100% { clip-path: inset(0 0 90% 0); transform: translateX(-2px); }\r\n 25% { clip-path: inset(10% 0 60% 0); transform: translateX(2px); }\r\n 50% { clip-path: inset(40% 0 30% 0); transform: translateX(-2px); }\r\n 75% { clip-path: inset(70% 0 10% 0); transform: translateX(2px); }\r\n}\r\n\r\n@keyframes spark-glitch-2 {\r\n 0%, 100% { clip-path: inset(80% 0 0 0); transform: translateX(2px); }\r\n 25% { clip-path: inset(50% 0 20% 0); transform: translateX(-2px); }\r\n 50% { clip-path: inset(20% 0 50% 0); transform: translateX(2px); }\r\n 75% { clip-path: inset(0 0 70% 0); transform: translateX(-2px); }\r\n}\r\n\r\n/* Neon glow */\r\n.spark-neon {\r\n text-shadow:\r\n 0 0 5px var(--spark-neon-color, #fff),\r\n 0 0 10px var(--spark-neon-color, #fff),\r\n 0 0 20px var(--spark-neon-color, #fff),\r\n 0 0 40px var(--spark-neon-color, #0ff),\r\n 0 0 80px var(--spark-neon-color, #0ff);\r\n}\r\n\r\n/* Hologram */\r\n.spark-hologram {\r\n background: linear-gradient(\r\n 45deg,\r\n rgba(255, 0, 128, 0.3),\r\n rgba(0, 255, 255, 0.3),\r\n rgba(255, 255, 0, 0.3)\r\n );\r\n background-size: 400% 400%;\r\n animation: spark-hologram-shift 3s ease infinite;\r\n -webkit-background-clip: text;\r\n background-clip: text;\r\n}\r\n\r\n@keyframes spark-hologram-shift {\r\n 0% { background-position: 0% 50%; }\r\n 50% { background-position: 100% 50%; }\r\n 100% { background-position: 0% 50%; }\r\n}\r\n\r\n/* Glass */\r\n.spark-glass {\r\n backdrop-filter: blur(10px);\r\n background: rgba(255, 255, 255, 0.1);\r\n border: 1px solid rgba(255, 255, 255, 0.2);\r\n}\r\n\r\n/* Typewriter cursor */\r\n.spark-typewriter-cursor {\r\n animation: spark-cursor-blink 0.7s infinite;\r\n}\r\n\r\n@keyframes spark-cursor-blink {\r\n 0%, 100% { opacity: 1; }\r\n 50% { opacity: 0; }\r\n}\r\n`\r\n\r\n/**\r\n * Inject base styles into the document\r\n */\r\nexport function injectBaseStyles(): void {\r\n if (typeof document === 'undefined' || stylesInjected) return\r\n\r\n const style = document.createElement('style')\r\n style.id = SPARK_STYLE_ID\r\n style.textContent = baseStyles\r\n document.head.appendChild(style)\r\n stylesInjected = true\r\n}\r\n\r\n/**\r\n * Inject a custom animation keyframes\r\n */\r\nexport function injectAnimation(name: string, keyframes: string): void {\r\n if (typeof document === 'undefined') return\r\n if (injectedAnimations.has(name)) return\r\n\r\n injectBaseStyles()\r\n\r\n const styleEl = document.getElementById(SPARK_STYLE_ID)\r\n if (styleEl) {\r\n styleEl.textContent += `\\n@keyframes ${name} { ${keyframes} }`\r\n injectedAnimations.add(name)\r\n }\r\n}\r\n\r\n/**\r\n * Generate CSS custom properties for an element\r\n */\r\nexport function generateCSSVars(options: {\r\n duration?: number\r\n easing?: string\r\n intensity?: number\r\n}): Record<string, string> {\r\n const vars: Record<string, string> = {}\r\n\r\n if (options.duration !== undefined) {\r\n vars['--spark-duration'] = `${options.duration}ms`\r\n }\r\n if (options.easing !== undefined) {\r\n vars['--spark-easing'] = getEasingValue(options.easing)\r\n }\r\n if (options.intensity !== undefined) {\r\n vars['--spark-intensity'] = String(options.intensity)\r\n }\r\n\r\n return vars\r\n}\r\n\r\n/**\r\n * Convert easing name to CSS value\r\n */\r\nexport function getEasingValue(easing: string): string {\r\n const easings: Record<string, string> = {\r\n linear: 'linear',\r\n ease: 'ease',\r\n 'ease-in': 'ease-in',\r\n 'ease-out': 'ease-out',\r\n 'ease-in-out': 'ease-in-out',\r\n spring: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\r\n bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\r\n elastic: 'cubic-bezier(0.68, -0.6, 0.32, 1.6)',\r\n }\r\n return easings[easing] ?? easing\r\n}\r\n\r\n/**\r\n * Check if user prefers reduced motion\r\n */\r\nexport function prefersReducedMotion(): boolean {\r\n if (typeof window === 'undefined') return false\r\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches\r\n}\r\n","/**\r\n * @lynch/spark - Effect Engine\r\n * Core engine that powers all effects\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from './types'\r\nimport {\r\n injectBaseStyles,\r\n generateCSSVars,\r\n prefersReducedMotion,\r\n} from './styles'\r\n\r\n/** Default options */\r\nconst defaults: Required<SparkBaseOptions> = {\r\n duration: 300,\r\n intensity: 1,\r\n trigger: 'hover',\r\n easing: 'ease-out',\r\n delay: 0,\r\n reduceMotion: true,\r\n}\r\n\r\n/**\r\n * Merge user options with defaults\r\n */\r\nexport function mergeOptions<T extends SparkBaseOptions>(\r\n options?: T,\r\n effectDefaults?: Partial<T>\r\n): Required<SparkBaseOptions> & T {\r\n return { ...defaults, ...effectDefaults, ...options } as Required<SparkBaseOptions> & T\r\n}\r\n\r\n/**\r\n * Check if animations should be disabled\r\n */\r\nexport function shouldAnimate(options: SparkBaseOptions): boolean {\r\n if (options.reduceMotion !== false && prefersReducedMotion()) {\r\n return false\r\n }\r\n return true\r\n}\r\n\r\n/**\r\n * Create a basic effect result with common properties\r\n */\r\nexport function createEffectResult(\r\n options: SparkBaseOptions,\r\n additionalStyles?: Record<string, string>,\r\n additionalClasses?: string[]\r\n): SparkResult {\r\n injectBaseStyles()\r\n\r\n const cssVars = generateCSSVars({\r\n duration: options.duration,\r\n easing: options.easing,\r\n intensity: options.intensity,\r\n })\r\n\r\n const classes = ['spark-effect']\r\n if (!shouldAnimate(options)) {\r\n classes.push('spark-reduced-motion')\r\n }\r\n if (additionalClasses) {\r\n classes.push(...additionalClasses)\r\n }\r\n\r\n return {\r\n className: classes.join(' '),\r\n style: { ...cssVars, ...additionalStyles },\r\n }\r\n}\r\n\r\n/**\r\n * Apply transform with intensity\r\n */\r\nexport function applyIntensity(value: number, intensity: number): number {\r\n return value * intensity\r\n}\r\n\r\n/**\r\n * Generate a unique ID for elements\r\n */\r\nlet idCounter = 0\r\nexport function generateId(): string {\r\n return `spark-${++idCounter}-${Date.now()}`\r\n}\r\n\r\n/**\r\n * Clamp a value between min and max\r\n */\r\nexport function clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max)\r\n}\r\n\r\n/**\r\n * Linear interpolation\r\n */\r\nexport function lerp(start: number, end: number, t: number): number {\r\n return start + (end - start) * t\r\n}\r\n\r\n/**\r\n * Map a value from one range to another\r\n */\r\nexport function mapRange(\r\n value: number,\r\n inMin: number,\r\n inMax: number,\r\n outMin: number,\r\n outMax: number\r\n): number {\r\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\r\n}\r\n\r\n/**\r\n * Get element's center position\r\n */\r\nexport function getElementCenter(element: HTMLElement): { x: number; y: number } {\r\n const rect = element.getBoundingClientRect()\r\n return {\r\n x: rect.left + rect.width / 2,\r\n y: rect.top + rect.height / 2,\r\n }\r\n}\r\n\r\n/**\r\n * Get mouse position relative to element center\r\n */\r\nexport function getRelativeMousePosition(\r\n event: MouseEvent,\r\n element: HTMLElement\r\n): { x: number; y: number; percentX: number; percentY: number } {\r\n const rect = element.getBoundingClientRect()\r\n const x = event.clientX - rect.left\r\n const y = event.clientY - rect.top\r\n const percentX = (x / rect.width - 0.5) * 2 // -1 to 1\r\n const percentY = (y / rect.height - 0.5) * 2 // -1 to 1\r\n\r\n return { x, y, percentX, percentY }\r\n}\r\n\r\n/**\r\n * Create event handlers for trigger-based effects\r\n */\r\nexport function createTriggerHandlers(\r\n trigger: SparkBaseOptions['trigger'],\r\n onActivate: () => void,\r\n onDeactivate: () => void\r\n): Pick<SparkResult, 'onMouseEnter' | 'onMouseLeave' | 'onClick' | 'onFocus' | 'onBlur'> {\r\n switch (trigger) {\r\n case 'hover':\r\n return {\r\n onMouseEnter: onActivate,\r\n onMouseLeave: onDeactivate,\r\n }\r\n case 'click':\r\n return {\r\n onClick: onActivate,\r\n }\r\n case 'focus':\r\n return {\r\n onFocus: onActivate,\r\n onBlur: onDeactivate,\r\n }\r\n default:\r\n return {}\r\n }\r\n}\r\n\r\n/**\r\n * Random number in range\r\n */\r\nexport function random(min: number, max: number): number {\r\n return Math.random() * (max - min) + min\r\n}\r\n\r\n/**\r\n * Random item from array\r\n */\r\nexport function randomItem<T>(array: T[]): T {\r\n return array[Math.floor(Math.random() * array.length)] as T\r\n}\r\n\r\n/**\r\n * Debounce function\r\n */\r\nexport function debounce<T extends (...args: unknown[]) => void>(\r\n fn: T,\r\n delay: number\r\n): T {\r\n let timeoutId: ReturnType<typeof setTimeout>\r\n return ((...args: Parameters<T>) => {\r\n clearTimeout(timeoutId)\r\n timeoutId = setTimeout(() => fn(...args), delay)\r\n }) as T\r\n}\r\n\r\n/**\r\n * Throttle function\r\n */\r\nexport function throttle<T extends (...args: unknown[]) => void>(\r\n fn: T,\r\n limit: number\r\n): T {\r\n let inThrottle = false\r\n return ((...args: Parameters<T>) => {\r\n if (!inThrottle) {\r\n fn(...args)\r\n inThrottle = true\r\n setTimeout(() => (inThrottle = false), limit)\r\n }\r\n }) as T\r\n}\r\n","/**\r\n * Bounce Effect - Zıplama efekti\r\n */\r\n\r\nimport type { SparkBounceOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, injectAnimation, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkBounceOptions> = {\r\n duration: 400,\r\n bounces: 1,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function bounce(options?: SparkBounceOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n const bounceHeight = applyIntensity(20, opts.intensity)\r\n const animationName = `spark-bounce-${opts.bounces}`\r\n\r\n // Generate keyframes based on bounces\r\n let keyframes = '0% { transform: translateY(0); }'\r\n const step = 100 / (opts.bounces * 2)\r\n\r\n for (let i = 0; i < opts.bounces; i++) {\r\n const upPercent = step * (i * 2 + 1)\r\n const downPercent = step * (i * 2 + 2)\r\n const currentHeight = bounceHeight * Math.pow(0.6, i)\r\n keyframes += ` ${upPercent}% { transform: translateY(-${currentHeight}px); }`\r\n keyframes += ` ${downPercent}% { transform: translateY(0); }`\r\n }\r\n keyframes += ' 100% { transform: translateY(0); }'\r\n\r\n injectAnimation(animationName, keyframes)\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n let isActive = false\r\n\r\n const activate = () => {\r\n isActive = true\r\n }\r\n\r\n const deactivate = () => {\r\n isActive = false\r\n }\r\n\r\n return {\r\n className: 'spark-effect spark-bounce',\r\n style: {\r\n ...cssVars,\r\n '--spark-bounce-animation': `${animationName} ${opts.duration}ms ${opts.easing}`,\r\n },\r\n onMouseEnter: opts.trigger === 'hover' ? activate : undefined,\r\n onMouseLeave: opts.trigger === 'hover' ? deactivate : undefined,\r\n onClick: opts.trigger === 'click' ? activate : undefined,\r\n }\r\n}\r\n","/**\r\n * Pulse Effect - Nabız/loading efekti\r\n */\r\n\r\nimport type { SparkPulseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, injectAnimation, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkPulseOptions> = {\r\n duration: 1000,\r\n count: -1, // infinite\r\n scale: 1.05,\r\n trigger: 'always',\r\n}\r\n\r\nexport function pulse(options?: SparkPulseOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n const scaleValue = 1 + (opts.scale - 1) * opts.intensity\r\n const animationName = 'spark-pulse'\r\n\r\n injectAnimation(animationName, `\r\n 0%, 100% { transform: scale(1); opacity: 1; }\r\n 50% { transform: scale(${scaleValue}); opacity: 0.8; }\r\n `)\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n const iterationCount = opts.count === -1 ? 'infinite' : opts.count\r\n\r\n return {\r\n className: 'spark-effect spark-pulse',\r\n style: {\r\n ...cssVars,\r\n animation: `${animationName} ${opts.duration}ms ${opts.easing} ${iterationCount}`,\r\n },\r\n }\r\n}\r\n","/**\r\n * Lift Effect - Yukarı kalkma efekti\r\n */\r\n\r\nimport type { SparkLiftOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkLiftOptions> = {\r\n duration: 200,\r\n distance: 8,\r\n shadow: true,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function lift(options?: SparkLiftOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const distance = applyIntensity(opts.distance, opts.intensity)\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n const shadowStyle = opts.shadow\r\n ? `0 ${distance * 2}px ${distance * 3}px rgba(0, 0, 0, 0.15)`\r\n : 'none'\r\n\r\n return {\r\n className: 'spark-effect spark-lift',\r\n style: {\r\n ...cssVars,\r\n '--spark-lift-distance': `-${distance}px`,\r\n '--spark-lift-shadow': shadowStyle,\r\n transition: `transform var(--spark-duration) var(--spark-easing), box-shadow var(--spark-duration) var(--spark-easing)`,\r\n },\r\n onMouseEnter: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.transform = `translateY(-${distance}px)`\r\n if (opts.shadow) {\r\n target.style.boxShadow = shadowStyle\r\n }\r\n },\r\n onMouseLeave: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.transform = 'translateY(0)'\r\n target.style.boxShadow = 'none'\r\n },\r\n }\r\n}\r\n","/**\r\n * Scale Effect - Ölçeklendirme efekti\r\n */\r\n\r\nimport type { SparkScaleOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkScaleOptions> = {\r\n duration: 200,\r\n scale: 1.1,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function scale(options?: SparkScaleOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const scaleValue = 1 + (opts.scale - 1) * opts.intensity\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-scale',\r\n style: {\r\n ...cssVars,\r\n transition: `transform var(--spark-duration) var(--spark-easing)`,\r\n },\r\n onMouseEnter: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.transform = `scale(${scaleValue})`\r\n },\r\n onMouseLeave: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.transform = 'scale(1)'\r\n },\r\n }\r\n}\r\n","/**\r\n * Shake Effect - Sallama efekti\r\n */\r\n\r\nimport type { SparkShakeOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, injectAnimation, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkShakeOptions> = {\r\n duration: 500,\r\n distance: 5,\r\n count: 3,\r\n trigger: 'click',\r\n}\r\n\r\nexport function shake(options?: SparkShakeOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n const distance = applyIntensity(opts.distance, opts.intensity)\r\n const animationName = 'spark-shake'\r\n\r\n injectAnimation(animationName, `\r\n 0%, 100% { transform: translateX(0); }\r\n 10%, 30%, 50%, 70%, 90% { transform: translateX(-${distance}px); }\r\n 20%, 40%, 60%, 80% { transform: translateX(${distance}px); }\r\n `)\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-shake',\r\n style: cssVars,\r\n onClick: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.animation = `${animationName} ${opts.duration}ms ${opts.easing}`\r\n setTimeout(() => {\r\n target.style.animation = ''\r\n }, opts.duration)\r\n },\r\n }\r\n}\r\n","/**\r\n * Fade Effect - Solma efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkFadeOptions extends SparkBaseOptions {\r\n /** Target opacity (default: 0.6) */\r\n opacity?: number\r\n}\r\n\r\nconst defaultOptions: Partial<SparkFadeOptions> = {\r\n duration: 200,\r\n opacity: 0.6,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function fade(options?: SparkFadeOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkFadeOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const targetOpacity = opts.opacity ?? 0.6\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-fade',\r\n style: {\r\n ...cssVars,\r\n transition: `opacity var(--spark-duration) var(--spark-easing)`,\r\n },\r\n onMouseEnter: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.opacity = String(targetOpacity)\r\n },\r\n onMouseLeave: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.opacity = '1'\r\n },\r\n }\r\n}\r\n","/**\r\n * Slide Effect - Kayma efekti\r\n */\r\n\r\nimport type { SparkSlideOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkSlideOptions> = {\r\n duration: 200,\r\n direction: 'up',\r\n distance: 10,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function slide(options?: SparkSlideOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const distance = applyIntensity(opts.distance, opts.intensity)\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n const getTransform = () => {\r\n switch (opts.direction) {\r\n case 'up': return `translateY(-${distance}px)`\r\n case 'down': return `translateY(${distance}px)`\r\n case 'left': return `translateX(-${distance}px)`\r\n case 'right': return `translateX(${distance}px)`\r\n default: return `translateY(-${distance}px)`\r\n }\r\n }\r\n\r\n return {\r\n className: 'spark-effect spark-slide',\r\n style: {\r\n ...cssVars,\r\n transition: `transform var(--spark-duration) var(--spark-easing)`,\r\n },\r\n onMouseEnter: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.transform = getTransform()\r\n },\r\n onMouseLeave: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.transform = 'translate(0)'\r\n },\r\n }\r\n}\r\n","/**\r\n * Rotate Effect - Döndürme efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkRotateOptions extends SparkBaseOptions {\r\n /** Rotation angle in degrees (default: 5) */\r\n angle?: number\r\n /** Rotation direction (default: 'clockwise') */\r\n direction?: 'clockwise' | 'counterclockwise'\r\n}\r\n\r\nconst defaultOptions: Partial<SparkRotateOptions> = {\r\n duration: 200,\r\n angle: 5,\r\n direction: 'clockwise',\r\n trigger: 'hover',\r\n}\r\n\r\nexport function rotate(options?: SparkRotateOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkRotateOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const angle = applyIntensity(opts.angle ?? 5, opts.intensity)\r\n const direction = opts.direction === 'counterclockwise' ? -1 : 1\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-rotate',\r\n style: {\r\n ...cssVars,\r\n transition: `transform var(--spark-duration) var(--spark-easing)`,\r\n },\r\n onMouseEnter: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.transform = `rotate(${angle * direction}deg)`\r\n },\r\n onMouseLeave: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.transform = 'rotate(0)'\r\n },\r\n }\r\n}\r\n","/**\r\n * Glow Effect - Neon parıltı efekti\r\n */\r\n\r\nimport type { SparkGlowOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkGlowOptions> = {\r\n duration: 300,\r\n color: 'currentColor',\r\n spread: 20,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function glow(options?: SparkGlowOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const spread = applyIntensity(opts.spread, opts.intensity)\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n const glowShadow = `\r\n 0 0 ${spread / 2}px ${opts.color},\r\n 0 0 ${spread}px ${opts.color},\r\n 0 0 ${spread * 1.5}px ${opts.color}\r\n `\r\n\r\n return {\r\n className: 'spark-effect spark-glow',\r\n style: {\r\n ...cssVars,\r\n transition: `box-shadow var(--spark-duration) var(--spark-easing), filter var(--spark-duration) var(--spark-easing)`,\r\n },\r\n onMouseEnter: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.boxShadow = glowShadow\r\n target.style.filter = 'brightness(1.1)'\r\n },\r\n onMouseLeave: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.boxShadow = 'none'\r\n target.style.filter = 'brightness(1)'\r\n },\r\n }\r\n}\r\n","/**\r\n * Ripple Effect - Material Design ripple efekti\r\n */\r\n\r\nimport type { SparkRippleOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkRippleOptions> = {\r\n duration: 600,\r\n color: 'rgba(255, 255, 255, 0.3)',\r\n trigger: 'click',\r\n}\r\n\r\nexport function ripple(options?: SparkRippleOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n })\r\n\r\n const createRipple = (e: MouseEvent) => {\r\n const target = e.currentTarget as HTMLElement\r\n const rect = target.getBoundingClientRect()\r\n const size = Math.max(rect.width, rect.height) * 2\r\n\r\n const rippleEl = document.createElement('span')\r\n rippleEl.className = 'spark-ripple'\r\n rippleEl.style.cssText = `\r\n width: ${size}px;\r\n height: ${size}px;\r\n left: ${e.clientX - rect.left - size / 2}px;\r\n top: ${e.clientY - rect.top - size / 2}px;\r\n background: ${opts.color};\r\n `\r\n\r\n // Ensure positioned container\r\n if (getComputedStyle(target).position === 'static') {\r\n target.style.position = 'relative'\r\n }\r\n target.style.overflow = 'hidden'\r\n\r\n target.appendChild(rippleEl)\r\n\r\n setTimeout(() => {\r\n rippleEl.remove()\r\n }, opts.duration)\r\n }\r\n\r\n return {\r\n className: 'spark-effect spark-ripple-container',\r\n style: cssVars,\r\n onClick: createRipple,\r\n }\r\n}\r\n","/**\r\n * Magnetic Effect - Manyetik cursor takip efekti\r\n */\r\n\r\nimport type { SparkMagneticOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, getRelativeMousePosition, throttle } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkMagneticOptions> = {\r\n duration: 200,\r\n distance: 20,\r\n strength: 0.5,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function magnetic(options?: SparkMagneticOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const maxDistance = opts.distance * opts.intensity\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: 'ease-out',\r\n })\r\n\r\n const handleMouseMove = throttle((e: MouseEvent) => {\r\n const target = e.currentTarget as HTMLElement\r\n const { percentX, percentY } = getRelativeMousePosition(e, target)\r\n\r\n const moveX = percentX * maxDistance * opts.strength\r\n const moveY = percentY * maxDistance * opts.strength\r\n\r\n target.style.transform = `translate(${moveX}px, ${moveY}px)`\r\n }, 16) // ~60fps\r\n\r\n const handleMouseLeave = (e: MouseEvent) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.transform = 'translate(0, 0)'\r\n }\r\n\r\n return {\r\n className: 'spark-effect spark-magnetic',\r\n style: {\r\n ...cssVars,\r\n transition: `transform var(--spark-duration) var(--spark-easing)`,\r\n },\r\n onMouseMove: handleMouseMove,\r\n onMouseLeave: handleMouseLeave,\r\n }\r\n}\r\n","/**\r\n * Tilt Effect - 3D parallax eğilme efekti\r\n */\r\n\r\nimport type { SparkTiltOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, getRelativeMousePosition, throttle } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkTiltOptions> = {\r\n duration: 200,\r\n angle: 15,\r\n perspective: true,\r\n glare: false,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function tilt(options?: SparkTiltOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const maxAngle = opts.angle * opts.intensity\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: 'ease-out',\r\n })\r\n\r\n let glareEl: HTMLElement | null = null\r\n\r\n const handleMouseMove = throttle((e: MouseEvent) => {\r\n const target = e.currentTarget as HTMLElement\r\n const { percentX, percentY } = getRelativeMousePosition(e, target)\r\n\r\n const rotateY = percentX * maxAngle\r\n const rotateX = -percentY * maxAngle\r\n\r\n target.style.transform = `\r\n perspective(${opts.perspective ? '1000px' : 'none'})\r\n rotateX(${rotateX}deg)\r\n rotateY(${rotateY}deg)\r\n scale3d(1.02, 1.02, 1.02)\r\n `\r\n\r\n // Update glare position\r\n if (opts.glare && glareEl) {\r\n const glareX = 50 + percentX * 50\r\n const glareY = 50 + percentY * 50\r\n glareEl.style.background = `\r\n radial-gradient(\r\n circle at ${glareX}% ${glareY}%,\r\n rgba(255,255,255,0.3) 0%,\r\n transparent 60%\r\n )\r\n `\r\n }\r\n }, 16)\r\n\r\n const handleMouseEnter = (e: MouseEvent) => {\r\n const target = e.currentTarget as HTMLElement\r\n\r\n if (opts.glare) {\r\n glareEl = document.createElement('div')\r\n glareEl.style.cssText = `\r\n position: absolute;\r\n inset: 0;\r\n pointer-events: none;\r\n border-radius: inherit;\r\n `\r\n target.style.position = 'relative'\r\n target.appendChild(glareEl)\r\n }\r\n }\r\n\r\n const handleMouseLeave = (e: MouseEvent) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.transform = 'perspective(1000px) rotateX(0) rotateY(0) scale3d(1, 1, 1)'\r\n\r\n if (glareEl) {\r\n glareEl.remove()\r\n glareEl = null\r\n }\r\n }\r\n\r\n return {\r\n className: 'spark-effect spark-tilt',\r\n style: {\r\n ...cssVars,\r\n transformStyle: 'preserve-3d',\r\n transition: `transform var(--spark-duration) var(--spark-easing)`,\r\n },\r\n onMouseEnter: handleMouseEnter,\r\n onMouseMove: handleMouseMove,\r\n onMouseLeave: handleMouseLeave,\r\n }\r\n}\r\n","/**\r\n * Elastic Effect - Elastik gerilme efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, injectAnimation, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkElasticOptions extends SparkBaseOptions {\r\n /** Stretch amount (default: 1.2) */\r\n stretch?: number\r\n}\r\n\r\nconst defaultOptions: Partial<SparkElasticOptions> = {\r\n duration: 600,\r\n stretch: 1.2,\r\n trigger: 'click',\r\n}\r\n\r\nexport function elastic(options?: SparkElasticOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkElasticOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const stretch = 1 + (((opts.stretch ?? 1.2) - 1) * opts.intensity)\r\n const animationName = 'spark-elastic'\r\n\r\n injectAnimation(animationName, `\r\n 0% { transform: scale(1, 1); }\r\n 20% { transform: scale(${stretch}, ${2 - stretch}); }\r\n 40% { transform: scale(${2 - stretch}, ${stretch}); }\r\n 60% { transform: scale(${1 + (stretch - 1) * 0.3}, ${1 - (stretch - 1) * 0.3}); }\r\n 80% { transform: scale(${1 - (stretch - 1) * 0.1}, ${1 + (stretch - 1) * 0.1}); }\r\n 100% { transform: scale(1, 1); }\r\n `)\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: 'ease-out',\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-elastic',\r\n style: cssVars,\r\n onClick: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.animation = `${animationName} ${opts.duration}ms cubic-bezier(0.68, -0.6, 0.32, 1.6)`\r\n setTimeout(() => {\r\n target.style.animation = ''\r\n }, opts.duration)\r\n },\r\n }\r\n}\r\n","/**\r\n * Jelly Effect - Jöle efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, injectAnimation, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkBaseOptions> = {\r\n duration: 700,\r\n intensity: 1,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function jelly(options?: SparkBaseOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const wobble = applyIntensity(0.1, opts.intensity)\r\n const animationName = 'spark-jelly'\r\n\r\n injectAnimation(animationName, `\r\n 0%, 100% { transform: scale(1, 1); }\r\n 25% { transform: scale(${1 - wobble}, ${1 + wobble}); }\r\n 50% { transform: scale(${1 + wobble}, ${1 - wobble}); }\r\n 75% { transform: scale(${1 - wobble * 0.5}, ${1 + wobble * 0.5}); }\r\n `)\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-jelly',\r\n style: cssVars,\r\n onMouseEnter: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.animation = `${animationName} ${opts.duration}ms ease-in-out`\r\n },\r\n onMouseLeave: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n setTimeout(() => {\r\n target.style.animation = ''\r\n }, opts.duration)\r\n },\r\n }\r\n}\r\n","/**\r\n * Rubber Effect - Lastik bant efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, injectAnimation, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkBaseOptions> = {\r\n duration: 800,\r\n intensity: 1,\r\n trigger: 'click',\r\n}\r\n\r\nexport function rubber(options?: SparkBaseOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const stretch = applyIntensity(0.25, opts.intensity)\r\n const animationName = 'spark-rubber'\r\n\r\n injectAnimation(animationName, `\r\n 0% { transform: scale(1, 1); }\r\n 30% { transform: scale(${1 + stretch}, ${1 - stretch * 0.5}); }\r\n 40% { transform: scale(${1 - stretch * 0.5}, ${1 + stretch * 0.25}); }\r\n 50% { transform: scale(${1 + stretch * 0.3}, ${1 - stretch * 0.15}); }\r\n 65% { transform: scale(${1 - stretch * 0.1}, ${1 + stretch * 0.05}); }\r\n 75% { transform: scale(${1 + stretch * 0.05}, ${1}); }\r\n 100% { transform: scale(1, 1); }\r\n `)\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-rubber',\r\n style: cssVars,\r\n onClick: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.animation = `${animationName} ${opts.duration}ms ease-in-out`\r\n setTimeout(() => {\r\n target.style.animation = ''\r\n }, opts.duration)\r\n },\r\n }\r\n}\r\n","/**\r\n * Morph Effect - Şekil değiştirme efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkMorphOptions extends SparkBaseOptions {\r\n /** Border radius change (default: 50) */\r\n radius?: number\r\n}\r\n\r\nconst defaultOptions: Partial<SparkMorphOptions> = {\r\n duration: 400,\r\n radius: 50,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function morph(options?: SparkMorphOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkMorphOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const radius = applyIntensity(opts.radius ?? 50, opts.intensity)\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-morph',\r\n style: {\r\n ...cssVars,\r\n transition: `border-radius var(--spark-duration) var(--spark-easing), transform var(--spark-duration) var(--spark-easing)`,\r\n },\r\n onMouseEnter: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.borderRadius = `${radius}%`\r\n target.style.transform = 'rotate(3deg) scale(1.02)'\r\n },\r\n onMouseLeave: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.borderRadius = ''\r\n target.style.transform = 'rotate(0) scale(1)'\r\n },\r\n }\r\n}\r\n","/**\r\n * Glitch Effect - Glitch efekti\r\n */\r\n\r\nimport type { SparkGlitchOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkGlitchOptions> = {\r\n duration: 300,\r\n color1: '#ff0000',\r\n color2: '#00ffff',\r\n trigger: 'hover',\r\n}\r\n\r\nexport function glitch(options?: SparkGlitchOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-glitch',\r\n style: {\r\n ...cssVars,\r\n '--spark-glitch-color1': opts.color1,\r\n '--spark-glitch-color2': opts.color2,\r\n position: 'relative',\r\n },\r\n }\r\n}\r\n","/**\r\n * Blur Effect - Bulanıklık efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkBlurOptions extends SparkBaseOptions {\r\n /** Blur amount in pixels (default: 5) */\r\n amount?: number\r\n}\r\n\r\nconst defaultOptions: Partial<SparkBlurOptions> = {\r\n duration: 300,\r\n amount: 5,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function blur(options?: SparkBlurOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkBlurOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const blurAmount = applyIntensity(opts.amount ?? 5, opts.intensity)\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-blur',\r\n style: {\r\n ...cssVars,\r\n transition: `filter var(--spark-duration) var(--spark-easing)`,\r\n },\r\n onMouseEnter: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.filter = `blur(${blurAmount}px)`\r\n },\r\n onMouseLeave: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.filter = 'blur(0)'\r\n },\r\n }\r\n}\r\n","/**\r\n * Neon Effect - Neon ışık efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkNeonOptions extends SparkBaseOptions {\r\n /** Neon color (default: '#00ffff') */\r\n color?: string\r\n /** Flicker effect (default: false) */\r\n flicker?: boolean\r\n}\r\n\r\nconst defaultOptions: Partial<SparkNeonOptions> = {\r\n duration: 300,\r\n color: '#00ffff',\r\n flicker: false,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function neon(options?: SparkNeonOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkNeonOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const color = opts.color ?? '#00ffff'\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n const neonTextShadow = `\r\n 0 0 5px #fff,\r\n 0 0 10px #fff,\r\n 0 0 20px ${color},\r\n 0 0 40px ${color},\r\n 0 0 80px ${color}\r\n `\r\n\r\n const neonBoxShadow = `\r\n 0 0 5px ${color},\r\n 0 0 20px ${color},\r\n inset 0 0 10px ${color}\r\n `\r\n\r\n return {\r\n className: 'spark-effect spark-neon',\r\n style: {\r\n ...cssVars,\r\n '--spark-neon-color': color,\r\n transition: `text-shadow var(--spark-duration) var(--spark-easing), box-shadow var(--spark-duration) var(--spark-easing)`,\r\n },\r\n onMouseEnter: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.textShadow = neonTextShadow\r\n target.style.boxShadow = neonBoxShadow\r\n },\r\n onMouseLeave: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.textShadow = 'none'\r\n target.style.boxShadow = 'none'\r\n },\r\n }\r\n}\r\n","/**\r\n * Glass Effect - Glassmorphism efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkGlassOptions extends SparkBaseOptions {\r\n /** Blur amount (default: 10) */\r\n blur?: number\r\n /** Background opacity (default: 0.2) */\r\n opacity?: number\r\n /** Border opacity (default: 0.3) */\r\n borderOpacity?: number\r\n}\r\n\r\nconst defaultOptions: Partial<SparkGlassOptions> = {\r\n duration: 300,\r\n blur: 10,\r\n opacity: 0.2,\r\n borderOpacity: 0.3,\r\n trigger: 'always',\r\n}\r\n\r\nexport function glass(options?: SparkGlassOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkGlassOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const blurAmount = applyIntensity(opts.blur ?? 10, opts.intensity)\r\n const bgOpacity = opts.opacity ?? 0.2\r\n const borderOpacity = opts.borderOpacity ?? 0.3\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-glass',\r\n style: {\r\n ...cssVars,\r\n backdropFilter: `blur(${blurAmount}px)`,\r\n WebkitBackdropFilter: `blur(${blurAmount}px)`,\r\n background: `rgba(255, 255, 255, ${bgOpacity})`,\r\n border: `1px solid rgba(255, 255, 255, ${borderOpacity})`,\r\n boxShadow: '0 8px 32px 0 rgba(31, 38, 135, 0.37)',\r\n },\r\n }\r\n}\r\n","/**\r\n * Shimmer Effect - Parıldama efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkBaseOptions> = {\r\n duration: 1500,\r\n trigger: 'always',\r\n}\r\n\r\nexport function shimmer(options?: SparkBaseOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-shimmer',\r\n style: {\r\n ...cssVars,\r\n },\r\n }\r\n}\r\n","/**\r\n * Gradient Effect - Gradient animasyonu efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, injectAnimation, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkGradientOptions extends SparkBaseOptions {\r\n /** Gradient colors (default: ['#ee7752', '#e73c7e', '#23a6d5', '#23d5ab']) */\r\n colors?: string[]\r\n /** Animation direction (default: 'diagonal') */\r\n direction?: 'horizontal' | 'vertical' | 'diagonal'\r\n}\r\n\r\nconst defaultOptions: Partial<SparkGradientOptions> = {\r\n duration: 5000,\r\n colors: ['#ee7752', '#e73c7e', '#23a6d5', '#23d5ab'],\r\n direction: 'diagonal',\r\n trigger: 'always',\r\n}\r\n\r\nexport function gradient(options?: SparkGradientOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkGradientOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const colors = opts.colors ?? defaultOptions.colors!\r\n const animationName = 'spark-gradient'\r\n\r\n injectAnimation(animationName, `\r\n 0% { background-position: 0% 50%; }\r\n 50% { background-position: 100% 50%; }\r\n 100% { background-position: 0% 50%; }\r\n `)\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: 'ease',\r\n })\r\n\r\n const gradientDirection = opts.direction === 'horizontal' ? '90deg' :\r\n opts.direction === 'vertical' ? '180deg' : '45deg'\r\n\r\n return {\r\n className: 'spark-effect spark-gradient',\r\n style: {\r\n ...cssVars,\r\n background: `linear-gradient(${gradientDirection}, ${colors.join(', ')})`,\r\n backgroundSize: '400% 400%',\r\n animation: `${animationName} ${opts.duration}ms ease infinite`,\r\n },\r\n }\r\n}\r\n","/**\r\n * Spotlight Effect - Spotlight takip efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, getRelativeMousePosition, throttle } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkSpotlightOptions extends SparkBaseOptions {\r\n /** Spotlight size (default: 200) */\r\n size?: number\r\n /** Spotlight color (default: 'rgba(255,255,255,0.15)') */\r\n color?: string\r\n}\r\n\r\nconst defaultOptions: Partial<SparkSpotlightOptions> = {\r\n duration: 0,\r\n size: 200,\r\n color: 'rgba(255,255,255,0.15)',\r\n trigger: 'hover',\r\n}\r\n\r\nexport function spotlight(options?: SparkSpotlightOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkSpotlightOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const size = opts.size ?? 200\r\n const color = opts.color ?? 'rgba(255,255,255,0.15)'\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n let overlayEl: HTMLElement | null = null\r\n\r\n const handleMouseMove = throttle((e: MouseEvent) => {\r\n if (!overlayEl) return\r\n const target = e.currentTarget as HTMLElement\r\n const { x, y } = getRelativeMousePosition(e, target)\r\n\r\n overlayEl.style.background = `\r\n radial-gradient(\r\n circle ${size}px at ${x}px ${y}px,\r\n ${color} 0%,\r\n transparent 100%\r\n )\r\n `\r\n }, 16)\r\n\r\n const handleMouseEnter = (e: MouseEvent) => {\r\n const target = e.currentTarget as HTMLElement\r\n\r\n overlayEl = document.createElement('div')\r\n overlayEl.style.cssText = `\r\n position: absolute;\r\n inset: 0;\r\n pointer-events: none;\r\n border-radius: inherit;\r\n `\r\n target.style.position = 'relative'\r\n target.appendChild(overlayEl)\r\n }\r\n\r\n const handleMouseLeave = () => {\r\n if (overlayEl) {\r\n overlayEl.remove()\r\n overlayEl = null\r\n }\r\n }\r\n\r\n return {\r\n className: 'spark-effect spark-spotlight',\r\n style: {\r\n ...cssVars,\r\n position: 'relative',\r\n overflow: 'hidden',\r\n },\r\n onMouseEnter: handleMouseEnter,\r\n onMouseMove: handleMouseMove,\r\n onMouseLeave: handleMouseLeave,\r\n }\r\n}\r\n","/**\r\n * Hologram Effect - Hologram efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkBaseOptions> = {\r\n duration: 3000,\r\n trigger: 'always',\r\n}\r\n\r\nexport function hologram(options?: SparkBaseOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-hologram',\r\n style: cssVars,\r\n }\r\n}\r\n","/**\r\n * Confetti Effect - Konfeti patlaması efekti\r\n */\r\n\r\nimport type { SparkConfettiOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, random, randomItem } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkConfettiOptions> = {\r\n duration: 3000,\r\n count: 30,\r\n colors: ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#ff00ff', '#00ffff'],\r\n spread: 60,\r\n trigger: 'click',\r\n}\r\n\r\nexport function confetti(options?: SparkConfettiOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n })\r\n\r\n const createConfetti = (e: MouseEvent) => {\r\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect()\r\n const originX = rect.left + rect.width / 2\r\n const originY = rect.top + rect.height / 2\r\n\r\n const container = document.createElement('div')\r\n container.className = 'spark-confetti-container'\r\n document.body.appendChild(container)\r\n\r\n for (let i = 0; i < opts.count; i++) {\r\n const particle = document.createElement('div')\r\n particle.className = 'spark-confetti-particle'\r\n\r\n const angle = random(-opts.spread, opts.spread) * (Math.PI / 180)\r\n const velocity = random(200, 400)\r\n const size = random(5, 10)\r\n const color = randomItem(opts.colors ?? defaultOptions.colors!)\r\n\r\n const startX = originX + random(-20, 20)\r\n const startY = originY\r\n const endX = startX + Math.sin(angle) * velocity\r\n const duration = random(2000, 4000)\r\n\r\n particle.style.cssText = `\r\n left: ${startX}px;\r\n top: ${startY}px;\r\n width: ${size}px;\r\n height: ${size}px;\r\n background: ${color};\r\n --spark-duration: ${duration}ms;\r\n transform: translateX(${endX - startX}px);\r\n border-radius: ${random(0, 50)}%;\r\n `\r\n\r\n container.appendChild(particle)\r\n }\r\n\r\n setTimeout(() => {\r\n container.remove()\r\n }, opts.duration + 1000)\r\n }\r\n\r\n return {\r\n className: 'spark-effect spark-confetti-trigger',\r\n style: cssVars,\r\n onClick: createConfetti,\r\n }\r\n}\r\n","/**\r\n * Sparkle Effect - Yıldız parıltısı efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, random, generateId } from '../../core/engine'\r\nimport { injectBaseStyles, injectAnimation, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkSparkleOptions extends SparkBaseOptions {\r\n /** Number of sparkles (default: 10) */\r\n count?: number\r\n /** Sparkle color (default: '#FFD700') */\r\n color?: string\r\n}\r\n\r\nconst defaultOptions: Partial<SparkSparkleOptions> = {\r\n duration: 1500,\r\n count: 10,\r\n color: '#FFD700',\r\n trigger: 'hover',\r\n}\r\n\r\nexport function sparkle(options?: SparkSparkleOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkSparkleOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const animationName = 'spark-sparkle'\r\n\r\n injectAnimation(animationName, `\r\n 0%, 100% { opacity: 0; transform: scale(0) rotate(0deg); }\r\n 50% { opacity: 1; transform: scale(1) rotate(180deg); }\r\n `)\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n let intervalId: ReturnType<typeof setInterval> | null = null\r\n let containerEl: HTMLElement | null = null\r\n\r\n const createSparkle = (container: HTMLElement) => {\r\n const sparkleEl = document.createElement('span')\r\n sparkleEl.innerHTML = '✦'\r\n sparkleEl.style.cssText = `\r\n position: absolute;\r\n left: ${random(0, 100)}%;\r\n top: ${random(0, 100)}%;\r\n color: ${opts.color};\r\n font-size: ${random(8, 16)}px;\r\n pointer-events: none;\r\n animation: ${animationName} ${opts.duration}ms ease-in-out;\r\n `\r\n container.appendChild(sparkleEl)\r\n\r\n setTimeout(() => {\r\n sparkleEl.remove()\r\n }, opts.duration)\r\n }\r\n\r\n const handleMouseEnter = (e: MouseEvent) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.position = 'relative'\r\n\r\n containerEl = document.createElement('div')\r\n containerEl.style.cssText = `\r\n position: absolute;\r\n inset: 0;\r\n pointer-events: none;\r\n overflow: visible;\r\n `\r\n target.appendChild(containerEl)\r\n\r\n // Create initial sparkles\r\n for (let i = 0; i < (opts.count ?? 10) / 2; i++) {\r\n setTimeout(() => {\r\n if (containerEl) createSparkle(containerEl)\r\n }, random(0, 300))\r\n }\r\n\r\n // Continue creating sparkles\r\n intervalId = setInterval(() => {\r\n if (containerEl) createSparkle(containerEl)\r\n }, opts.duration / (opts.count ?? 10))\r\n }\r\n\r\n const handleMouseLeave = () => {\r\n if (intervalId) {\r\n clearInterval(intervalId)\r\n intervalId = null\r\n }\r\n if (containerEl) {\r\n setTimeout(() => {\r\n containerEl?.remove()\r\n containerEl = null\r\n }, opts.duration)\r\n }\r\n }\r\n\r\n return {\r\n className: 'spark-effect spark-sparkle',\r\n style: cssVars,\r\n onMouseEnter: handleMouseEnter,\r\n onMouseLeave: handleMouseLeave,\r\n }\r\n}\r\n","/**\r\n * Firework Effect - Havai fişek efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, random, randomItem } from '../../core/engine'\r\nimport { injectBaseStyles, injectAnimation, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkFireworkOptions extends SparkBaseOptions {\r\n /** Number of particles (default: 30) */\r\n count?: number\r\n /** Particle colors */\r\n colors?: string[]\r\n}\r\n\r\nconst defaultOptions: Partial<SparkFireworkOptions> = {\r\n duration: 1500,\r\n count: 30,\r\n colors: ['#ff0', '#f0f', '#0ff', '#ff0000', '#00ff00'],\r\n trigger: 'click',\r\n}\r\n\r\nexport function firework(options?: SparkFireworkOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkFireworkOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n })\r\n\r\n const createFirework = (e: MouseEvent) => {\r\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect()\r\n const originX = e.clientX\r\n const originY = e.clientY\r\n\r\n const container = document.createElement('div')\r\n container.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n z-index: 9999;\r\n `\r\n document.body.appendChild(container)\r\n\r\n const colors = opts.colors ?? defaultOptions.colors!\r\n const count = opts.count ?? 30\r\n\r\n for (let i = 0; i < count; i++) {\r\n const particle = document.createElement('div')\r\n const angle = (i / count) * Math.PI * 2\r\n const velocity = random(50, 150)\r\n const size = random(3, 6)\r\n const color = randomItem(colors)\r\n\r\n const endX = Math.cos(angle) * velocity\r\n const endY = Math.sin(angle) * velocity\r\n\r\n particle.style.cssText = `\r\n position: absolute;\r\n left: ${originX}px;\r\n top: ${originY}px;\r\n width: ${size}px;\r\n height: ${size}px;\r\n background: ${color};\r\n border-radius: 50%;\r\n box-shadow: 0 0 ${size * 2}px ${color};\r\n animation: spark-firework-particle ${opts.duration}ms ease-out forwards;\r\n --end-x: ${endX}px;\r\n --end-y: ${endY}px;\r\n `\r\n\r\n container.appendChild(particle)\r\n }\r\n\r\n // Add animation if not exists\r\n injectAnimation('spark-firework-particle', `\r\n 0% { \r\n transform: translate(0, 0) scale(1); \r\n opacity: 1; \r\n }\r\n 100% { \r\n transform: translate(var(--end-x), calc(var(--end-y) + 30px)) scale(0); \r\n opacity: 0; \r\n }\r\n `)\r\n\r\n setTimeout(() => {\r\n container.remove()\r\n }, opts.duration + 100)\r\n }\r\n\r\n return {\r\n className: 'spark-effect spark-firework-trigger',\r\n style: cssVars,\r\n onClick: createFirework,\r\n }\r\n}\r\n","/**\r\n * Celebrate Effect - Kutlama combo efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\nimport { confetti } from './confetti'\r\nimport { sparkle } from './sparkle'\r\n\r\nconst defaultOptions: Partial<SparkBaseOptions> = {\r\n duration: 3000,\r\n trigger: 'click',\r\n}\r\n\r\nexport function celebrate(options?: SparkBaseOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n })\r\n\r\n const confettiResult = confetti({ ...opts, trigger: 'click' })\r\n const sparkleResult = sparkle({ ...opts, trigger: 'hover' })\r\n\r\n return {\r\n className: 'spark-effect spark-celebrate',\r\n style: cssVars,\r\n onClick: (e) => {\r\n confettiResult.onClick?.(e)\r\n },\r\n onMouseEnter: (e) => {\r\n sparkleResult.onMouseEnter?.(e)\r\n },\r\n onMouseLeave: (e) => {\r\n sparkleResult.onMouseLeave?.(e)\r\n },\r\n }\r\n}\r\n","/**\r\n * Typewriter Effect - Yazı makinesi efekti\r\n */\r\n\r\nimport type { SparkTypewriterOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\nconst defaultOptions: Partial<SparkTypewriterOptions> = {\r\n duration: 2000,\r\n speed: 50,\r\n cursor: '|',\r\n loop: false,\r\n trigger: 'appear',\r\n}\r\n\r\nexport function typewriter(options?: SparkTypewriterOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions)\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n // This effect requires manual initialization\r\n // Returns a function that should be called with the element\r\n return {\r\n className: 'spark-effect spark-typewriter',\r\n style: cssVars,\r\n }\r\n}\r\n\r\n/**\r\n * Initialize typewriter effect on an element\r\n */\r\nexport function initTypewriter(\r\n element: HTMLElement,\r\n options?: SparkTypewriterOptions\r\n): () => void {\r\n const opts = { ...defaultOptions, ...options }\r\n\r\n const originalText = element.textContent || ''\r\n let currentIndex = 0\r\n let intervalId: ReturnType<typeof setInterval> | null = null\r\n\r\n const type = () => {\r\n if (currentIndex <= originalText.length) {\r\n element.textContent = originalText.slice(0, currentIndex) + (opts.cursor ?? '|')\r\n currentIndex++\r\n } else if (opts.loop) {\r\n currentIndex = 0\r\n } else if (intervalId) {\r\n clearInterval(intervalId)\r\n element.textContent = originalText\r\n }\r\n }\r\n\r\n element.textContent = opts.cursor ?? '|'\r\n intervalId = setInterval(type, opts.speed)\r\n\r\n return () => {\r\n if (intervalId) {\r\n clearInterval(intervalId)\r\n }\r\n element.textContent = originalText\r\n }\r\n}\r\n","/**\r\n * Scramble Effect - Harf karıştırma efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, random } from '../../core/engine'\r\nimport { injectBaseStyles, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkScrambleOptions extends SparkBaseOptions {\r\n /** Characters to use for scrambling */\r\n characters?: string\r\n /** Number of iterations (default: 10) */\r\n iterations?: number\r\n}\r\n\r\nconst defaultOptions: Partial<SparkScrambleOptions> = {\r\n duration: 800,\r\n characters: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*',\r\n iterations: 10,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function scramble(options?: SparkScrambleOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkScrambleOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n let isAnimating = false\r\n let originalText = ''\r\n\r\n const handleMouseEnter = (e: MouseEvent) => {\r\n if (isAnimating) return\r\n\r\n const target = e.currentTarget as HTMLElement\r\n originalText = target.textContent || ''\r\n isAnimating = true\r\n\r\n const chars = opts.characters ?? defaultOptions.characters!\r\n const iterations = opts.iterations ?? 10\r\n const interval = opts.duration / iterations\r\n let currentIteration = 0\r\n\r\n const scrambleInterval = setInterval(() => {\r\n if (currentIteration >= iterations) {\r\n target.textContent = originalText\r\n isAnimating = false\r\n clearInterval(scrambleInterval)\r\n return\r\n }\r\n\r\n const progress = currentIteration / iterations\r\n let scrambled = ''\r\n\r\n for (let i = 0; i < originalText.length; i++) {\r\n if (originalText[i] === ' ') {\r\n scrambled += ' '\r\n } else if (Math.random() > progress) {\r\n scrambled += chars[Math.floor(random(0, chars.length))]\r\n } else {\r\n scrambled += originalText[i]\r\n }\r\n }\r\n\r\n target.textContent = scrambled\r\n currentIteration++\r\n }, interval)\r\n }\r\n\r\n return {\r\n className: 'spark-effect spark-scramble',\r\n style: cssVars,\r\n onMouseEnter: handleMouseEnter,\r\n }\r\n}\r\n","/**\r\n * Wave Effect - Dalga animasyonu efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate, applyIntensity } from '../../core/engine'\r\nimport { injectBaseStyles, injectAnimation, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkWaveOptions extends SparkBaseOptions {\r\n /** Wave height in pixels (default: 10) */\r\n height?: number\r\n}\r\n\r\nconst defaultOptions: Partial<SparkWaveOptions> = {\r\n duration: 1000,\r\n height: 10,\r\n trigger: 'hover',\r\n}\r\n\r\nexport function wave(options?: SparkWaveOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkWaveOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const height = applyIntensity(opts.height ?? 10, opts.intensity)\r\n const animationName = 'spark-wave'\r\n\r\n injectAnimation(animationName, `\r\n 0%, 100% { transform: translateY(0); }\r\n 50% { transform: translateY(-${height}px); }\r\n `)\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: 'ease-in-out',\r\n })\r\n\r\n const handleMouseEnter = (e: MouseEvent) => {\r\n const target = e.currentTarget as HTMLElement\r\n const text = target.textContent || ''\r\n\r\n // Wrap each character in a span\r\n target.innerHTML = text\r\n .split('')\r\n .map((char, i) => {\r\n if (char === ' ') return ' '\r\n const delay = i * 50\r\n return `<span style=\"display:inline-block;animation:${animationName} ${opts.duration}ms ease-in-out ${delay}ms\">${char}</span>`\r\n })\r\n .join('')\r\n }\r\n\r\n const handleMouseLeave = (e: MouseEvent) => {\r\n const target = e.currentTarget as HTMLElement\r\n const text = target.textContent || ''\r\n target.textContent = text\r\n }\r\n\r\n return {\r\n className: 'spark-effect spark-wave',\r\n style: {\r\n ...cssVars,\r\n display: 'inline-block',\r\n },\r\n onMouseEnter: handleMouseEnter,\r\n onMouseLeave: handleMouseLeave,\r\n }\r\n}\r\n","/**\r\n * Highlight Effect - Highlight sweep efekti\r\n */\r\n\r\nimport type { SparkBaseOptions, SparkResult } from '../../core/types'\r\nimport { mergeOptions, shouldAnimate } from '../../core/engine'\r\nimport { injectBaseStyles, injectAnimation, generateCSSVars } from '../../core/styles'\r\n\r\ninterface SparkHighlightOptions extends SparkBaseOptions {\r\n /** Highlight color (default: '#ffff00') */\r\n color?: string\r\n}\r\n\r\nconst defaultOptions: Partial<SparkHighlightOptions> = {\r\n duration: 600,\r\n color: 'rgba(255, 255, 0, 0.4)',\r\n trigger: 'hover',\r\n}\r\n\r\nexport function highlight(options?: SparkHighlightOptions): SparkResult {\r\n const opts = mergeOptions(options, defaultOptions) as typeof opts & SparkHighlightOptions\r\n\r\n injectBaseStyles()\r\n\r\n if (!shouldAnimate(opts)) {\r\n return { className: 'spark-effect spark-reduced-motion' }\r\n }\r\n\r\n const color = opts.color ?? 'rgba(255, 255, 0, 0.4)'\r\n const animationName = 'spark-highlight-sweep'\r\n\r\n injectAnimation(animationName, `\r\n 0% { background-position: -100% 0; }\r\n 100% { background-position: 200% 0; }\r\n `)\r\n\r\n const cssVars = generateCSSVars({\r\n duration: opts.duration,\r\n easing: opts.easing,\r\n })\r\n\r\n return {\r\n className: 'spark-effect spark-highlight',\r\n style: {\r\n ...cssVars,\r\n backgroundImage: `linear-gradient(90deg, transparent 0%, ${color} 50%, transparent 100%)`,\r\n backgroundSize: '200% 100%',\r\n backgroundPosition: '-100% 0',\r\n transition: 'none',\r\n },\r\n onMouseEnter: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.animation = `${animationName} ${opts.duration}ms ease-out`\r\n },\r\n onMouseLeave: (e) => {\r\n const target = e.currentTarget as HTMLElement\r\n target.style.animation = ''\r\n },\r\n }\r\n}\r\n","/**\r\n * @lynch/spark - Main Entry Point\r\n * Premium micro-interactions for modern web applications\r\n */\r\n\r\n// Core exports\r\nexport * from './core/types'\r\nexport { injectBaseStyles, prefersReducedMotion } from './core/styles'\r\n\r\n// Basic effects\r\nexport { bounce } from './effects/basic/bounce'\r\nexport { pulse } from './effects/basic/pulse'\r\nexport { lift } from './effects/basic/lift'\r\nexport { scale } from './effects/basic/scale'\r\nexport { shake } from './effects/basic/shake'\r\nexport { fade } from './effects/basic/fade'\r\nexport { slide } from './effects/basic/slide'\r\nexport { rotate } from './effects/basic/rotate'\r\n\r\n// Premium effects\r\nexport { glow } from './effects/premium/glow'\r\nexport { ripple } from './effects/premium/ripple'\r\nexport { magnetic } from './effects/premium/magnetic'\r\nexport { tilt } from './effects/premium/tilt'\r\nexport { elastic } from './effects/premium/elastic'\r\nexport { jelly } from './effects/premium/jelly'\r\nexport { rubber } from './effects/premium/rubber'\r\nexport { morph } from './effects/premium/morph'\r\n\r\n// Visual effects\r\nexport { glitch } from './effects/visual/glitch'\r\nexport { blur } from './effects/visual/blur'\r\nexport { neon } from './effects/visual/neon'\r\nexport { glass } from './effects/visual/glass'\r\nexport { shimmer } from './effects/visual/shimmer'\r\nexport { gradient } from './effects/visual/gradient'\r\nexport { spotlight } from './effects/visual/spotlight'\r\nexport { hologram } from './effects/visual/hologram'\r\n\r\n// Celebration effects\r\nexport { confetti } from './effects/celebration/confetti'\r\nexport { sparkle } from './effects/celebration/sparkle'\r\nexport { firework } from './effects/celebration/firework'\r\nexport { celebrate } from './effects/celebration/celebrate'\r\n\r\n// Text effects\r\nexport { typewriter, initTypewriter } from './effects/text/typewriter'\r\nexport { scramble } from './effects/text/scramble'\r\nexport { wave } from './effects/text/wave'\r\nexport { highlight } from './effects/text/highlight'\r\n\r\n// Convenience object with all effects\r\nimport { bounce } from './effects/basic/bounce'\r\nimport { pulse } from './effects/basic/pulse'\r\nimport { lift } from './effects/basic/lift'\r\nimport { scale } from './effects/basic/scale'\r\nimport { shake } from './effects/basic/shake'\r\nimport { fade } from './effects/basic/fade'\r\nimport { slide } from './effects/basic/slide'\r\nimport { rotate } from './effects/basic/rotate'\r\nimport { glow } from './effects/premium/glow'\r\nimport { ripple } from './effects/premium/ripple'\r\nimport { magnetic } from './effects/premium/magnetic'\r\nimport { tilt } from './effects/premium/tilt'\r\nimport { elastic } from './effects/premium/elastic'\r\nimport { jelly } from './effects/premium/jelly'\r\nimport { rubber } from './effects/premium/rubber'\r\nimport { morph } from './effects/premium/morph'\r\nimport { glitch } from './effects/visual/glitch'\r\nimport { blur } from './effects/visual/blur'\r\nimport { neon } from './effects/visual/neon'\r\nimport { glass } from './effects/visual/glass'\r\nimport { shimmer } from './effects/visual/shimmer'\r\nimport { gradient } from './effects/visual/gradient'\r\nimport { spotlight } from './effects/visual/spotlight'\r\nimport { hologram } from './effects/visual/hologram'\r\nimport { confetti } from './effects/celebration/confetti'\r\nimport { sparkle } from './effects/celebration/sparkle'\r\nimport { firework } from './effects/celebration/firework'\r\nimport { celebrate } from './effects/celebration/celebrate'\r\nimport { typewriter } from './effects/text/typewriter'\r\nimport { scramble } from './effects/text/scramble'\r\nimport { wave } from './effects/text/wave'\r\nimport { highlight } from './effects/text/highlight'\r\n\r\n/**\r\n * Main spark object with all effects\r\n * @example\r\n * import { spark } from '@lynch/spark'\r\n * <button {...spark.bounce()}>Click me</button>\r\n */\r\nexport const spark = {\r\n // Basic\r\n bounce,\r\n pulse,\r\n lift,\r\n scale,\r\n shake,\r\n fade,\r\n slide,\r\n rotate,\r\n // Premium\r\n glow,\r\n ripple,\r\n magnetic,\r\n tilt,\r\n elastic,\r\n jelly,\r\n rubber,\r\n morph,\r\n // Visual\r\n glitch,\r\n blur,\r\n neon,\r\n glass,\r\n shimmer,\r\n gradient,\r\n spotlight,\r\n hologram,\r\n // Celebration\r\n confetti,\r\n sparkle,\r\n firework,\r\n celebrate,\r\n // Text\r\n typewriter,\r\n scramble,\r\n wave,\r\n highlight,\r\n} as const\r\n\r\nexport default spark\r\n"]}