import { find, isNil } from 'lodash-es'; import { MaterialDesign2SchemeStorage } from './material-2-scheme'; import { MaterialDesign3SchemeStorage } from './material-3-scheme'; import { QSchemeStorage } from './q-scheme'; import { SwatchSchemeStorage } from './swatch_scheme'; export type Option = | { label: string; value: string | number | null; } | Record<'label' | 'value', string | number | null>; export type HarmonyColor = { color: string; ratio: number; }; export type ColorDescription = { name: string; pinyin: string[]; hue: number; lightness: number; category: string; tags: string[]; rgb: [number, number, number]; hsl: [number, number, number]; lab: [number, number, number]; oklch: [number, number, number]; }; export type SchemeType = 'q_scheme' | 'swatch_scheme' | 'material_2' | 'material_3'; export type SchemeTypeOption = { label: string; short: string; value: SchemeType; }; export const SchemeTypeOptions: SchemeTypeOption[] = [ { label: 'Q Scheme', short: 'Q', value: 'q_scheme' }, { label: 'Swatch Scheme', short: 'Swatch', value: 'swatch_scheme' }, { label: 'Material Design 2 Scheme', short: 'M2', value: 'material_2' }, { label: 'Material Design 3 Scheme', short: 'M3', value: 'material_3' }, ]; export function schemeType( value?: SchemeTypeOption['value'] | null, short?: boolean, ): string | null { const useShort = short ?? false; const foundType = find(SchemeTypeOptions, { value }) as SchemeTypeOption | undefined; if (isNil(foundType)) { return 'CORRUPTED'; } return useShort ? foundType.short : foundType.label; } export type SchemeContent = { id: string; name: string; createdAt: string; description: string | null; type: SchemeType; schemeStorage: SchemeStorage; }; export type ColorShifting = { chroma: number; lightness: number; }; export type SchemeStorage = | QSchemeStorage | SwatchSchemeStorage | MaterialDesign2SchemeStorage | MaterialDesign3SchemeStorage;