-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathindex.js
112 lines (103 loc) · 3.55 KB
/
index.js
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
const plugin = require('tailwindcss/plugin')
const containerQuery = plugin(
function ({ addUtilities, addVariant, matchVariant, theme, variants, e, postcss }) {
const containerType = theme('containerType')
const containerQuery = theme('containerQuery')
const containerName = theme('containerName')
addUtilities(
[
Object.entries(containerType).map(([key, value]) => {
return {
[`.${e(`container-type-${key}`)}`]: {
'container-type': `${value}`,
},
}
})
],
variants('containerType')
)
addUtilities(
[
Object.entries(containerName).map(([key, value]) => {
return {
[`.${e(`container-name-${key}`)}`]: {
'container-name': `${value}`,
},
}
})
],
variants('containerName')
)
matchVariant({
'cq-h': (queryValue) => `@container (min-height: ${queryValue})`,
})
matchVariant({
'cq-w': (queryValue) => `@container (min-width: ${queryValue})`,
})
Object.entries(containerQuery).map(([key, value]) => {
return addVariant(`cq-w-${key}`, ({ container, separator }) => {
const cqRule = postcss.atRule({ name: 'container', params: `(min-width: ${value})` })
cqRule.append(container.nodes)
container.append(cqRule)
cqRule.walkRules(rule => {
rule.selector = `.${e(`cq-w-${key}${separator}`)}${rule.selector.slice(1)}`
})
})
})
Object.entries(containerQuery).map(([queryName, queryValue]) => {
return Object.entries(containerName).map(([nameKey, nameValue]) => {
return addVariant(`cq-w-${nameKey}-${queryName}`, ({ container, separator }) => {
const cqRule = postcss.atRule({ name: 'container', params: `${nameValue} (min-width: ${queryValue})` })
cqRule.append(container.nodes)
container.append(cqRule)
cqRule.walkRules(rule => {
rule.selector = `.${e(`cq-w-${nameKey}-${queryName}${separator}`)}${rule.selector.slice(1)}`
})
})
})
})
Object.entries(containerQuery).map(([key, value]) => {
return addVariant(`cq-h-${key}`, ({ container, separator }) => {
const cqRule = postcss.atRule({ name: 'container', params: `(min-height: ${value})` })
cqRule.append(container.nodes)
container.append(cqRule)
cqRule.walkRules(rule => {
rule.selector = `.${e(`cq-h-${key}${separator}`)}${rule.selector.slice(1)}`
})
})
})
Object.entries(containerQuery).map(([queryName, queryValue]) => {
return Object.entries(containerName).map(([nameKey, nameValue]) => {
return addVariant(`cq-h-${nameKey}-${queryName}`, ({ container, separator }) => {
const cqRule = postcss.atRule({ name: 'container', params: `${nameValue} (min-height: ${queryValue})` })
cqRule.append(container.nodes)
container.append(cqRule)
cqRule.walkRules(rule => {
rule.selector = `.${e(`cq-h-${nameKey}-${queryName}${separator}`)}${rule.selector.slice(1)}`
})
})
})
})
},
{
experimental: { matchVariant: true },
theme: {
containerQuery: {
4: '64px',
6: '96px',
9: '144px',
16: '256px',
22: '352px',
},
containerType: {
size: 'size',
'inline-size': 'inline-size',
'block-size': 'block-size',
style: 'style',
state: 'state',
},
containerName: {}
},
}
)
module.exports = containerQuery