@slidy/media
SSR compartible.
Try the [DEMO]
Getting started 🚀
The package is available via [NPM]:
npm i -D @slidy/media or from [CDN]:
<script src="https://unpkg.com/@slidy/media"></script>Usage
Function media({ queries, getter, cookie }) is available via named import as MJS/CJS module or via global Window.Slidy object props as IIFE.
MJS/CJS module import
<head>
<script type="module">
import { media as mediaStore } from 'https://unpkg.com/@slidy/media/dist/index.mjs'; // MJS module
// OR
import { media as mediaStore } from 'https://unpkg.com/@slidy/media/dist/index.cjs'; // CJS module
const media = mediaStore()
</script>
</head> IIFE as Window Object
<head>
<script src="https://unpkg.com/@slidy/media"></script>
</head>
<script>
let mediaQueries = null
window.onload = () => media = Slidy.media()
</script> As third party module in any frameworks
<!-- Svelte -->
<script>
import { media as mediaStore } from '@slidy/media';
const media = mediaStore()
$: console.log($media)
</script>Options
All arguments are optional, only queries required.
interface Options {
queries?: Queries,
getter?: Getter,
cookie?: boolean
} Queries
Media queries rules object like { dark: '(prefers-color-scheme: dark)' }. Support multiple conditions like '(max-width: 840px) or (prefers-color-scheme: light)' more @media rules on MDN
type Queries = {
[key: string]: boolean | string | undefined;
}; <head>
<script type="module">
import { media as mediaStore } from 'https://unpkg.com/@slidy/media/dist/index.mjs';
const queries: MediaQuery = {
xs: '(max-width: 480px)',
sm: '(max-width: 600px)',
md: '(max-width: 840px)',
lg: '(max-width: 960px)',
xl: '(max-width: 1280px)',
xxl: '(min-width: 1281px)',
landscape: '(orientation: landscape)',
portrait: '(orientation: portrait)',
dark: '(prefers-color-scheme: dark)',
light: '(prefers-color-scheme: light)',
mouse: '(hover: hover)',
touch: '(hover: none)'
}
const media = mediaStore({ queries })
</script>
</head> Getter
Callback function with matches object results.
type Getter = (matches: Queries) => void <head>
<script type="module">
import { media as mediaStore } from 'https://unpkg.com/@slidy/media/dist/index.mjs';
const getter = (mqs) => console.log(mqs)
const media = mediaStore({ getter })
</script>
</head> Cookie
Persist media-query matches object in browser cookie like JSON string. Cookie key media.
const cookie: boolean <head>
<script type="module">
import { media as mediaStore } from 'https://unpkg.com/@slidy/media/dist/index.mjs';
const media = mediaStore({ cookie: true })
</script>
</head>