UNPKG

@re-flex/styles

Version:
57 lines (56 loc) 1.92 kB
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;