forked from unocss/unocss
/
media.ts
30 lines (26 loc) · 910 Bytes
/
media.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import type { Variant, VariantContext, VariantObject } from '@unocss/core'
import type { Theme } from '../theme'
import { handler as h, variantGetParameter, variantParentMatcher } from '../utils'
export const variantPrint: Variant = variantParentMatcher('print', '@media print')
export const variantCustomMedia: VariantObject = {
name: 'media',
match(matcher, { theme }: VariantContext<Theme>) {
const variant = variantGetParameter('media-', matcher, [':', '-'])
if (variant) {
const [match, rest] = variant
let media = h.bracket(match) ?? ''
if (media === '')
media = theme.media?.[match] ?? ''
if (media) {
return {
matcher: rest,
handle: (input, next) => next({
...input,
parent: `${input.parent ? `${input.parent} $$ ` : ''}@media ${media}`,
}),
}
}
}
},
multiPass: true,
}