@re-flex/styles
Version:
Core Style Util Package
57 lines (56 loc) • 1.92 kB
JavaScript
import { fastMemoize, isObject } from "@re-flex/utils";
import { readableColorIsBlack } from "color2k";
import { UI_ACTIVE_THEME } from ".";
const checkSystemColorScheme = /(#|rgb|rgba|hsl|hsla)/;
const ignoreColorList = new Set([
"transparent",
"inherit",
"initial",
"currentColor",
]);
const hasIgnoringColor = fastMemoize((color) => ignoreColorList.has(color));
const isDarkColor = fastMemoize((color) => readableColorIsBlack(color));
const toHumanize = fastMemoize((color) => {
const isDark = !isDarkColor(color);
const cc = {
isDark,
primaryColor: color,
secondaryColor: isDark ? "#ffffff" : "#000000",
};
return cc;
});
const includesDot = fastMemoize((color) => color.includes("."));
const parseColor = (color) => {
const palette = UI_ACTIVE_THEME.palette;
if (hasIgnoringColor(color)) {
color = "#000000";
return toHumanize(color);
}
else if (typeof color === "string" && !checkSystemColorScheme.test(color)) {
if (color.match(new RegExp(Object.keys(palette).join("|"), "gim"))) {
if (includesDot(color)) {
const [f, t] = color.split(".");
color = palette[f][t];
return toHumanize(color);
}
else if (color === "divider") {
color = palette.divider;
return toHumanize(color);
}
else if (palette.hasOwnProperty(color)) {
if (isObject(palette[color])) {
return toHumanize(palette[color]?.["main"] || palette[color]?.["default"]);
}
else {
return toHumanize(palette[color]);
}
}
}
else {
color = palette.text.secondary;
return toHumanize(color);
}
}
return toHumanize(color);
};
export default parseColor;