mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-12 15:52:56 +10:00
🚀 release: v3.0.0
This commit is contained in:
20
apps/client/config/colors.ts
Normal file
20
apps/client/config/colors.ts
Normal file
@ -0,0 +1,20 @@
|
||||
export const hexColorPattern = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;
|
||||
|
||||
export const colorOptions: string[] = [
|
||||
'#f44336',
|
||||
'#e91e63',
|
||||
'#9c27b0',
|
||||
'#673ab7',
|
||||
'#3f51b5',
|
||||
'#4896d5',
|
||||
'#03a9f4',
|
||||
'#00bcd4',
|
||||
'#009688',
|
||||
'#4caf50',
|
||||
'#8bc34a',
|
||||
'#cddc39',
|
||||
'#ffeb3b',
|
||||
'#ffc107',
|
||||
'#222222',
|
||||
'#dddddd',
|
||||
];
|
||||
20
apps/client/config/languages.ts
Normal file
20
apps/client/config/languages.ts
Normal file
@ -0,0 +1,20 @@
|
||||
export type Language = {
|
||||
code: string;
|
||||
name: string;
|
||||
localName?: string;
|
||||
};
|
||||
|
||||
export const languages: Language[] = [
|
||||
{
|
||||
code: 'en',
|
||||
name: 'English',
|
||||
},
|
||||
];
|
||||
|
||||
export const languageMap = languages.reduce(
|
||||
(acc, lang) => ({
|
||||
...acc,
|
||||
[lang.code]: lang,
|
||||
}),
|
||||
{}
|
||||
);
|
||||
31
apps/client/config/screenshots.ts
Normal file
31
apps/client/config/screenshots.ts
Normal file
@ -0,0 +1,31 @@
|
||||
type Screenshot = {
|
||||
src: string;
|
||||
alt: string;
|
||||
};
|
||||
|
||||
export const screenshots: Screenshot[] = [
|
||||
{
|
||||
src: '/images/screenshots/dashboard.png',
|
||||
alt: 'Create multiple resumes under one account',
|
||||
},
|
||||
{
|
||||
src: '/images/screenshots/import-external.png',
|
||||
alt: 'Import your data from LinkedIn, JSON Resume or Reactive Resume',
|
||||
},
|
||||
{
|
||||
src: '/images/screenshots/builder.png',
|
||||
alt: 'Variety of features to personalize your resume to your liking',
|
||||
},
|
||||
{
|
||||
src: '/images/screenshots/add-section.png',
|
||||
alt: 'Multiple pre-built sections which can be renamed, or just create your own section',
|
||||
},
|
||||
{
|
||||
src: '/images/screenshots/page-layout.png',
|
||||
alt: 'Create multiple pages, manage section layouts as easy as dragging them around',
|
||||
},
|
||||
{
|
||||
src: '/images/screenshots/preview.png',
|
||||
alt: 'Get a unique link to your resume which can be shared with anyone for the latest information',
|
||||
},
|
||||
];
|
||||
181
apps/client/config/sections.tsx
Normal file
181
apps/client/config/sections.tsx
Normal file
@ -0,0 +1,181 @@
|
||||
import {
|
||||
Architecture,
|
||||
CardGiftcard,
|
||||
Category,
|
||||
Coffee,
|
||||
Download,
|
||||
EmojiEvents,
|
||||
FontDownload,
|
||||
Groups,
|
||||
Language,
|
||||
Link as LinkIcon,
|
||||
Map,
|
||||
Margin,
|
||||
MenuBook,
|
||||
Palette,
|
||||
Person,
|
||||
Sailing,
|
||||
School,
|
||||
Settings as SettingsIcon,
|
||||
Share,
|
||||
Style,
|
||||
Twitter,
|
||||
VolunteerActivism,
|
||||
Work,
|
||||
} from '@mui/icons-material';
|
||||
import { Section as SectionRecord } from '@reactive-resume/schema';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
|
||||
import Basics from '@/components/build/LeftSidebar/sections/Basics';
|
||||
import Location from '@/components/build/LeftSidebar/sections/Location';
|
||||
import Profiles from '@/components/build/LeftSidebar/sections/Profiles';
|
||||
import Section from '@/components/build/LeftSidebar/sections/Section';
|
||||
import CustomCSS from '@/components/build/RightSidebar/sections/CustomCSS';
|
||||
import Export from '@/components/build/RightSidebar/sections/Export';
|
||||
import Layout from '@/components/build/RightSidebar/sections/Layout';
|
||||
import Links from '@/components/build/RightSidebar/sections/Links';
|
||||
import Settings from '@/components/build/RightSidebar/sections/Settings';
|
||||
import Sharing from '@/components/build/RightSidebar/sections/Sharing';
|
||||
import Templates from '@/components/build/RightSidebar/sections/Templates';
|
||||
import Theme from '@/components/build/RightSidebar/sections/Theme';
|
||||
import Typography from '@/components/build/RightSidebar/sections/Typography';
|
||||
import { SidebarSection } from '@/types/app';
|
||||
|
||||
export const left: SidebarSection[] = [
|
||||
{
|
||||
id: 'basics',
|
||||
icon: <Person />,
|
||||
component: <Basics />,
|
||||
},
|
||||
{
|
||||
id: 'location',
|
||||
icon: <Map />,
|
||||
component: <Location />,
|
||||
},
|
||||
{
|
||||
id: 'profiles',
|
||||
icon: <Twitter />,
|
||||
component: <Profiles />,
|
||||
},
|
||||
{
|
||||
id: 'work',
|
||||
icon: <Work />,
|
||||
component: <Section path="sections.work" titleKey="name" subtitleKey="position" isEditable isHideable />,
|
||||
},
|
||||
{
|
||||
id: 'education',
|
||||
icon: <School />,
|
||||
component: <Section path="sections.education" titleKey="institution" subtitleKey="area" isEditable isHideable />,
|
||||
},
|
||||
{
|
||||
id: 'awards',
|
||||
icon: <EmojiEvents />,
|
||||
component: <Section path="sections.awards" titleKey="title" subtitleKey="awarder" isEditable isHideable />,
|
||||
},
|
||||
{
|
||||
id: 'certifications',
|
||||
icon: <CardGiftcard />,
|
||||
component: <Section path="sections.certifications" titleKey="name" subtitleKey="issuer" isEditable isHideable />,
|
||||
},
|
||||
{
|
||||
id: 'publications',
|
||||
icon: <MenuBook />,
|
||||
component: <Section path="sections.publications" titleKey="name" subtitleKey="publisher" isEditable isHideable />,
|
||||
},
|
||||
{
|
||||
id: 'skills',
|
||||
icon: <Architecture />,
|
||||
component: <Section path="sections.skills" titleKey="name" subtitleKey="level" isEditable isHideable />,
|
||||
},
|
||||
{
|
||||
id: 'languages',
|
||||
icon: <Language />,
|
||||
component: <Section path="sections.languages" titleKey="name" subtitleKey="level" isEditable isHideable />,
|
||||
},
|
||||
{
|
||||
id: 'interests',
|
||||
icon: <Sailing />,
|
||||
component: <Section path="sections.interests" titleKey="name" subtitleKey="keywords" isEditable isHideable />,
|
||||
},
|
||||
{
|
||||
id: 'volunteer',
|
||||
icon: <VolunteerActivism />,
|
||||
component: (
|
||||
<Section path="sections.volunteer" titleKey="organization" subtitleKey="position" isEditable isHideable />
|
||||
),
|
||||
},
|
||||
{
|
||||
id: 'projects',
|
||||
icon: <Coffee />,
|
||||
component: <Section path="sections.projects" titleKey="name" subtitleKey="description" isEditable isHideable />,
|
||||
},
|
||||
{
|
||||
id: 'references',
|
||||
icon: <Groups />,
|
||||
component: <Section path="sections.references" titleKey="name" subtitleKey="relationship" isEditable isHideable />,
|
||||
},
|
||||
];
|
||||
|
||||
export const right: SidebarSection[] = [
|
||||
{
|
||||
id: 'templates',
|
||||
icon: <Category />,
|
||||
component: <Templates />,
|
||||
},
|
||||
{
|
||||
id: 'layout',
|
||||
icon: <Margin />,
|
||||
component: <Layout />,
|
||||
},
|
||||
{
|
||||
id: 'typography',
|
||||
icon: <FontDownload />,
|
||||
component: <Typography />,
|
||||
},
|
||||
{
|
||||
id: 'theme',
|
||||
icon: <Palette />,
|
||||
component: <Theme />,
|
||||
},
|
||||
{
|
||||
id: 'css',
|
||||
icon: <Style />,
|
||||
component: <CustomCSS />,
|
||||
},
|
||||
{
|
||||
id: 'sharing',
|
||||
icon: <Share />,
|
||||
component: <Sharing />,
|
||||
},
|
||||
{
|
||||
id: 'export',
|
||||
icon: <Download />,
|
||||
component: <Export />,
|
||||
},
|
||||
{
|
||||
id: 'settings',
|
||||
icon: <SettingsIcon />,
|
||||
component: <Settings />,
|
||||
},
|
||||
{
|
||||
id: 'links',
|
||||
icon: <LinkIcon />,
|
||||
component: <Links />,
|
||||
},
|
||||
];
|
||||
|
||||
export const getCustomSections = (sections: Record<string, SectionRecord>): Array<SectionRecord> => {
|
||||
if (isEmpty(sections)) return [];
|
||||
|
||||
return Object.entries(sections).reduce((acc, [id, section]) => {
|
||||
if (section.type === 'custom') {
|
||||
return [...acc, { ...section, id }];
|
||||
}
|
||||
|
||||
return acc;
|
||||
}, [] as Array<SectionRecord>);
|
||||
};
|
||||
|
||||
const sections = [...left, ...right];
|
||||
|
||||
export default sections;
|
||||
72
apps/client/config/theme.ts
Normal file
72
apps/client/config/theme.ts
Normal file
@ -0,0 +1,72 @@
|
||||
import { createTheme } from '@mui/material';
|
||||
import { grey } from '@mui/material/colors';
|
||||
import { teal } from 'tailwindcss/colors';
|
||||
|
||||
const theme = createTheme({
|
||||
typography: {
|
||||
fontSize: 12,
|
||||
fontFamily: 'Inter, sans-serif',
|
||||
},
|
||||
components: {
|
||||
MuiButton: {
|
||||
defaultProps: {
|
||||
size: 'small',
|
||||
variant: 'contained',
|
||||
disableElevation: true,
|
||||
},
|
||||
styleOverrides: {
|
||||
root: {
|
||||
textTransform: 'none',
|
||||
padding: '6px 20px',
|
||||
},
|
||||
},
|
||||
},
|
||||
MuiTextField: {
|
||||
defaultProps: {
|
||||
variant: 'outlined',
|
||||
},
|
||||
},
|
||||
MuiAppBar: {
|
||||
styleOverrides: {
|
||||
root: {
|
||||
zIndex: 30,
|
||||
},
|
||||
},
|
||||
},
|
||||
MuiTooltip: {
|
||||
styleOverrides: {
|
||||
tooltip: {
|
||||
fontSize: 12,
|
||||
},
|
||||
},
|
||||
},
|
||||
MuiDrawer: {
|
||||
styleOverrides: {
|
||||
root: {
|
||||
zIndex: 40,
|
||||
},
|
||||
paper: {
|
||||
border: 'none',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export const lightTheme = createTheme({
|
||||
...theme,
|
||||
palette: {
|
||||
mode: 'light',
|
||||
primary: { main: grey[800] },
|
||||
secondary: { main: teal[600] },
|
||||
},
|
||||
});
|
||||
|
||||
export const darkTheme = createTheme({
|
||||
...theme,
|
||||
palette: {
|
||||
mode: 'dark',
|
||||
primary: { main: grey[100] },
|
||||
secondary: { main: teal[400] },
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user