-
Notifications
You must be signed in to change notification settings - Fork 0
/
plugin.js
77 lines (74 loc) · 1.69 KB
/
plugin.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
const plugin = require("tailwindcss/plugin");
function flattenTailwindColors(obj) {
return Object.keys(obj).reduce((acc, key) => {
const current = obj[key];
if (!current) {
return acc;
}
if (typeof current === "string") {
acc[key] = current;
} else {
for (const [colorNumber, colorValue] of Object.entries(current)) {
if (colorNumber === "DEFAULT") {
acc[key] = colorValue;
} else {
acc[`${key}-${colorNumber}`] = colorValue;
}
}
}
return acc;
}, {});
}
module.exports = plugin(({ matchUtilities, theme }) => {
matchUtilities(
{
"gap-divide-y": (value) => ({
"& > *": {
paddingTop: value,
paddingBottom: value,
borderBottomWidth: "1px",
borderColor: theme("colors.border"),
},
"& > *:first-child": {
paddingTop: "0",
},
"& > *:last-child": {
paddingBottom: "0",
borderBottomWidth: "0",
},
}),
"gap-divide-x": (value) => ({
"& > *": {
paddingLeft: value,
paddingRight: value,
borderRightWidth: "1px",
borderColor: theme("colors.border"),
},
"& > *:first-child": {
paddingLeft: "0",
},
"& > *:last-child": {
paddingRight: "0",
borderRight: "0",
},
}),
},
{
values: theme("spacing"),
type: "length",
},
);
matchUtilities(
{
"gap-divide": (value) => ({
"& > *": {
borderColor: value,
},
}),
},
{
values: flattenTailwindColors(theme("colors")),
type: "color",
},
);
});