Files
color-q/src/models.ts
徐涛 4119a1ab64 fix: 修正Q2方案标签并添加导出功能
修复Q2方案的标签显示不一致问题,将"Q Scheme 2"改为"Q2 Scheme"
在Q2方案页面添加导出功能组件
2025-07-14 23:05:01 +08:00

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;