import { objectFromEntries, objectKeys } from './helpers' import { colorTokens } from './tokens' export const palettes = (() => { const lightTransparent = 'rgba(255,255,255,0)' const darkTransparent = 'rgba(10,10,10,0)' const transparent = (hsl: string, opacity = 0) => hsl.replace(`%)`, `%, ${opacity})`).replace(`hsl(`, `hsla(`) const getColorPalette = (colors: object, color = colors[0]): string[] => { const colorPalette = Object.values(colors) // were re-ordering these const [head, tail] = [ colorPalette.slice(0, 6), colorPalette.slice(colorPalette.length - 5), ] // add our transparent colors first/last // and make sure the last (foreground) color is white/black rather than colorful // this is mostly for consistency with the older theme-base return [ transparent(colorPalette[0]), ...head, ...tail, color, transparent(colorPalette[colorPalette.length - 1]), ] } const lightColor = 'hsl(0, 0%, 9.0%)' const lightPalette = [ lightTransparent, '#fff', '#f8f8f8', 'hsl(0, 0%, 96.3%)', 'hsl(0, 0%, 94.1%)', 'hsl(0, 0%, 92.0%)', 'hsl(0, 0%, 90.0%)', 'hsl(0, 0%, 88.5%)', 'hsl(0, 0%, 81.0%)', 'hsl(0, 0%, 56.1%)', 'hsl(0, 0%, 50.3%)', 'hsl(0, 0%, 42.5%)', lightColor, darkTransparent, ] const darkColor = '#fff' const darkPalette = [ darkTransparent, '#050505', '#151515', '#191919', '#232323', '#282828', '#323232', '#424242', '#494949', '#545454', '#626262', '#a5a5a5', darkColor, lightTransparent, ] const lightPalettes = objectFromEntries( objectKeys(colorTokens.light).map( (key) => [`light_${key}`, getColorPalette(colorTokens.light[key], lightColor)] as const ) ) const darkPalettes = objectFromEntries( objectKeys(colorTokens.dark).map( (key) => [`dark_${key}`, getColorPalette(colorTokens.dark[key], darkColor)] as const ) ) const colorPalettes = { ...lightPalettes, ...darkPalettes, } return { light: lightPalette, dark: darkPalette, ...colorPalettes, } })()