v5.2.0: undo/redo, version history, embedded AI assistant, mobile builder & more (#3205)

This commit is contained in:
Amruth Pillai
2026-07-04 14:57:25 +02:00
committed by GitHub
parent 09bc6ec521
commit 57e9c8c487
181 changed files with 46794 additions and 11348 deletions
+10
View File
@@ -102,6 +102,11 @@ export const summarySchema = z.object({
),
columns: z.number().int().min(1).max(6).catch(1).describe("The number of columns the summary should span across."),
hidden: z.boolean().describe("Whether to hide the summary from the resume."),
keepTogether: z
.boolean()
.catch(false)
.describe("If true, the summary is kept on a single page instead of splitting across a page break."),
startOnNewPage: z.boolean().catch(false).describe("If true, the summary always begins on a new page."),
content: z.string().describe("The content of the summary of the resume. This should be a HTML-formatted string."),
});
@@ -285,6 +290,11 @@ export const baseSectionSchema = z.object({
),
columns: z.number().int().min(1).max(6).catch(1).describe("The number of columns the section should span across."),
hidden: z.boolean().describe("Whether to hide the section from the resume."),
keepTogether: z
.boolean()
.catch(false)
.describe("If true, the section is kept on a single page instead of splitting across a page break."),
startOnNewPage: z.boolean().catch(false).describe("If true, the section always begins on a new page."),
});
const awardsSectionSchema = baseSectionSchema.extend({
+26
View File
@@ -27,6 +27,8 @@ export const defaultResumeData: ResumeData = {
icon: "article",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
content: "",
},
sections: {
@@ -35,6 +37,8 @@ export const defaultResumeData: ResumeData = {
icon: "messenger-logo",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
experience: {
@@ -42,6 +46,8 @@ export const defaultResumeData: ResumeData = {
icon: "briefcase",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
education: {
@@ -49,6 +55,8 @@ export const defaultResumeData: ResumeData = {
icon: "graduation-cap",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
projects: {
@@ -56,6 +64,8 @@ export const defaultResumeData: ResumeData = {
icon: "code-simple",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
skills: {
@@ -63,6 +73,8 @@ export const defaultResumeData: ResumeData = {
icon: "compass-tool",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
languages: {
@@ -70,6 +82,8 @@ export const defaultResumeData: ResumeData = {
icon: "translate",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
interests: {
@@ -77,6 +91,8 @@ export const defaultResumeData: ResumeData = {
icon: "football",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
awards: {
@@ -84,6 +100,8 @@ export const defaultResumeData: ResumeData = {
icon: "trophy",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
certifications: {
@@ -91,6 +109,8 @@ export const defaultResumeData: ResumeData = {
icon: "certificate",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
publications: {
@@ -98,6 +118,8 @@ export const defaultResumeData: ResumeData = {
icon: "books",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
volunteer: {
@@ -105,6 +127,8 @@ export const defaultResumeData: ResumeData = {
icon: "hand-heart",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
references: {
@@ -112,6 +136,8 @@ export const defaultResumeData: ResumeData = {
icon: "phone",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [],
},
},
+43 -1
View File
@@ -43,8 +43,10 @@ export const sampleResumeData: ResumeData = {
icon: "article",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
content:
"<p><strong>Passionate game developer with 5+ years of professional experience</strong> creating engaging gameplay systems and polished player experiences across multiple platforms. <a href='https://www.google.com'>Specialized</a> in Unity and Unreal Engine with strong expertise in C#, C++, and game design principles. Proven ability to collaborate effectively with cross-functional teams including designers, artists, and QA to deliver high-quality games on time and within scope.</p>",
"<p><strong>Passionate game developer with 5+ years of professional experience</strong> creating engaging gameplay systems and polished player experiences across multiple platforms. Specialized in Unity and Unreal Engine with strong expertise in C#, C++, and game design principles. Proven ability to collaborate effectively with cross-functional teams including designers, artists, and QA to deliver high-quality games on time and within scope.</p>",
},
sections: {
profiles: {
@@ -52,6 +54,8 @@ export const sampleResumeData: ResumeData = {
icon: "messenger-logo",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-3d42ddc9b4d8",
@@ -86,6 +90,8 @@ export const sampleResumeData: ResumeData = {
icon: "briefcase",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-44d8cec98ca4",
@@ -110,6 +116,8 @@ export const sampleResumeData: ResumeData = {
icon: "graduation-cap",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-48455f6cef9e",
@@ -135,6 +143,8 @@ export const sampleResumeData: ResumeData = {
icon: "code-simple",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-4d2603fe2801",
@@ -182,6 +192,8 @@ export const sampleResumeData: ResumeData = {
icon: "compass-tool",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-5a52dcf50ed4",
@@ -250,6 +262,8 @@ export const sampleResumeData: ResumeData = {
icon: "translate",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-73807ccc48b5",
@@ -272,6 +286,8 @@ export const sampleResumeData: ResumeData = {
icon: "football",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-7821b4de95f7",
@@ -312,6 +328,8 @@ export const sampleResumeData: ResumeData = {
icon: "trophy",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-8a8bb9fbe182",
@@ -348,6 +366,8 @@ export const sampleResumeData: ResumeData = {
icon: "certificate",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-91fe8a4dfea6",
@@ -382,6 +402,8 @@ export const sampleResumeData: ResumeData = {
icon: "books",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-9816f0081895",
@@ -418,6 +440,8 @@ export const sampleResumeData: ResumeData = {
icon: "hand-heart",
columns: 2,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-a02580473e05",
@@ -454,6 +478,8 @@ export const sampleResumeData: ResumeData = {
icon: "phone",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "019bef5a-93e4-7746-ad39-a945c0f42dd5",
@@ -477,6 +503,8 @@ export const sampleResumeData: ResumeData = {
icon: "briefcase",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
id: "019becaf-0b87-769d-98a6-46ccf558c0e8",
type: "experience",
items: [
@@ -519,6 +547,8 @@ export const sampleResumeData: ResumeData = {
icon: "envelope-simple",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
id: "019bef5b-0b3d-7e2a-8a7c-12d9e23a4f6b",
type: "cover-letter",
items: [
@@ -600,3 +630,15 @@ export const sampleResumeData: ResumeData = {
styleRules: [],
},
};
/**
* Returns the sample resume, optionally overriding `basics.name` so the seeded
* content reflects the name the user entered when creating the resume. When no
* name is given, the default sample persona is returned unchanged.
*/
export const createSampleResumeData = (name?: string): ResumeData => {
const trimmed = name?.trim();
if (!trimmed) return sampleResumeData;
return { ...sampleResumeData, basics: { ...sampleResumeData.basics, name: trimmed } };
};