@omicrxn/mercury
Version:
Mercury is a Svelte animation library powered by Motion. It simplifies complex animations with Svelte actions, provides layout and exit animations, and integrates seamlessly with Svelte features.
41 lines (40 loc) • 1.36 kB
JavaScript
import { mapTransitionToAnimeJS } from './utils.js';
let animeModule = null;
let loadPromise = null;
export async function loadAnime() {
if (animeModule)
return animeModule;
const globalAnime = typeof window !== 'undefined'
? window.anime
: undefined;
if (globalAnime) {
animeModule = globalAnime;
return animeModule;
}
if (!loadPromise) {
loadPromise = import('animejs').then((mod) => {
animeModule = mod;
return animeModule;
}, () => {
throw new Error('Please install AnimeJS: npm install animejs');
});
}
return loadPromise;
}
export const DEFAULT_LAYOUT_CHILDREN = '[data-layout], [data-layout-id], [data-layout=""]';
export function mapTransitionToAnimeLayout(transition, callbacks, anime) {
const mapped = mapTransitionToAnimeJS(transition, callbacks);
if (transition?.type === 'spring' && anime?.createSpring) {
mapped.ease = anime.createSpring({
stiffness: transition.stiffness,
damping: transition.damping,
mass: transition.mass,
velocity: transition.velocity
});
}
return mapped;
}
export function prefersReducedMotion() {
return (typeof window !== 'undefined' &&
window.matchMedia('(prefers-reduced-motion: reduce)').matches);
}