@number-flow/svelte
Version:
A component to transition and format numbers.
26 lines (25 loc) • 1.17 kB
JavaScript
import { canAnimate as _canAnimate, prefersReducedMotion as _prefersReducedMotion } from 'number-flow/lite';
import { onMount } from 'svelte';
import { derived, readable } from 'svelte/store';
export * from 'number-flow/plugins';
export { default as NumberFlowGroup } from './NumberFlowGroup.svelte';
export { default, NumberFlowElement } from './NumberFlow.svelte';
const canAnimate = readable(false, (set) => {
onMount(() => {
set(_canAnimate);
});
});
const prefersReducedMotion = readable(false, (set) => {
onMount(() => {
set(_prefersReducedMotion?.matches ?? false);
const onChange = ({ matches }) => {
set(matches);
};
_prefersReducedMotion?.addEventListener('change', onChange);
return () => {
_prefersReducedMotion?.removeEventListener('change', onChange);
};
});
});
const canAnimateWithPreference = derived([canAnimate, prefersReducedMotion], ([canAnimate, prefersReducedMotion]) => canAnimate && !prefersReducedMotion);
export const getCanAnimate = ({ respectMotionPreference = true } = {}) => respectMotionPreference ? canAnimateWithPreference : canAnimate;