diff --git a/src/material-3-scheme.ts b/src/material-3-scheme.ts index 0d33e03..df16e1d 100644 --- a/src/material-3-scheme.ts +++ b/src/material-3-scheme.ts @@ -58,3 +58,20 @@ export type MaterialDesign3SchemeStorage = { scssVariables?: string; jsVariables?: string; }; + +export type MaterialDesign3DynamicSchemeSource = { + source: string | null; + error: string | null; + custom_colors?: Record; + variant: number | null; + constrastLevel: number | null; + harmonizeCustoms: boolean | null; +}; + +export type MaterialDesign3DynamicSchemeStorage = { + source?: MaterialDesign3DynamicSchemeSource; + scheme?: MaterialDesign3Scheme; + cssVariables?: string; + scssVariables?: string; + jsVariables?: string; +}; diff --git a/src/page-components/scheme/M3DynamicScheme.tsx b/src/page-components/scheme/M3DynamicScheme.tsx new file mode 100644 index 0000000..9ec474d --- /dev/null +++ b/src/page-components/scheme/M3DynamicScheme.tsx @@ -0,0 +1,35 @@ +import { isEqual, isNil } from 'lodash-es'; +import { useState } from 'react'; +import { Tab } from '../../components/Tab'; +import { MaterialDesign3DynamicSchemeStorage } from '../../material-3-scheme'; +import { SchemeContent } from '../../models'; +import { SchemeExport } from './Export'; +import { M3DynamicSchemeBuilder } from './m3-dynamic-scheme/Builder'; +import { M3SchemePreview } from './m3-scheme/Preview'; + +const tabOptions = [ + { title: 'Overview', id: 'overview' }, + { title: 'Builder', id: 'builder' }, + { title: 'Exports', id: 'export' }, +]; + +type M3SchemeProps = { + scheme: SchemeContent; +}; + +export function M3DynamicScheme({ scheme }: M3SchemeProps) { + const [activeTab, setActiveTab] = useState<(typeof tabOptions)[number]['id']>(() => + isNil(scheme.schemeStorage.scheme) ? 'builder' : 'overview', + ); + + return ( + <> + setActiveTab(v as string)} /> + {isEqual(activeTab, 'overview') && } + {isEqual(activeTab, 'builder') && ( + setActiveTab('overview')} /> + )} + {isEqual(activeTab, 'export') && } + + ); +} diff --git a/src/page-components/scheme/M3Scheme.tsx b/src/page-components/scheme/M3Scheme.tsx index 51c20ea..1d804bc 100644 --- a/src/page-components/scheme/M3Scheme.tsx +++ b/src/page-components/scheme/M3Scheme.tsx @@ -25,7 +25,7 @@ export function M3Scheme({ scheme }: M3SchemeProps) { return ( <> setActiveTab(v as string)} /> - {isEqual(activeTab, 'overview') && } + {isEqual(activeTab, 'overview') && } {isEqual(activeTab, 'builder') && ( setActiveTab('overview')} /> )} diff --git a/src/page-components/scheme/m3-dynamic-scheme/Builder.tsx b/src/page-components/scheme/m3-dynamic-scheme/Builder.tsx new file mode 100644 index 0000000..b1fc907 --- /dev/null +++ b/src/page-components/scheme/m3-dynamic-scheme/Builder.tsx @@ -0,0 +1,5 @@ +import { ScrollArea } from '../../../components/ScrollArea'; + +export function M3DynamicSchemeBuilder() { + return ; +} diff --git a/src/page-components/scheme/m3-scheme/Preview.tsx b/src/page-components/scheme/m3-scheme/Preview.tsx index aa6d942..0bd0919 100644 --- a/src/page-components/scheme/m3-scheme/Preview.tsx +++ b/src/page-components/scheme/m3-scheme/Preview.tsx @@ -1,11 +1,5 @@ import { ScrollArea } from '../../../components/ScrollArea'; -import { - Baseline, - ColorSet, - MaterialDesign3SchemeStorage, - Surface, -} from '../../../material-3-scheme'; -import { SchemeContent } from '../../../models'; +import { Baseline, ColorSet, MaterialDesign3Scheme, Surface } from '../../../material-3-scheme'; import styles from './Preview.module.css'; type ColorSetProps = { @@ -257,15 +251,15 @@ function PreviewBlock({ title, baseline }: PreviewBlockProps) { } type M3SchemePreviewProps = { - scheme: SchemeContent; + scheme: MaterialDesign3Scheme; }; export function M3SchemePreview({ scheme }: M3SchemePreviewProps) { return (
- - + +
); diff --git a/src/pages/SchemeDetail.tsx b/src/pages/SchemeDetail.tsx index 956f130..acc827b 100644 --- a/src/pages/SchemeDetail.tsx +++ b/src/pages/SchemeDetail.tsx @@ -6,10 +6,14 @@ import { EditableDescription } from '../components/EditableDescription'; import { EditableTitle } from '../components/EditableTitle'; import { SchemeSign } from '../components/SchemeSign'; import { MaterialDesign2SchemeStorage } from '../material-2-scheme'; -import { MaterialDesign3SchemeStorage } from '../material-3-scheme'; +import { + MaterialDesign3DynamicSchemeStorage, + MaterialDesign3SchemeStorage, +} from '../material-3-scheme'; import { SchemeContent } from '../models'; import { CorruptedScheme } from '../page-components/scheme/CorruptedScheme'; import { M2Scheme } from '../page-components/scheme/M2Scheme'; +import { M3DynamicScheme } from '../page-components/scheme/M3DynamicScheme'; import { M3Scheme } from '../page-components/scheme/M3Scheme'; import { QScheme } from '../page-components/scheme/QScheme'; import { SwatchScheme } from '../page-components/scheme/SwatchScheme'; @@ -52,6 +56,10 @@ export function SchemeDetail() { return } />; case 'material_3': return } />; + case 'material_3_dynamic': + return ( + } /> + ); default: return ; }