90 lines
2.3 KiB
TypeScript
90 lines
2.3 KiB
TypeScript
import { find, isNil } from 'lodash-es';
|
|
import { MaterialDesign2SchemeStorage } from './material-2-scheme';
|
|
import {
|
|
MaterialDesign3DynamicSchemeStorage,
|
|
MaterialDesign3SchemeStorage,
|
|
} from './material-3-scheme';
|
|
import { Q2SchemeStorage } from './q-2-scheme';
|
|
import { QSchemeStorage } from './q-scheme';
|
|
import { SwatchSchemeStorage } from './swatch_scheme';
|
|
|
|
export type Option<T = string | number | null> =
|
|
| {
|
|
label: string;
|
|
value: T;
|
|
}
|
|
| Record<'label' | 'value', T>;
|
|
|
|
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'
|
|
| 'q_2_scheme'
|
|
| 'swatch_scheme'
|
|
| 'material_2'
|
|
| 'material_3'
|
|
| 'material_3_dynamic';
|
|
export type SchemeTypeOption = {
|
|
label: string;
|
|
short: string;
|
|
value: SchemeType;
|
|
};
|
|
export const SchemeTypeOptions: SchemeTypeOption[] = [
|
|
{ label: 'Q Scheme', short: 'Q', value: 'q_scheme' },
|
|
{ label: 'Q2 Scheme', short: 'Q2', value: 'q_2_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' },
|
|
{ label: 'Material Design 3 Dynamic Scheme', short: 'M3D', value: 'material_3_dynamic' },
|
|
];
|
|
|
|
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<SchemeStorage> = {
|
|
id: string;
|
|
name: string;
|
|
createdAt: string;
|
|
description: string | null;
|
|
type: SchemeType;
|
|
schemeStorage: SchemeStorage;
|
|
};
|
|
|
|
export type ColorShifting = {
|
|
chroma: number;
|
|
lightness: number;
|
|
};
|
|
|
|
export type SchemeStorage =
|
|
| QSchemeStorage
|
|
| Q2SchemeStorage
|
|
| SwatchSchemeStorage
|
|
| MaterialDesign2SchemeStorage
|
|
| MaterialDesign3SchemeStorage
|
|
| MaterialDesign3DynamicSchemeStorage;
|