/
misc.ts
77 lines (71 loc) · 1.66 KB
/
misc.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import type { Variant } from '@unocss/core'
import { handler as h } from '../utils'
export const variantSelector: Variant = {
name: 'selector',
match(matcher) {
const match = matcher.match(/^selector-\[(.+?)\][:-]/)
if (match) {
return {
matcher: matcher.slice(match[0].length),
selector: () => match[1],
}
}
},
}
export const variantCssLayer: Variant = {
name: 'layer',
match(matcher) {
const match = matcher.match(/^layer-([_\d\w]+)[:-]/)
if (match) {
return {
matcher: matcher.slice(match[0].length),
parent: `@layer ${match[1]}`,
}
}
},
}
export const variantInternalLayer: Variant = {
name: 'uno-layer',
match(matcher) {
const match = matcher.match(/^uno-layer-([_\d\w]+)[:-]/)
if (match) {
return {
matcher: matcher.slice(match[0].length),
layer: match[1],
}
}
},
}
export const variantScope: Variant = {
name: 'scope',
match(matcher) {
const match = matcher.match(/^scope-([_\d\w]+)[:-]/)
if (match) {
return {
matcher: matcher.slice(match[0].length),
selector: s => `.${match[1]} $$ ${s}`,
}
}
},
}
export const variantVariables: Variant = {
name: 'variables',
match(matcher) {
const match = matcher.match(/^(\[.+?\]):/)
if (match) {
const variant = h.bracket(match[1]) ?? ''
const updates = variant.startsWith('@')
? {
parent: variant,
}
: {
selector: (s: string) => variant.replace(/&/g, s),
}
return {
matcher: matcher.slice(match[0].length),
...updates,
}
}
},
multiPass: true,
}