use-scroll-animate 1.5.0 → 2.0.1

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.
Files changed (66) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +145 -10
  3. package/README_ja.md +57 -1
  4. package/README_zh.md +68 -1
  5. package/dist/{index.esm.js → chunks/core-BP-a1iNc.js} +297 -404
  6. package/dist/chunks/core-BP-a1iNc.js.map +1 -0
  7. package/dist/{index.mjs → chunks/core-B_J4rXbC.cjs} +312 -404
  8. package/dist/chunks/core-B_J4rXbC.cjs.map +1 -0
  9. package/dist/chunks/stagger-DHw0ExuR.cjs +86 -0
  10. package/dist/chunks/stagger-DHw0ExuR.cjs.map +1 -0
  11. package/dist/chunks/stagger-DTv_WiUQ.js +84 -0
  12. package/dist/chunks/stagger-DTv_WiUQ.js.map +1 -0
  13. package/dist/element.cjs +97 -0
  14. package/dist/element.cjs.map +1 -0
  15. package/dist/{types/types.d.ts → element.d.cts} +73 -10
  16. package/dist/element.d.ts +216 -0
  17. package/dist/element.js +95 -0
  18. package/dist/element.js.map +1 -0
  19. package/dist/element.umd.js +2 -0
  20. package/dist/element.umd.js.map +1 -0
  21. package/dist/index.cjs +241 -0
  22. package/dist/index.cjs.map +1 -0
  23. package/dist/{index.d.mts → index.d.cts} +84 -51
  24. package/dist/index.d.ts +84 -51
  25. package/dist/index.js +98 -1133
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.umd.js +5 -3
  28. package/dist/index.umd.js.map +1 -1
  29. package/dist/react.cjs +67 -0
  30. package/dist/react.cjs.map +1 -0
  31. package/dist/react.d.cts +159 -0
  32. package/dist/react.d.ts +159 -0
  33. package/dist/react.js +64 -0
  34. package/dist/react.js.map +1 -0
  35. package/dist/solid.cjs +62 -0
  36. package/dist/solid.cjs.map +1 -0
  37. package/dist/solid.d.cts +245 -0
  38. package/dist/solid.d.ts +245 -0
  39. package/dist/solid.js +58 -0
  40. package/dist/solid.js.map +1 -0
  41. package/dist/svelte.cjs +65 -0
  42. package/dist/svelte.cjs.map +1 -0
  43. package/dist/svelte.d.cts +244 -0
  44. package/dist/svelte.d.ts +244 -0
  45. package/dist/svelte.js +62 -0
  46. package/dist/svelte.js.map +1 -0
  47. package/dist/vue.cjs +61 -0
  48. package/dist/vue.cjs.map +1 -0
  49. package/dist/vue.d.cts +159 -0
  50. package/dist/vue.d.ts +159 -0
  51. package/dist/vue.js +59 -0
  52. package/dist/vue.js.map +1 -0
  53. package/docs/API.md +139 -0
  54. package/docs/deprecations.md +20 -0
  55. package/docs/migration-from-aos.md +67 -0
  56. package/docs/migration-from-gsap-scrolltrigger.md +80 -0
  57. package/package.json +86 -15
  58. package/dist/index.esm.js.map +0 -1
  59. package/dist/index.mjs.map +0 -1
  60. package/dist/types/core.d.ts +0 -41
  61. package/dist/types/index.d.ts +0 -36
  62. package/dist/types/presets.d.ts +0 -15
  63. package/dist/types/react.d.ts +0 -29
  64. package/dist/types/sequence.d.ts +0 -38
  65. package/dist/types/stagger.d.ts +0 -25
  66. package/dist/types/vue.d.ts +0 -28
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/presets.ts","../src/core.ts","../src/stagger.ts","../src/sequence.ts","../src/react.ts","../src/vue.ts","../src/index.ts"],"sourcesContent":["/**\n * use-scroll-animate - Animation Presets\n * Defines keyframes for all built-in animation presets\n */\n\nimport type { AnimationPreset, CustomAnimation, EasingType } from './types';\n\ntype KeyframeMap = {\n from: Record<string, string | number>;\n to: Record<string, string | number>;\n};\n\nexport const PRESETS: Record<AnimationPreset, KeyframeMap> = {\n 'fade-in': {\n from: { opacity: 0 },\n to: { opacity: 1 },\n },\n 'fade-in-up': {\n from: { opacity: 0, transform: 'translateY(40px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'fade-in-down': {\n from: { opacity: 0, transform: 'translateY(-40px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'fade-in-left': {\n from: { opacity: 0, transform: 'translateX(-40px)' },\n to: { opacity: 1, transform: 'translateX(0px)' },\n },\n 'fade-in-right': {\n from: { opacity: 0, transform: 'translateX(40px)' },\n to: { opacity: 1, transform: 'translateX(0px)' },\n },\n 'zoom-in': {\n from: { opacity: 0, transform: 'scale(0.8)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'zoom-out': {\n from: { opacity: 0, transform: 'scale(1.2)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'flip-x': {\n from: { opacity: 0, transform: 'rotateX(-90deg)' },\n to: { opacity: 1, transform: 'rotateX(0deg)' },\n },\n 'flip-y': {\n from: { opacity: 0, transform: 'rotateY(-90deg)' },\n to: { opacity: 1, transform: 'rotateY(0deg)' },\n },\n 'slide-up': {\n from: { transform: 'translateY(100%)' },\n to: { transform: 'translateY(0px)' },\n },\n 'slide-down': {\n from: { transform: 'translateY(-100%)' },\n to: { transform: 'translateY(0px)' },\n },\n 'slide-left': {\n from: { transform: 'translateX(-100%)' },\n to: { transform: 'translateX(0px)' },\n },\n 'slide-right': {\n from: { transform: 'translateX(100%)' },\n to: { transform: 'translateX(0px)' },\n },\n 'bounce': {\n from: { opacity: 0, transform: 'translateY(-60px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'rotate-in': {\n from: { opacity: 0, transform: 'rotate(-180deg) scale(0.5)' },\n to: { opacity: 1, transform: 'rotate(0deg) scale(1)' },\n },\n 'blur-in': {\n from: { opacity: 0, filter: 'blur(12px)' },\n to: { opacity: 1, filter: 'blur(0px)' },\n },\n 'skew-in': {\n from: { opacity: 0, transform: 'skewX(20deg) translateX(30px)' },\n to: { opacity: 1, transform: 'skewX(0deg) translateX(0px)' },\n },\n 'scale-x': {\n from: { transform: 'scaleX(0)' },\n to: { transform: 'scaleX(1)' },\n },\n 'scale-y': {\n from: { transform: 'scaleY(0)' },\n to: { transform: 'scaleY(1)' },\n },\n 'shimmer': {\n from: { opacity: 0.5, filter: 'brightness(1)' },\n to: { opacity: 1, filter: 'brightness(1.5)' },\n },\n 'pulse': {\n from: { transform: 'scale(1)' },\n to: { transform: 'scale(1.05)' },\n },\n 'swing': {\n from: { transform: 'rotate(-10deg)' },\n to: { transform: 'rotate(10deg)' },\n },\n 'scale-up': {\n from: { opacity: 0, transform: 'scale(0.5)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'blur-in-up': {\n from: { opacity: 0, filter: 'blur(12px)', transform: 'translateY(40px)' },\n to: { opacity: 1, filter: 'blur(0px)', transform: 'translateY(0px)' },\n },\n 'flip-up': {\n from: { opacity: 0, transform: 'perspective(800px) rotateX(60deg)' },\n to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' },\n },\n 'flip-down': {\n from: { opacity: 0, transform: 'perspective(800px) rotateX(-60deg)' },\n to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' },\n },\n 'rotate-left': {\n from: { opacity: 0, transform: 'rotate(-15deg) translateX(-40px)' },\n to: { opacity: 1, transform: 'rotate(0deg) translateX(0px)' },\n },\n 'rotate-right': {\n from: { opacity: 0, transform: 'rotate(15deg) translateX(40px)' },\n to: { opacity: 1, transform: 'rotate(0deg) translateX(0px)' },\n },\n // clip-path reveals: content is uncovered without moving or fading\n 'clip-up': {\n from: { clipPath: 'inset(100% 0% 0% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-down': {\n from: { clipPath: 'inset(0% 0% 100% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-left': {\n from: { clipPath: 'inset(0% 0% 0% 100%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-right': {\n from: { clipPath: 'inset(0% 100% 0% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-circle': {\n from: { clipPath: 'circle(0% at 50% 50%)' },\n to: { clipPath: 'circle(75% at 50% 50%)' },\n },\n};\n\nexport function resolvePreset(animation: AnimationPreset | AnimationPreset[] | CustomAnimation): KeyframeMap {\n if (typeof animation === 'string') {\n return PRESETS[animation.trim() as AnimationPreset] ?? PRESETS['fade-in-up'];\n }\n \n if (Array.isArray(animation)) {\n const combined: KeyframeMap = { from: {}, to: {} };\n animation.forEach(name => {\n const preset = PRESETS[name.trim() as AnimationPreset];\n if (preset) {\n Object.entries(preset.from).forEach(([key, val]) => {\n if (key === 'transform' && combined.from[key]) {\n combined.from[key] = `${combined.from[key]} ${val}`;\n } else {\n combined.from[key] = val;\n }\n });\n Object.entries(preset.to).forEach(([key, val]) => {\n if (key === 'transform' && combined.to[key]) {\n combined.to[key] = `${combined.to[key]} ${val}`;\n } else {\n combined.to[key] = val;\n }\n });\n }\n });\n return combined;\n }\n \n return animation;\n}\n\n/** Easing to CSS cubic-bezier mapping */\nexport const EASING_MAP: Record<string, string> = {\n linear: 'linear',\n ease: 'ease',\n 'ease-in': 'ease-in',\n 'ease-out': 'ease-out',\n 'ease-in-out': 'ease-in-out',\n spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n 'soft-spring': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n 'heavy-bounce': 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\n};\n\nexport function resolveEasing(easing: EasingType): string {\n if (typeof easing === 'string') {\n return EASING_MAP[easing] ?? easing;\n }\n if (Array.isArray(easing)) {\n return `cubic-bezier(${easing.join(', ')})`;\n }\n if (typeof easing === 'function') {\n // Functions cannot be expressed as a CSS easing string; the core samples\n // them into a `linear()` easing (or keyframes on older browsers).\n return 'linear';\n }\n return 'ease';\n}\n","/**\n * use-scroll-animate - Core Implementation\n * Uses IntersectionObserver + Web Animations API for zero-dependency,\n * high-performance scroll-triggered animations.\n */\n\nimport type {\n AnimateOptions,\n AnimatedElement,\n ScrollAnimateConfig,\n ScrollAnimateInstance,\n ParallaxOptions,\n} from './types';\nimport { resolvePreset, resolveEasing } from './presets';\n\ntype KeyframeMap = ReturnType<typeof resolvePreset>;\ntype Target = string | Element | NodeList | Element[];\ntype Root = Element | Document | null;\n\nconst DEFAULT_CONFIG: Required<ScrollAnimateConfig> = {\n defaultAnimation: 'fade-in-up',\n defaultDuration: 600,\n defaultDelay: 0,\n defaultEasing: 'ease',\n defaultThreshold: 0.1,\n defaultRootMargin: '0px',\n defaultRepeat: false,\n defaultOnce: true,\n defaultOffset: 0,\n hiddenClass: 'sa-hidden',\n visibleClass: 'sa-visible',\n useClassNames: false,\n disabled: false,\n root: null,\n autoUnregister: true,\n};\n\nconst noop = () => undefined;\n\n/* ------------------------------------------------------------------ */\n/* Environment helpers (all SSR-safe: never touch globals at import) */\n/* ------------------------------------------------------------------ */\n\nconst hasDOM = (): boolean => typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/** @internal */\nexport const supportsObserver = (): boolean => hasDOM() && typeof IntersectionObserver !== 'undefined';\n\nlet reducedMotionQuery: MediaQueryList | null | undefined;\n\n/** @internal Whether the user asked the OS/browser to reduce motion. */\nexport function prefersReducedMotion(): boolean {\n if (!hasDOM()) return false;\n if (reducedMotionQuery === undefined) {\n reducedMotionQuery =\n typeof window.matchMedia === 'function' ? window.matchMedia('(prefers-reduced-motion: reduce)') : null;\n }\n return !!reducedMotionQuery && reducedMotionQuery.matches;\n}\n\n/* ------------------------------------------------------------------ */\n/* Option parsing */\n/* ------------------------------------------------------------------ */\n\nfunction num(value: string | undefined): number | undefined {\n if (value === undefined || value.trim() === '') return undefined;\n const n = parseFloat(value);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/** Numeric strings (\"100\") become numbers (px); strings with units stay as-is. */\nfunction lengthValue(value: string | undefined): string | number | undefined {\n if (value === undefined || value.trim() === '') return undefined;\n const v = value.trim();\n return /^-?(\\d+\\.?\\d*|\\.\\d+)$/.test(v) ? parseFloat(v) : v;\n}\n\nconst DEFAULT_PROGRESS_VAR = '--sa-progress';\n\n/** `''` (bare attribute) -> default name; `sa-progress` -> `--sa-progress`. */\nfunction normalizeVar(name: string): string {\n const v = name.trim();\n if (!v) return DEFAULT_PROGRESS_VAR;\n return v.startsWith('--') ? v : `--${v}`;\n}\n\nfunction parseDataAttributes(el: Element, config: Required<ScrollAnimateConfig>): Required<AnimateOptions> {\n const dataset = (el as HTMLElement).dataset || {};\n const opts: AnimateOptions = {};\n\n if (dataset.saAnimation) {\n const anim = dataset.saAnimation;\n opts.animation = (anim.includes(',') ? anim.split(',').map((s) => s.trim()) : anim.trim()) as any;\n }\n opts.duration = num(dataset.saDuration);\n opts.delay = num(dataset.saDelay);\n if (dataset.saEasing) {\n const e = dataset.saEasing.trim();\n if (e.startsWith('[')) {\n try {\n opts.easing = JSON.parse(e);\n } catch {\n // Malformed JSON: fall back to the default easing instead of throwing\n }\n } else {\n opts.easing = e;\n }\n }\n if (dataset.saThreshold) {\n const t = dataset.saThreshold;\n opts.threshold = t.includes(',')\n ? t.split(',').map(parseFloat).filter(Number.isFinite)\n : num(t);\n }\n if (dataset.saRootMargin) opts.rootMargin = dataset.saRootMargin;\n if (dataset.saRepeat !== undefined) opts.repeat = dataset.saRepeat !== 'false';\n if (dataset.saOnce !== undefined) opts.once = dataset.saOnce !== 'false';\n opts.offset = num(dataset.saOffset);\n opts.stagger = num(dataset.saStagger);\n if (dataset.saProgressVar !== undefined) opts.progressVar = normalizeVar(dataset.saProgressVar);\n if (dataset.saProgress) opts.progressMode = dataset.saProgress.trim() === 'scroll' ? 'scroll' : 'ratio';\n\n if (dataset.saParallaxX || dataset.saParallaxY || dataset.saParallaxRotate || dataset.saParallaxScale) {\n opts.parallax = {\n x: lengthValue(dataset.saParallaxX),\n y: lengthValue(dataset.saParallaxY),\n rotate: num(dataset.saParallaxRotate),\n scale: num(dataset.saParallaxScale),\n speed: num(dataset.saParallaxSpeed) ?? 1,\n };\n }\n\n return mergeOptions(opts, config);\n}\n\nfunction mergeOptions(opts: AnimateOptions, config: Required<ScrollAnimateConfig>): Required<AnimateOptions> {\n const repeat = opts.repeat ?? config.defaultRepeat;\n const threshold = opts.threshold ?? config.defaultThreshold;\n return {\n animation: opts.animation ?? config.defaultAnimation,\n duration: opts.duration ?? config.defaultDuration,\n delay: opts.delay ?? config.defaultDelay,\n easing: opts.easing ?? config.defaultEasing,\n threshold: Array.isArray(threshold) && threshold.length === 0 ? config.defaultThreshold : threshold,\n rootMargin: opts.rootMargin ?? config.defaultRootMargin,\n repeat,\n once: opts.once ?? (repeat ? false : config.defaultOnce),\n offset: opts.offset ?? config.defaultOffset,\n stagger: opts.stagger ?? 0,\n parallax: opts.parallax ?? {},\n onStart: opts.onStart ?? noop,\n onComplete: opts.onComplete ?? noop,\n onEnter: opts.onEnter ?? noop,\n onLeave: opts.onLeave ?? noop,\n onProgress: opts.onProgress ?? noop,\n progressMode: opts.progressMode ?? 'ratio',\n progressVar: opts.progressVar ? normalizeVar(opts.progressVar) : '',\n };\n}\n\nfunction resolveTargets(target: Target | null | undefined): Element[] {\n if (!target || !hasDOM()) return [];\n if (typeof target === 'string') return Array.from(document.querySelectorAll(target));\n if (target instanceof Element) return [target];\n if (Array.isArray(target) || target instanceof NodeList) {\n return (Array.from(target as ArrayLike<Node>) as Element[]).filter((el) => el instanceof Element);\n }\n return [];\n}\n\n/**\n * Apply `offset` to the bottom edge of a rootMargin, preserving the other\n * three sides. `offset: 100` means \"trigger 100px later\" (bottom -100px).\n * @internal\n */\nexport function applyOffset(rootMargin: string, offset: number): string {\n if (!offset) return rootMargin;\n const parts = (rootMargin || '0px').trim().split(/\\s+/);\n const top = parts[0];\n const right = parts[1] ?? top;\n const bottom = parts[2] ?? top;\n const left = parts[3] ?? right;\n const m = /^(-?\\d*\\.?\\d+)(px)?$/.exec(bottom);\n const base = m ? parseFloat(m[1]) : 0; // non-px bottoms (e.g. %) cannot be combined; offset wins\n return `${top} ${right} ${base - offset}px ${left}`;\n}\n\nfunction hasParallax(p: ParallaxOptions | undefined): boolean {\n return !!p && Object.keys(p).some((k) => (p as Record<string, unknown>)[k] !== undefined);\n}\n\nfunction needsProgress(opts: Required<AnimateOptions>): boolean {\n return hasParallax(opts.parallax) || opts.onProgress !== noop || !!opts.progressVar;\n}\n\n/**\n * True scroll progress of `el` through the viewport (or `root`): 0 when its top\n * edge reaches the bottom of the viewport, 1 when its bottom edge passes the top.\n * Works for elements taller than the viewport. Returns 0 without a DOM.\n */\nexport function getScrollProgress(el: Element, root?: Element | null): number {\n if (!hasDOM()) return 0;\n const rect = el.getBoundingClientRect();\n let top = 0;\n let height = window.innerHeight || document.documentElement.clientHeight || 0;\n if (root) {\n const r = root.getBoundingClientRect();\n top = r.top;\n height = r.height;\n }\n const total = height + rect.height;\n if (total <= 0) return 0;\n const p = (top + height - rect.top) / total;\n return p < 0 ? 0 : p > 1 ? 1 : p;\n}\n\n/* ------------------------------------------------------------------ */\n/* Animation */\n/* ------------------------------------------------------------------ */\n\n/** The animation currently running on an element, so it can be cancelled/replaced. */\nconst running = new WeakMap<Element, Animation>();\nconst timers = new WeakMap<Element, ReturnType<typeof setTimeout>>();\n\nfunction cancelRunning(el: Element): void {\n const anim = running.get(el);\n if (anim) {\n running.delete(el);\n anim.onfinish = null;\n anim.cancel();\n }\n const timer = timers.get(el);\n if (timer !== undefined) {\n clearTimeout(timer);\n timers.delete(el);\n }\n}\n\nfunction setStyles(el: Element, styles: Record<string, string | number>): void {\n const style = (el as HTMLElement).style;\n if (!style) return;\n Object.keys(styles).forEach((prop) => {\n (style as any)[prop] = String(styles[prop]);\n });\n}\n\nconst NUM_UNIT = /(-?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?)([a-z%]*)/gi;\n\n/**\n * Interpolate two CSS values at `t`. Numbers interpolate directly; strings\n * interpolate when they share the same structure (e.g. `translateY(40px)` ->\n * `translateY(0px)`, or `scale(0.8)` -> `scale(1)`). Otherwise snaps at 0.5.\n * @internal\n */\nexport function interpolateValue(from: string | number, to: string | number, t: number): string | number {\n if (typeof from === 'number' && typeof to === 'number') return from + (to - from) * t;\n const a = String(from);\n const b = String(to);\n const ta: Array<[number, string]> = [];\n const tb: Array<[number, string]> = [];\n const skA = a.replace(NUM_UNIT, (_, n, u) => (ta.push([parseFloat(n), u]), '#'));\n const skB = b.replace(NUM_UNIT, (_, n, u) => (tb.push([parseFloat(n), u]), '#'));\n if (skA !== skB || ta.length !== tb.length) return t < 0.5 ? from : to;\n let i = 0;\n let ok = true;\n const out = skA.replace(/#/g, () => {\n const [na, ua] = ta[i];\n const [nb, ub] = tb[i++];\n if (ua !== ub && na !== 0 && nb !== 0 && ua && ub) ok = false;\n const unit = ua || ub;\n return `${+(na + (nb - na) * t).toFixed(4)}${unit}`;\n });\n return ok ? out : t < 0.5 ? from : to;\n}\n\nconst EASING_SAMPLES = 30;\nlet linearSupported: boolean | undefined;\n\nfunction supportsLinearEasing(): boolean {\n if (linearSupported === undefined) {\n linearSupported =\n typeof CSS !== 'undefined' &&\n typeof CSS.supports === 'function' &&\n CSS.supports('animation-timing-function', 'linear(0, 1)');\n }\n return linearSupported;\n}\n\nfunction sampleEasing(fn: (t: number) => number): number[] {\n const values: number[] = [];\n for (let i = 0; i <= EASING_SAMPLES; i++) {\n const v = fn(i / EASING_SAMPLES);\n values.push(Number.isFinite(v) ? +v.toFixed(4) : i / EASING_SAMPLES);\n }\n return values;\n}\n\nfunction buildAnimation(\n preset: KeyframeMap,\n easing: Required<AnimateOptions>['easing']\n): { keyframes: Keyframe[]; easing: string } {\n if (typeof easing !== 'function') {\n return { keyframes: [preset.from as Keyframe, preset.to as Keyframe], easing: resolveEasing(easing) };\n }\n const samples = sampleEasing(easing);\n // Modern browsers: an exact, property-agnostic `linear()` easing curve.\n if (supportsLinearEasing()) {\n return { keyframes: [preset.from as Keyframe, preset.to as Keyframe], easing: `linear(${samples.join(', ')})` };\n }\n // Fallback: approximate the curve with interpolated keyframes.\n const props = Object.keys(preset.from).filter((p) => p in preset.to);\n const keyframes = samples.map((eased, i) => {\n const frame: Keyframe = { offset: i / EASING_SAMPLES };\n props.forEach((prop) => {\n frame[prop] = interpolateValue(preset.from[prop], preset.to[prop], eased);\n });\n return frame;\n });\n return { keyframes, easing: 'linear' };\n}\n\n/** Make an element visible without animating (reduced motion / disabled / no WAAPI). */\nfunction reveal(el: Element, config: Required<ScrollAnimateConfig>): void {\n cancelRunning(el);\n if (config.useClassNames) {\n el.classList.remove(config.hiddenClass);\n el.classList.add(config.visibleClass);\n } else {\n const style = (el as HTMLElement).style;\n if (style) style.opacity = '';\n }\n}\n\n/** @internal Cancel a running/pending animation and make the element visible. */\nexport function stopAnimation(el: Element, config: ScrollAnimateConfig = {}): void {\n reveal(el, { ...DEFAULT_CONFIG, ...config });\n}\n\n/** @internal Resolve a selector / Element / NodeList / Element[] to elements (SSR-safe). */\nexport { resolveTargets, hasDOM };\n\n/** @internal Whether animations should be skipped entirely. */\nexport function motionDisabled(config: Pick<ScrollAnimateConfig, 'disabled'>): boolean {\n return !!config.disabled || prefersReducedMotion();\n}\n\nfunction runAnimation(\n el: Element,\n opts: Required<AnimateOptions>,\n config: Required<ScrollAnimateConfig>,\n staggerIndex = 0\n): void {\n const { duration, delay, stagger, onStart, onComplete } = opts;\n const totalDelay = Math.max(0, delay + staggerIndex * stagger);\n cancelRunning(el);\n\n if (motionDisabled(config)) {\n reveal(el, config);\n onStart(el);\n onComplete(el);\n return;\n }\n\n if (config.useClassNames) {\n if (totalDelay > 0) (el as HTMLElement).style.animationDelay = `${totalDelay}ms`;\n el.classList.remove(config.hiddenClass);\n el.classList.add(config.visibleClass);\n onStart(el);\n timers.set(\n el,\n setTimeout(() => {\n timers.delete(el);\n onComplete(el);\n }, duration + totalDelay)\n );\n return;\n }\n\n const preset = resolvePreset(opts.animation);\n // Presets that don't animate opacity (slide-*, clip-*, scale-x, ...) would\n // otherwise stay at the `opacity: 0` applied while waiting to enter.\n if (!('opacity' in preset.to)) {\n const style = (el as HTMLElement).style;\n if (style && style.opacity === '0') style.opacity = '';\n }\n\n if (typeof el.animate !== 'function') {\n setStyles(el, preset.to);\n onStart(el);\n onComplete(el);\n return;\n }\n\n const built = buildAnimation(preset, opts.easing);\n const timing: KeyframeAnimationOptions = { duration, delay: totalDelay, easing: built.easing, fill: 'both' };\n let anim: Animation;\n try {\n anim = el.animate(built.keyframes, timing);\n } catch {\n // Invalid user easing string (WAAPI throws a TypeError): fall back to 'ease'\n anim = el.animate(built.keyframes, { ...timing, easing: 'ease' });\n }\n running.set(el, anim);\n onStart(el);\n anim.onfinish = () => {\n if (running.get(el) === anim) {\n running.delete(el);\n // Persist the end state inline and drop the filling animation. This frees\n // the Animation object and lets later inline styles (parallax, user code)\n // take effect instead of being masked by `fill: forwards`.\n try {\n anim.commitStyles();\n } catch {\n setStyles(el, preset.to);\n }\n anim.cancel();\n }\n onComplete(el);\n };\n}\n\nfunction applyParallax(el: Element, progress: number, parallax: ParallaxOptions): void {\n const { x = 0, y = 0, rotate = 0, scale = 1, speed = 1 } = parallax;\n const p = (progress - 0.5) * 2 * speed;\n const axis = (v: string | number) => (typeof v === 'number' ? `${v * p}px` : `calc(${v} * ${p})`);\n\n let transform = '';\n if (x) transform += ` translateX(${axis(x)})`;\n if (y) transform += ` translateY(${axis(y)})`;\n if (rotate) transform += ` rotate(${rotate * p}deg)`;\n if (scale !== 1) transform += ` scale(${1 + (scale - 1) * p})`;\n\n (el as HTMLElement).style.transform = transform.trim();\n}\n\nfunction hideElement(el: Element, config: Required<ScrollAnimateConfig>): void {\n cancelRunning(el);\n if (config.useClassNames) {\n el.classList.add(config.hiddenClass);\n el.classList.remove(config.visibleClass);\n } else {\n const style = (el as HTMLElement).style;\n if (style) style.opacity = '0';\n }\n}\n\n/** @internal Hide an element before its entrance animation, unless motion is off. */\nexport function prepareElement(el: Element, config: ScrollAnimateConfig = {}): void {\n const full = { ...DEFAULT_CONFIG, ...config };\n if (!motionDisabled(full)) hideElement(el, full);\n}\n\nlet progressThresholds: number[] | undefined;\nfunction getProgressThresholds(): number[] {\n if (!progressThresholds) {\n progressThresholds = [];\n for (let i = 0; i <= 100; i++) progressThresholds.push(i / 100);\n }\n return progressThresholds;\n}\n\nconst PASSIVE: AddEventListenerOptions = { passive: true };\n\n/* ------------------------------------------------------------------ */\n/* Instance */\n/* ------------------------------------------------------------------ */\n\nexport function createScrollAnimate(userConfig: ScrollAnimateConfig = {}): ScrollAnimateInstance {\n let config: Required<ScrollAnimateConfig> = { ...DEFAULT_CONFIG, ...userConfig };\n const registry = new Map<Element, AnimatedElement>();\n // `once` elements that finished and were dropped from the registry (autoUnregister).\n let finished = new WeakSet<Element>();\n // Elements in `progressMode: 'scroll'` that are currently inside the viewport.\n const scrolling = new Set<Element>();\n let frame = 0;\n let listening: EventTarget | null = null;\n // Active watch() MutationObservers, disconnected by destroy().\n const watchers = new Set<MutationObserver>();\n\n // Observers are shared between elements with the same root/threshold/rootMargin,\n // instead of one (or two) IntersectionObservers per element.\n const pools = new Map<Root, Map<string, IntersectionObserver>>();\n\n function pooled(root: Root, key: string, create: () => IntersectionObserver): IntersectionObserver {\n let pool = pools.get(root);\n if (!pool) pools.set(root, (pool = new Map()));\n let io = pool.get(key);\n if (!io) pool.set(key, (io = create()));\n return io;\n }\n\n function teardown(el: Element, restore: boolean): void {\n const record = registry.get(el);\n if (!record) return;\n record.observer.unobserve(el);\n record.progressObserver?.unobserve(el);\n registry.delete(el);\n untrack(el);\n // An element that never animated would otherwise stay invisible forever.\n if (restore && !record.animated) reveal(el, config);\n }\n\n function pruneDetached(): void {\n registry.forEach((record, el) => {\n if (el.isConnected === false) teardown(el, false);\n });\n }\n\n function emitProgress(el: Element, record: AnimatedElement, progress: number): void {\n const opts = record.options;\n opts.onProgress(el, progress);\n if (opts.progressVar) {\n const style = (el as HTMLElement).style;\n if (style) style.setProperty(opts.progressVar, String(+progress.toFixed(4)));\n }\n if (hasParallax(opts.parallax) && !motionDisabled(config)) applyParallax(el, progress, opts.parallax);\n }\n\n function update(): void {\n frame = 0;\n scrolling.forEach((el) => {\n const record = registry.get(el);\n if (record) emitProgress(el, record, getScrollProgress(el, config.root));\n });\n }\n\n // rAF-throttled; IntersectionObserver-capable browsers all have rAF.\n const schedule = () => frame || (frame = requestAnimationFrame(update));\n\n function listen(on: boolean): void {\n if (on === !!listening) return;\n const method = on ? 'addEventListener' : 'removeEventListener';\n const target: EventTarget = listening || (config.root as EventTarget | null) || window;\n target[method]('scroll', schedule, PASSIVE);\n window[method]('resize', schedule, PASSIVE);\n listening = on ? target : null;\n if (!on && frame) {\n cancelAnimationFrame(frame);\n frame = 0;\n }\n }\n\n function untrack(el: Element): void {\n if (scrolling.delete(el) && !scrolling.size) listen(false);\n }\n\n function onScrollIntersect(entries: IntersectionObserverEntry[]): void {\n entries.forEach((entry) => {\n const el = entry.target;\n const record = registry.get(el);\n if (!record) return;\n if (entry.isIntersecting) {\n scrolling.add(el);\n listen(true);\n } else {\n untrack(el);\n }\n // Emit right away so the edges (0 / 1) are reported even on fast scrolls.\n emitProgress(el, record, getScrollProgress(el, config.root));\n });\n }\n\n function onIntersect(entries: IntersectionObserverEntry[]): void {\n const staggerCounts = new Map<Element | null, number>();\n entries.forEach((entry) => {\n const el = entry.target;\n const record = registry.get(el);\n if (!record) return;\n const opts = record.options;\n\n if (el.isConnected === false) {\n teardown(el, false);\n return;\n }\n\n if (entry.isIntersecting) {\n opts.onEnter(el);\n if (record.animated && !opts.repeat) return;\n\n // Stagger relative to siblings revealed in the same batch, so elements\n // scrolled into view later don't inherit an ever-growing delay.\n let staggerIndex = 0;\n if (opts.stagger > 0) {\n const parent = el.parentElement;\n staggerIndex = staggerCounts.get(parent) ?? 0;\n staggerCounts.set(parent, staggerIndex + 1);\n }\n\n runAnimation(el, opts, config, staggerIndex);\n record.animated = true;\n\n if (opts.once && !opts.repeat) {\n // Keep the progress observer: parallax/onProgress must keep working.\n record.observer.unobserve(el);\n if (config.autoUnregister && !record.progressObserver) {\n // Nothing left to watch: free the record (the running animation\n // keeps its own reference until it finishes).\n finished.add(el);\n teardown(el, false);\n }\n }\n } else {\n opts.onLeave(el);\n if (opts.repeat && record.animated) {\n if (!motionDisabled(config)) hideElement(el, config);\n record.animated = false;\n }\n }\n });\n }\n\n function onProgress(entries: IntersectionObserverEntry[]): void {\n entries.forEach((entry) => {\n const record = registry.get(entry.target);\n if (!record) return;\n emitProgress(entry.target, record, entry.intersectionRatio);\n });\n }\n\n function getObserver(opts: Required<AnimateOptions>): IntersectionObserver {\n const rootMargin = applyOffset(opts.rootMargin, opts.offset);\n const threshold = opts.threshold;\n const root = config.root;\n return pooled(root, `m|${rootMargin}|${String(threshold)}`, () =>\n new IntersectionObserver(onIntersect, { threshold, rootMargin, root: root as Element | null })\n );\n }\n\n function getProgressObserver(opts: Required<AnimateOptions>): IntersectionObserver {\n const root = config.root;\n if (opts.progressMode === 'scroll') {\n // Only used to know when to start/stop measuring; progress itself comes\n // from a single shared, rAF-throttled passive scroll listener.\n return pooled(root, `s|${opts.rootMargin}`, () =>\n new IntersectionObserver(onScrollIntersect, { threshold: 0, rootMargin: opts.rootMargin, root: root as Element | null })\n );\n }\n return pooled(root, `p|${opts.rootMargin}`, () =>\n new IntersectionObserver(onProgress, {\n threshold: getProgressThresholds(),\n rootMargin: opts.rootMargin,\n root: root as Element | null,\n })\n );\n }\n\n function attach(el: Element, record: AnimatedElement, observeMain: boolean): void {\n record.observer = getObserver(record.options);\n if (observeMain) record.observer.observe(el);\n record.progressObserver = needsProgress(record.options) ? getProgressObserver(record.options) : undefined;\n record.progressObserver?.observe(el);\n }\n\n function observeElement(el: Element, opts: Required<AnimateOptions>): void {\n if (registry.has(el) || finished.has(el)) return;\n\n if (!supportsObserver()) {\n // No IntersectionObserver (very old browser): never leave content hidden.\n reveal(el, config);\n return;\n }\n\n if (!motionDisabled(config)) hideElement(el, config);\n\n const record = { element: el, options: opts, animated: false } as AnimatedElement;\n registry.set(el, record);\n attach(el, record, true);\n }\n\n function observeDataElement(el: Element): void {\n if (!registry.has(el)) observeElement(el, parseDataAttributes(el, config));\n }\n\n const instance: ScrollAnimateInstance = {\n observe(target, options = {}) {\n pruneDetached();\n const opts = mergeOptions(options, config);\n resolveTargets(target).forEach((el) => observeElement(el, opts));\n },\n\n unobserve(target) {\n resolveTargets(target).forEach((el) => {\n finished.delete(el);\n teardown(el, true);\n });\n },\n\n init(rootElement) {\n const scope = rootElement ?? (hasDOM() ? document : null);\n if (!scope) return;\n pruneDetached();\n scope.querySelectorAll('[data-sa]').forEach(observeDataElement);\n },\n\n watch(rootElement) {\n const scope = rootElement ?? (hasDOM() ? document : null);\n if (!scope || typeof MutationObserver === 'undefined') return noop;\n instance.init(scope);\n const observeTree = (node: Element) => {\n if (node.hasAttribute('data-sa')) observeDataElement(node);\n node.querySelectorAll('[data-sa]').forEach(observeDataElement);\n };\n const mo = new MutationObserver((records) => {\n let removed = false;\n records.forEach((record) => {\n if (record.type === 'attributes') {\n const target = record.target as Element;\n if (target.isConnected !== false) observeTree(target);\n return;\n }\n record.addedNodes.forEach((node) => {\n if (node instanceof Element && node.isConnected !== false) observeTree(node);\n });\n if (record.removedNodes.length) removed = true;\n });\n // Free elements that left the DOM (they can't animate any more).\n if (removed) pruneDetached();\n });\n mo.observe(scope, { childList: true, subtree: true, attributes: true, attributeFilter: ['data-sa'] });\n watchers.add(mo);\n return () => {\n mo.disconnect();\n watchers.delete(mo);\n };\n },\n\n destroy() {\n watchers.forEach((mo) => mo.disconnect());\n watchers.clear();\n registry.forEach((record, el) => {\n if (!record.animated) reveal(el, config);\n });\n pools.forEach((pool) => pool.forEach((io) => io.disconnect()));\n pools.clear();\n registry.clear();\n scrolling.clear();\n listen(false);\n finished = new WeakSet();\n },\n\n refresh() {\n // Rebuild observers (e.g. after configure({ root })) without re-hiding or\n // replaying elements that have already animated.\n pools.forEach((pool) => pool.forEach((io) => io.disconnect()));\n pools.clear();\n scrolling.clear();\n listen(false);\n pruneDetached();\n if (!supportsObserver()) return;\n registry.forEach((record, el) => {\n const done = record.animated && record.options.once && !record.options.repeat;\n attach(el, record, !done);\n });\n },\n\n animate(target, options = {}) {\n const opts = mergeOptions(options, config);\n resolveTargets(target).forEach((el) => runAnimation(el, opts, config, 0));\n },\n\n getObservedElements() {\n return Array.from(registry.values());\n },\n\n configure(newConfig) {\n config = { ...config, ...newConfig };\n },\n };\n\n return instance;\n}\n","/**\n * use-scroll-animate - Staggered children\n * Reveal a container's children one after another when the container scrolls\n * into view, optionally also animating children that are added later.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate, hasDOM, prepareElement, stopAnimation, supportsObserver } from './core';\n\nexport interface StaggerOptions extends AnimateOptions {\n /** Delay between consecutive children in ms (default: 80) */\n stagger?: number;\n /**\n * Watch the container with a MutationObserver and animate children added\n * later (e.g. infinite lists). Children added after the container was\n * revealed animate when they scroll into view, staggered per batch.\n * (default: false)\n */\n observeChildren?: boolean;\n}\n\nlet fallback: ScrollAnimateInstance | null = null;\n\n/**\n * Animate the children of `container` with a stagger once it enters the\n * viewport. Returns a cleanup function. SSR-safe (no-op without a DOM).\n *\n * @example\n * const stop = staggerChildren(document.querySelector('ul'), { stagger: 60, observeChildren: true });\n */\nexport function staggerChildren(\n container: Element | null | undefined,\n options: StaggerOptions = {},\n instance?: ScrollAnimateInstance\n): () => void {\n if (!container || !hasDOM() || !supportsObserver()) return () => undefined; // leave content visible\n const sa = instance || fallback || (fallback = createScrollAnimate());\n const { stagger = 80, delay = 0, threshold = 0.1, rootMargin = '0px', observeChildren = false, ...rest } = options;\n\n let items = Array.from(container.children);\n let revealed = false;\n const late: Element[] = [];\n items.forEach((child) => prepareElement(child));\n\n const io = new IntersectionObserver(\n (entries) => {\n if (revealed || !entries.some((entry) => entry.isIntersecting)) return;\n revealed = true;\n io.disconnect();\n items.forEach((child, i) => {\n if (child.parentNode === container) sa.animate(child, { ...rest, delay: delay + i * stagger });\n });\n items = [];\n },\n { threshold, rootMargin }\n );\n io.observe(container);\n\n let mo: MutationObserver | undefined;\n if (observeChildren && typeof MutationObserver !== 'undefined') {\n mo = new MutationObserver((records) => {\n records.forEach((record) => {\n record.addedNodes.forEach((node) => {\n if (!(node instanceof Element) || node.parentNode !== container) return;\n if (!revealed) {\n prepareElement(node);\n items.push(node);\n } else {\n // The core engine staggers siblings relative to the batch that\n // enters the viewport together.\n late.push(node);\n sa.observe(node, { ...rest, delay, stagger, threshold, rootMargin });\n }\n });\n record.removedNodes.forEach((node) => {\n if (!(node instanceof Element)) return;\n items = items.filter((el) => el !== node);\n const i = late.indexOf(node);\n if (i >= 0) {\n late.splice(i, 1);\n sa.unobserve(node);\n }\n });\n });\n });\n mo.observe(container, { childList: true });\n }\n\n return () => {\n io.disconnect();\n mo?.disconnect();\n // Stopped before the container was revealed: never leave the children hidden.\n if (!revealed) {\n revealed = true;\n items.forEach((child) => stopAnimation(child));\n items = [];\n }\n late.forEach((el) => sa.unobserve(el));\n late.length = 0;\n };\n}\n","/**\n * use-scroll-animate - Sequence / timeline helper\n * Chain animations on several targets, one after another (or overlapping).\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate, hasDOM, prepareElement, resolveTargets, stopAnimation, supportsObserver } from './core';\n\nexport interface SequenceStep extends AnimateOptions {\n /** Selector, Element, NodeList or Element[] to animate in this step */\n target: string | Element | NodeList | Element[];\n /** Pause (ms) after the previous step ends before this one starts. Negative values overlap. (default: 0) */\n gap?: number;\n /** Absolute start time (ms) on the timeline; overrides `gap` */\n at?: number;\n}\n\nexport interface SequenceOptions extends AnimateOptions {\n /** Play automatically (once) when this element/selector enters the viewport */\n trigger?: string | Element;\n /** Instance whose global config (easing, classes, `disabled`) is used */\n instance?: ScrollAnimateInstance;\n}\n\nexport interface SequenceController {\n /** Play (or replay) the timeline. Resolves when every step has completed, or on `cancel()`. */\n play(): Promise<void>;\n /** Stop the trigger and running animations; elements are left visible. */\n cancel(): void;\n /** Total duration of the timeline in ms (computed for the current DOM). */\n duration(): number;\n}\n\nlet fallback: ScrollAnimateInstance | null = null;\n\ntype Planned = { el: Element; opts: AnimateOptions; end: number };\n\nfunction plan(steps: SequenceStep[], defaults: AnimateOptions): Planned[] {\n const out: Planned[] = [];\n let cursor = 0;\n steps.forEach((step) => {\n const { target, gap = 0, at, ...stepOpts } = step;\n const opts = { ...defaults, ...stepOpts };\n const duration = opts.duration ?? 600;\n const start = Math.max(0, at ?? cursor + gap) + (opts.delay ?? 0);\n let end = Math.max(cursor, start);\n resolveTargets(target).forEach((el, i) => {\n const delay = start + i * (opts.stagger ?? 0);\n out.push({ el, opts: { ...opts, duration, delay, stagger: 0 }, end: delay + duration });\n end = Math.max(end, delay + duration);\n });\n cursor = end;\n });\n return out;\n}\n\n/**\n * Build a timeline of animations.\n *\n * @example\n * sequence([\n * { target: '.title', animation: 'fade-in-up' },\n * { target: '.subtitle', animation: 'blur-in', gap: -300 }, // overlap by 300ms\n * { target: '.card', animation: 'scale-up', stagger: 80 },\n * ], { trigger: '.hero' });\n */\nexport function sequence(steps: SequenceStep[], options: SequenceOptions = {}): SequenceController {\n const { trigger, instance, ...defaults } = options;\n const sa = () => instance || fallback || (fallback = createScrollAnimate());\n let io: IntersectionObserver | undefined;\n let active: Planned[] = [];\n let settle: (() => void) | undefined;\n // Targets hidden while waiting for `trigger`; revealed if cancelled before it fires.\n let prepared: Element[] = [];\n\n const controller: SequenceController = {\n play() {\n controller.cancel();\n if (!hasDOM()) return Promise.resolve();\n active = plan(steps, defaults);\n return new Promise<void>((resolve) => {\n let left = active.length;\n settle = () => {\n settle = undefined;\n resolve();\n };\n if (!left) return settle();\n const run = active;\n run.forEach(({ el, opts }) => {\n const done = opts.onComplete;\n sa().animate(el, {\n ...opts,\n onComplete: (node) => {\n done?.(node);\n if (run === active && --left === 0) settle?.();\n },\n });\n });\n });\n },\n\n cancel() {\n io?.disconnect();\n io = undefined;\n prepared.forEach((el) => stopAnimation(el));\n prepared = [];\n active.forEach(({ el }) => stopAnimation(el));\n active = [];\n settle?.();\n },\n\n duration() {\n return plan(steps, defaults).reduce((max, p) => Math.max(max, p.end), 0);\n },\n };\n\n if (trigger && hasDOM() && supportsObserver()) {\n const el = resolveTargets(trigger)[0];\n if (el) {\n prepared = plan(steps, defaults).map(({ el: target }) => target);\n prepared.forEach((target) => prepareElement(target));\n io = new IntersectionObserver(\n (entries) => {\n if (!entries.some((e) => e.isIntersecting)) return;\n io?.disconnect();\n io = undefined;\n prepared = []; // play() takes over from here\n controller.play();\n },\n { threshold: defaults.threshold ?? 0.1, rootMargin: defaults.rootMargin ?? '0px' }\n );\n io.observe(el);\n }\n }\n\n return controller;\n}\n","/**\n * use-scroll-animate - React Integration\n * Provides useScrollAnimate and useScrollStagger hooks for React applications.\n * `useScrollStagger({ observeChildren: true })` also animates children added later.\n *\n * Both hooks are thin wrappers around the core engine, so they share its\n * behaviour: `once`, `offset`, custom easing functions, parallax,\n * `prefers-reduced-motion` support, and proper cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\ntype ReactRef<T> = { current: T | null };\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/**\n * Wrap the callbacks that exist at mount so they always call the latest\n * version from the most recent render (avoids stale closures without\n * re-creating observers on every render).\n * @internal\n */\nexport function withLatestCallbacks(latest: ReactRef<AnimateOptions>): AnimateOptions {\n const initial = latest.current || {};\n const opts: AnimateOptions = { ...initial };\n CALLBACKS.forEach((name) => {\n if (typeof initial[name] === 'function') {\n (opts as any)[name] = (...args: unknown[]) => (latest.current?.[name] as any)?.(...args);\n }\n });\n return opts;\n}\n\nexport function createReactHooks(React: {\n useRef: <T>(initial: T | null) => ReactRef<T>;\n useEffect: (effect: () => (() => void) | void, deps?: unknown[]) => void;\n}) {\n // Created lazily on the client so importing on the server is side-effect free.\n let instance: ScrollAnimateInstance | null = null;\n const getInstance = () => instance || (instance = createScrollAnimate());\n\n function useScrollAnimate(options: AnimateOptions = {}) {\n const ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const sa = getInstance();\n sa.observe(el, withLatestCallbacks(optionsRef));\n return () => sa.unobserve(el);\n }, []);\n\n return ref;\n }\n\n function useScrollStagger(options: StaggerOptions = {}) {\n const ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const container = ref.current;\n if (!container) return;\n return staggerChildren(container, withLatestCallbacks(optionsRef) as StaggerOptions, getInstance());\n }, []);\n\n return ref;\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n","/**\n * use-scroll-animate - Vue 3 Integration\n * Provides useScrollAnimate and useScrollStagger composables for Vue 3 applications.\n *\n * A thin wrapper around the core engine, so it shares its behaviour: `once`,\n * `offset`, custom easing functions, parallax, `prefers-reduced-motion`\n * support, and cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\n/** Support refs on components (`$el`) as well as plain elements. */\nfunction unwrap(value: unknown): Element | null {\n if (value && typeof Element !== 'undefined' && !(value instanceof Element) && (value as any).$el instanceof Element) {\n return (value as any).$el as Element;\n }\n return (value as Element | null) || null;\n}\n\nexport function createVueComposables(Vue: {\n ref: <T>(value: T | null) => { value: T | null };\n onMounted: (fn: () => void) => void;\n onUnmounted: (fn: () => void) => void;\n}) {\n // Created lazily on the client so importing on the server is side-effect free.\n let instance: ScrollAnimateInstance | null = null;\n const getInstance = () => instance || (instance = createScrollAnimate());\n\n function useScrollAnimate(options: AnimateOptions = {}) {\n const animateRef = Vue.ref<Element>(null);\n let el: Element | null = null;\n\n Vue.onMounted(() => {\n const target = unwrap(animateRef.value);\n if (!target) return;\n el = target;\n getInstance().observe(el, options);\n });\n\n Vue.onUnmounted(() => {\n if (el) getInstance().unobserve(el);\n el = null;\n });\n\n return { animateRef };\n }\n\n /** Stagger the children of `staggerRef`; `observeChildren: true` also animates children added later. */\n function useScrollStagger(options: StaggerOptions = {}) {\n const staggerRef = Vue.ref<Element>(null);\n let stop: (() => void) | undefined;\n\n Vue.onMounted(() => {\n const target = unwrap(staggerRef.value);\n if (target) stop = staggerChildren(target, options, getInstance());\n });\n\n Vue.onUnmounted(() => {\n stop?.();\n stop = undefined;\n });\n\n return { staggerRef };\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n","/**\n * use-scroll-animate\n *\n * A lightweight, dependency-free scroll animation library for modern web\n * applications. Built with TypeScript, powered by IntersectionObserver and\n * the Web Animations API. Safe to import during SSR.\n *\n * @license MIT\n * @see https://github.com/HarrisonCN/use-scroll-animate\n */\n\nexport { createScrollAnimate, getScrollProgress } from './core';\nexport { staggerChildren } from './stagger';\nexport { sequence } from './sequence';\nexport { PRESETS, resolvePreset, resolveEasing, EASING_MAP } from './presets';\nexport { createReactHooks } from './react';\nexport { createVueComposables } from './vue';\n\nexport type {\n AnimationPreset,\n EasingType,\n AnimationKeyframe,\n CustomAnimation,\n ParallaxOptions,\n ProgressMode,\n AnimateOptions,\n ScrollAnimateConfig,\n AnimatedElement,\n ScrollAnimateInstance,\n} from './types';\nexport type { StaggerOptions } from './stagger';\nexport type { SequenceStep, SequenceOptions, SequenceController } from './sequence';\n\n// Default export: a ready-to-use singleton instance\nimport { createScrollAnimate } from './core';\n\n/**\n * Default singleton instance of ScrollAnimate.\n * Ready to use out of the box with sensible defaults.\n *\n * @example\n * ```js\n * import ScrollAnimate from 'use-scroll-animate';\n *\n * // Auto-initialize all elements with data-sa attribute\n * ScrollAnimate.init();\n *\n * // Or manually observe elements\n * ScrollAnimate.observe('.my-element', { animation: 'fade-in-up' });\n * ```\n */\nconst ScrollAnimate = createScrollAnimate();\nexport default ScrollAnimate;\n"],"names":["fallback"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/sequence.ts","../src/parallax.ts","../src/index.ts"],"sourcesContent":["/**\n * use-scroll-animate - Sequence / timeline helper\n * Chain animations on several targets, one after another (or overlapping).\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate, hasDOM, prepareElement, resolveTargets, stopAnimation, supportsObserver } from './core';\n\nexport interface SequenceStep extends AnimateOptions {\n /** Selector, Element, NodeList or Element[] to animate in this step */\n target: string | Element | NodeList | Element[];\n /** Pause (ms) after the previous step ends before this one starts. Negative values overlap. (default: 0) */\n gap?: number;\n /** Absolute start time (ms) on the timeline; overrides `gap` */\n at?: number;\n}\n\nexport interface SequenceOptions extends AnimateOptions {\n /** Play automatically (once) when this element/selector enters the viewport */\n trigger?: string | Element;\n /** Instance whose global config (easing, classes, `disabled`) is used */\n instance?: ScrollAnimateInstance;\n}\n\nexport interface SequenceController {\n /** Play (or replay) the timeline. Resolves when every step has completed, or on `cancel()`. */\n play(): Promise<void>;\n /** Stop the trigger and running animations; elements are left visible. */\n cancel(): void;\n /** Total duration of the timeline in ms (computed for the current DOM). */\n duration(): number;\n}\n\nlet fallback: ScrollAnimateInstance | null = null;\n\ntype Planned = { el: Element; opts: AnimateOptions; end: number };\n\nfunction plan(steps: SequenceStep[], defaults: AnimateOptions): Planned[] {\n const out: Planned[] = [];\n let cursor = 0;\n steps.forEach((step) => {\n const { target, gap = 0, at, ...stepOpts } = step;\n const opts = { ...defaults, ...stepOpts };\n const duration = opts.duration ?? 600;\n const start = Math.max(0, at ?? cursor + gap) + (opts.delay ?? 0);\n let end = Math.max(cursor, start);\n resolveTargets(target).forEach((el, i) => {\n const delay = start + i * (opts.stagger ?? 0);\n out.push({ el, opts: { ...opts, duration, delay, stagger: 0 }, end: delay + duration });\n end = Math.max(end, delay + duration);\n });\n cursor = end;\n });\n return out;\n}\n\n/**\n * Build a timeline of animations.\n *\n * @example\n * sequence([\n * { target: '.title', animation: 'fade-in-up' },\n * { target: '.subtitle', animation: 'blur-in', gap: -300 }, // overlap by 300ms\n * { target: '.card', animation: 'scale-up', stagger: 80 },\n * ], { trigger: '.hero' });\n */\nexport function sequence(steps: SequenceStep[], options: SequenceOptions = {}): SequenceController {\n const { trigger, instance, ...defaults } = options;\n const sa = () => instance || fallback || (fallback = createScrollAnimate());\n let io: IntersectionObserver | undefined;\n let active: Planned[] = [];\n let settle: (() => void) | undefined;\n // Targets hidden while waiting for `trigger`; revealed if cancelled before it fires.\n let prepared: Element[] = [];\n\n const controller: SequenceController = {\n play() {\n controller.cancel();\n if (!hasDOM()) return Promise.resolve();\n active = plan(steps, defaults);\n return new Promise<void>((resolve) => {\n let left = active.length;\n settle = () => {\n settle = undefined;\n resolve();\n };\n if (!left) return settle();\n const run = active;\n run.forEach(({ el, opts }) => {\n const done = opts.onComplete;\n sa().animate(el, {\n ...opts,\n onComplete: (node) => {\n done?.(node);\n if (run === active && --left === 0) settle?.();\n },\n });\n });\n });\n },\n\n cancel() {\n io?.disconnect();\n io = undefined;\n prepared.forEach((el) => stopAnimation(el));\n prepared = [];\n active.forEach(({ el }) => stopAnimation(el));\n active = [];\n settle?.();\n },\n\n duration() {\n return plan(steps, defaults).reduce((max, p) => Math.max(max, p.end), 0);\n },\n };\n\n if (trigger && hasDOM() && supportsObserver()) {\n const el = resolveTargets(trigger)[0];\n if (el) {\n prepared = plan(steps, defaults).map(({ el: target }) => target);\n prepared.forEach((target) => prepareElement(target));\n io = new IntersectionObserver(\n (entries) => {\n if (!entries.some((e) => e.isIntersecting)) return;\n io?.disconnect();\n io = undefined;\n prepared = []; // play() takes over from here\n controller.play();\n },\n { threshold: defaults.threshold ?? 0.1, rootMargin: defaults.rootMargin ?? '0px' }\n );\n io.observe(el);\n }\n }\n\n return controller;\n}\n","/**\n * use-scroll-animate - parallax() helper\n *\n * Moves elements at a different speed than the page while they cross the\n * viewport. Built on the same scroll progress as `progressVar` (0 when the\n * element's top enters at the bottom, 1 when its bottom leaves at the top):\n * the progress is written to a CSS custom property (default `--sa-parallax`)\n * and the offset is applied with the individual `translate` property, so it\n * composes with entrance animations and other `transform`s.\n */\n\nimport { getScrollProgress, hasDOM, prefersReducedMotion, resolveTargets, supportsObserver } from './core';\n\nexport interface ParallaxHelperOptions {\n /**\n * Total distance the element shifts while it crosses the viewport, as a\n * fraction of the viewport size (`0.2` = 20vh on the y axis). Positive values\n * lag behind the scroll (background-like), negative values move ahead of it\n * (foreground-like). (default: `0.2`)\n */\n speed?: number;\n /** `'y'` (default) or `'x'` (horizontal drift, in `vw`) */\n axis?: 'x' | 'y';\n /** CSS custom property receiving the progress (default: `'--sa-parallax'`) */\n progressVar?: string;\n /** Scroll container (default: the viewport) */\n root?: Element | null;\n /**\n * Under `prefers-reduced-motion: reduce` no offset is applied (the progress\n * variable is still written). Set to `false` to move anyway. (default: `true`)\n */\n respectReducedMotion?: boolean;\n}\n\nconst PASSIVE: AddEventListenerOptions = { passive: true };\n\n/**\n * Apply a scroll parallax to `target` (selector, Element, NodeList or array).\n * Returns a function that stops it and removes the inline styles it set.\n * SSR-safe (no-op without a DOM / IntersectionObserver).\n *\n * @example\n * const stop = parallax('.hero-bg', { speed: 0.3 });\n * parallax('.badge', { speed: -0.15, axis: 'x' });\n */\nexport function parallax(\n target: string | Element | NodeList | Element[],\n options: ParallaxHelperOptions = {}\n): () => void {\n const els = resolveTargets(target);\n if (!els.length || !hasDOM() || !supportsObserver()) return () => undefined;\n const { speed = 0.2, axis = 'y', root = null, respectReducedMotion = true } = options;\n const name = options.progressVar ? (options.progressVar.startsWith('--') ? options.progressVar : `--${options.progressVar}`) : '--sa-parallax';\n const unit = axis === 'x' ? 'vw' : 'vh';\n const visible = new Set<Element>();\n let frame = 0;\n let listening = false;\n const scroller: EventTarget = root || window;\n\n const apply = (el: Element) => {\n const style = (el as HTMLElement).style;\n if (!style) return;\n const p = getScrollProgress(el, root);\n style.setProperty(name, String(+p.toFixed(4)));\n if (respectReducedMotion && prefersReducedMotion()) {\n style.removeProperty('translate');\n return;\n }\n const offset = `${+((p - 0.5) * speed * 100).toFixed(3)}${unit}`;\n style.setProperty('translate', axis === 'x' ? `${offset} 0px` : `0px ${offset}`);\n };\n\n const update = () => {\n frame = 0;\n visible.forEach(apply);\n };\n const schedule = () => {\n if (!frame) frame = requestAnimationFrame(update);\n };\n const listen = (on: boolean) => {\n if (on === listening) return;\n listening = on;\n const method = on ? 'addEventListener' : 'removeEventListener';\n scroller[method]('scroll', schedule, PASSIVE);\n window[method]('resize', schedule, PASSIVE);\n if (!on && frame) {\n cancelAnimationFrame(frame);\n frame = 0;\n }\n };\n\n const io = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) visible.add(entry.target);\n else visible.delete(entry.target);\n apply(entry.target); // report the edges even on fast scrolls\n });\n listen(visible.size > 0);\n },\n { threshold: 0, root }\n );\n els.forEach((el) => {\n apply(el); // no jump before the first observer callback\n io.observe(el);\n });\n\n return () => {\n io.disconnect();\n listen(false);\n visible.clear();\n els.forEach((el) => {\n const style = (el as HTMLElement).style;\n if (!style) return;\n style.removeProperty('translate');\n style.removeProperty(name);\n });\n };\n}\n","/**\n * use-scroll-animate\n *\n * A lightweight, dependency-free scroll animation library for modern web\n * applications. Built with TypeScript, powered by IntersectionObserver and\n * the Web Animations API (or the native scroll-driven timeline). Safe to\n * import during SSR. Framework integrations live in the subpath entries:\n * `use-scroll-animate/react`, `/vue`, `/svelte`, `/solid`, `/element`.\n *\n * @license MIT\n * @see https://github.com/HarrisonCN/use-scroll-animate\n */\n\nexport { createScrollAnimate, getScrollProgress, supportsScrollTimeline } from './core';\nexport { staggerChildren } from './stagger';\nexport { sequence } from './sequence';\nexport { parallax } from './parallax';\nexport { PRESETS, resolvePreset, resolveEasing, EASING_MAP } from './presets';\nexport type {\n AnimationPreset,\n EasingType,\n AnimationKeyframe,\n CustomAnimation,\n ParallaxOptions,\n ProgressMode,\n ScrollEngine,\n AnimateOptions,\n ScrollAnimateConfig,\n AnimatedElement,\n ScrollAnimateInstance,\n} from './types';\nexport type { StaggerOptions } from './stagger';\nexport type { ParallaxHelperOptions } from './parallax';\nexport type { SequenceStep, SequenceOptions, SequenceController } from './sequence';\n\n// Default export: a ready-to-use singleton instance\nimport { createScrollAnimate } from './core';\n\n/**\n * Default singleton instance of ScrollAnimate.\n * Ready to use out of the box with sensible defaults.\n *\n * @example\n * ```js\n * import ScrollAnimate from 'use-scroll-animate';\n *\n * // Auto-initialize all elements with data-sa attribute\n * ScrollAnimate.init();\n *\n * // Or manually observe elements\n * ScrollAnimate.observe('.my-element', { animation: 'fade-in-up' });\n * ```\n */\nconst ScrollAnimate = /* @__PURE__ */ createScrollAnimate();\nexport default ScrollAnimate;\n"],"names":[],"mappings":"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"}
package/dist/index.umd.js CHANGED
@@ -1,13 +1,15 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ScrollAnimate={})}(this,function(e){"use strict";const t={"fade-in":{from:{opacity:0},to:{opacity:1}},"fade-in-up":{from:{opacity:0,transform:"translateY(40px)"},to:{opacity:1,transform:"translateY(0px)"}},"fade-in-down":{from:{opacity:0,transform:"translateY(-40px)"},to:{opacity:1,transform:"translateY(0px)"}},"fade-in-left":{from:{opacity:0,transform:"translateX(-40px)"},to:{opacity:1,transform:"translateX(0px)"}},"fade-in-right":{from:{opacity:0,transform:"translateX(40px)"},to:{opacity:1,transform:"translateX(0px)"}},"zoom-in":{from:{opacity:0,transform:"scale(0.8)"},to:{opacity:1,transform:"scale(1)"}},"zoom-out":{from:{opacity:0,transform:"scale(1.2)"},to:{opacity:1,transform:"scale(1)"}},"flip-x":{from:{opacity:0,transform:"rotateX(-90deg)"},to:{opacity:1,transform:"rotateX(0deg)"}},"flip-y":{from:{opacity:0,transform:"rotateY(-90deg)"},to:{opacity:1,transform:"rotateY(0deg)"}},"slide-up":{from:{transform:"translateY(100%)"},to:{transform:"translateY(0px)"}},"slide-down":{from:{transform:"translateY(-100%)"},to:{transform:"translateY(0px)"}},"slide-left":{from:{transform:"translateX(-100%)"},to:{transform:"translateX(0px)"}},"slide-right":{from:{transform:"translateX(100%)"},to:{transform:"translateX(0px)"}},bounce:{from:{opacity:0,transform:"translateY(-60px)"},to:{opacity:1,transform:"translateY(0px)"}},"rotate-in":{from:{opacity:0,transform:"rotate(-180deg) scale(0.5)"},to:{opacity:1,transform:"rotate(0deg) scale(1)"}},"blur-in":{from:{opacity:0,filter:"blur(12px)"},to:{opacity:1,filter:"blur(0px)"}},"skew-in":{from:{opacity:0,transform:"skewX(20deg) translateX(30px)"},to:{opacity:1,transform:"skewX(0deg) translateX(0px)"}},"scale-x":{from:{transform:"scaleX(0)"},to:{transform:"scaleX(1)"}},"scale-y":{from:{transform:"scaleY(0)"},to:{transform:"scaleY(1)"}},shimmer:{from:{opacity:.5,filter:"brightness(1)"},to:{opacity:1,filter:"brightness(1.5)"}},pulse:{from:{transform:"scale(1)"},to:{transform:"scale(1.05)"}},swing:{from:{transform:"rotate(-10deg)"},to:{transform:"rotate(10deg)"}},"scale-up":{from:{opacity:0,transform:"scale(0.5)"},to:{opacity:1,transform:"scale(1)"}},"blur-in-up":{from:{opacity:0,filter:"blur(12px)",transform:"translateY(40px)"},to:{opacity:1,filter:"blur(0px)",transform:"translateY(0px)"}},"flip-up":{from:{opacity:0,transform:"perspective(800px) rotateX(60deg)"},to:{opacity:1,transform:"perspective(800px) rotateX(0deg)"}},"flip-down":{from:{opacity:0,transform:"perspective(800px) rotateX(-60deg)"},to:{opacity:1,transform:"perspective(800px) rotateX(0deg)"}},"rotate-left":{from:{opacity:0,transform:"rotate(-15deg) translateX(-40px)"},to:{opacity:1,transform:"rotate(0deg) translateX(0px)"}},"rotate-right":{from:{opacity:0,transform:"rotate(15deg) translateX(40px)"},to:{opacity:1,transform:"rotate(0deg) translateX(0px)"}},"clip-up":{from:{clipPath:"inset(100% 0% 0% 0%)"},to:{clipPath:"inset(0% 0% 0% 0%)"}},"clip-down":{from:{clipPath:"inset(0% 0% 100% 0%)"},to:{clipPath:"inset(0% 0% 0% 0%)"}},"clip-left":{from:{clipPath:"inset(0% 0% 0% 100%)"},to:{clipPath:"inset(0% 0% 0% 0%)"}},"clip-right":{from:{clipPath:"inset(0% 100% 0% 0%)"},to:{clipPath:"inset(0% 0% 0% 0%)"}},"clip-circle":{from:{clipPath:"circle(0% at 50% 50%)"},to:{clipPath:"circle(75% at 50% 50%)"}}};function o(e){var o;if("string"==typeof e)return null!==(o=t[e.trim()])&&void 0!==o?o:t["fade-in-up"];if(Array.isArray(e)){const o={from:{},to:{}};return e.forEach(e=>{const r=t[e.trim()];r&&(Object.entries(r.from).forEach(([e,t])=>{"transform"===e&&o.from[e]?o.from[e]=`${o.from[e]} ${t}`:o.from[e]=t}),Object.entries(r.to).forEach(([e,t])=>{"transform"===e&&o.to[e]?o.to[e]=`${o.to[e]} ${t}`:o.to[e]=t}))}),o}return e}const r={linear:"linear",ease:"ease","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out",spring:"cubic-bezier(0.34, 1.56, 0.64, 1)","soft-spring":"cubic-bezier(0.175, 0.885, 0.32, 1.275)","heavy-bounce":"cubic-bezier(0.68, -0.55, 0.265, 1.55)"};function n(e){var t;return"string"==typeof e?null!==(t=r[e])&&void 0!==t?t:e:Array.isArray(e)?`cubic-bezier(${e.join(", ")})`:"function"==typeof e?"linear":"ease"}const a={defaultAnimation:"fade-in-up",defaultDuration:600,defaultDelay:0,defaultEasing:"ease",defaultThreshold:.1,defaultRootMargin:"0px",defaultRepeat:!1,defaultOnce:!0,defaultOffset:0,hiddenClass:"sa-hidden",visibleClass:"sa-visible",useClassNames:!1,disabled:!1,root:null,autoUnregister:!0},s=()=>{},i=()=>"undefined"!=typeof window&&"undefined"!=typeof document,l=()=>i()&&"undefined"!=typeof IntersectionObserver;let c;function f(e){if(void 0===e||""===e.trim())return;const t=parseFloat(e);return Number.isFinite(t)?t:void 0}function u(e){if(void 0===e||""===e.trim())return;const t=e.trim();return/^-?(\d+\.?\d*|\.\d+)$/.test(t)?parseFloat(t):t}function d(e){const t=e.trim();return t?t.startsWith("--")?t:`--${t}`:"--sa-progress"}function p(e,t){var o,r,n,a,i,l,c,f,u,p,m,g,h,v,y,b,x;const E=null!==(o=e.repeat)&&void 0!==o?o:t.defaultRepeat,M=null!==(r=e.threshold)&&void 0!==r?r:t.defaultThreshold;return{animation:null!==(n=e.animation)&&void 0!==n?n:t.defaultAnimation,duration:null!==(a=e.duration)&&void 0!==a?a:t.defaultDuration,delay:null!==(i=e.delay)&&void 0!==i?i:t.defaultDelay,easing:null!==(l=e.easing)&&void 0!==l?l:t.defaultEasing,threshold:Array.isArray(M)&&0===M.length?t.defaultThreshold:M,rootMargin:null!==(c=e.rootMargin)&&void 0!==c?c:t.defaultRootMargin,repeat:E,once:null!==(f=e.once)&&void 0!==f?f:!E&&t.defaultOnce,offset:null!==(u=e.offset)&&void 0!==u?u:t.defaultOffset,stagger:null!==(p=e.stagger)&&void 0!==p?p:0,parallax:null!==(m=e.parallax)&&void 0!==m?m:{},onStart:null!==(g=e.onStart)&&void 0!==g?g:s,onComplete:null!==(h=e.onComplete)&&void 0!==h?h:s,onEnter:null!==(v=e.onEnter)&&void 0!==v?v:s,onLeave:null!==(y=e.onLeave)&&void 0!==y?y:s,onProgress:null!==(b=e.onProgress)&&void 0!==b?b:s,progressMode:null!==(x=e.progressMode)&&void 0!==x?x:"ratio",progressVar:e.progressVar?d(e.progressVar):""}}function m(e){return e&&i()?"string"==typeof e?Array.from(document.querySelectorAll(e)):e instanceof Element?[e]:Array.isArray(e)||e instanceof NodeList?Array.from(e).filter(e=>e instanceof Element):[]:[]}function g(e){return!!e&&Object.keys(e).some(t=>void 0!==e[t])}function h(e,t){if(!i())return 0;const o=e.getBoundingClientRect();let r=0,n=window.innerHeight||document.documentElement.clientHeight||0;if(t){const e=t.getBoundingClientRect();r=e.top,n=e.height}const a=n+o.height;if(a<=0)return 0;const s=(r+n-o.top)/a;return s<0?0:s>1?1:s}const v=new WeakMap,y=new WeakMap;function b(e){const t=v.get(e);t&&(v.delete(e),t.onfinish=null,t.cancel());const o=y.get(e);void 0!==o&&(clearTimeout(o),y.delete(e))}function x(e,t){const o=e.style;o&&Object.keys(t).forEach(e=>{o[e]=String(t[e])})}const E=/(-?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?)([a-z%]*)/gi;let M,S;function w(e,t){if("function"!=typeof t)return{keyframes:[e.from,e.to],easing:n(t)};const o=function(e){const t=[];for(let o=0;o<=30;o++){const r=e(o/30);t.push(Number.isFinite(r)?+r.toFixed(4):o/30)}return t}(t);if(void 0===M&&(M="undefined"!=typeof CSS&&"function"==typeof CSS.supports&&CSS.supports("animation-timing-function","linear(0, 1)")),M)return{keyframes:[e.from,e.to],easing:`linear(${o.join(", ")})`};const r=Object.keys(e.from).filter(t=>t in e.to);return{keyframes:o.map((t,o)=>{const n={offset:o/30};return r.forEach(o=>{n[o]=function(e,t,o){if("number"==typeof e&&"number"==typeof t)return e+(t-e)*o;const r=String(e),n=String(t),a=[],s=[],i=r.replace(E,(e,t,o)=>(a.push([parseFloat(t),o]),"#"));if(i!==n.replace(E,(e,t,o)=>(s.push([parseFloat(t),o]),"#"))||a.length!==s.length)return o<.5?e:t;let l=0,c=!0;const f=i.replace(/#/g,()=>{const[e,t]=a[l],[r,n]=s[l++];t!==n&&0!==e&&0!==r&&t&&n&&(c=!1);const i=t||n;return`${+(e+(r-e)*o).toFixed(4)}${i}`});return c?f:o<.5?e:t}(e.from[o],e.to[o],t)}),n}),easing:"linear"}}function P(e,t){if(b(e),t.useClassNames)e.classList.remove(t.hiddenClass),e.classList.add(t.visibleClass);else{const t=e.style;t&&(t.opacity="")}}function C(e,t={}){P(e,{...a,...t})}function O(e){return!!e.disabled||!!i()&&(void 0===c&&(c="function"==typeof window.matchMedia?window.matchMedia("(prefers-reduced-motion: reduce)"):null),!!c&&c.matches)}function A(e,t,r,n=0){const{duration:a,delay:s,stagger:i,onStart:l,onComplete:c}=t,f=Math.max(0,s+n*i);if(b(e),O(r))return P(e,r),l(e),void c(e);if(r.useClassNames)return f>0&&(e.style.animationDelay=`${f}ms`),e.classList.remove(r.hiddenClass),e.classList.add(r.visibleClass),l(e),void y.set(e,setTimeout(()=>{y.delete(e),c(e)},a+f));const u=o(t.animation);if(!("opacity"in u.to)){const t=e.style;t&&"0"===t.opacity&&(t.opacity="")}if("function"!=typeof e.animate)return x(e,u.to),l(e),void c(e);const d=w(u,t.easing),p={duration:a,delay:f,easing:d.easing,fill:"both"};let m;try{m=e.animate(d.keyframes,p)}catch(t){m=e.animate(d.keyframes,{...p,easing:"ease"})}v.set(e,m),l(e),m.onfinish=()=>{if(v.get(e)===m){v.delete(e);try{m.commitStyles()}catch(t){x(e,u.to)}m.cancel()}c(e)}}function $(e,t){if(b(e),t.useClassNames)e.classList.add(t.hiddenClass),e.classList.remove(t.visibleClass);else{const t=e.style;t&&(t.opacity="0")}}function X(e,t={}){const o={...a,...t};O(o)||$(e,o)}function R(){if(!S){S=[];for(let e=0;e<=100;e++)S.push(e/100)}return S}const Y={passive:!0};function k(e={}){let t={...a,...e};const o=new Map;let r=new WeakSet;const n=new Set;let c=0,v=null;const y=new Set,b=new Map;function x(e,t,o){let r=b.get(e);r||b.set(e,r=new Map);let n=r.get(t);return n||r.set(t,n=o()),n}function E(e,r){var n;const a=o.get(e);a&&(a.observer.unobserve(e),null===(n=a.progressObserver)||void 0===n||n.unobserve(e),o.delete(e),k(e),r&&!a.animated&&P(e,t))}function M(){o.forEach((e,t)=>{!1===t.isConnected&&E(t,!1)})}function S(e,o,r){const n=o.options;if(n.onProgress(e,r),n.progressVar){const t=e.style;t&&t.setProperty(n.progressVar,String(+r.toFixed(4)))}g(n.parallax)&&!O(t)&&function(e,t,o){const{x:r=0,y:n=0,rotate:a=0,scale:s=1,speed:i=1}=o,l=2*(t-.5)*i,c=e=>"number"==typeof e?e*l+"px":`calc(${e} * ${l})`;let f="";r&&(f+=` translateX(${c(r)})`),n&&(f+=` translateY(${c(n)})`),a&&(f+=` rotate(${a*l}deg)`),1!==s&&(f+=` scale(${1+(s-1)*l})`),e.style.transform=f.trim()}(e,r,n.parallax)}function w(){c=0,n.forEach(e=>{const r=o.get(e);r&&S(e,r,h(e,t.root))})}const C=()=>c||(c=requestAnimationFrame(w));function X(e){if(e===!!v)return;const o=e?"addEventListener":"removeEventListener",r=v||t.root||window;r[o]("scroll",C,Y),window[o]("resize",C,Y),v=e?r:null,!e&&c&&(cancelAnimationFrame(c),c=0)}function k(e){n.delete(e)&&!n.size&&X(!1)}function N(e){e.forEach(e=>{const r=e.target,a=o.get(r);a&&(e.isIntersecting?(n.add(r),X(!0)):k(r),S(r,a,h(r,t.root)))})}function F(e){const n=new Map;e.forEach(e=>{var a;const s=e.target,i=o.get(s);if(!i)return;const l=i.options;if(!1!==s.isConnected)if(e.isIntersecting){if(l.onEnter(s),i.animated&&!l.repeat)return;let e=0;if(l.stagger>0){const t=s.parentElement;e=null!==(a=n.get(t))&&void 0!==a?a:0,n.set(t,e+1)}A(s,l,t,e),i.animated=!0,l.once&&!l.repeat&&(i.observer.unobserve(s),t.autoUnregister&&!i.progressObserver&&(r.add(s),E(s,!1)))}else l.onLeave(s),l.repeat&&i.animated&&(O(t)||$(s,t),i.animated=!1);else E(s,!1)})}function L(e){e.forEach(e=>{const t=o.get(e.target);t&&S(e.target,t,e.intersectionRatio)})}function I(e){const o=function(e,t){var o,r,n;if(!t)return e;const a=(e||"0px").trim().split(/\s+/),s=a[0],i=null!==(o=a[1])&&void 0!==o?o:s,l=null!==(r=a[2])&&void 0!==r?r:s,c=null!==(n=a[3])&&void 0!==n?n:i,f=/^(-?\d*\.?\d+)(px)?$/.exec(l);return`${s} ${i} ${(f?parseFloat(f[1]):0)-t}px ${c}`}(e.rootMargin,e.offset),r=e.threshold,n=t.root;return x(n,`m|${o}|${String(r)}`,()=>new IntersectionObserver(F,{threshold:r,rootMargin:o,root:n}))}function T(e,o,r){var n,a;o.observer=I(o.options),r&&o.observer.observe(e),o.progressObserver=g((a=o.options).parallax)||a.onProgress!==s||a.progressVar?function(e){const o=t.root;return"scroll"===e.progressMode?x(o,`s|${e.rootMargin}`,()=>new IntersectionObserver(N,{threshold:0,rootMargin:e.rootMargin,root:o})):x(o,`p|${e.rootMargin}`,()=>new IntersectionObserver(L,{threshold:R(),rootMargin:e.rootMargin,root:o}))}(o.options):void 0,null===(n=o.progressObserver)||void 0===n||n.observe(e)}function V(e,n){if(o.has(e)||r.has(e))return;if(!l())return void P(e,t);O(t)||$(e,t);const a={element:e,options:n,animated:!1};o.set(e,a),T(e,a,!0)}function j(e){o.has(e)||V(e,function(e,t){var o;const r=e.dataset||{},n={};if(r.saAnimation){const e=r.saAnimation;n.animation=e.includes(",")?e.split(",").map(e=>e.trim()):e.trim()}if(n.duration=f(r.saDuration),n.delay=f(r.saDelay),r.saEasing){const e=r.saEasing.trim();if(e.startsWith("["))try{n.easing=JSON.parse(e)}catch(e){}else n.easing=e}if(r.saThreshold){const e=r.saThreshold;n.threshold=e.includes(",")?e.split(",").map(parseFloat).filter(Number.isFinite):f(e)}return r.saRootMargin&&(n.rootMargin=r.saRootMargin),void 0!==r.saRepeat&&(n.repeat="false"!==r.saRepeat),void 0!==r.saOnce&&(n.once="false"!==r.saOnce),n.offset=f(r.saOffset),n.stagger=f(r.saStagger),void 0!==r.saProgressVar&&(n.progressVar=d(r.saProgressVar)),r.saProgress&&(n.progressMode="scroll"===r.saProgress.trim()?"scroll":"ratio"),(r.saParallaxX||r.saParallaxY||r.saParallaxRotate||r.saParallaxScale)&&(n.parallax={x:u(r.saParallaxX),y:u(r.saParallaxY),rotate:f(r.saParallaxRotate),scale:f(r.saParallaxScale),speed:null!==(o=f(r.saParallaxSpeed))&&void 0!==o?o:1}),p(n,t)}(e,t))}const z={observe(e,o={}){M();const r=p(o,t);m(e).forEach(e=>V(e,r))},unobserve(e){m(e).forEach(e=>{r.delete(e),E(e,!0)})},init(e){const t=null!=e?e:i()?document:null;t&&(M(),t.querySelectorAll("[data-sa]").forEach(j))},watch(e){const t=null!=e?e:i()?document:null;if(!t||"undefined"==typeof MutationObserver)return s;z.init(t);const o=e=>{e.hasAttribute("data-sa")&&j(e),e.querySelectorAll("[data-sa]").forEach(j)},r=new MutationObserver(e=>{let t=!1;e.forEach(e=>{if("attributes"===e.type){const t=e.target;return void(!1!==t.isConnected&&o(t))}e.addedNodes.forEach(e=>{e instanceof Element&&!1!==e.isConnected&&o(e)}),e.removedNodes.length&&(t=!0)}),t&&M()});return r.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-sa"]}),y.add(r),()=>{r.disconnect(),y.delete(r)}},destroy(){y.forEach(e=>e.disconnect()),y.clear(),o.forEach((e,o)=>{e.animated||P(o,t)}),b.forEach(e=>e.forEach(e=>e.disconnect())),b.clear(),o.clear(),n.clear(),X(!1),r=new WeakSet},refresh(){b.forEach(e=>e.forEach(e=>e.disconnect())),b.clear(),n.clear(),X(!1),M(),l()&&o.forEach((e,t)=>{T(t,e,!(e.animated&&e.options.once&&!e.options.repeat))})},animate(e,o={}){const r=p(o,t);m(e).forEach(e=>A(e,r,t,0))},getObservedElements:()=>Array.from(o.values()),configure(e){t={...t,...e}}};return z}let N=null;function F(e,t={},o){if(!e||!i()||!l())return()=>{};const r=o||N||(N=k()),{stagger:n=80,delay:a=0,threshold:s=.1,rootMargin:c="0px",observeChildren:f=!1,...u}=t;let d=Array.from(e.children),p=!1;const m=[];d.forEach(e=>X(e));const g=new IntersectionObserver(t=>{!p&&t.some(e=>e.isIntersecting)&&(p=!0,g.disconnect(),d.forEach((t,o)=>{t.parentNode===e&&r.animate(t,{...u,delay:a+o*n})}),d=[])},{threshold:s,rootMargin:c});let h;return g.observe(e),f&&"undefined"!=typeof MutationObserver&&(h=new MutationObserver(t=>{t.forEach(t=>{t.addedNodes.forEach(t=>{t instanceof Element&&t.parentNode===e&&(p?(m.push(t),r.observe(t,{...u,delay:a,stagger:n,threshold:s,rootMargin:c})):(X(t),d.push(t)))}),t.removedNodes.forEach(e=>{if(!(e instanceof Element))return;d=d.filter(t=>t!==e);const t=m.indexOf(e);t>=0&&(m.splice(t,1),r.unobserve(e))})})}),h.observe(e,{childList:!0})),()=>{g.disconnect(),null==h||h.disconnect(),p||(p=!0,d.forEach(e=>C(e)),d=[]),m.forEach(e=>r.unobserve(e)),m.length=0}}let L=null;function I(e,t){const o=[];let r=0;return e.forEach(e=>{var n,a;const{target:s,gap:i=0,at:l,...c}=e,f={...t,...c},u=null!==(n=f.duration)&&void 0!==n?n:600,d=Math.max(0,null!=l?l:r+i)+(null!==(a=f.delay)&&void 0!==a?a:0);let p=Math.max(r,d);m(s).forEach((e,t)=>{var r;const n=d+t*(null!==(r=f.stagger)&&void 0!==r?r:0);o.push({el:e,opts:{...f,duration:u,delay:n,stagger:0},end:n+u}),p=Math.max(p,n+u)}),r=p}),o}const T=["onStart","onComplete","onEnter","onLeave","onProgress"];function V(e){const t=e.current||{},o={...t};return T.forEach(r=>{"function"==typeof t[r]&&(o[r]=(...t)=>{var o,n;return null===(n=null===(o=e.current)||void 0===o?void 0:o[r])||void 0===n?void 0:n.call(o,...t)})}),o}function j(e){return e&&"undefined"!=typeof Element&&!(e instanceof Element)&&e.$el instanceof Element?e.$el:e||null}
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ScrollAnimate={})}(this,function(e){"use strict";const t={"fade-in":{from:{opacity:0},to:{opacity:1}},"fade-in-up":{from:{opacity:0,transform:"translateY(40px)"},to:{opacity:1,transform:"translateY(0px)"}},"fade-in-down":{from:{opacity:0,transform:"translateY(-40px)"},to:{opacity:1,transform:"translateY(0px)"}},"fade-in-left":{from:{opacity:0,transform:"translateX(-40px)"},to:{opacity:1,transform:"translateX(0px)"}},"fade-in-right":{from:{opacity:0,transform:"translateX(40px)"},to:{opacity:1,transform:"translateX(0px)"}},"zoom-in":{from:{opacity:0,transform:"scale(0.8)"},to:{opacity:1,transform:"scale(1)"}},"zoom-out":{from:{opacity:0,transform:"scale(1.2)"},to:{opacity:1,transform:"scale(1)"}},"flip-x":{from:{opacity:0,transform:"rotateX(-90deg)"},to:{opacity:1,transform:"rotateX(0deg)"}},"flip-y":{from:{opacity:0,transform:"rotateY(-90deg)"},to:{opacity:1,transform:"rotateY(0deg)"}},"slide-up":{from:{transform:"translateY(100%)"},to:{transform:"translateY(0px)"}},"slide-down":{from:{transform:"translateY(-100%)"},to:{transform:"translateY(0px)"}},"slide-left":{from:{transform:"translateX(-100%)"},to:{transform:"translateX(0px)"}},"slide-right":{from:{transform:"translateX(100%)"},to:{transform:"translateX(0px)"}},bounce:{from:{opacity:0,transform:"translateY(-60px)"},to:{opacity:1,transform:"translateY(0px)"}},"rotate-in":{from:{opacity:0,transform:"rotate(-180deg) scale(0.5)"},to:{opacity:1,transform:"rotate(0deg) scale(1)"}},"blur-in":{from:{opacity:0,filter:"blur(12px)"},to:{opacity:1,filter:"blur(0px)"}},"skew-in":{from:{opacity:0,transform:"skewX(20deg) translateX(30px)"},to:{opacity:1,transform:"skewX(0deg) translateX(0px)"}},"scale-x":{from:{transform:"scaleX(0)"},to:{transform:"scaleX(1)"}},"scale-y":{from:{transform:"scaleY(0)"},to:{transform:"scaleY(1)"}},shimmer:{from:{opacity:.5,filter:"brightness(1)"},to:{opacity:1,filter:"brightness(1.5)"}},pulse:{from:{transform:"scale(1)"},to:{transform:"scale(1.05)"}},swing:{from:{transform:"rotate(-10deg)"},to:{transform:"rotate(10deg)"}},"scale-up":{from:{opacity:0,transform:"scale(0.5)"},to:{opacity:1,transform:"scale(1)"}},"blur-in-up":{from:{opacity:0,filter:"blur(12px)",transform:"translateY(40px)"},to:{opacity:1,filter:"blur(0px)",transform:"translateY(0px)"}},"flip-up":{from:{opacity:0,transform:"perspective(800px) rotateX(60deg)"},to:{opacity:1,transform:"perspective(800px) rotateX(0deg)"}},"flip-down":{from:{opacity:0,transform:"perspective(800px) rotateX(-60deg)"},to:{opacity:1,transform:"perspective(800px) rotateX(0deg)"}},"rotate-left":{from:{opacity:0,transform:"rotate(-15deg) translateX(-40px)"},to:{opacity:1,transform:"rotate(0deg) translateX(0px)"}},"rotate-right":{from:{opacity:0,transform:"rotate(15deg) translateX(40px)"},to:{opacity:1,transform:"rotate(0deg) translateX(0px)"}},"clip-up":{from:{clipPath:"inset(100% 0% 0% 0%)"},to:{clipPath:"inset(0% 0% 0% 0%)"}},"clip-down":{from:{clipPath:"inset(0% 0% 100% 0%)"},to:{clipPath:"inset(0% 0% 0% 0%)"}},"clip-left":{from:{clipPath:"inset(0% 0% 0% 100%)"},to:{clipPath:"inset(0% 0% 0% 0%)"}},"clip-right":{from:{clipPath:"inset(0% 100% 0% 0%)"},to:{clipPath:"inset(0% 0% 0% 0%)"}},"clip-circle":{from:{clipPath:"circle(0% at 50% 50%)"},to:{clipPath:"circle(75% at 50% 50%)"}}};function r(e){if("string"==typeof e)return t[e.trim()]??t["fade-in-up"];if(Array.isArray(e)){const r={from:{},to:{}};return e.forEach(e=>{const o=t[e.trim()];o&&(Object.entries(o.from).forEach(([e,t])=>{"transform"===e&&r.from[e]?r.from[e]=`${r.from[e]} ${t}`:r.from[e]=t}),Object.entries(o.to).forEach(([e,t])=>{"transform"===e&&r.to[e]?r.to[e]=`${r.to[e]} ${t}`:r.to[e]=t}))}),r}return e}const o={linear:"linear",ease:"ease","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out",spring:"cubic-bezier(0.34, 1.56, 0.64, 1)","soft-spring":"cubic-bezier(0.175, 0.885, 0.32, 1.275)","heavy-bounce":"cubic-bezier(0.68, -0.55, 0.265, 1.55)"};function n(e){return"string"==typeof e?o[e]??e:Array.isArray(e)?`cubic-bezier(${e.join(", ")})`:"function"==typeof e?"linear":"ease"}const a={defaultAnimation:"fade-in-up",defaultDuration:600,defaultDelay:0,defaultEasing:"ease",defaultThreshold:.1,defaultRootMargin:"0px",defaultRepeat:!1,defaultOnce:!0,defaultOffset:0,hiddenClass:"sa-hidden",visibleClass:"sa-visible",useClassNames:!1,disabled:!1,root:null,autoUnregister:!0,defaultEngine:"auto"},s=()=>{},i=()=>"undefined"!=typeof window&&"undefined"!=typeof document,c=()=>i()&&"undefined"!=typeof IntersectionObserver;let l,f;function d(){return!!i()&&(void 0===l&&(l="function"==typeof window.matchMedia?window.matchMedia("(prefers-reduced-motion: reduce)"):null),!!l&&l.matches)}function u(){return void 0===f&&(f=i()&&"undefined"!=typeof CSS&&"function"==typeof CSS.supports&&CSS.supports("animation-timeline: view()")&&"function"==typeof globalThis.ViewTimeline),f}function p(e){if(void 0===e||""===e.trim())return;const t=parseFloat(e);return Number.isFinite(t)?t:void 0}function m(e){if(void 0===e||""===e.trim())return;const t=e.trim();return/^-?(\d+\.?\d*|\.\d+)$/.test(t)?parseFloat(t):t}const g=["entry 0%","entry 100%"];function h(e){const t=e.trim();return t?t.startsWith("--")?t:`--${t}`:"--sa-progress"}function y(e,t){return v(function(e){const t={},r=e("animation");r&&(t.animation=r.includes(",")?r.split(",").map(e=>e.trim()):r.trim()),t.duration=p(e("duration")),t.delay=p(e("delay"));const o=e("easing");if(o){const e=o.trim();if(e.startsWith("["))try{t.easing=JSON.parse(e)}catch{}else t.easing=e}const n=e("threshold");n&&(t.threshold=n.includes(",")?n.split(",").map(parseFloat).filter(Number.isFinite):p(n));const a=e("root-margin");a&&(t.rootMargin=a);const s=e("repeat");void 0!==s&&(t.repeat="false"!==s);const i=e("once");void 0!==i&&(t.once="false"!==i),t.offset=p(e("offset")),t.stagger=p(e("stagger"));const c=e("progress-var");void 0!==c&&(t.progressVar=h(c));const l=e("engine")?.trim();"auto"!==l&&"js"!==l&&"css"!==l||(t.engine=l);const f=e("view-range");if(f){const[e,r]=f.split(",").map(e=>e.trim());e&&r&&(t.viewRange=[e,r])}const d=e("exit");if(void 0!==d){const e=d.trim();t.exit=""===e||"true"===e||"false"!==e&&(e.includes(",")?e.split(",").map(e=>e.trim()):e)}const u=e("progress");u&&(t.progressMode="scroll"===u.trim()?"scroll":"ratio");const g=e("parallax-x"),y=e("parallax-y"),v=e("parallax-rotate"),b=e("parallax-scale");return(g||y||v||b)&&(t.parallax={x:m(g),y:m(y),rotate:p(v),scale:p(b),speed:p(e("parallax-speed"))??1}),Object.keys(t).forEach(e=>void 0===t[e]&&delete t[e]),t}(t=>{const r=e.getAttribute(`data-sa-${t}`);return null===r?void 0:r}),t)}function v(e,t){let r=e.engine??t.defaultEngine;"auto"===r&&(void 0!==e.duration||void 0!==e.delay||void 0!==e.offset||(e.stagger??0)>0)&&(r="js");const o=e.exit??!1,n=e.repeat??(!!o||t.defaultRepeat),a=e.threshold??t.defaultThreshold;return{animation:e.animation??t.defaultAnimation,duration:e.duration??t.defaultDuration,delay:e.delay??t.defaultDelay,easing:e.easing??t.defaultEasing,threshold:Array.isArray(a)&&0===a.length?t.defaultThreshold:a,rootMargin:e.rootMargin??t.defaultRootMargin,repeat:n,once:e.once??(!n&&t.defaultOnce),offset:e.offset??t.defaultOffset,stagger:e.stagger??0,parallax:e.parallax??{},onStart:e.onStart??s,onComplete:e.onComplete??s,onEnter:e.onEnter??s,onLeave:e.onLeave??s,onProgress:e.onProgress??s,progressMode:e.progressMode??"ratio",progressVar:e.progressVar?h(e.progressVar):"",engine:r,viewRange:e.viewRange??g,exit:o}}function b(e){return e&&i()?"string"==typeof e?Array.from(document.querySelectorAll(e)):e instanceof Element?[e]:Array.isArray(e)||e instanceof NodeList?Array.from(e).filter(e=>e instanceof Element):[]:[]}function x(e){return!!e&&Object.keys(e).some(t=>void 0!==e[t])}function E(e,t){if(!i())return 0;const r=e.getBoundingClientRect();let o=0,n=window.innerHeight||document.documentElement.clientHeight||0;if(t){const e=t.getBoundingClientRect();o=e.top,n=e.height}const a=n+r.height;if(a<=0)return 0;const s=(o+n-r.top)/a;return s<0?0:s>1?1:s}const w=new WeakMap,S=new WeakMap,M=new WeakMap;function C(e){const t=S.get(e);t&&(S.delete(e),t.cancel());const r=w.get(e);r&&(w.delete(e),r.onfinish=null,r.cancel());const o=M.get(e);void 0!==o&&(clearTimeout(o),M.delete(e))}function $(e,t){const r=e.style;r&&Object.keys(t).forEach(e=>{r[e]=String(t[e])})}const O=/(-?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?)([a-z%]*)/gi;let A,P;function X(e,t){if("function"!=typeof t)return{keyframes:[e.from,e.to],easing:n(t)};const r=function(e){const t=[];for(let r=0;r<=30;r++){const o=e(r/30);t.push(Number.isFinite(o)?+o.toFixed(4):r/30)}return t}(t);if(void 0===A&&(A="undefined"!=typeof CSS&&"function"==typeof CSS.supports&&CSS.supports("animation-timing-function","linear(0, 1)")),A)return{keyframes:[e.from,e.to],easing:`linear(${r.join(", ")})`};const o=Object.keys(e.from).filter(t=>t in e.to);return{keyframes:r.map((t,r)=>{const n={offset:r/30};return o.forEach(r=>{n[r]=function(e,t,r){if("number"==typeof e&&"number"==typeof t)return e+(t-e)*r;const o=String(e),n=String(t),a=[],s=[],i=o.replace(O,(e,t,r)=>(a.push([parseFloat(t),r]),"#"));if(i!==n.replace(O,(e,t,r)=>(s.push([parseFloat(t),r]),"#"))||a.length!==s.length)return r<.5?e:t;let c=0,l=!0;const f=i.replace(/#/g,()=>{const[e,t]=a[c],[o,n]=s[c++];t!==n&&0!==e&&0!==o&&t&&n&&(l=!1);const i=t||n;return`${+(e+(o-e)*r).toFixed(4)}${i}`});return l?f:r<.5?e:t}(e.from[r],e.to[r],t)}),n}),easing:"linear"}}function k(e,t){if(C(e),t.useClassNames)e.classList.remove(t.hiddenClass),e.classList.add(t.visibleClass);else{const t=e.style;t&&(t.opacity="")}}function F(e,t={}){k(e,{...a,...t})}function N(e){return!!e.disabled||d()}function j(e,t,o,n=0,a){const{duration:s,delay:i,stagger:c,onStart:l,onComplete:f}=t,d=Math.max(0,i+n*c);if(C(e),N(o))return k(e,o),l(e),void f(e);if(o.useClassNames)return d>0&&(e.style.animationDelay=`${d}ms`),e.classList.remove(o.hiddenClass),e.classList.add(o.visibleClass),l(e),a?.add(e),void M.set(e,setTimeout(()=>{M.delete(e),a?.delete(e),f(e)},s+d));const u=r(t.animation);if(!("opacity"in u.to)){const t=e.style;t&&"0"===t.opacity&&(t.opacity="")}if("function"!=typeof e.animate)return $(e,u.to),l(e),void f(e);const p=X(u,t.easing),m={duration:s,delay:d,easing:p.easing,fill:"both"};let g;try{g=e.animate(p.keyframes,m)}catch{g=e.animate(p.keyframes,{...m,easing:"ease"})}w.set(e,g),l(e),g.onfinish=()=>{if(w.get(e)===g){w.delete(e);try{g.commitStyles()}catch{$(e,u.to)}g.cancel()}f(e)}}function L(e,t){if(C(e),t.useClassNames)e.classList.add(t.hiddenClass),e.classList.remove(t.visibleClass);else{const t=e.style;t&&(t.opacity="0")}}function Y(e,t={}){const r={...a,...t};N(r)||L(e,r)}function T(){if(!P){P=[];for(let e=0;e<=100;e++)P.push(e/100)}return P}const I={passive:!0};function R(e={}){let t={...a,...e};const o=new Map;let n=new WeakSet;const l=new Set;let f=0,d=null;const p=new Set,m=new Set,g=new Set,h=new Map;function O(e,t,r){let o=h.get(e);o||h.set(e,o=new Map);let n=o.get(t);return n||o.set(t,n=r()),n}function A(e,r){const n=o.get(e);n&&(n.observer.unobserve(e),n.progressObserver?.unobserve(e),o.delete(e),z(e),"css"!==n.engine?r&&!n.animated&&k(e,t):r?(g.delete(e),k(e,t)):!1===e.isConnected&&g.delete(e))}function P(){o.forEach((e,t)=>{!1===t.isConnected&&A(t,!1)})}function F(e,r,o){const n=r.options;if(n.onProgress(e,o),n.progressVar){const t=e.style;t&&t.setProperty(n.progressVar,String(+o.toFixed(4)))}x(n.parallax)&&!N(t)&&function(e,t,r){const{x:o=0,y:n=0,rotate:a=0,scale:s=1,speed:i=1}=r,c=2*(t-.5)*i,l=e=>"number"==typeof e?e*c+"px":`calc(${e} * ${c})`;let f="";o&&(f+=` translateX(${l(o)})`),n&&(f+=` translateY(${l(n)})`),a&&(f+=` rotate(${a*c}deg)`),1!==s&&(f+=` scale(${1+(s-1)*c})`),e.style.transform=f.trim()}(e,o,n.parallax)}function Y(){f=0,l.forEach(e=>{const r=o.get(e);r&&F(e,r,E(e,t.root))})}const R=()=>f||(f=requestAnimationFrame(Y));function V(e){if(e===!!d)return;const r=e?"addEventListener":"removeEventListener",o=d||t.root||window;o[r]("scroll",R,I),window[r]("resize",R,I),d=e?o:null,!e&&f&&(cancelAnimationFrame(f),f=0)}function z(e){l.delete(e)&&!l.size&&V(!1)}function W(e){e.forEach(e=>{const r=e.target,n=o.get(r);n&&(e.isIntersecting?(l.add(r),V(!0)):z(r),F(r,n,E(r,t.root)))})}function q(e){const a=new Map;e.forEach(e=>{const s=e.target,i=o.get(s);if(!i)return;const c=i.options;if(!1!==s.isConnected)if("css"!==i.engine)if(e.isIntersecting){if(c.onEnter(s),i.animated&&!c.repeat)return;let e=0;if(c.stagger>0){const t=s.parentElement;e=a.get(t)??0,a.set(t,e+1)}j(s,c,t,e,m),i.animated=!0,c.once&&!c.repeat&&(i.observer.unobserve(s),t.autoUnregister&&!i.progressObserver&&(n.add(s),A(s,!1)))}else c.onLeave(s),c.repeat&&i.animated&&(N(t)||(c.exit?function(e,t,o){if(o.useClassNames||"function"!=typeof e.animate)return void L(e,o);C(e);const n=r(!0===t.exit?t.animation:t.exit),a=X({from:n.to,to:n.from},t.easing),s={duration:t.duration,easing:a.easing,fill:"forwards"};let i;try{i=e.animate(a.keyframes,s)}catch{i=e.animate(a.keyframes,{...s,easing:"ease"})}w.set(e,i)}(s,c,t):L(s,t)),i.animated=!1);else e.isIntersecting?(c.onEnter(s),i.animated||(i.animated=!0,c.onStart(s)),c.once&&!c.repeat&&(i.observer.unobserve(s),t.autoUnregister&&!i.progressObserver&&(n.add(s),A(s,!1)))):(c.onLeave(s),c.repeat&&(i.animated=!1));else A(s,!1)})}function D(e){e.forEach(e=>{const t=o.get(e.target);t&&F(e.target,t,e.intersectionRatio)})}function U(e){const r=function(e,t){if(!t)return e;const r=(e||"0px").trim().split(/\s+/),o=r[0],n=r[1]??o,a=r[2]??o,s=r[3]??n,i=/^(-?\d*\.?\d+)(px)?$/.exec(a);return`${o} ${n} ${(i?parseFloat(i[1]):0)-t}px ${s}`}(e.rootMargin,e.offset),o=e.threshold,n=t.root;return O(n,`m|${r}|${String(o)}`,()=>new IntersectionObserver(q,{threshold:o,rootMargin:r,root:n}))}function _(e,r,o){var n;r.observer=U(r.options),o&&r.observer.observe(e),r.progressObserver=x((n=r.options).parallax)||n.onProgress!==s||n.progressVar?function(e){const r=t.root;return"scroll"===e.progressMode?O(r,`s|${e.rootMargin}`,()=>new IntersectionObserver(W,{threshold:0,rootMargin:e.rootMargin,root:r})):O(r,`p|${e.rootMargin}`,()=>new IntersectionObserver(D,{threshold:T(),rootMargin:e.rootMargin,root:r}))}(r.options):void 0,r.progressObserver?.observe(e)}function B(e,a){if(o.has(e)||n.has(e))return;if(!c())return void k(e,t);const s={element:e,options:a,animated:!1,engine:"js"};(function(e){return"js"!==e.engine&&!t.useClassNames&&!N(t)&&u()})(a)&&(C(e),function(e,t,o){if("function"!=typeof e.animate)return null;const n=r(t.animation),a=X(n,t.easing);let s;try{const r=new globalThis.ViewTimeline({subject:e,axis:"block"}),o={fill:"both",easing:a.easing,timeline:r,rangeStart:t.viewRange[0],rangeEnd:t.viewRange[1]};try{s=e.animate(a.keyframes,o)}catch{s=e.animate(a.keyframes,{...o,easing:"linear"})}}catch{return null}if(w.set(e,s),t.exit){const o=r(!0===t.exit?t.animation:t.exit),n=X({from:o.to,to:o.from},t.easing);try{const t=new globalThis.ViewTimeline({subject:e,axis:"block"}),r={fill:"forwards",easing:n.easing,timeline:t,rangeStart:"exit 0%",rangeEnd:"exit 100%"};S.set(e,e.animate(n.keyframes,r))}catch{}}const i=t.repeat||!t.once;return s.onfinish=()=>{if(!i&&w.get(e)===s){w.delete(e);try{s.commitStyles()}catch{$(e,n.to)}s.cancel(),o?.()}t.onComplete(e)},s}(e,a,()=>g.delete(e))&&(s.engine="css",g.add(e))),"js"!==s.engine||N(t)||L(e,t),o.set(e,s),_(e,s,!0)}function H(e){o.has(e)||B(e,y(e,t))}const G={observe(e,r={}){P();const o=v(r,t);b(e).forEach(e=>B(e,o))},unobserve(e){b(e).forEach(e=>{n.delete(e),A(e,!0)})},init(e){const t=e??(i()?document:null);t&&(P(),t.querySelectorAll("[data-sa]").forEach(H))},watch(e){const t=e??(i()?document:null);if(!t||"undefined"==typeof MutationObserver)return s;G.init(t);const r=e=>{e.hasAttribute("data-sa")&&H(e),e.querySelectorAll("[data-sa]").forEach(H)},o=new MutationObserver(e=>{let t=!1;e.forEach(e=>{if("attributes"===e.type){const t=e.target;return void(!1!==t.isConnected&&r(t))}e.addedNodes.forEach(e=>{e instanceof Element&&!1!==e.isConnected&&r(e)}),e.removedNodes.length&&(t=!0)}),t&&P()});return o.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-sa"]}),p.add(o),()=>{o.disconnect(),p.delete(o)}},destroy(){p.forEach(e=>e.disconnect()),p.clear(),m.forEach(e=>{const t=M.get(e);void 0!==t&&(clearTimeout(t),M.delete(e))}),m.clear(),o.forEach((e,r)=>{e.animated||"css"===e.engine||k(r,t)}),g.forEach(e=>{w.has(e)&&k(e,t)}),g.clear(),h.forEach(e=>e.forEach(e=>e.disconnect())),h.clear(),o.clear(),l.clear(),V(!1),n=new WeakSet},refresh(){h.forEach(e=>e.forEach(e=>e.disconnect())),h.clear(),l.clear(),V(!1),P(),c()&&o.forEach((e,t)=>{_(t,e,!(e.animated&&e.options.once&&!e.options.repeat))})},animate(e,r={}){const o=v(r,t);b(e).forEach(e=>j(e,o,t,0,m))},getObservedElements:()=>Array.from(o.values()),configure(e){t={...t,...e}}};return G}let V=null;let z=null;function W(e,t){const r=[];let o=0;return e.forEach(e=>{const{target:n,gap:a=0,at:s,...i}=e,c={...t,...i},l=c.duration??600,f=Math.max(0,s??o+a)+(c.delay??0);let d=Math.max(o,f);b(n).forEach((e,t)=>{const o=f+t*(c.stagger??0);r.push({el:e,opts:{...c,duration:l,delay:o,stagger:0},end:o+l}),d=Math.max(d,o+l)}),o=d}),r}const q={passive:!0};
2
2
  /**
3
3
  * use-scroll-animate
4
4
  *
5
5
  * A lightweight, dependency-free scroll animation library for modern web
6
6
  * applications. Built with TypeScript, powered by IntersectionObserver and
7
- * the Web Animations API. Safe to import during SSR.
7
+ * the Web Animations API (or the native scroll-driven timeline). Safe to
8
+ * import during SSR. Framework integrations live in the subpath entries:
9
+ * `use-scroll-animate/react`, `/vue`, `/svelte`, `/solid`, `/element`.
8
10
  *
9
11
  * @license MIT
10
12
  * @see https://github.com/HarrisonCN/use-scroll-animate
11
13
  */
12
- const z=k();e.EASING_MAP=r,e.PRESETS=t,e.createReactHooks=function(e){let t=null;const o=()=>t||(t=k());return{useScrollAnimate:function(t={}){const r=e.useRef(null),n=e.useRef(t);return n.current=t,e.useEffect(()=>{const e=r.current;if(!e)return;const t=o();return t.observe(e,V(n)),()=>t.unobserve(e)},[]),r},useScrollStagger:function(t={}){const r=e.useRef(null),n=e.useRef(t);return n.current=t,e.useEffect(()=>{const e=r.current;if(e)return F(e,V(n),o())},[]),r}}},e.createScrollAnimate=k,e.createVueComposables=function(e){let t=null;const o=()=>t||(t=k());return{useScrollAnimate:function(t={}){const r=e.ref(null);let n=null;return e.onMounted(()=>{const e=j(r.value);e&&(n=e,o().observe(n,t))}),e.onUnmounted(()=>{n&&o().unobserve(n),n=null}),{animateRef:r}},useScrollStagger:function(t={}){const r=e.ref(null);let n;return e.onMounted(()=>{const e=j(r.value);e&&(n=F(e,t,o()))}),e.onUnmounted(()=>{null==n||n(),n=void 0}),{staggerRef:r}}}},e.default=z,e.getScrollProgress=h,e.resolveEasing=n,e.resolvePreset=o,e.sequence=function(e,t={}){var o,r;const{trigger:n,instance:a,...s}=t;let c,f,u=[],d=[];const p={play:()=>(p.cancel(),i()?(u=I(e,s),new Promise(e=>{let t=u.length;if(f=()=>{f=void 0,e()},!t)return f();const o=u;o.forEach(({el:e,opts:r})=>{const n=r.onComplete;(a||L||(L=k())).animate(e,{...r,onComplete:e=>{null==n||n(e),o===u&&0===--t&&(null==f||f())}})})})):Promise.resolve()),cancel(){null==c||c.disconnect(),c=void 0,d.forEach(e=>C(e)),d=[],u.forEach(({el:e})=>C(e)),u=[],null==f||f()},duration:()=>I(e,s).reduce((e,t)=>Math.max(e,t.end),0)};if(n&&i()&&l()){const t=m(n)[0];t&&(d=I(e,s).map(({el:e})=>e),d.forEach(e=>X(e)),c=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(null==c||c.disconnect(),c=void 0,d=[],p.play())},{threshold:null!==(o=s.threshold)&&void 0!==o?o:.1,rootMargin:null!==(r=s.rootMargin)&&void 0!==r?r:"0px"}),c.observe(t))}return p},e.staggerChildren=F,Object.defineProperty(e,"__esModule",{value:!0})});
14
+ const D=R();e.EASING_MAP=o,e.PRESETS=t,e.createScrollAnimate=R,e.default=D,e.getScrollProgress=E,e.parallax=function(e,t={}){const r=b(e);if(!r.length||!i()||!c())return()=>{};const{speed:o=.2,axis:n="y",root:a=null,respectReducedMotion:s=!0}=t,l=t.progressVar?t.progressVar.startsWith("--")?t.progressVar:`--${t.progressVar}`:"--sa-parallax",f="x"===n?"vw":"vh",u=new Set;let p=0,m=!1;const g=a||window,h=e=>{const t=e.style;if(!t)return;const r=E(e,a);if(t.setProperty(l,String(+r.toFixed(4))),s&&d())return void t.removeProperty("translate");const i=`${+((r-.5)*o*100).toFixed(3)}${f}`;t.setProperty("translate","x"===n?`${i} 0px`:`0px ${i}`)},y=()=>{p=0,u.forEach(h)},v=()=>{p||(p=requestAnimationFrame(y))},x=e=>{if(e===m)return;m=e;const t=e?"addEventListener":"removeEventListener";g[t]("scroll",v,q),window[t]("resize",v,q),!e&&p&&(cancelAnimationFrame(p),p=0)},w=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting?u.add(e.target):u.delete(e.target),h(e.target)}),x(u.size>0)},{threshold:0,root:a});return r.forEach(e=>{h(e),w.observe(e)}),()=>{w.disconnect(),x(!1),u.clear(),r.forEach(e=>{const t=e.style;t&&(t.removeProperty("translate"),t.removeProperty(l))})}},e.resolveEasing=n,e.resolvePreset=r,e.sequence=function(e,t={}){const{trigger:r,instance:o,...n}=t;let a,s,l=[],f=[];const d={play:()=>(d.cancel(),i()?(l=W(e,n),new Promise(e=>{let t=l.length;if(s=()=>{s=void 0,e()},!t)return s();const r=l;r.forEach(({el:e,opts:n})=>{const a=n.onComplete;(o||z||(z=R())).animate(e,{...n,onComplete:e=>{a?.(e),r===l&&0===--t&&s?.()}})})})):Promise.resolve()),cancel(){a?.disconnect(),a=void 0,f.forEach(e=>F(e)),f=[],l.forEach(({el:e})=>F(e)),l=[],s?.()},duration:()=>W(e,n).reduce((e,t)=>Math.max(e,t.end),0)};if(r&&i()&&c()){const t=b(r)[0];t&&(f=W(e,n).map(({el:e})=>e),f.forEach(e=>Y(e)),a=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(a?.disconnect(),a=void 0,f=[],d.play())},{threshold:n.threshold??.1,rootMargin:n.rootMargin??"0px"}),a.observe(t))}return d},e.staggerChildren=function(e,t={},r){if(!e||!i()||!c())return()=>{};const o=r||V||(V=R()),{stagger:n=80,delay:a=0,threshold:s=.1,rootMargin:l="0px",observeChildren:f=!1,...d}=t;let u=Array.from(e.children),p=!1;const m=[];u.forEach(e=>Y(e));const g=new IntersectionObserver(t=>{!p&&t.some(e=>e.isIntersecting)&&(p=!0,g.disconnect(),u.forEach((t,r)=>{t.parentNode===e&&o.animate(t,{...d,delay:a+r*n})}),u=[])},{threshold:s,rootMargin:l});let h;return g.observe(e),f&&"undefined"!=typeof MutationObserver&&(h=new MutationObserver(t=>{t.forEach(t=>{t.addedNodes.forEach(t=>{t instanceof Element&&t.parentNode===e&&(p?(m.push(t),o.observe(t,{...d,delay:a,stagger:n,threshold:s,rootMargin:l})):(Y(t),u.push(t)))}),t.removedNodes.forEach(e=>{if(!(e instanceof Element))return;u=u.filter(t=>t!==e);const t=m.indexOf(e);t>=0&&(m.splice(t,1),o.unobserve(e))})})}),h.observe(e,{childList:!0})),()=>{g.disconnect(),h?.disconnect(),p||(p=!0,u.forEach(e=>F(e)),u=[]),m.forEach(e=>o.unobserve(e)),m.length=0}},e.supportsScrollTimeline=u,Object.defineProperty(e,"__esModule",{value:!0})});
13
15
  //# sourceMappingURL=index.umd.js.map