From 3a9591fb48a1d11936136a07cda24e4b27fa1c6d Mon Sep 17 00:00:00 2001 From: geulah Date: Tue, 14 Oct 2025 22:39:36 +0100 Subject: [PATCH] feat(templates): add color theme support and template selection step Implement color theme system with 9 color options and default theme Add template selection as first step in CV creation flow Update all templates to support dynamic color theming Create ThemeProvider component to apply theme styles Add template thumbnails with color theme variations Extend CV schema with colorTheme field Update store to handle template selection and color theme state --- cv-engine/src/App.tsx | 29 ++- cv-engine/src/assets/templates/ats.svg | 54 +++++- cv-engine/src/components/PreviewPanel.tsx | 10 +- cv-engine/src/components/Stepper.tsx | 5 +- cv-engine/src/components/ThemeProvider.tsx | 24 +++ .../src/editors/TemplateSelectionEditor.tsx | 167 ++++++++++++++++++ cv-engine/src/schema/cvSchema.ts | 2 + cv-engine/src/store/cvStore.ts | 34 +++- cv-engine/src/templates/ATSTemplate.tsx | 139 ++++++--------- cv-engine/src/templates/ClassicTemplate.tsx | 60 ++++++- cv-engine/src/templates/MinimalTemplate.tsx | 62 ++++++- cv-engine/src/templates/ModernTemplate.tsx | 66 ++++++- cv-engine/src/templates/TimelineTemplate.tsx | 64 +++++-- cv-engine/src/templates/registry.ts | 26 ++- cv-engine/src/types/colors.ts | 157 ++++++++++++++++ cv-engine/src/utils/thumbnailGenerator.ts | 144 +++++++++++++++ 16 files changed, 892 insertions(+), 151 deletions(-) create mode 100644 cv-engine/src/components/ThemeProvider.tsx create mode 100644 cv-engine/src/editors/TemplateSelectionEditor.tsx create mode 100644 cv-engine/src/types/colors.ts create mode 100644 cv-engine/src/utils/thumbnailGenerator.ts diff --git a/cv-engine/src/App.tsx b/cv-engine/src/App.tsx index fed8c1d..b1b0261 100644 --- a/cv-engine/src/App.tsx +++ b/cv-engine/src/App.tsx @@ -1,5 +1,6 @@ import React from 'react'; import Stepper from './components/Stepper'; +import TemplateSelectionEditor from './editors/TemplateSelectionEditor'; import PersonalEditor from './editors/PersonalEditor'; import WorkEditor from './editors/WorkEditor'; import EducationEditor from './editors/EducationEditor'; @@ -17,6 +18,8 @@ const App: React.FC = () => { // Render the appropriate editor based on the active step const renderEditor = () => { switch (activeStep) { + case 'template': + return ; case 'personal': return ; case 'work': @@ -30,7 +33,7 @@ const App: React.FC = () => { case 'finalize': return
Finalize step will be implemented in M5
; default: - return ; + return ; } }; @@ -48,17 +51,25 @@ const App: React.FC = () => {
-
- {/* Editor Panel */} -
+ {activeStep === 'template' ? ( + // Full-screen template selection +
{renderEditor()}
- - {/* Preview Panel */} -
- + ) : ( + // Two-column layout for other steps +
+ {/* Editor Panel */} +
+ {renderEditor()} +
+ + {/* Preview Panel */} +
+ +
-
+ )}