feat(配色方案): 添加Q2配色方案支持
新增Q2配色方案相关组件、模型和样式定义 在SchemeSign组件中添加q2样式支持 扩展模型以包含Q2方案类型和存储结构
This commit is contained in:
		| @@ -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%); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user