import { createStyles } from 'antd-style';
import { Flexbox } from 'react-layout-kit';
import chroma from 'chroma-js';
import { useStore } from 'dumi-theme-antd-style/builtins/ColorPalettes/store';
import { FC, useMemo } from 'react';
import { invertColor } from './invertColor';
const useStyles = createStyles(({ css }) => ({
title: css`
height: 32px;
`,
palette: css`
border-radius: 6px;
overflow: hidden;
`,
color: css`
height: 40px;
font-family: Monaco, Consolas, 'Courier New', monospace;
`,
}));
interface Palette {
key: string;
colors: string[];
}
const ColorItem = ({ color, index }: { color: string; index: number }) => {
const { styles } = useStyles();
const { mode } = useStore();
const colorValue = useMemo(() => {
const safeFixed = (num: number) => (isNaN(num) ? '/' : num.toFixed(0));
switch (mode) {
case 'hex':
return color;
case 'oklch':
// eslint-disable-next-line no-case-declarations
const [light, ch, hue] = chroma(color).oklch();
return `${safeFixed(light * 100)},${safeFixed(ch * 100)},${safeFixed(hue)}`;
case 'hsl':
// eslint-disable-next-line no-case-declarations
const hsl = chroma(color).hsl();
return `${safeFixed(hsl[0])},${safeFixed(hsl[1] * 100)}%,${safeFixed(hsl[2] * 100)}%`;
case 'hsv':
// eslint-disable-next-line no-case-declarations
const hsv = chroma(color).hsv();
return `${safeFixed(hsv[0])},${safeFixed(hsv[1] * 100)}%,${safeFixed(hsv[2] * 100)}%`;
}
}, [mode, color]);
return (
{index}
{colorValue}
);
};
interface ColorPaletteProps {
palette: Palette[];
}
const ColorPalette: FC = ({ palette }) => {
const { styles } = useStyles();
return (
{palette.map((map) => {
return (
{map.key}
{map.colors.map((hex, index) => (
))}
);
})}
);
};
export default ColorPalette;