feat(配色方案): 添加Q2配色方案支持
新增Q2配色方案相关组件、模型和样式定义 在SchemeSign组件中添加q2样式支持 扩展模型以包含Q2方案类型和存储结构
This commit is contained in:
parent
680ca173da
commit
e327885545
@ -9,6 +9,9 @@
|
|||||||
&.swatch {
|
&.swatch {
|
||||||
background-color: var(--color-pinlan);
|
background-color: var(--color-pinlan);
|
||||||
}
|
}
|
||||||
|
&.q2 {
|
||||||
|
background-color: var(--color-jugengzi);
|
||||||
|
}
|
||||||
&.m2 {
|
&.m2 {
|
||||||
background-color: #03dac6;
|
background-color: #03dac6;
|
||||||
color: var(--color-qihei);
|
color: var(--color-qihei);
|
||||||
|
@ -16,6 +16,8 @@ export function SchemeSign({ scheme, short = false }: SchemeSignProps) {
|
|||||||
switch (scheme) {
|
switch (scheme) {
|
||||||
case 'q_scheme':
|
case 'q_scheme':
|
||||||
return styles.q;
|
return styles.q;
|
||||||
|
case 'q_2_scheme':
|
||||||
|
return styles.q2;
|
||||||
case 'swatch_scheme':
|
case 'swatch_scheme':
|
||||||
return styles.swatch;
|
return styles.swatch;
|
||||||
case 'material_2':
|
case 'material_2':
|
||||||
|
@ -4,6 +4,7 @@ import {
|
|||||||
MaterialDesign3DynamicSchemeStorage,
|
MaterialDesign3DynamicSchemeStorage,
|
||||||
MaterialDesign3SchemeStorage,
|
MaterialDesign3SchemeStorage,
|
||||||
} from './material-3-scheme';
|
} from './material-3-scheme';
|
||||||
|
import { Q2SchemeStorage } from './q-2-scheme';
|
||||||
import { QSchemeStorage } from './q-scheme';
|
import { QSchemeStorage } from './q-scheme';
|
||||||
import { SwatchSchemeStorage } from './swatch_scheme';
|
import { SwatchSchemeStorage } from './swatch_scheme';
|
||||||
|
|
||||||
@ -34,6 +35,7 @@ export type ColorDescription = {
|
|||||||
|
|
||||||
export type SchemeType =
|
export type SchemeType =
|
||||||
| 'q_scheme'
|
| 'q_scheme'
|
||||||
|
| 'q_2_scheme'
|
||||||
| 'swatch_scheme'
|
| 'swatch_scheme'
|
||||||
| 'material_2'
|
| 'material_2'
|
||||||
| 'material_3'
|
| 'material_3'
|
||||||
@ -45,6 +47,7 @@ export type SchemeTypeOption = {
|
|||||||
};
|
};
|
||||||
export const SchemeTypeOptions: SchemeTypeOption[] = [
|
export const SchemeTypeOptions: SchemeTypeOption[] = [
|
||||||
{ label: 'Q Scheme', short: 'Q', value: 'q_scheme' },
|
{ label: 'Q Scheme', short: 'Q', value: 'q_scheme' },
|
||||||
|
{ label: 'Q Scheme 2', short: 'Q2', value: 'q_2_scheme' },
|
||||||
{ label: 'Swatch Scheme', short: 'Swatch', value: 'swatch_scheme' },
|
{ label: 'Swatch Scheme', short: 'Swatch', value: 'swatch_scheme' },
|
||||||
{ label: 'Material Design 2 Scheme', short: 'M2', value: 'material_2' },
|
{ label: 'Material Design 2 Scheme', short: 'M2', value: 'material_2' },
|
||||||
{ label: 'Material Design 3 Scheme', short: 'M3', value: 'material_3' },
|
{ label: 'Material Design 3 Scheme', short: 'M3', value: 'material_3' },
|
||||||
@ -79,6 +82,7 @@ export type ColorShifting = {
|
|||||||
|
|
||||||
export type SchemeStorage =
|
export type SchemeStorage =
|
||||||
| QSchemeStorage
|
| QSchemeStorage
|
||||||
|
| Q2SchemeStorage
|
||||||
| SwatchSchemeStorage
|
| SwatchSchemeStorage
|
||||||
| MaterialDesign2SchemeStorage
|
| MaterialDesign2SchemeStorage
|
||||||
| MaterialDesign3SchemeStorage
|
| MaterialDesign3SchemeStorage
|
||||||
|
35
src/page-components/scheme/Q2Scheme.tsx
Normal file
35
src/page-components/scheme/Q2Scheme.tsx
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import { useState } from 'react';
|
||||||
|
import { Tab } from '../../components/Tab';
|
||||||
|
import { SchemeContent } from '../../models';
|
||||||
|
import { Q2SchemeStorage } from '../../q-2-scheme';
|
||||||
|
import { isNilOrEmpty } from '../../utls';
|
||||||
|
|
||||||
|
const tabOptions = [
|
||||||
|
{ title: 'Overview', id: 'overview' },
|
||||||
|
{ title: 'Builder', id: 'builder' },
|
||||||
|
{ title: 'Exports', id: 'export' },
|
||||||
|
];
|
||||||
|
|
||||||
|
type Q2SchemeProps = {
|
||||||
|
scheme: SchemeContent<Q2SchemeStorage>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export function Q2Scheme({ scheme }: Q2SchemeProps) {
|
||||||
|
const [activeTab, setActiveTab] = useState<(typeof tabOptions)[number]['id']>(() =>
|
||||||
|
isNil(scheme.schemeStorage.scheme) ? 'builder' : 'overview',
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Tab
|
||||||
|
tabs={tabOptions}
|
||||||
|
activeTab={activeTab}
|
||||||
|
onActive={(v) => setActiveTab(v as string)}
|
||||||
|
disabled={{
|
||||||
|
overview: isNilOrEmpty(scheme.schemeStorage?.scheme),
|
||||||
|
export: isNilOrEmpty(scheme.schemeStorage?.cssVariables),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
@ -15,8 +15,10 @@ import { CorruptedScheme } from '../page-components/scheme/CorruptedScheme';
|
|||||||
import { M2Scheme } from '../page-components/scheme/M2Scheme';
|
import { M2Scheme } from '../page-components/scheme/M2Scheme';
|
||||||
import { M3DynamicScheme } from '../page-components/scheme/M3DynamicScheme';
|
import { M3DynamicScheme } from '../page-components/scheme/M3DynamicScheme';
|
||||||
import { M3Scheme } from '../page-components/scheme/M3Scheme';
|
import { M3Scheme } from '../page-components/scheme/M3Scheme';
|
||||||
|
import { Q2Scheme } from '../page-components/scheme/Q2Scheme';
|
||||||
import { QScheme } from '../page-components/scheme/QScheme';
|
import { QScheme } from '../page-components/scheme/QScheme';
|
||||||
import { SwatchScheme } from '../page-components/scheme/SwatchScheme';
|
import { SwatchScheme } from '../page-components/scheme/SwatchScheme';
|
||||||
|
import { Q2SchemeSource } from '../q-2-scheme';
|
||||||
import { QSchemeStorage } from '../q-scheme';
|
import { QSchemeStorage } from '../q-scheme';
|
||||||
import { useScheme, useUpdateScheme } from '../stores/schemes';
|
import { useScheme, useUpdateScheme } from '../stores/schemes';
|
||||||
import { SwatchSchemeStorage } from '../swatch_scheme';
|
import { SwatchSchemeStorage } from '../swatch_scheme';
|
||||||
@ -50,6 +52,8 @@ export function SchemeDetail() {
|
|||||||
switch (scheme?.type) {
|
switch (scheme?.type) {
|
||||||
case 'q_scheme':
|
case 'q_scheme':
|
||||||
return <QScheme scheme={scheme as SchemeContent<QSchemeStorage>} />;
|
return <QScheme scheme={scheme as SchemeContent<QSchemeStorage>} />;
|
||||||
|
case 'q_2_scheme':
|
||||||
|
return <Q2Scheme scheme={scheme as SchemeContent<Q2SchemeSource>} />;
|
||||||
case 'swatch_scheme':
|
case 'swatch_scheme':
|
||||||
return <SwatchScheme scheme={scheme as SchemeContent<SwatchSchemeStorage>} />;
|
return <SwatchScheme scheme={scheme as SchemeContent<SwatchSchemeStorage>} />;
|
||||||
case 'material_2':
|
case 'material_2':
|
||||||
|
66
src/q-2-scheme.ts
Normal file
66
src/q-2-scheme.ts
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
import { QSchemeSetting } from './q-scheme';
|
||||||
|
|
||||||
|
export type Q2ColorSet = {
|
||||||
|
root: string;
|
||||||
|
hover: string;
|
||||||
|
active: string;
|
||||||
|
focus: string;
|
||||||
|
disabled: string;
|
||||||
|
onRoot: string;
|
||||||
|
onDisabled: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type Q2ColorUnit = {
|
||||||
|
root: Q2ColorSet;
|
||||||
|
surface: Q2ColorSet;
|
||||||
|
swatch: Map<string, string>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type Q2Baseline = {
|
||||||
|
primary: Q2ColorUnit;
|
||||||
|
secondary: Q2ColorUnit | null;
|
||||||
|
tertiary: Q2ColorUnit | null;
|
||||||
|
accent: Q2ColorUnit | null;
|
||||||
|
neutral: Q2ColorUnit;
|
||||||
|
neutralVariant: Q2ColorUnit;
|
||||||
|
surface: Q2ColorUnit;
|
||||||
|
surfaceVariant: Q2ColorUnit;
|
||||||
|
danger: Q2ColorUnit;
|
||||||
|
success: Q2ColorUnit;
|
||||||
|
warn: Q2ColorUnit;
|
||||||
|
info: Q2ColorUnit;
|
||||||
|
shadow: string;
|
||||||
|
overlay: string;
|
||||||
|
outline: string;
|
||||||
|
outlineVariant: string;
|
||||||
|
custom: Map<string, Q2ColorUnit>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type Q2Scheme = {
|
||||||
|
light: Q2Baseline;
|
||||||
|
dark: Q2Baseline;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type Q2SchemeSource = {
|
||||||
|
primary: string | null;
|
||||||
|
secondary: string | null;
|
||||||
|
tertiary: string | null;
|
||||||
|
accent: string | null;
|
||||||
|
danger: string | null;
|
||||||
|
success: string | null;
|
||||||
|
warn: string | null;
|
||||||
|
info: string | null;
|
||||||
|
foreground: string | null;
|
||||||
|
background: string | null;
|
||||||
|
custom_colors?: Record<string, string>;
|
||||||
|
setting: QSchemeSetting | null;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type Q2SchemeStorage = {
|
||||||
|
source?: Q2SchemeSource;
|
||||||
|
scheme?: Q2Scheme;
|
||||||
|
cssVariables?: string;
|
||||||
|
cssAutoSchemeVariables?: string;
|
||||||
|
scssVariables?: string;
|
||||||
|
jsVariables?: string;
|
||||||
|
};
|
@ -47,6 +47,7 @@
|
|||||||
--color-youlv: hsl(118, 26%, 19%);
|
--color-youlv: hsl(118, 26%, 19%);
|
||||||
--color-jingtailan: hsl(207, 65%, 43%);
|
--color-jingtailan: hsl(207, 65%, 43%);
|
||||||
--color-yejuzi: hsl(240, 25%, 43%);
|
--color-yejuzi: hsl(240, 25%, 43%);
|
||||||
|
--color-jugengzi: hsl(297, 38%, 38%);
|
||||||
/* background colors */
|
/* background colors */
|
||||||
--color-yunshanlv: hsl(146, 25%, 11%);
|
--color-yunshanlv: hsl(146, 25%, 11%);
|
||||||
--color-wumeizi: hsl(305, 22%, 10%);
|
--color-wumeizi: hsl(305, 22%, 10%);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user