Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/jill64/svelte-dark-theme

☯ Dark Theme Manager for SvelteKit
https://github.com/jill64/svelte-dark-theme

dark dark-mode ssr svelte sveltekit theme

Last synced: 3 months ago
JSON representation

☯ Dark Theme Manager for SvelteKit

Awesome Lists containing this project

README

        

# @jill64/svelte-dark-theme

npm-version npm-license npm-download-month npm-min-size ci.yml website

☯ Dark Theme Manager for SvelteKit

## [Demo](https://svelte-dark-theme.jill64.dev)

## Example

```svelte

import { ThemeManager, setting, theme } from '@jill64/svelte-dark-theme'

const setToDark = () => {
$setting = 'dark'
}

const setToLight = () => {
$setting = 'light'
}

const setToDeviceSync = () => {
$setting = 'sync'
}

Theme: {$theme}

Setting: {$setting}

:global(body.light) {
/* light mode styling */
}
:global(body.dark) {
/* dark mode styling */
}

```

## flip

This function provides the smart theme switching found on some sites.
Each call to the function switches the `setting` according to the following rules

| before setting | device theme | after setting | after theme |
| -------------- | ------------ | ------------- | ----------- |
| `light` | `light` | `dark` | `dark` |
| `light` | `dark` | `sync` | `dark` |
| `dark` | `light` | `sync` | `light` |
| `dark` | `dark` | `light` | `light` |
| `sync` | `light` | `dark` | `dark` |
| `sync` | `dark` | `light` | `light` |

```svelte

import { flip } from '@jill64/svelte-dark-theme'

flip theme
```

## SSR (Optional)

When using SSR, you can reduce flushing on load by binding classes to html with hooks.

```js
// hooks.server.js
import { onRender } from '@jill64/svelte-dark-theme'

export const handle = onRender({
// Optional Configs
// {
// cookieKey: string (default: 'svelte-dark-theme')
// }
})
```

Use `sequence` when combining with other processing.

```js
// hooks.server.js
import { onRender } from '@jill64/svelte-dark-theme'
import { sequence } from '@sveltejs/kit/hooks'

export const handle = sequence(onRender(), async ({ event, resolve }) => {
// ...
return resolve(event)
})
```

## License

[MIT](LICENSE)