feat(export): separate resume/cover-letter downloads, redesign dialog, add Markdown export (#3217)

* feat(export): separate resume/cover-letter downloads, redesign dialog, add Markdown

Let people export the resume and cover letter as distinct documents, and add a
Markdown format alongside PDF / DOCX / JSON (handy for AI agents).

- Server/API: scope PDF generation and download URLs to a resume/cover-letter target.
- Export domain: getResumeExportData + resumeHasCoverLetter in @reactive-resume/resume.
- Redesign the download dialog: one global "What to export" scope toggle (Tabs) plus
  flattened per-format rows, reusing existing UI components and design language.
- Add Markdown export (@reactive-resume/resume/markdown) with a small tiptap-HTML converter.
- Fix blank section headings in DOCX and Markdown by injecting the locale-aware
  section-title resolver (titles are stored empty and resolved at render time).
- Locale catalogs updated for the new strings.

* test(e2e): open the download dialog before exporting JSON

The JSON export moved into the redesigned download dialog, so the spec now opens
the dialog from the Export sidebar section before clicking "Download JSON".
This commit is contained in:
Amruth Pillai
2026-07-05 14:40:49 +02:00
committed by GitHub
parent 6e7fc68068
commit 20c803e934
76 changed files with 2919 additions and 1773 deletions
+36 -29
View File
@@ -507,6 +507,10 @@ msgstr "Όμορφα πρότυπα για να επιλέξετε, με ακό
msgid "Bengali"
msgstr "Μπενγκάλι"
#: src/features/resume/export/download-dialog.tsx
msgid "Best for applications, sharing, and printing."
msgstr ""
#: src/routes/agent/-components/new-thread-setup.tsx
msgid "Blank draft"
msgstr "Κενό προσχέδιο"
@@ -655,6 +659,10 @@ msgstr "Επιλέξτε ένα βιογραφικό"
msgid "Choose an existing conversation from the sidebar, or start a new draft-focused thread."
msgstr "Επιλέξτε μια υπάρχουσα συζήτηση από την πλαϊνή γραμμή ή ξεκινήστε ένα νέο νήμα που εστιάζει σε προσχέδια."
#: src/routes/builder/$resumeId/-sidebar/right/sections/export.tsx
msgid "Choose PDF, DOCX, or JSON. Export your resume and cover letter separately when available."
msgstr ""
#: src/components/level/combobox.tsx
msgid "Circle"
msgstr "Κύκλος"
@@ -819,6 +827,10 @@ msgstr "Δεν ήταν δυνατή η επαλήθευση της σύνδεσ
msgid "Couldn't save"
msgstr "Δεν ήταν δυνατή η αποθήκευση"
#: src/features/resume/export/download-dialog.tsx
msgid "Cover letter"
msgstr ""
#. Fallback title for a custom cover letter item in resume builder when recipient is empty
#. Fallback title for a custom cover letter item in resume builder when recipient is unavailable
#: src/dialogs/resume/sections/custom.tsx
@@ -1149,7 +1161,11 @@ msgid "Donate to Reactive Resume"
msgstr "Κάντε μία δωρεά στο Reactive Resume"
#. Action button to download two-factor backup codes as a text file
#. Primary action in the builder header to open resume download options
#: src/dialogs/auth/enable-two-factor.tsx
#: src/features/resume/export/download-dialog.tsx
#: src/routes/builder/$resumeId/-components/header.tsx
#: src/routes/builder/$resumeId/-sidebar/right/sections/export.tsx
msgid "Download"
msgstr "Λήψη"
@@ -1157,30 +1173,13 @@ msgstr "Λήψη"
msgid "Download a copy of all your data, including your profile and every resume, as a JSON file."
msgstr "Κατεβάστε ένα αντίγραφο όλων των δεδομένων σας, συμπεριλαμβανομένου του προφίλ σας και κάθε βιογραφικού σας, ως αρχείο JSON."
#: src/routes/builder/$resumeId/-sidebar/right/sections/export.tsx
msgid "Download a copy of your resume as a Word document. Use this file to further customize your resume in Microsoft Word or Google Docs."
msgstr "Κατεβάστε ένα αντίγραφο του βιογραφικού σας σημειώματος σε μορφή εγγράφου Word. Χρησιμοποιήστε αυτό το αρχείο για να προσαρμόσετε περαιτέρω το βιογραφικό σας στο Microsoft Word ή στο Google Docs."
#: src/routes/builder/$resumeId/-sidebar/right/sections/export.tsx
msgid "Download a copy of your resume in JSON format. Use this file for backup or to import your resume into other applications, including AI assistants."
msgstr "Κατεβάστε ένα αντίγραφο του βιογραφικού σας σημειώματος σε μορφή JSON. Χρησιμοποιήστε αυτό το αρχείο για αντίγραφα ασφαλείας ή για να εισαγάγετε το βιογραφικό σας σημείωμα σε άλλες εφαρμογές, συμπεριλαμβανομένων βοηθών ΤΝ."
#: src/routes/builder/$resumeId/-sidebar/right/sections/export.tsx
msgid "Download a copy of your resume in PDF format. Use this file for printing or to easily share your resume with recruiters."
msgstr "Κατεβάστε ένα αντίγραφο του βιογραφικού σας σημειώματος σε μορφή PDF. Χρησιμοποιήστε αυτό το αρχείο για εκτύπωση ή για να μοιραστείτε εύκολα το βιογραφικό σας σημείωμα με εργοδότες."
#. Primary action in the builder header to open resume download options
#: src/routes/builder/$resumeId/-components/header.tsx
msgid "Download DOCX"
msgstr "Λήψη DOCX"
msgid "Download options"
msgstr ""
#: src/routes/builder/$resumeId/-components/header.tsx
msgid "Download JSON"
msgstr "Λήψη JSON"
#. Primary action in the builder header to download the resume as a PDF
#: src/features/resume/public/public-resume.tsx
#: src/routes/agent/$threadId.tsx
#: src/routes/builder/$resumeId/-components/header.tsx
msgid "Download PDF"
msgstr "Λήψη PDF"
@@ -1258,6 +1257,10 @@ msgstr "Επεξεργασία λεπτομερειών"
msgid "Edit keyword"
msgstr "Επεξεργασία λέξης-κλειδιού"
#: src/features/resume/export/download-dialog.tsx
msgid "Editable in Word, Google Docs, and Pages."
msgstr ""
#: src/routes/builder/$resumeId/-sidebar/left/index.tsx
msgid "Editing is disabled until you unlock it."
msgstr "Η επεξεργασία είναι απενεργοποιημένη μέχρι να την ξεκλειδώσετε."
@@ -1397,6 +1400,10 @@ msgstr "Εξαγωγή"
msgid "Export my data"
msgstr "Εξαγωγή των δεδομένων μου"
#: src/features/resume/export/download-dialog.tsx
msgid "Export your resume or cover letter in the format you need."
msgstr ""
#: src/routes/_home/-sections/features.tsx
msgid "Export your resume to PDF instantly, without any waiting or delays."
msgstr "Εξαγάγετε το βιογραφικό σας σε μορφή PDF άμεσα, χωρίς αναμονή ή καθυστερήσεις."
@@ -1653,6 +1660,10 @@ msgstr "Ελεύθερη μορφή"
msgid "French"
msgstr "Γαλλικά"
#: src/features/resume/export/download-dialog.tsx
msgid "Full resume data for backup or import."
msgstr ""
#. Layout editor toggle label that makes a page single-column
#: src/routes/builder/$resumeId/-sidebar/right/sections/layout/pages.tsx
msgid "Full Width"
@@ -2285,10 +2296,6 @@ msgstr "Λείπει το βιογραφικό εργασίας"
msgid "Model"
msgstr "Μοντέλο"
#: src/routes/builder/$resumeId/-components/header.tsx
msgid "More download options"
msgstr "Περισσότερες επιλογές λήψης"
#: src/routes/builder/$resumeId/-sidebar/right/sections/layout/pages.tsx
msgid "Move section to another column or page"
msgstr "Μετακίνηση ενότητας σε άλλη στήλη ή σελίδα"
@@ -2636,6 +2643,10 @@ msgstr "Επιλέξτε ένα εικονίδιο"
msgid "Picture"
msgstr "Φωτογραφία"
#: src/features/resume/export/download-dialog.tsx
msgid "Plain text, ideal for AI tools and quick edits."
msgstr ""
#: src/features/auth/pages/reset-password.tsx
msgid "Please enter a new password for your account"
msgstr "Εισαγάγετε έναν νέο κωδικό πρόσβασης για τον λογαριασμό σας"
@@ -2718,10 +2729,6 @@ msgstr "Πρεμιέρα"
msgid "Primary Color"
msgstr "Βασικό χρώμα"
#: src/routes/builder/$resumeId/-components/header.tsx
msgid "Print"
msgstr "Αποτύπωμα"
#: src/dialogs/resume/sections/skill.tsx
msgid "Proficiency"
msgstr "Επάρκεια"
@@ -2938,6 +2945,7 @@ msgstr "Επαναφορά του βιογραφικού σημειώματος
msgid "Restore this version?"
msgstr "Επαναφορά αυτής της έκδοσης;"
#: src/features/resume/export/download-dialog.tsx
#: src/routes/agent/$threadId.tsx
msgid "Resume"
msgstr "Περίληψη"
@@ -4308,4 +4316,3 @@ msgstr "Σμίκρυνση"
#: src/libs/locale.ts
msgid "Zulu"
msgstr "Ζουλού"