Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ghostdevv/svelte-reduced-motion

A collection of utilities for working with reduced motion in svelte!
https://github.com/ghostdevv/svelte-reduced-motion

hacktoberfest svelte

Last synced: 11 days ago
JSON representation

A collection of utilities for working with reduced motion in svelte!

Awesome Lists containing this project

README

        

# Svelte Reduced Motion

A library for working with reduced motion and Svelte transitions. Read more about [why reduced motion is important](https://ghostdev.xyz/posts/working-with-reduced-motion-in-svelte/). Please [create an issue](https://github.com/ghostdevv/svelte-reduced-motion/issues/new) if something is missing/wrong.

# Installing

```sh
npm install svelte-reduced-motion -D
```

This library works with Svelte 5 only, [checkout v1](https://www.npmjs.com/package/svelte-reduced-motion/v/1.1.1) for Svelte 3/4 support.

# Usage

Below is some use cases for the library, checkout the [full docs here](https://svelte-reduced-motion.willow.codes).

## Transitions

The easiest way to get started is with the `svelte/transition` wrapper. This wraps all official transitions with our `createTransition` api, which will automatically use fade when reduced motion is requested.

```diff

- import { fly } from 'svelte/transition';
+ import { fly } from 'svelte-reduced-motion/transition';

```

You can provide your own fallback transition with the `createTransition` api. We'll import the regular fly and blur transitions for this. The first argument is the target transition, with the second being the fallback.

```svelte

import { createTransition } from 'svelte-reduced-motion';
import { fly, blur } from 'svelte/transition';

const accessibleFly = createTransition(fly, blur);

```

If we want to specify options per transition, you can do that in the createTransition fn. Any options passed to the final transition will overwrite them, and still cause a merge.

```svelte

import { createTransition } from 'svelte-reduced-motion';
import { fly, blur } from 'svelte/transition';

const accessibleFly = createTransition(
[fly, { y: -20, duration: 200 }],
[blur, { duration: 500 }],
);


```

## Store

You can also import the `prefersReducedMotion` store to make checks for yourself.

```svelte

import { prefersReducedMotion } from 'svelte-reduced-motion';

{#if $prefersReducedMotion}

The user prefers reduced motion!


{/if}
```

# Migrating from v1 to v2

- Requires Svelte 5
- The `reducedMotion` store is now called `prefersReducedMotion` to match the media query
- The types have been tweaked to be more compatible, please let me know if there any issues.

# Support

- Create a issue on the [github](https://github.com/ghostdevv/svelte-reduced-motion/issues/new)
- Join the [discord](https://discord.gg/2Vd4wAjJnm)