sforkowany z mirror/soapbox
47 wiersze
1.3 KiB
JavaScript
47 wiersze
1.3 KiB
JavaScript
|
// https://tailwindcss.com/docs/customizing-colors#using-css-variables
|
||
|
function withOpacityValue(variable) {
|
||
|
return ({ opacityValue }) => {
|
||
|
if (opacityValue === undefined) {
|
||
|
return `rgb(var(${variable}))`;
|
||
|
}
|
||
|
return `rgb(var(${variable}) / ${opacityValue})`;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
// Parse a single color as a CSS variable
|
||
|
const toColorVariable = (colorName, tint = null) => {
|
||
|
const suffix = tint ? `-${tint}` : '';
|
||
|
const variable = `--color-${colorName}${suffix}`;
|
||
|
|
||
|
return withOpacityValue(variable);
|
||
|
};
|
||
|
|
||
|
// Parse list of tints into Tailwind function with CSS variables
|
||
|
const parseTints = (colorName, tints) => {
|
||
|
return tints.reduce((colorObj, tint) => {
|
||
|
colorObj[tint] = toColorVariable(colorName, tint);
|
||
|
return colorObj;
|
||
|
}, {});
|
||
|
};
|
||
|
|
||
|
// Parse color matrix into Tailwind color palette
|
||
|
const parseColorMatrix = colorMatrix => {
|
||
|
return Object.entries(colorMatrix).reduce((palette, colorData) => {
|
||
|
const [colorName, tints] = colorData;
|
||
|
|
||
|
// Conditionally parse array or single-tint colors
|
||
|
if (Array.isArray(tints)) {
|
||
|
palette[colorName] = parseTints(colorName, tints);
|
||
|
} else if (tints === true) {
|
||
|
palette[colorName] = toColorVariable(colorName);
|
||
|
}
|
||
|
|
||
|
return palette;
|
||
|
}, {});
|
||
|
};
|
||
|
|
||
|
module.exports = {
|
||
|
withOpacityValue,
|
||
|
parseColorMatrix,
|
||
|
};
|