2020-04-26 11:05:42 -04:00
|
|
|
import createColor from 'color'
|
2020-05-01 05:22:52 +02:00
|
|
|
import _ from 'lodash'
|
2020-04-26 09:48:54 -04:00
|
|
|
|
|
|
|
|
function hasAlpha(color) {
|
|
|
|
|
return (
|
|
|
|
|
color.startsWith('rgba(') ||
|
|
|
|
|
color.startsWith('hsla(') ||
|
|
|
|
|
(color.startsWith('#') && color.length === 9) ||
|
|
|
|
|
(color.startsWith('#') && color.length === 5)
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-17 10:54:16 -04:00
|
|
|
export function toRgba(color) {
|
2020-04-26 09:48:54 -04:00
|
|
|
const [r, g, b, a] = createColor(color)
|
|
|
|
|
.rgb()
|
|
|
|
|
.array()
|
|
|
|
|
|
|
|
|
|
return [r, g, b, a === undefined && hasAlpha(color) ? 1 : a]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default function withAlphaVariable({ color, property, variable }) {
|
2020-05-01 05:22:52 +02:00
|
|
|
if (_.isFunction(color)) {
|
|
|
|
|
return {
|
2020-06-28 20:46:23 +02:00
|
|
|
[property]: color({ opacityVariable: variable }),
|
2020-05-01 05:22:52 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-26 09:48:54 -04:00
|
|
|
try {
|
|
|
|
|
const [r, g, b, a] = toRgba(color)
|
|
|
|
|
|
|
|
|
|
if (a !== undefined) {
|
|
|
|
|
return {
|
|
|
|
|
[property]: color,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
[variable]: '1',
|
|
|
|
|
[property]: [color, `rgba(${r}, ${g}, ${b}, var(${variable}))`],
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
return {
|
|
|
|
|
[property]: color,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|