71 lines
1.5 KiB
JavaScript
71 lines
1.5 KiB
JavaScript
const omit = require('lodash/omit')
|
|
const twColors = require('tailwindcss/colors')
|
|
|
|
const toRGBString = hexCode => {
|
|
if (hexCode.startsWith('#')) {
|
|
let hex = hexCode.replace('#', '')
|
|
|
|
if (hex.length === 3) {
|
|
hex = `${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`
|
|
}
|
|
|
|
const r = parseInt(hex.substring(0, 2), 16)
|
|
const g = parseInt(hex.substring(2, 4), 16)
|
|
const b = parseInt(hex.substring(4, 6), 16)
|
|
|
|
return `${r}, ${g}, ${b}`
|
|
}
|
|
|
|
return hexCode
|
|
}
|
|
|
|
const colors = { primary: twColors.sky, ...twColors, gray: twColors.slate }
|
|
|
|
const except = omit(colors, [
|
|
'lightBlue',
|
|
'warmGray',
|
|
'trueGray',
|
|
'coolGray',
|
|
'blueGray',
|
|
])
|
|
|
|
function generateRootCSSVars() {
|
|
return Object.fromEntries(
|
|
Object.entries(except)
|
|
.map(([key, value]) => {
|
|
if (typeof value === 'string') {
|
|
return [[`--colors-${key}`, toRGBString(value)]]
|
|
}
|
|
|
|
return Object.entries(value).map(([shade, color]) => {
|
|
return [`--colors-${key}-${shade}`, toRGBString(color)]
|
|
})
|
|
})
|
|
.flat(1)
|
|
)
|
|
}
|
|
|
|
function generateTailwindColors() {
|
|
return Object.fromEntries(
|
|
Object.entries(except).map(([key, value]) => {
|
|
if (typeof value === 'string') {
|
|
return [`${key}`, value]
|
|
}
|
|
|
|
return [
|
|
key,
|
|
Object.fromEntries(
|
|
Object.entries(value).map(([shade]) => {
|
|
return [`${shade}`, `rgba(var(--colors-${key}-${shade}))`]
|
|
})
|
|
),
|
|
]
|
|
})
|
|
)
|
|
}
|
|
|
|
module.exports = {
|
|
generateRootCSSVars,
|
|
generateTailwindColors,
|
|
}
|