diff --git a/REDESIGN_PLAN.md b/REDESIGN_PLAN.md index 95465e24a..de50594fc 100644 --- a/REDESIGN_PLAN.md +++ b/REDESIGN_PLAN.md @@ -1602,6 +1602,11 @@ The items left open in §12 and §13, in the order they were done. Local commits - **List markers stay with their first line.** Converted list items carry their index into Forme's layout. `renderResume` finds markers left on a page their first line leaves and renders again with a page break before those items (at most three passes). Eleven expected-failure tests now pass. Presence hints are still ignored. - **Right to left:** the award title and date row mirrors like every other header row. - **§3.10 contract steps**, listed in §3.10. Migration `20260929063245_contract_redesign_legacy_fields` has a `rollback.sql`. It was applied only to the isolated verification database. +- **Letters leave resumes.** A cover letter is a document of its own; resumes no longer hold cover-letter sections. + - Migration `20260929071322_letters_leave_resumes` (with `rollback.sql`) saves every letter a resume carried (hidden ones too) as a letter linked to that resume's details and design, named "‹resume› — ‹section›". A resume with one letter, used by exactly one letter-less application, hands the letter to that application. The sections then leave the resumes and their layouts. Resume History keeps older versions as they were. + - Every resume write on the server (create, import, update, patch, restore) passes through `adoptEmbeddedLetters`, in the same transaction, so a stale tab, an old file, an API client or a restored version still can't put a letter back into a resume. A letter already saved from the same item with the same text isn't saved twice. + - Removed: adding a cover letter in the resume editor, "Copy to Documents", "Import from library", the resume Download's Cover letter tab, the `cover-letter` target of resume PDF downloads (API, signed links, MCP) and `copy_embedded_cover_letter`. The sample resume has no letter. Letters still render through the templates as a cover-letter section of their own document. + - Letters moved by the migration are stored as they were written; the server sanitises them on their next save. - **Knip:** the Forme port's unused exports and types are removed, and the server's engine dependencies are listed. - **Engine limits still open** (expected failures in `packages/pdf`, which pass once Forme supports them): - Right-to-left lines are laid out left to right, then right-aligned. diff --git a/apps/server/src/http/resume-pdf.test.ts b/apps/server/src/http/resume-pdf.test.ts index 6e470777d..eb0181c59 100644 --- a/apps/server/src/http/resume-pdf.test.ts +++ b/apps/server/src/http/resume-pdf.test.ts @@ -23,7 +23,6 @@ describe("handleResumePdfDownload", () => { ok: true, resumeId: "resume-1", userId: "user-1", - target: "resume", expiresAt: "2026-06-01T10:10:00.000Z", }); mocks.createResumePdfDownload.mockResolvedValueOnce({ @@ -41,89 +40,28 @@ describe("handleResumePdfDownload", () => { expect(response.headers.get("Content-Disposition")).toBe('attachment; filename="Scizor.pdf"'); expect(response.headers.get("Cache-Control")).toBe("private, no-store"); expect(await response.text()).toBe("%PDF"); - expect(mocks.createResumePdfDownload).toHaveBeenCalledWith({ id: "resume-1", userId: "user-1", target: "resume" }); + expect(mocks.createResumePdfDownload).toHaveBeenCalledWith({ id: "resume-1", userId: "user-1" }); }); - it("passes the cover letter target through to PDF rendering", async () => { - const pdf = new File([new Uint8Array([37, 80, 68, 70])], "Cover Letter.pdf", { type: "application/pdf" }); - mocks.verifyResumePdfDownloadToken.mockReturnValueOnce({ - ok: true, - resumeId: "resume-1", - userId: "user-1", - target: "cover-letter", - expiresAt: "2026-06-01T10:10:00.000Z", - }); - mocks.createResumePdfDownload.mockResolvedValueOnce({ - headers: { "content-disposition": 'attachment; filename="Cover Letter.pdf"' }, - body: pdf, - }); - - await handleResumePdfDownload( - new Request("https://example.com/api/resumes/resume-1/pdf?token=signed&target=cover-letter"), - "resume-1", - ); - - expect(mocks.createResumePdfDownload).toHaveBeenCalledWith({ - id: "resume-1", - userId: "user-1", - target: "cover-letter", - }); - }); - - it("defaults a legacy token without a target to resume", async () => { - mocks.verifyResumePdfDownloadToken.mockReturnValueOnce({ - ok: true, - resumeId: "resume-1", - userId: "user-1", - expiresAt: "2026-06-01T10:10:00.000Z", - }); - mocks.createResumePdfDownload.mockResolvedValueOnce({ - headers: { "content-disposition": 'attachment; filename="Cover Letter.pdf"' }, - body: new File([], "Cover Letter.pdf", { type: "application/pdf" }), - }); - - await handleResumePdfDownload(new Request("https://example.com/api/resumes/resume-1/pdf?token=legacy"), "resume-1"); - - expect(mocks.createResumePdfDownload).toHaveBeenCalledWith({ - id: "resume-1", - userId: "user-1", - target: "resume", - }); - }); - - it("rejects a cover-letter target for a legacy token without one", async () => { - mocks.verifyResumePdfDownloadToken.mockReturnValueOnce({ - ok: true, - resumeId: "resume-1", - userId: "user-1", - expiresAt: "2026-06-01T10:10:00.000Z", - }); - - const response = await handleResumePdfDownload( - new Request("https://example.com/api/resumes/resume-1/pdf?token=legacy&target=cover-letter"), - "resume-1", - ); - - expect(response.status).toBe(401); - expect(mocks.createResumePdfDownload).not.toHaveBeenCalled(); - }); - - it("rejects a target that differs from the signed token", async () => { - mocks.verifyResumePdfDownloadToken.mockReturnValueOnce({ - ok: true, - resumeId: "resume-1", - userId: "user-1", - target: "resume", - expiresAt: "2026-06-01T10:10:00.000Z", - }); - - const response = await handleResumePdfDownload( - new Request("https://example.com/api/resumes/resume-1/pdf?token=signed&target=cover-letter"), - "resume-1", - ); - - expect(response.status).toBe(401); - expect(mocks.createResumePdfDownload).not.toHaveBeenCalled(); + it("finds no cover letter behind links made before letters left resumes", async () => { + for (const target of ["cover-letter", "resume"] as const) { + mocks.verifyResumePdfDownloadToken.mockReturnValueOnce({ + ok: true, + resumeId: "resume-1", + userId: "user-1", + expiresAt: "2026-06-01T10:10:00.000Z", + }); + mocks.createResumePdfDownload.mockResolvedValueOnce({ + headers: { "content-disposition": 'attachment; filename="Scizor.pdf"' }, + body: new File([], "Scizor.pdf", { type: "application/pdf" }), + }); + const response = await handleResumePdfDownload( + new Request(`https://example.com/api/resumes/resume-1/pdf?token=signed&target=${target}`), + "resume-1", + ); + expect(response.status).toBe(target === "resume" ? 200 : 404); + } + expect(mocks.createResumePdfDownload).toHaveBeenCalledTimes(1); }); it("rejects missing, invalid, and expired tokens before rendering", async () => { diff --git a/apps/server/src/http/resume-pdf.ts b/apps/server/src/http/resume-pdf.ts index d04ba5516..6a09f8c92 100644 --- a/apps/server/src/http/resume-pdf.ts +++ b/apps/server/src/http/resume-pdf.ts @@ -30,17 +30,13 @@ export async function handleResumePdfDownload(request: Request, id: string) { const verification = verifyResumePdfDownloadToken({ resumeId: id, token }); if (!verification.ok) return verification.reason === "expired" ? expiredResponse() : unauthorizedResponse(); - const queryTarget = searchParams.get("target"); - if ( - verification.target - ? queryTarget !== null && queryTarget !== verification.target - : queryTarget && queryTarget !== "resume" - ) - return unauthorizedResponse(); + // Links made before letters left resumes may ask for the resume's cover letter, which is now a letter of its own. + const target = searchParams.get("target"); + if (target && target !== "resume") + return new Response("Not found", { status: 404, headers: { "Cache-Control": "private, no-store" } }); try { - const target = verification.target ?? "resume"; - const download = await createResumePdfDownload({ id, userId: verification.userId, target }); + const download = await createResumePdfDownload({ id, userId: verification.userId }); return new Response(download.body, { headers: { diff --git a/apps/server/src/openapi/generator.test.ts b/apps/server/src/openapi/generator.test.ts index 9a6fbce7e..9c5e682e8 100644 --- a/apps/server/src/openapi/generator.test.ts +++ b/apps/server/src/openapi/generator.test.ts @@ -88,7 +88,6 @@ describe("generateOpenApiSpec", () => { ["post", "/cover-letters/{id}/refresh-style", "refreshCoverLetterStyle", "Refresh cover letter style", "200"], ["post", "/cover-letters/{id}/duplicate", "duplicateCoverLetter", "Duplicate a cover letter", "200"], ["delete", "/cover-letters/{id}", "deleteCoverLetter", "Move a cover letter to Trash", "200"], - ["post", "/cover-letters/from-resume", "copyEmbeddedCoverLetter", "Copy an embedded cover letter", "200"], ["get", "/cover-letters/{id}/export", "exportCoverLetter", "Export a cover letter", "200"], ["post", "/cover-letters/import", "importCoverLetter", "Import a cover letter", "200"], ["get", "/cover-letters/{id}/versions", "listCoverLetterVersions", "List a cover letter's versions", "200"], diff --git a/apps/web/locales/af-ZA.po b/apps/web/locales/af-ZA.po index 81aa1a940..d80b18998 100644 --- a/apps/web/locales/af-ZA.po +++ b/apps/web/locales/af-ZA.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Kies ’n CV-sjabloon" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Kies ’n sjabloon" @@ -2055,10 +2051,6 @@ msgstr "Omgeskakelde stylbladkonsep" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Kopieer die hele posbeskrywing uit die werksplasing en plak dit hieronde msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Kopieer die teks uit die uitgevoerde lêer en lees dit deur; maak enigiets reg wat op die verkeerde plek beland." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Vul" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Dekbrief" @@ -4070,10 +4053,6 @@ msgstr "Voer in vanaf CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Verhoog inspringing" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Maak oop" @@ -6416,7 +6389,6 @@ msgstr "Gereed om jou naam daarop te sit?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Ontvanger" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "CV" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/am-ET.po b/apps/web/locales/am-ET.po index 962567b2b..ce087adf0 100644 --- a/apps/web/locales/am-ET.po +++ b/apps/web/locales/am-ET.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "የሥራ ማስረጃ አብነት ይምረጡ" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "አብነት ይምረጡ" @@ -2055,10 +2051,6 @@ msgstr "የተቀየረ የቅጥ ሉህ ረቂቅ" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "ሙሉውን የሥራ መግለጫ ከማስታወቂያው ላይ ገ msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "ጽሁፉን ከወጣው ፋይል ገልብጠው ያንብቡት፤ በተሳሳተ ቦታ የደረሰውን ማንኛውንም ነገር ያስተካክሉ።" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "ሽፋን" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "የሽፋን ደብዳቤ" @@ -4070,10 +4053,6 @@ msgstr "ከCSV አስመጣ" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "ገብ ጨምር" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "ክፈት" @@ -6416,7 +6389,6 @@ msgstr "ስምዎን በላዩ ላይ ለማስቀመጥ ዝግጁ ነዎት?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "ተቀባይ" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "የስራ ልምድ ማስረጃ" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/ar-SA.po b/apps/web/locales/ar-SA.po index 19bdfc2a1..e9b50ff4d 100644 --- a/apps/web/locales/ar-SA.po +++ b/apps/web/locales/ar-SA.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "اختر قالب السيرة الذاتية" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "اختر قالبًا" @@ -2055,10 +2051,6 @@ msgstr "مسودة ورقة الأنماط المحولة" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "انسخ وصف الوظيفة كاملاً من الإعلان والص msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "انسخ النص من الملف المُصدَّر واقرأه بالكامل؛ وأصلح أي شيء يظهر في المكان الخاطئ." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "الغلاف" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "غطاء الرسالة" @@ -4070,10 +4053,6 @@ msgstr "الاستيراد من ملف CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "زيادة المسافة البادئة" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "افتح" @@ -6416,7 +6389,6 @@ msgstr "هل أنت مستعد لوضع اسمك عليه؟" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "المستلم" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "سيرة ذاتية" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/az-AZ.po b/apps/web/locales/az-AZ.po index 3d42d0969..a8bc0ec8c 100644 --- a/apps/web/locales/az-AZ.po +++ b/apps/web/locales/az-AZ.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "CV şablonu seçin" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Şablon seçin" @@ -2055,10 +2051,6 @@ msgstr "Çevirilmiş stil cədvəli qaralaması" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "İş təsvirinin hamısını elandan kopyalayıb aşağıya yapışdır msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "İxrac edilmiş fayldan mətni kopyalayın və oxuyun; səhv yerdə çıxan hər şeyi düzəldin." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Qapaq" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Müqavilə məktubu" @@ -4070,10 +4053,6 @@ msgstr "CSV-dən idxal edin" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Abzası artırın" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Aç" @@ -6416,7 +6389,6 @@ msgstr "Adını bunun üzərinə yazmağa hazırsan?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Alıcı" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "CV" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/bg-BG.po b/apps/web/locales/bg-BG.po index a43d5c347..8dddfdfe2 100644 --- a/apps/web/locales/bg-BG.po +++ b/apps/web/locales/bg-BG.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Изберете шаблон за автобиография" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Изберете шаблон" @@ -2055,10 +2051,6 @@ msgstr "Конвертирана чернова на стилов лист" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Копирайте цялото описание на длъжностт msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Копирайте текста от експортирания файл и го прочетете внимателно; поправете всичко, което се озовава на грешно място." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Капак" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Мотивационно писмо" @@ -4070,10 +4053,6 @@ msgstr "Импортиране от CSV файл" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Увеличаване на отстъпа" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Отвори" @@ -6416,7 +6389,6 @@ msgstr "Готови ли сте да поставите името си на н msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Получател" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Автобиография" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/bn-BD.po b/apps/web/locales/bn-BD.po index ae7936ae3..76234a590 100644 --- a/apps/web/locales/bn-BD.po +++ b/apps/web/locales/bn-BD.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "জীবনবৃত্তান্তের টেমপ্লেট বেছে নিন" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "টেমপ্লেট বেছে নিন" @@ -2055,10 +2051,6 @@ msgstr "রূপান্তরিত স্টাইলশীট খসড় msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "বিজ্ঞপ্তি থেকে সম্পূর্ণ কা msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "এক্সপোর্ট করা ফাইল থেকে টেক্সট কপি করে পুরোটা পড়ুন; যা ভুল জায়গায় এসেছে তা ঠিক করুন।" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "আবরণ" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "কভার লেটার" @@ -4070,10 +4053,6 @@ msgstr "CSV থেকে আমদানি করুন" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "ইন্ডেন্ট বৃদ্ধি করুন" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "খুলুন" @@ -6416,7 +6389,6 @@ msgstr "এতে আপনার নাম লিখতে প্রস্ত msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "প্রাপক" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "জীবনবৃত্তান্ত" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/ca-ES.po b/apps/web/locales/ca-ES.po index 9dce9dc4e..b75a1efb2 100644 --- a/apps/web/locales/ca-ES.po +++ b/apps/web/locales/ca-ES.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Tria una plantilla de currículum" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Tria una plantilla" @@ -2055,10 +2051,6 @@ msgstr "Esborrany de full d'estil convertit" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Copia tota la descripció de la feina de l'oferta i enganxa-la a continu msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Copia el text del fitxer exportat i llegeix-lo sencer; corregeix qualsevol cosa que quedi mal col·locada." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Cobrir" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Carta de presentació" @@ -4070,10 +4053,6 @@ msgstr "Importa des de CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Augmenta la sagnia" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Obre" @@ -6416,7 +6389,6 @@ msgstr "A punt per posar-hi el teu nom?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Destinatari" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Currículum vitae" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/cs-CZ.po b/apps/web/locales/cs-CZ.po index 9b708bffd..c6ef9e3ec 100644 --- a/apps/web/locales/cs-CZ.po +++ b/apps/web/locales/cs-CZ.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Vyberte šablonu životopisu" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Vyberte šablonu" @@ -2055,10 +2051,6 @@ msgstr "Konverze konceptu stylů" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Zkopírujte celý popis práce z inzerátu a vložte jej níže. Pole za msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Zkopírujte text z exportovaného souboru a pročtěte si jej; opravte vše, co se ocitne na špatném místě." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Kryt" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Motivační dopis" @@ -4070,10 +4053,6 @@ msgstr "Importovat z CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Zvětšit odsazení" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Otevřít" @@ -6416,7 +6389,6 @@ msgstr "Připraveni na něj podepsat se svým jménem?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Příjemce" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Životopis" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/da-DK.po b/apps/web/locales/da-DK.po index c4121a939..5b454f9a6 100644 --- a/apps/web/locales/da-DK.po +++ b/apps/web/locales/da-DK.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Vælg en CV-skabelon" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Vælg en skabelon" @@ -2055,10 +2051,6 @@ msgstr "Konverteret stylesheet-kladde" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Kopiér hele jobbeskrivelsen fra opslaget, og indsæt den nedenfor. Vi u msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Kopiér teksten ud af den eksporterede fil, og læs den igennem; ret alt, der havner det forkerte sted." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Udfyld" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Følgebrev" @@ -4070,10 +4053,6 @@ msgstr "Importer fra CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Øg indrykning" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Åbn" @@ -6416,7 +6389,6 @@ msgstr "Klar til at sætte dit navn på?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Modtager" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "CV" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/de-DE.po b/apps/web/locales/de-DE.po index d7020711a..31ce0b224 100644 --- a/apps/web/locales/de-DE.po +++ b/apps/web/locales/de-DE.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Wähle eine Lebenslauf-Vorlage" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Wähle eine Vorlage ..." @@ -2055,10 +2051,6 @@ msgstr "Konvertierter Stylesheet-Entwurf" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Kopieren Sie die vollständige Stellenbeschreibung aus der Ausschreibung msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Kopieren Sie den Text aus der exportierten Datei und lesen Sie ihn durch; korrigieren Sie alles, was an der falschen Stelle landet." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Ausfüllen" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Motivationsschreiben" @@ -4070,10 +4053,6 @@ msgstr "Aus CSV importieren" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Einzug vergrößern" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Öffnen" @@ -6416,7 +6389,6 @@ msgstr "Bereit, deinen Namen draufzusetzen?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Empfänger" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Lebenslauf" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/el-GR.po b/apps/web/locales/el-GR.po index 62c32807c..0f0b5e885 100644 --- a/apps/web/locales/el-GR.po +++ b/apps/web/locales/el-GR.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Διαλέξτε ένα πρότυπο βιογραφικού" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Διαλέξτε ένα πρότυπο" @@ -2055,10 +2051,6 @@ msgstr "Μετατρεπόμενο προσχέδιο φύλλου στυλ" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Αντιγράψτε ολόκληρη την περιγραφή θέση msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Αντιγράψτε το κείμενο από το εξαγόμενο αρχείο και διαβάστε το προσεκτικά· διορθώστε ό,τι εμφανίζεται στη λάθος θέση." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Εξώφυλλο" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Συνοδευτική επιστολή" @@ -4070,10 +4053,6 @@ msgstr "Εισαγωγή από CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Αύξηση εσοχής" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Άνοιγμα" @@ -6416,7 +6389,6 @@ msgstr "Έτοιμοι να βάλετε το όνομά σας σε αυτό;" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Παραλήπτης" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Βιογραφικό σημείωμα" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/en-GB.po b/apps/web/locales/en-GB.po index b7c304e1f..ecc62ba02 100644 --- a/apps/web/locales/en-GB.po +++ b/apps/web/locales/en-GB.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Choose a resume template" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Choose a template" @@ -2055,10 +2051,6 @@ msgstr "Converted stylesheet draft" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Copy the entire job description from the posting and paste it below. We' msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Cover" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Cover letter" @@ -4070,10 +4053,6 @@ msgstr "Import from CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Increase indent" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Open" @@ -6416,7 +6389,6 @@ msgstr "Ready to put your name on it?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Recipient" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Resume" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/en-US.po b/apps/web/locales/en-US.po index 6eec9b024..22bccdb92 100644 --- a/apps/web/locales/en-US.po +++ b/apps/web/locales/en-US.po @@ -1766,10 +1766,6 @@ msgstr "Choose a resume in Write to match its design. Until then, the letter has msgid "Choose a resume template" msgstr "Choose a resume template" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "Choose a saved cover letter" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Choose a template" @@ -2050,10 +2046,6 @@ msgstr "Converted stylesheet draft" msgid "Copied" msgstr "Copied" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "Copied to Documents" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2103,10 +2095,6 @@ msgstr "Copy the entire job description from the posting and paste it below. We' msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "Copy to Documents" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "Copy transcript" @@ -2177,10 +2165,6 @@ msgstr "Couldn't change the email. Try again." msgid "Couldn't connect. Check the key and try again." msgstr "Couldn't connect. Check the key and try again." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "Couldn't copy the letter. Save and try again." - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "Couldn't copy the resume." @@ -2362,7 +2346,6 @@ msgstr "Cover" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Cover letter" @@ -4065,10 +4048,6 @@ msgstr "Import from CSV" msgid "Import from CSV…" msgstr "Import from CSV…" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "Import from library" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "Import or export CSV" @@ -4131,10 +4110,6 @@ msgstr "Improving…" msgid "In the sidebar · tap to move" msgstr "In the sidebar · tap to move" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "Include the resume's header" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Increase indent" @@ -4592,7 +4567,6 @@ msgstr "letter" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5661,7 +5635,6 @@ msgstr "Only you see these" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Open" @@ -6411,7 +6384,6 @@ msgstr "Ready to put your name on it?" msgid "Reason" msgstr "Reason" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Recipient" @@ -6659,7 +6631,6 @@ msgstr "resume" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Resume" @@ -9059,10 +9030,6 @@ msgstr "What the file-level check found in the PDF you'd send. It ran in this ta msgid "What to do" msgstr "What to do" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "What to download" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "What you sent" diff --git a/apps/web/locales/es-ES.po b/apps/web/locales/es-ES.po index ddde2457c..4bfae7bba 100644 --- a/apps/web/locales/es-ES.po +++ b/apps/web/locales/es-ES.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Elige una plantilla de currículum" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Elige una plantilla" @@ -2055,10 +2051,6 @@ msgstr "Borrador de hoja de estilo convertido" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Copia la descripción completa del empleo desde la oferta y pégala aqu msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Copie el texto del archivo exportado y léalo entero; corrija lo que aparezca en el lugar equivocado." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Cubrir" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Carta de presentación" @@ -4070,10 +4053,6 @@ msgstr "Importar desde CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Aumentar sangría" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Abrir" @@ -6416,7 +6389,6 @@ msgstr "¿Listo para poner tu nombre?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Destinatario" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Currículum" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/fa-IR.po b/apps/web/locales/fa-IR.po index 8623e1039..06a471a8d 100644 --- a/apps/web/locales/fa-IR.po +++ b/apps/web/locales/fa-IR.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "یک قالب رزومه انتخاب کنید" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "یک قالب انتخاب کنید" @@ -2055,10 +2051,6 @@ msgstr "پیش‌نویس شیوه‌نامه تبدیل‌شده" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "کل شرح شغل را از آگهی کپی کنید و در پایین msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "متن را از فایل خروجی کپی کنید و آن را کامل بخوانید؛ هر چیزی که در جای نادرست قرار گرفته را اصلاح کنید." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "پوشش" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "نامهٔ پوششی" @@ -4070,10 +4053,6 @@ msgstr "وارد کردن از CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "افزایش تورفتگی" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "باز کردن" @@ -6416,7 +6389,6 @@ msgstr "آماده‌اید نام خودتان را روی آن بگذارید msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "گیرنده" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "رزومه" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/fi-FI.po b/apps/web/locales/fi-FI.po index 762477319..83f6987ec 100644 --- a/apps/web/locales/fi-FI.po +++ b/apps/web/locales/fi-FI.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Valitse ansioluettelon mallipohja" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Valitse mallipohja" @@ -2055,10 +2051,6 @@ msgstr "Muunnettu tyylitiedoston luonnos" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Kopioi koko työnkuvaus ilmoituksesta ja liitä se alle. Täytämme kent msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Kopioi teksti viedystä tiedostosta ja lue se läpi; korjaa kaikki, mikä päätyy väärään paikkaan." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Täytä" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Saatekirje" @@ -4070,10 +4053,6 @@ msgstr "Tuo CSV:stä" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Suurenna sisennystä" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Avaa" @@ -6416,7 +6389,6 @@ msgstr "Valmis laittamaan nimesi siihen?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Vastaanottaja" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Ansioluettelo" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/fr-FR.po b/apps/web/locales/fr-FR.po index b7ba9fa2d..0583aeda8 100644 --- a/apps/web/locales/fr-FR.po +++ b/apps/web/locales/fr-FR.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Choisir un modèle de CV" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Choisir un modèle" @@ -2055,10 +2051,6 @@ msgstr "Brouillon de feuille de style converti" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Copiez l'intégralité de la description du poste depuis l'annonce et co msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Copiez le texte du fichier exporté et relisez-le ; corrigez tout ce qui arrive au mauvais endroit." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Remplir" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "lettre de motivation" @@ -4070,10 +4053,6 @@ msgstr "Importer depuis un CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Augmenter l'indentation" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Ouvrir" @@ -6416,7 +6389,6 @@ msgstr "Prêt à y apposer votre nom ?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Destinataire" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "CV" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/he-IL.po b/apps/web/locales/he-IL.po index ec4b1b42a..ea0f3ffa9 100644 --- a/apps/web/locales/he-IL.po +++ b/apps/web/locales/he-IL.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "בחר תבנית קורות חיים" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "בחר תבנית" @@ -2055,10 +2051,6 @@ msgstr "טיוטת גיליון סגנונות שהומרה" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "העתק את תיאור המשרה המלא מהמודעה והדבק msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "העתק את הטקסט מהקובץ המיוצא וקרא אותו; תקן כל דבר שמגיע במקום הלא נכון." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "כיסוי" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "מכתב מקדים" @@ -4070,10 +4053,6 @@ msgstr "ייבוא מ-CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "הגדלת כניסה" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "פתיחה" @@ -6416,7 +6389,6 @@ msgstr "מוכן לשים עליו את השם שלך?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "נמען" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "קוֹרוֹת חַיִים" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/hi-IN.po b/apps/web/locales/hi-IN.po index 62fcee25d..f18f35936 100644 --- a/apps/web/locales/hi-IN.po +++ b/apps/web/locales/hi-IN.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "बायोडाटा टेम्प्लेट चुनें" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "टेम्प्लेट चुनें" @@ -2055,10 +2051,6 @@ msgstr "रूपांतरित स्टाइलशीट ड्राफ msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "पोस्टिंग से पूरा नौकरी विव msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "एक्सपोर्ट की गई फ़ाइल में से टेक्स्ट कॉपी करें और उसे पूरा पढ़ें; जो कुछ भी गलत जगह पर आए उसे ठीक करें।" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "आवरण" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "कवर लेटर" @@ -4070,10 +4053,6 @@ msgstr "CSV से आयात करें" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "बढ़ते हुए अंतर में" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "खोलें" @@ -6416,7 +6389,6 @@ msgstr "इस पर अपना नाम लगाने के लिए msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "प्राप्तकर्ता" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "रेज़्यूमे" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/hu-HU.po b/apps/web/locales/hu-HU.po index 637f7d25b..29cf2bc07 100644 --- a/apps/web/locales/hu-HU.po +++ b/apps/web/locales/hu-HU.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Válassz önéletrajzi sablont" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Válassz sablont" @@ -2055,10 +2051,6 @@ msgstr "Stíluslap-tervezet konvertálása" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Másolja ki a teljes állásleírást a hirdetésből, és illessze be a msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Másold ki a szöveget az exportált fájlból, és olvasd át; javíts mindent, ami rossz helyre kerül." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Borító" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Motivációs levél" @@ -4070,10 +4053,6 @@ msgstr "Importálás CSV-ből" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Behúzás növelése" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Megnyitás" @@ -6416,7 +6389,6 @@ msgstr "Készen állsz, hogy a neved rákerüljön?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Címzett" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Önéletrajz" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/id-ID.po b/apps/web/locales/id-ID.po index d174dad0a..1adab17ce 100644 --- a/apps/web/locales/id-ID.po +++ b/apps/web/locales/id-ID.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Pilih template resume" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Pilih template" @@ -2055,10 +2051,6 @@ msgstr "Draf stylesheet yang telah dikonversi" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Salin seluruh deskripsi pekerjaan dari lowongan tersebut dan tempel di b msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Salin teks dari file yang diekspor dan baca seluruhnya; perbaiki apa pun yang muncul di tempat yang salah." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Sampul" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Surat lamaran" @@ -4070,10 +4053,6 @@ msgstr "Impor dari CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Perbesar lekukan" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Buka" @@ -6416,7 +6389,6 @@ msgstr "Siap menaruh namamu di sana?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Penerima" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Melanjutkan" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/it-IT.po b/apps/web/locales/it-IT.po index 6bd4322a7..64c68f4a0 100644 --- a/apps/web/locales/it-IT.po +++ b/apps/web/locales/it-IT.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Scegli un modello di curriculum" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Scegli un modello" @@ -2055,10 +2051,6 @@ msgstr "Bozza del foglio di stile convertito" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Copia l'intera descrizione del lavoro dall'annuncio e incollala qui sott msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Copia il testo dal file esportato e leggilo per intero; correggi tutto ciò che finisce nel posto sbagliato." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Riempi" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Lettera di presentazione" @@ -4070,10 +4053,6 @@ msgstr "Importa da CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Aumentare il rientro" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Apri" @@ -6416,7 +6389,6 @@ msgstr "Pronto a metterci il tuo nome?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Destinatario" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Curriculum" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/ja-JP.po b/apps/web/locales/ja-JP.po index ecc46a682..051e29448 100644 --- a/apps/web/locales/ja-JP.po +++ b/apps/web/locales/ja-JP.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "履歴書テンプレートを選択" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "テンプレートを選択" @@ -2055,10 +2051,6 @@ msgstr "変換されたスタイルシートのドラフト" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "求人情報から職務内容の全文をコピーして、下に貼り msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "エクスポートしたファイルからテキストをコピーして通読し、位置がおかしい箇所があれば修正してください。" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "切り抜き" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "カバーレター" @@ -4070,10 +4053,6 @@ msgstr "CSV からインポート" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "インデントを増やす" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "開く" @@ -6416,7 +6389,6 @@ msgstr "あなたの名前を載せる準備はできましたか?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "宛先" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "レジュメ" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/km-KH.po b/apps/web/locales/km-KH.po index ea13c9fba..c232c0566 100644 --- a/apps/web/locales/km-KH.po +++ b/apps/web/locales/km-KH.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "ជ្រើសរើសពុម្ពប្រវត្តិរូបសង្ខេប" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "ជ្រើសរើសពុម្ព" @@ -2055,10 +2051,6 @@ msgstr "សេចក្តីព្រាងសន្លឹករចនាប័ msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "ចម្លងការពិពណ៌នាការងារទាំ msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "ចម្លងអត្ថបទចេញពីឯកសារដែលបាននាំចេញ ហើយអានវាទាំងអស់; កែតម្រូវអ្វីៗដែលមកដល់ខុសកន្លែង។" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "គម្រប" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "លិខិតអម" @@ -4070,10 +4053,6 @@ msgstr "នាំចូលពី CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "បង្កើន​ការ​ចូល​បន្ទាត់" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "បើក" @@ -6416,7 +6389,6 @@ msgstr "រួចរាល់ដាក់ឈ្មោះរបស់អ្នក msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "អ្នកទទួល" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "ប្រវត្តិរូបសង្ខេប" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/kn-IN.po b/apps/web/locales/kn-IN.po index ba8328129..65f4b3abb 100644 --- a/apps/web/locales/kn-IN.po +++ b/apps/web/locales/kn-IN.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "ರೆಸ್ಯೂಮ್ ಟೆಂಪ್ಲೇಟ್ ಆಯ್ಕೆಮಾಡಿ" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "ಟೆಂಪ್ಲೇಟ್ ಆಯ್ಕೆಮಾಡಿ" @@ -2055,10 +2051,6 @@ msgstr "ಪರಿವರ್ತಿಸಲಾದ ಸ್ಟೈಲ್‌ಶೀಟ್ msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "ಪೋಸ್ಟಿಂಗ್‌ನಿಂದ ಸಂಪೂರ್ಣ ಉದ msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "ಎಕ್ಸ್‌ಪೋರ್ಟ್ ಮಾಡಿದ ಫೈಲ್‌ನಿಂದ ಪಠ್ಯವನ್ನು ಕಾಪಿ ಮಾಡಿ ಪೂರ್ತಿ ಓದಿ; ತಪ್ಪು ಸ್ಥಳದಲ್ಲಿ ಬರುವುದನ್ನು ಸರಿಪಡಿಸಿ." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "ಕವರ್" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "ಕವರ್ ಲೆಟರ್" @@ -4070,10 +4053,6 @@ msgstr "CSV ನಿಂದ ಆಮದು ಮಾಡಿ" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "ಇಂಡೆಂಟ್ ಹೆಚ್ಚಿಸಿ" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "ತೆರೆಯಿರಿ" @@ -6416,7 +6389,6 @@ msgstr "ಇದರ ಮೇಲೆ ನಿಮ್ಮ ಹೆಸರು ಹಾಕಲು msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "ಸ್ವೀಕೃತದಾರ" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "ರೆಸ್ಯೂಮ್" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/ko-KR.po b/apps/web/locales/ko-KR.po index 90999df76..6cc82477f 100644 --- a/apps/web/locales/ko-KR.po +++ b/apps/web/locales/ko-KR.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "이력서 템플릿 선택" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "템플릿 선택" @@ -2055,10 +2051,6 @@ msgstr "변환된 스타일시트 초안" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "채용 공고의 직무 설명 전체를 복사해 아래에 붙여넣 msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "내보낸 파일에서 텍스트를 복사해 읽어 보고, 잘못된 위치에 놓인 부분을 수정하세요." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "채우기" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "커버레터" @@ -4070,10 +4053,6 @@ msgstr "CSV에서 가져오기" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "들여쓰기 증가" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "열기" @@ -6416,7 +6389,6 @@ msgstr "이제 여기에 이름을 올려 볼까요?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "수신인" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "이력서" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/lt-LT.po b/apps/web/locales/lt-LT.po index 9cd24834b..01beccd33 100644 --- a/apps/web/locales/lt-LT.po +++ b/apps/web/locales/lt-LT.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Pasirinkite gyvenimo aprašymo šabloną" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Pasirinkite šabloną" @@ -2055,10 +2051,6 @@ msgstr "Konvertuotas stilių lapo juodraštis" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Nukopijuokite visą darbo aprašymą iš skelbimo ir įklijuokite jį ž msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Nukopijuokite tekstą iš eksportuoto failo ir perskaitykite jį; ištaisykite viską, kas atsiduria ne savo vietoje." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Viršelis" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Motyvacinis laiškas" @@ -4070,10 +4053,6 @@ msgstr "Importuoti iš CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Padidinti įtrauką" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Atidaryti" @@ -6416,7 +6389,6 @@ msgstr "Pasiruošę įrašyti savo vardą?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Gavėjas" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Gyvenimo aprašymas" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/lv-LV.po b/apps/web/locales/lv-LV.po index 453f58cd6..8cc0b4ae9 100644 --- a/apps/web/locales/lv-LV.po +++ b/apps/web/locales/lv-LV.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Izvēlieties CV veidni" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Izvēlieties veidni" @@ -2055,10 +2051,6 @@ msgstr "Konvertēts stila lapas melnraksts" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Nokopējiet visu amata aprakstu no sludinājuma un ielīmējiet to zemā msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Izkopējiet tekstu no eksportētā faila un izlasiet to; izlabojiet visu, kas nokļūst nepareizā vietā." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Vāks" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Motivācijas vēstule" @@ -4070,10 +4053,6 @@ msgstr "Importēt no CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Palielināt atkāpi" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Atvērt" @@ -6416,7 +6389,6 @@ msgstr "Vai esat gatavs ierakstīt savu vārdu?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Saņēmējs" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "CV" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/ml-IN.po b/apps/web/locales/ml-IN.po index 5a6289fc7..10901afe8 100644 --- a/apps/web/locales/ml-IN.po +++ b/apps/web/locales/ml-IN.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "ഒരു റെസ്യൂമെ ടെംപ്ലേറ്റ് തിരഞ്ഞെടുക്കൂ" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "ഒരു ടെംപ്ലേറ്റ് തിരഞ്ഞെടുക്കൂ" @@ -2055,10 +2051,6 @@ msgstr "പരിവർത്തനം ചെയ്ത സ്റ്റൈൽഷ msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "പോസ്റ്റിംഗിൽ നിന്ന് ജോലി വ msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "എക്സ്പോർട്ട് ചെയ്ത ഫയലിൽ നിന്ന് ടെക്സ്റ്റ് പകർത്തി വായിക്കുക; തെറ്റായ സ്ഥലത്ത് വരുന്നതെന്തും ശരിയാക്കുക." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "മൂടുക" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "കവർ ലെറ്റർ" @@ -4070,10 +4053,6 @@ msgstr "CSV-ൽ നിന്ന് ഇറക്കുമതി ചെയ്യ msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "ഇൻഡന്റ് വർദ്ധിപ്പിക്കുക" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "ഓപ്പൺ ചെയ്യുക" @@ -6416,7 +6389,6 @@ msgstr "ഇതിൽ നിങ്ങളുടെ പേര് ചേർക്ക msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "സ്വീകർത്താവ്" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "റെസ്യൂമെ" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/mr-IN.po b/apps/web/locales/mr-IN.po index a8ff168e4..7fd0bb55e 100644 --- a/apps/web/locales/mr-IN.po +++ b/apps/web/locales/mr-IN.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "रेझ्युमे टेम्पलेट निवडा" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "टेम्पलेट निवडा" @@ -2055,10 +2051,6 @@ msgstr "रूपांतरित स्टाईलशीटचा मसु msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "जाहिरातीमधील संपूर्ण नोकर msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "निर्यात केलेल्या फाइलमधून मजकूर कॉपी करून वाचा; चुकीच्या जागी येणारे काहीही दुरुस्त करा." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "कव्हर" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "कव्हर लेटर" @@ -4070,10 +4053,6 @@ msgstr "CSV वरून आयात करा" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "इंडेंट वाढवा" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "उघडा" @@ -6416,7 +6389,6 @@ msgstr "त्यावर तुमचे नाव लिहायला त msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "प्राप्तकर्ता" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "रेझ्युमे" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/ms-MY.po b/apps/web/locales/ms-MY.po index 0787d1222..e0f3d238e 100644 --- a/apps/web/locales/ms-MY.po +++ b/apps/web/locales/ms-MY.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Pilih templat resume" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Pilih templat" @@ -2055,10 +2051,6 @@ msgstr "Draf helaian gaya yang ditukar" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Salin keseluruhan penerangan kerja daripada iklan tersebut dan tampalkan msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Salin teks daripada fail yang dieksport dan baca keseluruhannya; baiki apa-apa yang muncul di tempat yang salah." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Penutup" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Surat iringan" @@ -4070,10 +4053,6 @@ msgstr "Import daripada CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Tingkatkan inden" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Buka" @@ -6416,7 +6389,6 @@ msgstr "Bersedia untuk meletakkan nama anda padanya?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Penerima" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Resume" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/ne-NP.po b/apps/web/locales/ne-NP.po index 5ed6990dd..1c1aeb666 100644 --- a/apps/web/locales/ne-NP.po +++ b/apps/web/locales/ne-NP.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "बायोडाटा ढाँचा छान्नुहोस्" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "टेम्प्लेट छान्नुहोस्" @@ -2055,10 +2051,6 @@ msgstr "रूपान्तरित स्टाइलसिट ड्रा msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "पोस्टिंगबाट सम्पूर्ण काम व msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "निर्यात गरिएको फाइलबाट पाठ प्रतिलिपि गरी पूरा पढ्नुहोस्; गलत ठाउँमा आउने कुनै पनि कुरा सुधार्नुहोस्।" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "आवरण" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "आवरण पत्र" @@ -4070,10 +4053,6 @@ msgstr "CSV बाट आयात गर्नुहोस्" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "इन्डेन्ट बढाउनुहोस्" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "खोल्नुहोस्" @@ -6416,7 +6389,6 @@ msgstr "आफ्नो नाम राख्न तयार हुनुह msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "प्राप्तकर्ता" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "बायोडाटा" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/nl-NL.po b/apps/web/locales/nl-NL.po index fcfe81188..1508443dc 100644 --- a/apps/web/locales/nl-NL.po +++ b/apps/web/locales/nl-NL.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Kies een cv-sjabloon" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Kies een sjabloon" @@ -2055,10 +2051,6 @@ msgstr "Omgezette stylesheet-concept" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Kopieer de volledige functieomschrijving uit de vacature en plak die hie msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Kopieer de tekst uit het geëxporteerde bestand en lees deze door; corrigeer alles wat op de verkeerde plek terechtkomt." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Vullen" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Sollicitatiebrief" @@ -4070,10 +4053,6 @@ msgstr "Importeren uit CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Verhoog de inkeping" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Openen" @@ -6416,7 +6389,6 @@ msgstr "Klaar om er je naam op te zetten?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Ontvanger" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Cv" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/no-NO.po b/apps/web/locales/no-NO.po index bde94dee4..19bfb3544 100644 --- a/apps/web/locales/no-NO.po +++ b/apps/web/locales/no-NO.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Velg en CV-mal" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Velg en mal" @@ -2055,10 +2051,6 @@ msgstr "Konvertert stilarkutkast" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Kopier hele stillingsbeskrivelsen fra utlysningen og lim den inn nedenfo msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Kopier teksten ut av den eksporterte filen og les gjennom den; fiks alt som havner feil sted." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Fyll" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Følgebrev" @@ -4070,10 +4053,6 @@ msgstr "Importer fra CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Øk innrykk" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Åpne" @@ -6416,7 +6389,6 @@ msgstr "Klar til å sette navnet ditt på den?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Mottaker" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "CV" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/or-IN.po b/apps/web/locales/or-IN.po index f5b39a708..d3ad73ed4 100644 --- a/apps/web/locales/or-IN.po +++ b/apps/web/locales/or-IN.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "ଏକ ରେଜ୍ୟୁମେ ଟେମ୍ପଲେଟ୍ ବାଛନ୍ତୁ" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "ଏକ ଟେମ୍ପଲେଟ୍ ବାଛନ୍ତୁ" @@ -2055,10 +2051,6 @@ msgstr "ରୂପାନ୍ତରିତ ଷ୍ଟାଇଲସିଟ୍ ଡ୍ର msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "ପୋଷ୍ଟିଂରୁ ସମ୍ପୂର୍ଣ୍ଣ କାର୍ msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "ରପ୍ତାନି ହୋଇଥିବା ଫାଇଲରୁ ଟେକ୍ସଟ୍ କପି କରନ୍ତୁ ଏବଂ ସମ୍ପୂର୍ଣ୍ଣ ପଢ଼ନ୍ତୁ; ଭୁଲ ସ୍ଥାନରେ ଆସୁଥିବା ଯେକୌଣସି ଜିନିଷ ଠିକ୍ କରନ୍ତୁ।" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "ଆଚ୍ଛାଦନ କରନ୍ତୁ |" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "କଭର୍ ଚିଠି |" @@ -4070,10 +4053,6 @@ msgstr "CSV ରୁ ଆମଦାନି କରନ୍ତୁ |" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "ଇଣ୍ଡେଣ୍ଟ ବୃଦ୍ଧି କରନ୍ତୁ" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "ଖୋଲନ୍ତୁ" @@ -6416,7 +6389,6 @@ msgstr "ଏଥିରେ ଆପଣଙ୍କ ନାମ ଲେଖିବାକୁ msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "ପ୍ରାପ୍ତକର୍ତ୍ତା" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "ରେଜ୍ୟୁମେ" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/pl-PL.po b/apps/web/locales/pl-PL.po index 15654c5a5..b66beec60 100644 --- a/apps/web/locales/pl-PL.po +++ b/apps/web/locales/pl-PL.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Wybierz szablon CV" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Wybierz szablon" @@ -2055,10 +2051,6 @@ msgstr "Przekonwertowany projekt arkusza stylów" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Skopiuj cały opis stanowiska z ogłoszenia i wklej go poniżej. Wypełn msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Skopiuj tekst z wyeksportowanego pliku i przeczytaj go; popraw wszystko, co znalazło się w niewłaściwym miejscu." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Okładka" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "List motywacyjny" @@ -4070,10 +4053,6 @@ msgstr "Importuj z CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Zwiększ wcięcie" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Otwórz" @@ -6416,7 +6389,6 @@ msgstr "Gotowy, by podpisać je swoim nazwiskiem?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Odbiorca" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "CV" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/pt-BR.po b/apps/web/locales/pt-BR.po index e7a97916f..8fb3a8768 100644 --- a/apps/web/locales/pt-BR.po +++ b/apps/web/locales/pt-BR.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Escolha um modelo de currículo" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Escolha um modelo" @@ -2055,10 +2051,6 @@ msgstr "Rascunho da folha de estilo convertida" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Copie toda a descrição do trabalho do anúncio e cole abaixo. Preenche msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Copie o texto do arquivo exportado e leia-o por completo; corrija qualquer coisa que apareça no lugar errado." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Cobrir" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Carta de apresentação" @@ -4070,10 +4053,6 @@ msgstr "Importar de CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Aumentar recuo" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Abrir" @@ -6416,7 +6389,6 @@ msgstr "Pronto para colocar seu nome nele?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Destinatário" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Currículo" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/pt-PT.po b/apps/web/locales/pt-PT.po index c52c7f70c..6172bec24 100644 --- a/apps/web/locales/pt-PT.po +++ b/apps/web/locales/pt-PT.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Escolha um modelo de CV" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Escolha um modelo" @@ -2055,10 +2051,6 @@ msgstr "Rascunho da folha de estilo convertida" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Copie toda a descrição do trabalho do anúncio e cole-a abaixo. Preenc msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Copie o texto do ficheiro exportado e leia-o na íntegra; corrija tudo o que apareça no lugar errado." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Cobrir" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Carta de apresentação" @@ -4070,10 +4053,6 @@ msgstr "Importar de CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Aumentar recuo" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Abrir" @@ -6416,7 +6389,6 @@ msgstr "Pronto para colocar o seu nome nele?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Destinatário" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Currículo" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/ro-RO.po b/apps/web/locales/ro-RO.po index a67e843cd..7b8823e02 100644 --- a/apps/web/locales/ro-RO.po +++ b/apps/web/locales/ro-RO.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Alege un șablon de CV" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Alege un șablon" @@ -2055,10 +2051,6 @@ msgstr "Schiță de foaie de stil convertită" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Copiați întreaga descriere a postului din postare și lipiți-o mai jo msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Copiați textul din fișierul exportat și citiți-l în întregime; corectați orice ajunge în locul greșit." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Umplere" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Scrisoare de intenție" @@ -4070,10 +4053,6 @@ msgstr "Importă din CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Măriți indentarea" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Deschide" @@ -6416,7 +6389,6 @@ msgstr "Gata să-ți pui numele pe el?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Destinatar" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "CV" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/ru-RU.po b/apps/web/locales/ru-RU.po index 3dc3b7af2..451b1bbbd 100644 --- a/apps/web/locales/ru-RU.po +++ b/apps/web/locales/ru-RU.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Выберите шаблон резюме" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Выберите шаблон" @@ -2055,10 +2051,6 @@ msgstr "Преобразованный черновик таблицы стил msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Скопируйте всё описание вакансии из об msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Скопируйте текст из экспортированного файла и прочитайте его целиком; исправьте всё, что оказалось не на своём месте." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Обложка" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Сопроводительное письмо" @@ -4070,10 +4053,6 @@ msgstr "Импорт из CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Увеличить отступ" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Открыть" @@ -6416,7 +6389,6 @@ msgstr "Готовы добавить своё имя?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Получатель" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Резюме" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/sk-SK.po b/apps/web/locales/sk-SK.po index 12645158f..af37adb49 100644 --- a/apps/web/locales/sk-SK.po +++ b/apps/web/locales/sk-SK.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Vyber si šablónu životopisu" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Vyber si šablónu" @@ -2055,10 +2051,6 @@ msgstr "Konvertovaný koncept štýlového hárka" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Skopírujte celý popis práce z inzerátu a vložte ho nižšie. Polia msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Skopírujte text z exportovaného súboru a prečítajte si ho celý; opravte všetko, čo sa ocitlo na nesprávnom mieste." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Kryt" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Sprievodný list" @@ -4070,10 +4053,6 @@ msgstr "Importovať z CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Zväčšiť odsadenie" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Otvoriť" @@ -6416,7 +6389,6 @@ msgstr "Pripravený uviesť svoje meno?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Príjemca" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Životopis" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/sl-SI.po b/apps/web/locales/sl-SI.po index 9b091a743..9a194404e 100644 --- a/apps/web/locales/sl-SI.po +++ b/apps/web/locales/sl-SI.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Izberite predlogo življenjepisa" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Izberite predlogo" @@ -2055,10 +2051,6 @@ msgstr "Pretvorjen osnutek slogovne predloge" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Kopirajte celoten opis delovnega mesta iz objave in ga prilepite spodaj. msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Kopirajte besedilo iz izvožene datoteke in ga preberite v celoti; popravite vse, kar se znajde na napačnem mestu." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Pokrov" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Spremno pismo" @@ -4070,10 +4053,6 @@ msgstr "Uvoz iz CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Povečaj zamik" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Odpri" @@ -6416,7 +6389,6 @@ msgstr "Ste pripravljeni nanj zapisati svoje ime?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Prejemnik" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Življenjepis" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/sq-AL.po b/apps/web/locales/sq-AL.po index e07c8c549..11ea2499c 100644 --- a/apps/web/locales/sq-AL.po +++ b/apps/web/locales/sq-AL.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Zgjidh një shabllon CV" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Zgjidh një shabllon" @@ -2055,10 +2051,6 @@ msgstr "Drafti i konvertuar i fletës së stilit" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Kopjoni të gjithë përshkrimin e punës nga shpallja dhe ngjiteni më msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Kopjoni tekstin nga skedari i eksportuar dhe lexojeni; rregulloni çdo gjë që del në vendin e gabuar." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Mbulesë" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Letër motivuese" @@ -4070,10 +4053,6 @@ msgstr "Importo nga CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Rrit indentin" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Hap" @@ -6416,7 +6389,6 @@ msgstr "Gati ta vendosësh emrin tënd mbi të?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Marrësi" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "CV" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/sr-SP.po b/apps/web/locales/sr-SP.po index 4b32e2e5f..4d0a482f9 100644 --- a/apps/web/locales/sr-SP.po +++ b/apps/web/locales/sr-SP.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Изаберите шаблон за резиме" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Изаберите шаблон" @@ -2055,10 +2051,6 @@ msgstr "Конвертована нацртна верзија стилског msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Копирајте цео опис посла из огласа и на msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Копирајте текст из извезене датотеке и прочитајте га у целини; исправите све што се нађе на погрешном месту." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Цовер" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Пропратно писмо" @@ -4070,10 +4053,6 @@ msgstr "Увези из CSV-а" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Повећај увлачење" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Отвори" @@ -6416,7 +6389,6 @@ msgstr "Спремни за потпис?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Прималац" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Резиме" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/sv-SE.po b/apps/web/locales/sv-SE.po index 0326fc854..c0cfc0969 100644 --- a/apps/web/locales/sv-SE.po +++ b/apps/web/locales/sv-SE.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Välj en CV-mall" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Välj en mall" @@ -2055,10 +2051,6 @@ msgstr "Konverterat utkast till stilark" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Kopiera hela arbetsbeskrivningen från annonsen och klistra in den nedan msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Kopiera texten från den exporterade filen och läs igenom den; åtgärda allt som hamnar fel." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Fyll" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Följebrev" @@ -4070,10 +4053,6 @@ msgstr "Importera från CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Öka indraget" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Öppna" @@ -6416,7 +6389,6 @@ msgstr "Redo att sätta ditt namn på den?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Mottagare" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "CV" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/ta-IN.po b/apps/web/locales/ta-IN.po index d53bd707a..2e1a188c5 100644 --- a/apps/web/locales/ta-IN.po +++ b/apps/web/locales/ta-IN.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "வாழ்க்கைக் குறிப்பு வார்ப்புருவைத் தேர்ந்தெடுக்கவும்" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "வார்ப்புருவைத் தேர்ந்தெடுக்கவும்" @@ -2055,10 +2051,6 @@ msgstr "மாற்றப்பட்ட ஸ்டைல்ஷீட் வர msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "அறிவிப்பிலிருந்து முழு வே msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "ஏற்றுமதி செய்யப்பட்ட கோப்பிலிருந்து உரையை நகலெடுத்து முழுவதும் படிக்கவும்; தவறான இடத்தில் வருவதைச் சரிசெய்யவும்." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "கவர்" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "கவர் கடிதம்" @@ -4070,10 +4053,6 @@ msgstr "CSV இலிருந்து இறக்குமதி செய் msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "உள் தள்ளலை அதிகரிக்கவும்" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "திற" @@ -6416,7 +6389,6 @@ msgstr "உங்கள் பெயரை அதில் இடத் தய msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "பெறுநர்" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "ரெஸ்யூம்" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/te-IN.po b/apps/web/locales/te-IN.po index 08bb09fd1..c72c9c66e 100644 --- a/apps/web/locales/te-IN.po +++ b/apps/web/locales/te-IN.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "రెజ్యూమ్ టెంప్లేట్‌ను ఎంచుకోండి" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "టెంప్లేట్‌ను ఎంచుకోండి" @@ -2055,10 +2051,6 @@ msgstr "మార్చబడిన స్టైల్‌షీట్ డ్ర msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "పోస్టింగ్ నుండి పూర్తి ఉద్ msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "ఎగుమతి చేసిన ఫైల్ నుండి టెక్స్ట్‌ను కాపీ చేసి పూర్తిగా చదవండి; తప్పు స్థానంలో వచ్చే దేనినైనా సరిచేయండి." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "కవర్" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "కవర్ లెటర్" @@ -4070,10 +4053,6 @@ msgstr "CSV నుండి దిగుమతి చేయండి" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "ఇండెంట్‌ను పెంచండి" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "తెరవండి" @@ -6416,7 +6389,6 @@ msgstr "దీనిపై మీ పేరు పెట్టడానికి msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "గ్రహీత" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "రెజ్యూమ్" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/th-TH.po b/apps/web/locales/th-TH.po index 2d273e0c3..d3b454ac3 100644 --- a/apps/web/locales/th-TH.po +++ b/apps/web/locales/th-TH.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "เลือกเทมเพลตเรซูเม่" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "เลือกเทมเพลต" @@ -2055,10 +2051,6 @@ msgstr "แปลงร่างสไตล์ชีตแล้ว" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "คัดลอกคำอธิบายงานทั้งหมด msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "คัดลอกข้อความจากไฟล์ที่ส่งออกแล้วอ่านตรวจดู แก้ไขส่วนที่ปรากฏผิดตำแหน่ง" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "ปก" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "จดหมายสมัครงาน" @@ -4070,10 +4053,6 @@ msgstr "นำเข้าจาก CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "เพิ่มระยะเยื้อง" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "เปิด" @@ -6416,7 +6389,6 @@ msgstr "พร้อมที่จะลงชื่อของคุณแล msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "ผู้รับ" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "ประวัติย่อ" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/tr-TR.po b/apps/web/locales/tr-TR.po index b339bb5b3..a2be640ab 100644 --- a/apps/web/locales/tr-TR.po +++ b/apps/web/locales/tr-TR.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Bir özgeçmiş şablonu seçin" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Bir şablon seçin" @@ -2055,10 +2051,6 @@ msgstr "Dönüştürülmüş stil sayfası taslağı" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "İlandaki iş tanımının tamamını kopyalayıp aşağıya yapıştır msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Dışa aktarılan dosyadaki metni kopyalayıp baştan sona okuyun; yanlış yerde çıkan her şeyi düzeltin." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Kapak" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Ön yazı" @@ -4070,10 +4053,6 @@ msgstr "CSV'den içe aktar" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Girintiyi artır" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Aç" @@ -6416,7 +6389,6 @@ msgstr "Buna adını yazmaya hazır mısın?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Alıcı" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Özgeçmiş" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/uk-UA.po b/apps/web/locales/uk-UA.po index d99af3b3d..6368cd27c 100644 --- a/apps/web/locales/uk-UA.po +++ b/apps/web/locales/uk-UA.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Оберіть шаблон резюме" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Оберіть шаблон" @@ -2055,10 +2051,6 @@ msgstr "Конвертований чернетка таблиці стилів" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Скопіюйте весь опис вакансії з оголоше msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Скопіюйте текст з експортованого файлу та прочитайте його; виправте все, що опинилося не на своєму місці." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Обкладинка" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Супровідний лист" @@ -4070,10 +4053,6 @@ msgstr "Імпортувати з CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Збільшити відступ" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Відкрити" @@ -6416,7 +6389,6 @@ msgstr "Готові підписати його своїм ім’ям?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Одержувач" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Резюме" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/uz-UZ.po b/apps/web/locales/uz-UZ.po index 0ae4cd937..ab307887e 100644 --- a/apps/web/locales/uz-UZ.po +++ b/apps/web/locales/uz-UZ.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Rezyume andozasini tanlang" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Andoza tanlang" @@ -2055,10 +2051,6 @@ msgstr "O'zgartirilgan uslublar jadvali qoralamasi" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Ish e'lonidagi ish tavsifini to'liq nusxalab, quyiga joylashtiring. Biz msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Eksport qilingan fayldan matnni nusxalab, oxirigacha oʻqing; notoʻgʻri joyga tushgan har qanday narsani tuzating." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Qopqoq" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Muqova xati" @@ -4070,10 +4053,6 @@ msgstr "CSV'dan import qilish" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Xoch chiziqni kattalashtirish" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Ochish" @@ -6416,7 +6389,6 @@ msgstr "Ismingizni qo‘yishga tayyormisiz?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Qabul qiluvchi" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Rezyume" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/vi-VN.po b/apps/web/locales/vi-VN.po index 2e8e76235..1b4701364 100644 --- a/apps/web/locales/vi-VN.po +++ b/apps/web/locales/vi-VN.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "Chọn mẫu sơ yếu lý lịch" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "Chọn một mẫu" @@ -2055,10 +2051,6 @@ msgstr "Bản nháp bảng định kiểu đã chuyển đổi" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "Sao chép toàn bộ mô tả công việc từ tin tuyển dụng và d msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "Sao chép văn bản từ tệp đã xuất và đọc lại toàn bộ; sửa bất cứ điều gì bị đặt sai chỗ." -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "Bìa" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "Thư xin việc" @@ -4070,10 +4053,6 @@ msgstr "Nhập từ CSV" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "Tăng khoảng cách thụt lề" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "Mở" @@ -6416,7 +6389,6 @@ msgstr "Sẵn sàng ghi tên mình lên đó chưa?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "Người nhận" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "Sơ yếu lý lịch" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/zh-CN.po b/apps/web/locales/zh-CN.po index ba8f48342..cf7a1c472 100644 --- a/apps/web/locales/zh-CN.po +++ b/apps/web/locales/zh-CN.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "选择简历模板" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "选择模板" @@ -2055,10 +2051,6 @@ msgstr "已转换的样式表草稿" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "从招聘信息中复制完整的职位描述并粘贴到下方。我们 msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "把导出文件中的文字复制出来通读一遍;修正任何位置错乱的内容。" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "裁剪填满" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "求职信" @@ -4070,10 +4053,6 @@ msgstr "从 CSV 导入" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "增加缩进" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "打开" @@ -6416,7 +6389,6 @@ msgstr "准备好署上你的名字了吗?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "收件人" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "简历" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/zh-TW.po b/apps/web/locales/zh-TW.po index ab5bdb822..a784e68e6 100644 --- a/apps/web/locales/zh-TW.po +++ b/apps/web/locales/zh-TW.po @@ -1771,10 +1771,6 @@ msgstr "" msgid "Choose a resume template" msgstr "選擇履歷範本" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "選擇範本" @@ -2055,10 +2051,6 @@ msgstr "已轉換的樣式表草稿" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2108,10 +2100,6 @@ msgstr "從職缺公告中複製完整的職缺描述並貼到下方。我們會 msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "把匯出檔案中的文字複製出來通讀一遍;修正任何位置錯亂的內容。" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2182,10 +2170,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2367,7 +2351,6 @@ msgstr "裁切填滿" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "求職信" @@ -4070,10 +4053,6 @@ msgstr "從 CSV 匯入" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4136,10 +4115,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "增加縮排" @@ -4597,7 +4572,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5666,7 +5640,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "開啟" @@ -6416,7 +6389,6 @@ msgstr "準備好署上你的名字了嗎?" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "收件人" @@ -6664,7 +6636,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "履歷" @@ -9064,10 +9035,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/locales/zu-ZA.po b/apps/web/locales/zu-ZA.po index 48b2aa845..1185a1858 100644 --- a/apps/web/locales/zu-ZA.po +++ b/apps/web/locales/zu-ZA.po @@ -1766,10 +1766,6 @@ msgstr "" msgid "Choose a resume template" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Choose a saved cover letter" -msgstr "" - #: src/features/homepage/template-shelf.tsx msgid "Choose a template" msgstr "" @@ -2050,10 +2046,6 @@ msgstr "" msgid "Copied" msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copied to Documents" -msgstr "" - #. Action button to copy two-factor backup codes to clipboard #: src/dialogs/auth/enable-two-factor.tsx #: src/features/resume/share/link-tab.tsx @@ -2103,10 +2095,6 @@ msgstr "" msgid "Copy the text out of the exported file and read it through; fix anything that arrives in the wrong place." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Copy to Documents" -msgstr "" - #: src/features/assistant/conversation.tsx msgid "Copy transcript" msgstr "" @@ -2177,10 +2165,6 @@ msgstr "" msgid "Couldn't connect. Check the key and try again." msgstr "" -#: src/features/resume/editor/write/entry-card.tsx -msgid "Couldn't copy the letter. Save and try again." -msgstr "" - #: src/features/documents/new-document-dialog.tsx msgid "Couldn't copy the resume." msgstr "" @@ -2362,7 +2346,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/detail/sent-documents.tsx #: src/features/applications/components/list-view.tsx -#: src/features/resume/share/download-tab.tsx msgid "Cover letter" msgstr "" @@ -4065,10 +4048,6 @@ msgstr "" msgid "Import from CSV…" msgstr "" -#: src/features/resume/editor/write/entries.tsx -msgid "Import from library" -msgstr "" - #: src/routes/dashboard/applications/index.tsx msgid "Import or export CSV" msgstr "" @@ -4131,10 +4110,6 @@ msgstr "" msgid "In the sidebar · tap to move" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "Include the resume's header" -msgstr "" - #: src/components/input/rich-input.tsx msgid "Increase indent" msgstr "" @@ -4592,7 +4567,6 @@ msgstr "" #: src/features/assistant/document.ts #: src/features/documents/document-card.tsx #: src/features/resume/editor/design/style-groups.tsx -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/$resumeId/-components/page-canvas.tsx #: src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx #: src/routes/builder/letter/-components/letter-page.tsx @@ -5661,7 +5635,6 @@ msgstr "" #: src/features/applications/components/detail/sent-documents.tsx #: src/features/documents/document-actions.tsx -#: src/features/resume/editor/write/entry-card.tsx #: src/routes/dashboard/applications/index.tsx msgid "Open" msgstr "" @@ -6411,7 +6384,6 @@ msgstr "" msgid "Reason" msgstr "" -#: src/features/resume/editor/write/entries.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Recipient" msgstr "" @@ -6659,7 +6631,6 @@ msgstr "" #: src/features/applications/components/application-form-sheet.tsx #: src/features/applications/components/list-view.tsx #: src/features/documents/document-card.tsx -#: src/features/resume/share/download-tab.tsx #: src/routes/builder/letter/-components/write-panel.tsx msgid "Resume" msgstr "" @@ -9059,10 +9030,6 @@ msgstr "" msgid "What to do" msgstr "" -#: src/features/resume/share/download-tab.tsx -msgid "What to download" -msgstr "" - #: src/features/applications/components/detail/sent-documents.tsx msgid "What you sent" msgstr "" diff --git a/apps/web/src/features/resume/editor/write/entries.tsx b/apps/web/src/features/resume/editor/write/entries.tsx index aaf1361f7..121dc2982 100644 --- a/apps/web/src/features/resume/editor/write/entries.tsx +++ b/apps/web/src/features/resume/editor/write/entries.tsx @@ -5,8 +5,6 @@ import type { EntryWriter } from "./fields"; import type { Entry } from "./model"; import { t } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; -import { useQuery } from "@tanstack/react-query"; -import { useId } from "react"; import { EMPTY_RESUME_DATES } from "@reactive-resume/schema/resume/dates"; import { Button } from "@reactive-resume/ui/components/button"; import { FormControl, FormDescription, FormItem, FormLabel } from "@reactive-resume/ui/components/form"; @@ -17,8 +15,6 @@ import { generateId } from "@reactive-resume/utils/string"; import { ChipInput } from "@/components/input/chip-input"; import { ColorPicker } from "@/components/input/color-picker"; import { IconPicker } from "@/components/input/icon-picker"; -import { Combobox } from "@/components/ui/combobox"; -import { orpc } from "@/libs/orpc/client"; import { DatesField } from "./dates-field"; import { MoreOptions, TextField, WebsiteField } from "./fields"; import { RichTextEditor } from "./rich-text-editor"; @@ -116,36 +112,6 @@ function Description({ ); } -/** A new, empty letter can start as a copy of one saved in the library; the copy doesn't follow later edits. */ -function ImportFromLibrary({ entry, write }: FieldSetProps) { - const id = useId(); - const letters = useQuery(orpc.coverLetters.list.queryOptions({ input: { limit: 100 } })); - const values = valuesOf(entry); - if (str(values.recipient) || str(values.content) || !letters.data?.items.length) return null; - - return ( -
- - ({ value: letter.id, label: letter.name }))} - onValueChange={(letterId) => { - const letter = letters.data?.items.find((item) => item.id === letterId); - if (!letter) return; - write("import", (target) => { - target.recipient = letter.recipient; - target.content = letter.content; - }); - }} - /> -
- ); -} - function Keywords({ entry, write, label }: FieldSetProps & { label: ReactNode }) { return ( @@ -475,13 +441,8 @@ export function EntryFields({ ); case "summary": return ; + // Letters are documents of their own; a resume that still carries one hands it over when it saves. case "cover-letter": - return ( - <> - - - - - ); + return null; } } diff --git a/apps/web/src/features/resume/editor/write/entry-card.tsx b/apps/web/src/features/resume/editor/write/entry-card.tsx index 112701764..065cf4eea 100644 --- a/apps/web/src/features/resume/editor/write/entry-card.tsx +++ b/apps/web/src/features/resume/editor/write/entry-card.tsx @@ -7,8 +7,6 @@ import { CSS } from "@dnd-kit/utilities"; import { msg, t } from "@lingui/core/macro"; import { useLingui } from "@lingui/react"; import { Trans } from "@lingui/react/macro"; -import { useMutation } from "@tanstack/react-query"; -import { useNavigate } from "@tanstack/react-router"; import { useEffect, useMemo } from "react"; import { Badge } from "@reactive-resume/ui/components/badge"; import { @@ -27,7 +25,6 @@ import { toast } from "@reactive-resume/ui/components/toast"; import { useBreakpoint } from "@reactive-resume/ui/hooks/use-breakpoint"; import { cn } from "@reactive-resume/utils/style"; import { useCurrentResume, useResumeStore, useUpdateResumeData } from "@/features/resume/builder/draft"; -import { orpc } from "@/libs/orpc/client"; import { getCompatibleMoveTargets, getSourceSectionTitle, moveItem } from "@/libs/resume/move-item"; import { useEditorStore } from "../store"; import { EntryFields } from "./entries"; @@ -248,7 +245,6 @@ type EntryMenuProps = { section: WriteSection; entry: Entry }; /** Hide from page, Duplicate, Move to… and Delete. */ function EntryMenu({ section, entry }: EntryMenuProps) { const resume = useCurrentResume(); - const navigate = useNavigate(); const updateResumeData = useUpdateResumeData(); const customSectionId = section.kind === "custom" ? section.id : undefined; const moveTargets = useMemo( @@ -277,25 +273,6 @@ function EntryMenu({ section, entry }: EntryMenuProps) { useEditorStore.getState().select({ kind: "item", sectionId: section.id, itemId: copy.id }); }; - // Q3k: a letter written inside a resume can become a saved letter in Documents (a copy; this entry stays). - const { mutate: copyLetter, isPending: copying } = useMutation(orpc.coverLetters.copyEmbedded.mutationOptions()); - const copyToDocuments = () => - copyLetter( - { resumeId: resume.id, sectionId: section.id, itemId: entry.id }, - { - onSuccess: (letter) => - toast.add({ - description: t`Copied to Documents`, - actionProps: { - children: t`Open`, - onClick: () => - void navigate({ to: "/builder/letter/$coverLetterId", params: { coverLetterId: letter.id } }), - }, - }), - onError: () => toast.add({ type: "error", description: t`Couldn't copy the letter. Save and try again.` }), - }, - ); - const toggleHidden = () => updateResumeData( (draft) => { @@ -319,12 +296,6 @@ function EntryMenu({ section, entry }: EntryMenuProps) { Duplicate - {section.type === "cover-letter" && section.kind === "custom" && ( - - - Copy to Documents - - )} diff --git a/apps/web/src/features/resume/editor/write/model.ts b/apps/web/src/features/resume/editor/write/model.ts index 0c935ae82..3bea2a96b 100644 --- a/apps/web/src/features/resume/editor/write/model.ts +++ b/apps/web/src/features/resume/editor/write/model.ts @@ -46,7 +46,6 @@ export const CUSTOM_SECTION_TYPES = [ "references", "profiles", "summary", - "cover-letter", ] as const satisfies readonly CustomSectionType[]; const isBuiltinSectionType = (id: string): id is SectionType => diff --git a/apps/web/src/features/resume/export/use-resume-export.ts b/apps/web/src/features/resume/export/use-resume-export.ts index c9154cb63..fa4bbc400 100644 --- a/apps/web/src/features/resume/export/use-resume-export.ts +++ b/apps/web/src/features/resume/export/use-resume-export.ts @@ -5,7 +5,7 @@ import { t } from "@lingui/core/macro"; import { useCallback, useState } from "react"; import { buildDocx } from "@reactive-resume/docx"; import { getResumeSectionTitle } from "@reactive-resume/pdf/section-title"; -import { getResumeExportData, resumeHasCoverLetter } from "@reactive-resume/resume/export-sections"; +import { getResumeExportData } from "@reactive-resume/resume/export-sections"; import { buildMarkdown } from "@reactive-resume/resume/markdown"; import { toast } from "@reactive-resume/ui/components/toast"; import { downloadWithAnchor } from "@reactive-resume/utils/file"; @@ -89,66 +89,51 @@ export async function createExportFile( /** One-click exports that report their own progress and failures in toasts (the bar, ⌘P, public pages). */ export function useResumeExport(resume: ExportableResume | undefined, exportOptions: UseResumeExportOptions = {}) { const [isExporting, setIsExporting] = useState(false); - const hasCoverLetter = resume ? resumeHasCoverLetter(resume.data) : false; const onDownloadJSON = useCallback(async () => { if (!resume) return; downloadWithAnchor(await createExportFile(resume, "json"), `${getDefaultFileName(resume)}.json`); }, [resume]); - const onDownloadMarkdown = useCallback( - async (target: ResumeExportTarget = "resume") => { - if (!resume) return; - if (target === "cover-letter" && !resumeHasCoverLetter(resume.data)) return; - const blob = await createExportFile(resume, "md", target); - downloadWithAnchor(blob, `${getDefaultFileName(resume, target)}.md`); - }, - [resume], - ); + const onDownloadMarkdown = useCallback(async () => { + if (!resume) return; + const blob = await createExportFile(resume, "md"); + downloadWithAnchor(blob, `${getDefaultFileName(resume)}.md`); + }, [resume]); - const onDownloadDOCX = useCallback( - async (target: ResumeExportTarget = "resume") => { - if (!resume) return; - if (target === "cover-letter" && !resumeHasCoverLetter(resume.data)) return; - try { - const blob = await createExportFile(resume, "docx", target); - downloadWithAnchor(blob, `${getDefaultFileName(resume, target)}.docx`); - } catch { - toast.add({ type: "error", description: t`Could not generate the DOCX. Please try again.` }); - } - }, - [resume], - ); + const onDownloadDOCX = useCallback(async () => { + if (!resume) return; + try { + const blob = await createExportFile(resume, "docx"); + downloadWithAnchor(blob, `${getDefaultFileName(resume)}.docx`); + } catch { + toast.add({ type: "error", description: t`Could not generate the DOCX. Please try again.` }); + } + }, [resume]); - const onDownloadPDF = useCallback( - async (target: ResumeExportTarget = "resume", downloadOptions?: DownloadPdfOptions) => { - if (!resume) return; - if (target === "cover-letter" && !resumeHasCoverLetter(resume.data)) return; - const toastId = toast.add({ - type: "loading", - description: t`Generating your PDF...`, - }); - setIsExporting(true); - try { - const blob = exportOptions.publicResumePdf - ? await resolvePublicResumePdfBlob({ data: resume.data, ...exportOptions.publicResumePdf }) - : await createExportFile(resume, "pdf", target, downloadOptions); - downloadWithAnchor(blob, `${getDefaultFileName(resume, target)}.pdf`); - if (exportOptions.publicResumePdf) { - // Statistics are best effort and must not delay or fail a completed browser download. - void client.resume.statistics - .recordDownload(exportOptions.publicResumePdf.publicResume) - .catch(() => undefined); - } - } catch { - toast.add({ type: "error", description: t`Could not generate the PDF. Please try again.` }); - } finally { - setIsExporting(false); - toast.close(toastId); + const onDownloadPDF = useCallback(async () => { + if (!resume) return; + const toastId = toast.add({ + type: "loading", + description: t`Generating your PDF...`, + }); + setIsExporting(true); + try { + const blob = exportOptions.publicResumePdf + ? await resolvePublicResumePdfBlob({ data: resume.data, ...exportOptions.publicResumePdf }) + : await createExportFile(resume, "pdf"); + downloadWithAnchor(blob, `${getDefaultFileName(resume)}.pdf`); + if (exportOptions.publicResumePdf) { + // Statistics are best effort and must not delay or fail a completed browser download. + void client.resume.statistics.recordDownload(exportOptions.publicResumePdf.publicResume).catch(() => undefined); } - }, - [exportOptions.publicResumePdf, resume], - ); + } catch { + toast.add({ type: "error", description: t`Could not generate the PDF. Please try again.` }); + } finally { + setIsExporting(false); + toast.close(toastId); + } + }, [exportOptions.publicResumePdf, resume]); const onPrint = useCallback(async () => { if (!resume) return; @@ -188,5 +173,5 @@ export function useResumeExport(resume: ExportableResume | undefined, exportOpti } }, [exportOptions.publicResumePdf, resume]); - return { onDownloadJSON, onDownloadMarkdown, onDownloadDOCX, onDownloadPDF, onPrint, isExporting, hasCoverLetter }; + return { onDownloadJSON, onDownloadMarkdown, onDownloadDOCX, onDownloadPDF, onPrint, isExporting }; } diff --git a/apps/web/src/features/resume/share/download-tab.tsx b/apps/web/src/features/resume/share/download-tab.tsx index eb4c358ef..8d9cc6206 100644 --- a/apps/web/src/features/resume/share/download-tab.tsx +++ b/apps/web/src/features/resume/share/download-tab.tsx @@ -1,4 +1,3 @@ -import type { ResumeExportTarget } from "@reactive-resume/resume/export-sections"; import type { IconName } from "@reactive-resume/ui/components/icon"; import type { ReactNode } from "react"; import type { Resume } from "@/features/resume/builder/draft"; @@ -9,11 +8,9 @@ import { t } from "@lingui/core/macro"; import { Plural, Trans } from "@lingui/react/macro"; import { useQuery } from "@tanstack/react-query"; import { useId, useState } from "react"; -import { resumeHasCoverLetter } from "@reactive-resume/resume/export-sections"; import { Button } from "@reactive-resume/ui/components/button"; import { Checkbox } from "@reactive-resume/ui/components/checkbox"; import { Icon } from "@reactive-resume/ui/components/icon"; -import { SegmentedControl, SegmentedControlItem } from "@reactive-resume/ui/components/segmented-control"; import { Spinner } from "@reactive-resume/ui/components/spinner"; import { toast } from "@reactive-resume/ui/components/toast"; import { downloadWithAnchor } from "@reactive-resume/utils/file"; @@ -226,32 +223,23 @@ export function DownloadTab({ onReview }: DownloadTabProps) { const words = useLetterWords(); const linkedLetter = useLinkedLetter(resume); const headerId = useId(); - const hasLetter = resumeHasCoverLetter(resume.data); - const [target, setTarget] = useState("resume"); const [format, setFormat] = useState("pdf"); - const [includeHeader, setIncludeHeader] = useState(false); const [withLetter, setWithLetter] = useState(false); const [fileName, setFileName] = useState(null); const [state, setState] = useState("idle"); - const activeTarget = hasLetter ? target : "resume"; - // JSON is the whole document's data, so it isn't offered for the letter on its own. - const activeFormat = activeTarget === "cover-letter" && format === "json" ? "pdf" : format; - const formats = getExportFormats().map((option) => ({ - ...option, - disabled: option.id === "json" && activeTarget === "cover-letter", - })); - const selected = formats.find((option) => option.id === activeFormat) ?? (formats[0] as DownloadFormat); - const name = fileName ?? getDefaultFileName(resume, activeTarget); + const formats = getExportFormats(); + const selected = formats.find((option) => option.id === format) ?? (formats[0] as DownloadFormat); + const name = fileName ?? getDefaultFileName(resume); const download = async (as: ExportFormat) => { const extension = formats.find((option) => option.id === as)?.extension ?? ".pdf"; setState("busy"); try { - const blob = await createExportFile(resume, as, activeTarget, { includeCoverLetterHeader: includeHeader }); - const file = `${sanitizeFileName(name) || getDefaultFileName(resume, activeTarget)}${extension}`; + const blob = await createExportFile(resume, as); + const file = `${sanitizeFileName(name) || getDefaultFileName(resume)}${extension}`; downloadWithAnchor(blob, file); - if (withLetter && linkedLetter && activeTarget === "resume") { + if (withLetter && linkedLetter) { const letter = await client.coverLetters.getById({ id: linkedLetter.id }); downloadWithAnchor(await createLetterFile(letter, words, as), `${letterFileName(letter, words)}${extension}`); toast.add({ description: t`Downloaded ${file} and the cover letter` }); @@ -266,43 +254,9 @@ export function DownloadTab({ onReview }: DownloadTabProps) { return (
- {hasLetter && ( -
- { - setTarget(value as ResumeExportTarget); - setFileName(null); - setState("idle"); - }} - className="w-full" - > - - Resume - - - Cover letter - - - {activeTarget === "cover-letter" && ( -
- setIncludeHeader(checked === true)} - /> - -
- )} -
- )} - { setFormat(value); setState("idle"); @@ -316,7 +270,7 @@ export function DownloadTab({ onReview }: DownloadTabProps) { onChange={setFileName} /> - {linkedLetter && activeTarget === "resume" && ( + {linkedLetter && (
void download(activeFormat)} - onDownloadPdf={activeFormat === "pdf" ? undefined : () => void download("pdf")} + onDownload={() => void download(format)} + onDownloadPdf={format === "pdf" ? undefined : () => void download("pdf")} />
); diff --git a/docs/guides/adding-a-cover-letter.mdx b/docs/guides/adding-a-cover-letter.mdx index 4cd206537..2f3883250 100644 --- a/docs/guides/adding-a-cover-letter.mdx +++ b/docs/guides/adding-a-cover-letter.mdx @@ -1,171 +1,64 @@ --- title: "Adding a cover letter" -description: "Learn how to create a cover letter as a custom section in Reactive Resume, format it professionally, and place it on a separate page." +description: "Write a cover letter in Reactive Resume as a document of its own, match it to your resume's design, attach it to a job application, and export it." --- -A cover letter goes alongside your resume when you apply for a job. It introduces you to the employer, points to your relevant qualifications, and explains why you fit the position. In Reactive Resume you write one as a custom section, so you control its formatting and where it appears. +A cover letter goes alongside your resume when you apply for a job. In Reactive Resume a cover letter is a document of its own, next to your resumes in **Documents**. It is not a section inside a resume. -## Why include a cover letter? - -- It shows genuine interest in the position -- You can tailor your message to each employer and role -- You have room to address career changes or gaps in your resume -- It demonstrates that you write clearly and professionally - -## Creating a cover letter section +## Create a cover letter - - Navigate to your resume and open it in the builder. + + In **Documents**, click **New**, then **New cover letter instead**. - - In the left sidebar, scroll down to find the **Custom Sections** area at the bottom. - + + Under **From**, choose the resume the letter goes with. The letter uses that resume's name, contact details and design, and follows them when you change the resume. + - - Click Add a new custom section to open the section creation dialog. - + + Under **For**, link the job application the letter is for. The recipient fills in from the application, and the application lists the letter as the one you sent. + - - In the dialog: - Enter a **Title** for your section (e.g., "Cover Letter" or "Cover Letter - [Company Name]") - Select - **Cover Letter** from the **Type** dropdown - Click **Create** to add the section - - - - In your new cover letter section, click Add a new item to create your cover letter. + + Write the body. The greeting and sign-off follow the recipient's name and your name. -## Formatting your cover letter +You can also start a letter from an application: open it in **Applications** and click **Write a letter** under **What you sent**. -A cover letter has two main fields: +## Match your resume, or design it on its own -### Recipient field +By default a letter matches its resume's template, type and colors. Turn off **Match** in the letter's **Design** mode to give it a template, type, colors and page settings of its own. -The **Recipient** field is where you enter the recipient's information. This typically includes: +## Attach a letter to an application -- Date (optional) -- Hiring manager's name -- Their job title -- Company name -- Company address +A letter linked to an application under **For** is that application's letter. Each application has one letter; linking a letter to another application moves it there. When the application reaches **Applied**, the letter is saved in its History as the version you sent. - - Use line breaks to format the address block. For example: +## Export a letter -``` -January 31, 2026 +Open the letter and click **Share & export**, then **Download**, and pick PDF or DOCX. When you download a resume whose application has a letter, the resume's **Download** tab offers to include the letter as a second file. -Jane Smith -Senior Hiring Manager -Acme Corporation -123 Main Street, Suite 400 -New York, NY 10001 -``` +## Letters written inside a resume - +Older versions of Reactive Resume let you add a cover letter as a section of a resume. Those letters have moved to **Documents**: -### Content field +- Each one is a letter of its own, named after its resume and section, for example "Frontend Resume — Cover Letter". +- It stays linked to that resume's details and design, so it looks as it did. +- If the resume was used by one application that had no letter, the letter is attached to that application. +- The resume no longer contains the letter. Older versions of the resume in its History still do; restoring one saves those letters again as letters. -The **Content** field is where you write the body of your cover letter. Include: - -- **Salutation**: "Dear Ms. Smith," or "Dear Hiring Team," -- **Opening paragraph**: State the position you're applying for and how you learned about it -- **Body paragraphs**: Highlight relevant experience, skills, and achievements -- **Closing paragraph**: Express enthusiasm and include a call to action -- **Sign-off**: "Sincerely," followed by your name - - - The recipient and content are both rendered directly on your resume, without a section header. - - -## Using fullscreen mode for writing - -The rich text editor can expand to fill the screen when you want to write without distraction: - - - - Click on your cover letter item in the sidebar to open the edit dialog. - - - - In either the Recipient or Content field, click the **expand icon** (arrows pointing outward) in the bottom-right - corner of the editor. - - - - The editor expands to nearly fill your screen, with every formatting tool still available. - - - - Click the **collapse icon** or press **Escape** to return to the normal view. - - - -## Formatting options - -The rich text editor supports: - -- **Text styling**: Bold, italic, underline, strikethrough, highlight -- **Headings**: H1 through H6 (though typically not needed in a cover letter) -- **Alignment**: Left, center, right, or justified text -- **Lists**: Bullet points and numbered lists -- **Links**: Add hyperlinks to your portfolio or LinkedIn - -## Exporting the cover letter separately - -You do not need to move the cover letter to a specific page to send it on its own. When you download your resume, the download dialog gives you a **Resume** tab and a **Cover letter** tab, so you can export either document as a standalone PDF, DOCX, or Markdown file. - -See [Exporting your resume](/guides/exporting-your-resume) for the full workflow. - -## Moving your cover letter to a separate page - -If you also want the cover letter to appear on its own page inside the combined preview or the public resume view, place it on a new page: - - - - In the right sidebar, go to the **Layout** section and add a new page to your resume. - - - - Use the **Move to** feature to relocate your cover letter section to the second page. - - - See [Moving items between sections](/guides/moving-items-between-sections) for detailed instructions on how to move sections between pages. - - - - - - Check the preview to confirm your cover letter appears on its own page and is formatted the way you want. - - +Importing a resume file that contains cover letters, or sending one through the API, does the same: the letters are saved as letters and the resume keeps none. ## Tips for effective cover letters **Keep it concise**: Aim for 250-400 words. Recruiters spend about one minute reading cover letters. - **Tailor each letter**: Customize your cover letter for each application. Reference specific job requirements and - company values. - - - - **Use the same styling**: Your cover letter inherits the fonts and colors from your resume template, so both - documents match. + **Tailor each letter**: Write one letter per application. Reference specific job requirements and company values. **Proofread carefully**: Spelling and grammar errors can disqualify your application. Review your letter before exporting. - -## Managing multiple cover letters - -Since cover letters are custom sections, you can: - -- Create multiple cover letter sections for different job applications -- Name each section descriptively (e.g., "Cover Letter - Google", "Cover Letter - Meta") -- Show or hide sections as needed when exporting -- Duplicate sections to use as templates for new applications diff --git a/docs/guides/exporting-resume-to-markdown.mdx b/docs/guides/exporting-resume-to-markdown.mdx index 5d9a12644..f217ccc47 100644 --- a/docs/guides/exporting-resume-to-markdown.mdx +++ b/docs/guides/exporting-resume-to-markdown.mdx @@ -18,10 +18,6 @@ Use PDF when you are submitting the finished resume. Use Markdown when you want Click **Download** in the builder header, or open the **Export** section in the right sidebar and click **Download**. - - Select **Resume** to export the resume content. Select **Cover letter** if you want a Markdown copy of the cover letter instead. - - In the **Markdown** row, click **Download**. Your browser saves a `.md` file. @@ -95,7 +91,7 @@ C++ - Blueprints - UE5 Features ## What Markdown includes -Markdown export includes the visible resume or cover-letter content for the selected tab. It keeps the document structure, section headings, item headings, rich-text paragraphs, lists, links, bold text, and italic text. +Markdown export includes the visible resume content. It keeps the document structure, section headings, item headings, rich-text paragraphs, lists, links, bold text, and italic text. Markdown export does not include visual-only choices such as template design, page size, column layout, colors, icon styling, spacing, or PDF page breaks. diff --git a/docs/guides/exporting-your-resume.mdx b/docs/guides/exporting-your-resume.mdx index abf775843..ae8973420 100644 --- a/docs/guides/exporting-your-resume.mdx +++ b/docs/guides/exporting-your-resume.mdx @@ -1,9 +1,9 @@ --- title: "Exporting your resume" -description: "Download your resume or cover letter from Reactive Resume as PDF, DOCX, Markdown, or JSON, and pick the right format for each situation." +description: "Download your resume from Reactive Resume as PDF, DOCX, Markdown, or JSON, and pick the right format for each situation." --- -Reactive Resume can export your resume, and your cover letter separately when you have one, in four formats. +Reactive Resume can export your resume in four formats. | Format | Best for | | --- | --- | @@ -25,10 +25,6 @@ Every export runs from the same **Download** dialog. You can open it two ways. Select the **Download** button in the top-right of the builder header, next to the sidebar toggle. You can also open the same dialog from the **Export** section of the right sidebar. - - At the top of the dialog, use the tabs to choose **Resume** or **Cover letter**. The **Cover letter** tab is only available when your resume contains a visible cover letter section. - - Select **Download** on the format you want. The dialog closes and your browser saves the file using the resume name as the filename. @@ -38,18 +34,9 @@ Every export runs from the same **Download** dialog. You can open it two ways. While an export is running, the trigger button and format buttons show a spinner and stay disabled until the file is ready. -## Export the resume and cover letter separately +## Cover letters -If your resume includes a [cover letter section](/guides/adding-a-cover-letter), the download dialog treats the resume and cover letter as two distinct documents. - -- For PDF, DOCX, and Markdown, the **Resume** tab exports only your resume content and excludes cover letter sections. Its JSON export retains embedded cover-letter custom sections; independent cover letters remain separate dashboard exports. -- The **Cover letter** tab exports only visible cover letter sections, rendered full width on their own page. - -You do not need to reorder pages or hide sections by hand to produce a resume-only or cover-letter-only PDF. Select the tab that matches what you want, then pick a format. - - - The **Cover letter** tab is disabled when the resume has no cover letter section, or when every cover letter section or item is hidden. - +Cover letters are documents of their own. Export one from the letter itself: open it and click **Share & export**. See [Adding a cover letter](/guides/adding-a-cover-letter). When the resume's application has a letter, the **Download** tab offers to include it as a second file. ## Export as PDF @@ -68,7 +55,7 @@ Use PDF for: ## Export as DOCX -Choose **DOCX** when you want to continue editing your resume or cover letter in a word processor. +Choose **DOCX** when you want to continue editing your resume in a word processor. Use DOCX for: @@ -82,7 +69,7 @@ Use DOCX for: ## Export as Markdown -Choose **Markdown** when you want a plain-text version of your resume or cover letter that is easy to edit anywhere and easy to feed into AI tools. +Choose **Markdown** when you want a plain-text version of your resume that is easy to edit anywhere and easy to feed into AI tools. Use Markdown for: @@ -98,7 +85,7 @@ For examples and common workflows, see [Exporting a resume to Markdown](/guides/ Choose **JSON** when you want a structured backup of your resume. -The JSON export includes your full resume content and settings, including any cover letter sections embedded in that resume. You can import it later from the dashboard to restore the resume or create another version. +The JSON export includes your full resume content and settings. Cover letters are exported on their own. You can import it later from the dashboard to restore the resume or create another version. JSON is also useful when working with AI assistants that understand structured data. Export JSON, ask an assistant to review or edit the fields, then import the revised JSON as a new resume. @@ -120,7 +107,7 @@ Reactive Resume provides three different JSON shapes: | Export | How to create it | What it contains | Can you import it as one resume? | | --- | --- | --- | --- | -| **Single resume** | In the builder, open **Download**, stay on **Resume**, and download **JSON**. | Resume content and settings, including cover letter sections embedded in that resume. | Yes. | +| **Single resume** | In the builder, open **Download** and download **JSON**. | Resume content and settings. | Yes. | | **Independent cover letter** | Open a letter from **Cover Letters** on the dashboard and select **Export JSON**. | That letter's content and copied resume styling in the Reactive Resume cover-letter format. | No. Import it through the cover-letter library instead. | | **Account archive** | Open **Settings**, go to **Account**, and under **Your data** select **Export**. | A zip with `account.json` (profile and an `exportedAt` timestamp), each resume and cover letter as its own JSON file, and `applications.json`. | No. It is an archive, not a single-resume import file. | diff --git a/docs/guides/using-the-mcp-server.mdx b/docs/guides/using-the-mcp-server.mdx index 5cd31054b..fed6c8304 100644 --- a/docs/guides/using-the-mcp-server.mdx +++ b/docs/guides/using-the-mcp-server.mdx @@ -220,7 +220,7 @@ Tool names use canonical unprefixed `snake_case` names. | `list_resumes` | List all resumes with IDs, names, tags, and status. Supports filtering by tags and sorting by last updated, creation date, or name | | `list_resume_tags` | List every distinct tag in use across your resumes (sorted) | | `read_resume` | Get the full data of a specific resume by ID | -| `download_resume_pdf` | Create a 10-minute authenticated PDF download URL. Defaults to the resume; set `target: "cover-letter"` for its visible cover letter | +| `download_resume_pdf` | Create a 10-minute authenticated PDF download URL for a resume | | `create_resume` | Create a new, empty resume with a name and slug. Optionally pre-fill with sample data | | `import_resume` | Create a resume from a full ResumeData JSON export (random name/slug). Large files may exceed client limits | | `duplicate_resume` | Create a copy of an existing resume with a new name and slug | @@ -230,14 +230,13 @@ Tool names use canonical unprefixed `snake_case` names. | `lock_resume` | Lock a resume to prevent edits, patches, and deletion | | `unlock_resume` | Unlock a previously locked resume to re-enable editing | | `get_resume_statistics` | Get view and download statistics for a resume | -| `list_cover_letters` | List independent cover letters in the cover-letter library; embedded resume cover letters are not listed here | +| `list_cover_letters` | List the account's cover letters, which are documents of their own | | `read_cover_letter` | Read one independent library cover letter by ID | | `create_cover_letter` | Create an independent library cover letter, optionally linked to a resume or application | | `update_cover_letter` | Update an independent cover letter with revision-checked concurrency | | `refresh_cover_letter_style` | Refresh independent-letter styling from a resume without changing its content or template | | `duplicate_cover_letter` | Create an independent copy of a library cover letter | | `delete_cover_letter` | Permanently delete an independent library cover letter; requires its current revision | -| `copy_embedded_cover_letter` | Copy a cover-letter item from a resume into the independent cover-letter library; leaves embedded item unchanged | | `export_cover_letter` | Export one independent library cover letter as versioned cover-letter JSON | | `import_cover_letter` | Import versioned cover-letter JSON as a new independent library letter | | `list_applications` | List tracked job applications. Supports stage, tag, and archived filters | diff --git a/docs/spec.json b/docs/spec.json index 0d7d0bde5..39999ccfd 100644 --- a/docs/spec.json +++ b/docs/spec.json @@ -14320,687 +14320,6 @@ } } }, - "/cover-letters/from-resume": { - "post": { - "operationId": "copyEmbeddedCoverLetter", - "summary": "Copy an embedded cover letter", - "description": "Creates a saved cover letter by copying an embedded cover-letter item from a resume.", - "tags": [ - "Cover Letters" - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "resumeId": { - "type": "string", - "minLength": 1 - }, - "sectionId": { - "type": "string", - "minLength": 1 - }, - "itemId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1, - "maxLength": 100 - } - }, - "required": [ - "resumeId", - "sectionId", - "itemId" - ] - } - } - } - }, - "responses": { - "200": { - "description": "The newly created cover letter.", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1, - "maxLength": 100 - }, - "recipient": { - "type": "string", - "maxLength": 20000 - }, - "content": { - "type": "string", - "maxLength": 100000 - }, - "style": { - "type": "object", - "properties": { - "basics": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The full name of the author of the resume." - }, - "headline": { - "type": "string", - "description": "The headline of the author of the resume." - }, - "email": { - "type": "string", - "description": "The email address of the author of the resume." - }, - "phone": { - "type": "string", - "description": "The phone number of the author of the resume." - }, - "location": { - "type": "string", - "description": "The location of the author of the resume." - }, - "website": { - "type": "object", - "properties": { - "url": { - "type": "string", - "description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)." - }, - "label": { - "type": "string", - "description": "The label to display for the URL. Leave blank to display the URL as-is." - } - }, - "required": [ - "url", - "label" - ], - "description": "The website of the author of the resume." - }, - "customFields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The unique identifier for the custom field. Usually generated as a UUID." - }, - "icon": { - "type": "string", - "description": "The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available." - }, - "text": { - "type": "string", - "description": "The text to display for the custom field." - }, - "link": { - "type": "string", - "description": "If the custom field should be a link, the URL to link to." - } - }, - "required": [ - "id", - "icon", - "text", - "link" - ] - }, - "description": "The custom fields to display on the resume." - } - }, - "required": [ - "name", - "headline", - "email", - "phone", - "location", - "website", - "customFields" - ] - }, - "picture": { - "type": "object", - "properties": { - "hidden": { - "type": "boolean", - "description": "Whether to hide the picture from the resume." - }, - "fit": { - "enum": [ - "cover", - "contain" - ], - "type": "string", - "description": "How the picture fits its frame: cover crops overflow, while contain preserves the whole image." - }, - "url": { - "type": "string", - "description": "The URL to the picture to display on the resume. Prefer local app-served paths (for example /uploads/...) populated via upload." - }, - "size": { - "type": "number", - "minimum": 32, - "maximum": 512, - "description": "The size of the picture to display on the resume, defined in points (pt)." - }, - "rotation": { - "type": "number", - "minimum": 0, - "maximum": 360, - "description": "The rotation of the picture to display on the resume, defined in degrees (°)." - }, - "aspectRatio": { - "type": "number", - "minimum": 0.5, - "maximum": 2.5, - "description": "The aspect ratio of the picture to display on the resume, defined as width / height (e.g. 1.5 for 1.5:1 or 0.5 for 1:2)." - }, - "borderRadius": { - "type": "number", - "minimum": 0, - "maximum": 100, - "description": "The border radius of the picture to display on the resume, defined in points (pt)." - }, - "borderColor": { - "type": "string", - "description": "The color of the border of the picture to display on the resume, defined as rgba(r, g, b, a)." - }, - "borderWidth": { - "type": "number", - "minimum": 0, - "description": "The width of the border of the picture to display on the resume, defined in points (pt)." - }, - "shadowColor": { - "type": "string", - "description": "The color of the shadow of the picture to display on the resume, defined as rgba(r, g, b, a)." - }, - "shadowWidth": { - "type": "number", - "minimum": 0, - "description": "The width of the shadow of the picture to display on the resume, defined in points (pt)." - } - }, - "required": [ - "hidden", - "fit", - "url", - "size", - "rotation", - "aspectRatio", - "borderRadius", - "borderColor", - "borderWidth", - "shadowColor", - "shadowWidth" - ] - }, - "metadata": { - "type": "object", - "properties": { - "template": { - "enum": [ - "azurill", - "bronzor", - "chikorita", - "ditgar", - "ditto", - "gengar", - "glalie", - "kakuna", - "lapras", - "leafish", - "meowth", - "onyx", - "pikachu", - "rhyhorn", - "scizor" - ], - "type": "string", - "description": "The template to use for the resume. Determines the overall design and appearance of the resume." - }, - "page": { - "type": "object", - "properties": { - "gapX": { - "type": "number", - "minimum": 0, - "description": "The horizontal gap between the sections of the page, defined in points (pt)." - }, - "gapY": { - "type": "number", - "minimum": 0, - "description": "The vertical gap between the sections of the page, defined in points (pt)." - }, - "marginX": { - "type": "number", - "minimum": 0, - "maximum": 100, - "description": "The horizontal margin of the page, defined in points (pt)." - }, - "marginY": { - "type": "number", - "minimum": 0, - "maximum": 100, - "description": "The vertical margin of the page, defined in points (pt)." - }, - "format": { - "enum": [ - "a4", - "letter", - "free-form" - ], - "type": "string", - "description": "The format of the page. Can be 'a4', 'letter', or 'free-form'." - }, - "locale": { - "type": "string", - "description": "The locale of the page. Used for displaying pre-translated section headings, if not overridden." - }, - "dateFormat": { - "enum": [ - "short", - "long", - "numeric", - "iso" - ], - "type": "string", - "description": "How dates print: 'short' (Mar 2022), 'long' (March 2022), 'numeric' (03/2022) or 'iso' (2022-03). When missing, it's read from how the dates were typed." - }, - "hideLinkUnderline": { - "type": "boolean", - "description": "Whether to hide the underlines of the links." - }, - "hideIcons": { - "type": "boolean", - "description": "Whether to hide the item-level icons (skills, profiles, interests)." - }, - "hideSectionIcons": { - "type": "boolean", - "description": "Whether to hide the section heading icons displayed before section titles." - } - }, - "required": [ - "gapX", - "gapY", - "marginX", - "marginY", - "format", - "locale", - "hideLinkUnderline", - "hideIcons", - "hideSectionIcons" - ], - "description": "The page settings of the resume. Determines the margins, format, and locale of the resume." - }, - "design": { - "type": "object", - "properties": { - "level": { - "type": "object", - "properties": { - "icon": { - "type": "string", - "description": "The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available." - }, - "type": { - "enum": [ - "hidden", - "circle", - "square", - "rectangle", - "rectangle-full", - "progress-bar", - "icon" - ], - "type": "string", - "description": "The type of the level design. 'hidden' will hide the level design, 'circle' will display a circle, 'square' will display a square, 'rectangle' will display a rectangle, 'rectangle-full' will display a full rectangle, 'progress-bar' will display a progress bar, and 'icon' will display an icon. If 'icon' is selected, the icon to display should be specified in the 'icon' field." - } - }, - "required": [ - "icon", - "type" - ] - }, - "colors": { - "type": "object", - "properties": { - "primary": { - "type": "string", - "description": "The primary color of the design, defined as rgba(r, g, b, a)." - }, - "text": { - "type": "string", - "description": "The text color of the design, defined as rgba(r, g, b, a). Usually set to black: rgba(0, 0, 0, 1)." - }, - "background": { - "type": "string", - "description": "The background color of the design, defined as rgba(r, g, b, a). Usually set to white: rgba(255, 255, 255, 1)." - } - }, - "required": [ - "primary", - "text", - "background" - ] - } - }, - "required": [ - "level", - "colors" - ], - "description": "The design settings of the resume. Determines the colors, level designs, and typography of the resume." - }, - "typography": { - "type": "object", - "properties": { - "body": { - "type": "object", - "properties": { - "fontFamily": { - "type": "string", - "description": "The family of the font to use. Must be a supported resume font." - }, - "fontWeights": { - "type": "array", - "items": { - "enum": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" - ], - "type": "string" - }, - "description": "The weight of the font, defined as a number between 100 and 900. Default to 400 when unsure if the weight is available in the font." - }, - "fontSize": { - "type": "number", - "minimum": 6, - "maximum": 24, - "description": "The size of the font to use, defined in points (pt)." - }, - "lineHeight": { - "type": "number", - "minimum": 0.5, - "maximum": 4, - "description": "The line height of the font to use, defined as a multiplier of the font size (e.g. 1.5 for 1.5x)." - } - }, - "required": [ - "fontFamily", - "fontWeights", - "fontSize", - "lineHeight" - ], - "description": "The typography for the body of the resume." - }, - "heading": { - "type": "object", - "properties": { - "fontFamily": { - "type": "string", - "description": "The family of the font to use. Must be a supported resume font." - }, - "fontWeights": { - "type": "array", - "items": { - "enum": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" - ], - "type": "string" - }, - "description": "The weight of the font, defined as a number between 100 and 900. Default to 400 when unsure if the weight is available in the font." - }, - "fontSize": { - "type": "number", - "minimum": 6, - "maximum": 24, - "description": "The size of the font to use, defined in points (pt)." - }, - "lineHeight": { - "type": "number", - "minimum": 0.5, - "maximum": 4, - "description": "The line height of the font to use, defined as a multiplier of the font size (e.g. 1.5 for 1.5x)." - } - }, - "required": [ - "fontFamily", - "fontWeights", - "fontSize", - "lineHeight" - ], - "description": "The typography for the headings of the resume." - }, - "hyphenation": { - "type": "boolean", - "description": "Enable automatic PDF hyphenation using the resume language. Currently supports German. Defaults to false." - } - }, - "required": [ - "body", - "heading" - ], - "description": "The typography settings of the resume. Determines the fonts and sizes of the body and headings of the resume." - }, - "styleRules": { - "description": "Structured style rules that target semantic resume sections and slots for PDF rendering." - }, - "stylesheet": { - "type": "object", - "properties": { - "mode": { - "enum": [ - "legacy", - "semantic" - ], - "type": "string" - }, - "source": { - "type": "object", - "properties": { - "languageVersion": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991, - "exclusiveMinimum": 0 - }, - "text": { - "type": "string" - } - }, - "required": [ - "languageVersion", - "text" - ], - "additionalProperties": false - } - }, - "required": [ - "mode", - "source" - ], - "additionalProperties": false - }, - "check": { - "type": "object", - "properties": { - "ignored": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Check issues the author chose to ignore, by issue key (the rule code and where it applies)." - }, - "hiddenTerms": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Job-posting terms the author hid from Job match as not true for them." - } - }, - "required": [ - "ignored", - "hiddenTerms" - ], - "description": "The author's Check choices for this resume. Not printed; missing until a choice is made." - } - }, - "required": [ - "template", - "page", - "design", - "typography" - ] - }, - "sectionId": { - "type": "string", - "minLength": 1 - }, - "itemId": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "basics", - "picture", - "metadata", - "sectionId", - "itemId" - ] - }, - "layout": { - "enum": [ - "structured", - "freeform" - ], - "type": "string", - "description": "structured: recipient name, company and date fields, a greeting from the name, the body and a sign-off. freeform: the recipient block and body as written (letters from before structured letters).", - "default": "freeform" - }, - "recipientName": { - "type": "string", - "maxLength": 200, - "default": "", - "description": "Who the letter is to: a person, or a team." - }, - "recipientCompany": { - "type": "string", - "maxLength": 200, - "default": "" - }, - "letterDate": { - "anyOf": [ - { - "type": "string", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$" - }, - { - "type": "null" - } - ], - "default": null, - "description": "The letter's date, as YYYY-MM-DD." - }, - "id": { - "type": "string" - }, - "sourceResumeId": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sourceApplicationId": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "senderLinked": { - "type": "boolean", - "description": "The sender's details come live from the source resume, instead of the copy in `style`." - }, - "designLinked": { - "type": "boolean", - "description": "The design comes live from the source resume, instead of the copy in `style`." - }, - "isLocked": { - "type": "boolean", - "description": "Locked letters can't be edited or moved to Trash until they're unlocked." - }, - "revision": { - "type": "integer", - "minimum": 1, - "maximum": 9007199254740991 - }, - "createdAt": { - "type": "string", - "format": "date-time", - "x-native-type": "date" - }, - "updatedAt": { - "type": "string", - "format": "date-time", - "x-native-type": "date" - } - }, - "required": [ - "name", - "recipient", - "content", - "style", - "id", - "sourceResumeId", - "sourceApplicationId", - "senderLinked", - "designLinked", - "isLocked", - "revision", - "createdAt", - "updatedAt" - ] - } - } - } - } - } - } - }, "/cover-letters/{id}/export": { "get": { "operationId": "exportCoverLetter", @@ -46878,12 +46197,8 @@ "name": "target", "in": "query", "schema": { - "enum": [ - "resume", - "cover-letter" - ], - "type": "string", - "description": "Which document to download." + "const": "resume", + "description": "Deprecated, only `resume`: cover letters are documents of their own (`/cover-letters`)." }, "allowEmptyValue": true, "allowReserved": true diff --git a/migrations/20260929071322_letters_leave_resumes/migration.sql b/migrations/20260929071322_letters_leave_resumes/migration.sql new file mode 100644 index 000000000..2a848a64d --- /dev/null +++ b/migrations/20260929071322_letters_leave_resumes/migration.sql @@ -0,0 +1,140 @@ +-- Letters are documents of their own. Every cover letter a resume still carries (a custom section of type +-- `cover-letter`, one letter per item, hidden ones too) becomes a saved letter linked to that resume's sender +-- details and design, as it read inside the resume. A resume that carried exactly one letter, used by exactly one +-- application without a letter, hands it to that application. Then the sections leave the resumes and their page +-- layouts. +-- Resume versions keep their history as it was; restoring one saves its letters again (once) as letters. +-- Idempotent: a letter already saved from the same item with the same text isn't saved twice. rollback.sql +-- puts the letters back into their resumes. +WITH letter_items AS ( + SELECT + r.id AS resume_id, + r.user_id, + r.name AS resume_name, + r.data, + s.section, + i.item, + count(*) OVER (PARTITION BY r.id) AS letters_in_resume + FROM "resume" r + CROSS JOIN LATERAL jsonb_array_elements(r.data->'customSections') AS s(section) + CROSS JOIN LATERAL jsonb_array_elements(s.section->'items') AS i(item) + WHERE jsonb_typeof(r.data->'customSections') = 'array' + AND s.section->>'type' = 'cover-letter' + AND jsonb_typeof(s.section->'items') = 'array' +), +inserted AS ( + INSERT INTO "cover_letter" ( + "id", "user_id", "name", "recipient", "content", "style", "layout", "sender_linked", "design_linked", "source_resume_id", + "source_application_id" + ) + SELECT + gen_random_uuid()::text, + l.user_id, + left( + coalesce(nullif(btrim(l.resume_name), ''), 'Resume') || ' — ' || + coalesce(nullif(btrim(l.section->>'title'), ''), 'Cover letter'), + 100 + ), + coalesce(l.item->>'recipient', ''), + coalesce(l.item->>'content', ''), + jsonb_build_object( + 'basics', l.data->'basics', + 'picture', l.data->'picture', + 'metadata', (l.data->'metadata') - 'notes' - 'layout', + 'sectionId', l.section->>'id', + 'itemId', l.item->>'id' + ), + 'freeform', + true, + true, + l.resume_id, + CASE WHEN l.letters_in_resume = 1 THEN ( + SELECT min(a."id") FROM "application" a + WHERE a."resume_id" = l.resume_id AND a."cover_letter_id" IS NULL + HAVING count(*) = 1 + ) END + FROM letter_items l + WHERE NOT EXISTS ( + SELECT 1 FROM "cover_letter" c + WHERE c."user_id" = l.user_id + AND c."source_resume_id" = l.resume_id + AND c."style"->>'itemId' = l.item->>'id' + AND c."content" = coalesce(l.item->>'content', '') + ) + RETURNING "id", "user_id", "name", "recipient", "content", "style", "layout", "recipient_name", + "recipient_company", "letter_date", "source_resume_id", "source_application_id" +), +versions AS ( + INSERT INTO "cover_letter_version" ("id", "cover_letter_id", "user_id", "data", "kind") + SELECT + gen_random_uuid()::text, + "id", + "user_id", + jsonb_build_object( + 'name', "name", + 'recipient', "recipient", + 'content', "content", + 'style', "style", + 'layout', "layout", + 'recipientName', "recipient_name", + 'recipientCompany', "recipient_company", + 'letterDate', "letter_date" + ), + 'created' + FROM inserted + RETURNING "id" +) +UPDATE "application" a +SET "cover_letter_id" = inserted."id" +FROM inserted +WHERE a."id" = inserted."source_application_id" AND a."cover_letter_id" IS NULL;--> statement-breakpoint +WITH letters AS ( + SELECT r.id, array_agg(s.section->>'id') AS ids + FROM "resume" r + CROSS JOIN LATERAL jsonb_array_elements(r.data->'customSections') AS s(section) + WHERE jsonb_typeof(r.data->'customSections') = 'array' AND s.section->>'type' = 'cover-letter' + GROUP BY r.id +), +cleaned AS ( + SELECT + r.id, + letters.ids, + jsonb_set( + r.data, + '{customSections}', + ( + SELECT coalesce(jsonb_agg(s.section ORDER BY s.position), '[]'::jsonb) + FROM jsonb_array_elements(r.data->'customSections') WITH ORDINALITY AS s(section, position) + WHERE s.section->>'type' IS DISTINCT FROM 'cover-letter' + ) + ) AS data + FROM "resume" r + JOIN letters ON letters.id = r.id +) +UPDATE "resume" r +SET "data" = CASE + WHEN jsonb_typeof(c.data#>'{metadata,layout,pages}') = 'array' THEN jsonb_set( + c.data, + '{metadata,layout,pages}', + ( + SELECT coalesce(jsonb_agg( + p.page + || CASE WHEN jsonb_typeof(p.page->'main') = 'array' THEN jsonb_build_object('main', ( + SELECT coalesce(jsonb_agg(m.id ORDER BY m.position), '[]'::jsonb) + FROM jsonb_array_elements(p.page->'main') WITH ORDINALITY AS m(id, position) + WHERE NOT (m.id #>> '{}') = ANY (c.ids) + )) ELSE '{}'::jsonb END + || CASE WHEN jsonb_typeof(p.page->'sidebar') = 'array' THEN jsonb_build_object('sidebar', ( + SELECT coalesce(jsonb_agg(sb.id ORDER BY sb.position), '[]'::jsonb) + FROM jsonb_array_elements(p.page->'sidebar') WITH ORDINALITY AS sb(id, position) + WHERE NOT (sb.id #>> '{}') = ANY (c.ids) + )) ELSE '{}'::jsonb END + ORDER BY p.position + ), '[]'::jsonb) + FROM jsonb_array_elements(c.data#>'{metadata,layout,pages}') WITH ORDINALITY AS p(page, position) + ) + ) + ELSE c.data +END +FROM cleaned c +WHERE r.id = c.id; diff --git a/migrations/20260929071322_letters_leave_resumes/rollback.sql b/migrations/20260929071322_letters_leave_resumes/rollback.sql new file mode 100644 index 000000000..9a06fd0f0 --- /dev/null +++ b/migrations/20260929071322_letters_leave_resumes/rollback.sql @@ -0,0 +1,49 @@ +-- Puts letters back into their resumes, for app versions that still show cover letters inside a resume. Run it by +-- hand before downgrading. Only letters saved from a resume's own section come back (their style names that +-- section); library letters stay in the library, where older versions list them too. Each letter returns as a +-- cover-letter section at the end of its resume's first page (one section per resume per run: run it again for a +-- resume that had several). The letters themselves are kept. +WITH returning_letters AS ( + SELECT + c."source_resume_id" AS resume_id, + c."style"->>'sectionId' AS section_id, + jsonb_agg( + jsonb_build_object( + 'id', c."style"->>'itemId', + 'hidden', false, + 'recipient', c."recipient", + 'content', c."content" + ) + ORDER BY c."created_at" + ) AS items + FROM "cover_letter" c + WHERE c."source_resume_id" IS NOT NULL + AND c."trashed_at" IS NULL + AND c."style"->>'sectionId' IS NOT NULL + AND c."style"->>'sectionId' <> 'library-cover-letter' + GROUP BY c."source_resume_id", c."style"->>'sectionId' +) +UPDATE "resume" r +SET "data" = jsonb_set( + jsonb_set( + r.data, + '{customSections}', + coalesce(r.data->'customSections', '[]'::jsonb) || jsonb_build_array(jsonb_build_object( + 'id', l.section_id, + 'type', 'cover-letter', + 'title', '', + 'icon', 'envelope-simple', + 'columns', 1, + 'hidden', false, + 'keepTogether', false, + 'startOnNewPage', false, + 'items', l.items + )) + ), + '{metadata,layout,pages,0,main}', + coalesce(r.data#>'{metadata,layout,pages,0,main}', '[]'::jsonb) || to_jsonb(l.section_id) +) +FROM returning_letters l +WHERE r.id = l.resume_id + AND jsonb_typeof(r.data#>'{metadata,layout,pages,0}') = 'object' + AND NOT (coalesce(r.data->'customSections', '[]'::jsonb) @> jsonb_build_array(jsonb_build_object('id', l.section_id))); diff --git a/migrations/20260929071322_letters_leave_resumes/snapshot.json b/migrations/20260929071322_letters_leave_resumes/snapshot.json new file mode 100644 index 000000000..0a8dbefdc --- /dev/null +++ b/migrations/20260929071322_letters_leave_resumes/snapshot.json @@ -0,0 +1,7143 @@ +{ + "id": "1ef1e6a5-1186-4c75-8fbf-4833ee1b8dd7", + "prevIds": ["dafcffd5-b465-45f1-a86c-ee1e53f772b1"], + "version": "8", + "dialect": "postgres", + "ddl": [ + { + "isRlsEnabled": false, + "name": "agent_actions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "agent_attachments", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "agent_messages", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "agent_threads", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "ai_providers", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "application", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "account", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "apikey", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "jwks", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "oauth_access_token", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "oauth_client", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "oauth_client_assertion", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "oauth_client_resource", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "oauth_consent", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "oauth_refresh_token", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "oauth_resource", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "passkey", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "session", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "two_factor", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "user", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "verification", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "cover_letter", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "cover_letter_version", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "resume", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "resume_slug_redirect", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "resume_statistics", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "resume_statistics_daily", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "resume_version", + "entityType": "tables", + "schema": "public" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thread_id", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "message_id", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resume_id", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "kind", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'applied'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "summary", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "operations", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "snapshot_data", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "base_updated_at", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "applied_updated_at", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reverted_at", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "revert_message", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "agent_actions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "agent_attachments" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "agent_attachments" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thread_id", + "entityType": "columns", + "schema": "public", + "table": "agent_attachments" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "message_id", + "entityType": "columns", + "schema": "public", + "table": "agent_attachments" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "storage_key", + "entityType": "columns", + "schema": "public", + "table": "agent_attachments" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "filename", + "entityType": "columns", + "schema": "public", + "table": "agent_attachments" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "media_type", + "entityType": "columns", + "schema": "public", + "table": "agent_attachments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "size", + "entityType": "columns", + "schema": "public", + "table": "agent_attachments" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "agent_attachments" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "agent_messages" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "agent_messages" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thread_id", + "entityType": "columns", + "schema": "public", + "table": "agent_messages" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role", + "entityType": "columns", + "schema": "public", + "table": "agent_messages" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'completed'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "agent_messages" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sequence", + "entityType": "columns", + "schema": "public", + "table": "agent_messages" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ui_message", + "entityType": "columns", + "schema": "public", + "table": "agent_messages" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "error", + "entityType": "columns", + "schema": "public", + "table": "agent_messages" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "agent_messages" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "agent_messages" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ai_provider_id", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "source_resume_id", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "working_resume_id", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cover_letter_id", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "edits_proposed", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "edits_accepted", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'active'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "review_patches", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "active_run_id", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "active_stream_id", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "active_run_started_at", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "last_message_at", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "archived_at", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "deleted_at", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "agent_threads" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "label", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "provider", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "model", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "base_url", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "encrypted_api_key", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "api_key_salt", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "api_key_hash", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "api_key_preview", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'untested'", + "generated": null, + "identity": null, + "name": "test_status", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "test_error", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_tested_at", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_used_at", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "enabled", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "ai_providers" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "company", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "location", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "salary", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'saved'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "closed_reason", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resume_id", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cover_letter_id", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sent_resume_version_id", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "smallint", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sent_check_score", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sent_cover_letter_version_id", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "source", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "tags", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "source_url", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "job_description", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "requirements", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "match_score", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ai_metadata", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "notes", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resume_file_url", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resume_file_name", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cover_letter_url", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cover_letter_name", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "follow_up_at", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "follow_up_note", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "contacts", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "activity", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "applied_at", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "application" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "account_id", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'credential'", + "generated": null, + "identity": null, + "name": "provider_id", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "issuer", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "scope", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id_token", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "password", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "refresh_token", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token_expires_at", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "refresh_token_expires_at", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "account" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "prefix", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "key", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'default'", + "generated": null, + "identity": null, + "name": "config_id", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reference_id", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "refill_interval", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "refill_amount", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_refill_at", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "enabled", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "rate_limit_enabled", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "86400000", + "generated": null, + "identity": null, + "name": "rate_limit_time_window", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "10", + "generated": null, + "identity": null, + "name": "rate_limit_max", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "request_count", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "remaining", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_request", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "permissions", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "metadata", + "entityType": "columns", + "schema": "public", + "table": "apikey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "jwks" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "public_key", + "entityType": "columns", + "schema": "public", + "table": "jwks" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "private_key", + "entityType": "columns", + "schema": "public", + "table": "jwks" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "jwks" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "jwks" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "alg", + "entityType": "columns", + "schema": "public", + "table": "jwks" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "crv", + "entityType": "columns", + "schema": "public", + "table": "jwks" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "authorization_code_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "resources", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "requested_user_info_claims", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "revoked", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "confirmation", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "client_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reference_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "refresh_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "scopes", + "entityType": "columns", + "schema": "public", + "table": "oauth_access_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "client_discovery_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "client_credentials_scopes", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "backchannel_logout_uri", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "backchannel_logout_session_required", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "application_type", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "jwks", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "jwks_uri", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "dpop_bound_access_tokens", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "client_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "client_secret", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "disabled", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "skip_consent", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "enable_end_session", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "subject_type", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "scopes", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "uri", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "icon", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "contacts", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tos", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "policy", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "software_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "software_version", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "software_statement", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "redirect_uris", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "post_logout_redirect_uris", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token_endpoint_auth_method", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "grant_types", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "response_types", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "public", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "type", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "require_pkce", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reference_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "metadata", + "entityType": "columns", + "schema": "public", + "table": "oauth_client" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "oauth_client_assertion" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_client_assertion" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "oauth_client_resource" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "client_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_client_resource" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resource_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_client_resource" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "metadata", + "entityType": "columns", + "schema": "public", + "table": "oauth_client_resource" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_client_resource" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "resources", + "entityType": "columns", + "schema": "public", + "table": "oauth_consent" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "requested_user_info_claims", + "entityType": "columns", + "schema": "public", + "table": "oauth_consent" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "oauth_consent" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "client_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_consent" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_consent" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reference_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_consent" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "scopes", + "entityType": "columns", + "schema": "public", + "table": "oauth_consent" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_consent" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_consent" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "authorization_code_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "resources", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "requested_user_info_claims", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "rotated_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "rotation_replay_response", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "rotation_replay_expires_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "confirmation", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "client_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reference_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "revoked", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "auth_time", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "scopes", + "entityType": "columns", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "identifier", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token_ttl", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "refresh_token_ttl", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "signing_algorithm", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "signing_key_id", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 1, + "default": null, + "generated": null, + "identity": null, + "name": "allowed_scopes", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "custom_claims", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "dpop_bound_access_tokens_required", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "disabled", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "policy_version", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "metadata", + "entityType": "columns", + "schema": "public", + "table": "oauth_resource" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "aaguid", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "public_key", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "credential_id", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "counter", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "device_type", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "backed_up", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "transports", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "passkey" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "session" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token", + "entityType": "columns", + "schema": "public", + "table": "session" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ip_address", + "entityType": "columns", + "schema": "public", + "table": "session" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_agent", + "entityType": "columns", + "schema": "public", + "table": "session" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "impersonated_by", + "entityType": "columns", + "schema": "public", + "table": "session" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "session" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "session" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "session" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "session" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "two_factor" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "two_factor" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "secret", + "entityType": "columns", + "schema": "public", + "table": "two_factor" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "backup_codes", + "entityType": "columns", + "schema": "public", + "table": "two_factor" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "verified", + "entityType": "columns", + "schema": "public", + "table": "two_factor" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "failed_verification_count", + "entityType": "columns", + "schema": "public", + "table": "two_factor" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "locked_until", + "entityType": "columns", + "schema": "public", + "table": "two_factor" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "two_factor" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "two_factor" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "image", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "email", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "email_verified", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "display_username", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "two_factor_enabled", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_active_at", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "'user'", + "generated": null, + "identity": null, + "name": "role", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "banned", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ban_reason", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "timestamp(6) with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ban_expires", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "user" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "verification" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "identifier", + "entityType": "columns", + "schema": "public", + "table": "verification" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "value", + "entityType": "columns", + "schema": "public", + "table": "verification" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "verification" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "verification" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "verification" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "recipient", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "content", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "style", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'freeform'", + "generated": null, + "identity": null, + "name": "layout", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "recipient_name", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "recipient_company", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "letter_date", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "sender_linked", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "design_linked", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "source_resume_id", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "source_application_id", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "tags", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_locked", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "revision", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "cover_letter" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "cover_letter_version" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cover_letter_id", + "entityType": "columns", + "schema": "public", + "table": "cover_letter_version" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "cover_letter_version" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "data", + "entityType": "columns", + "schema": "public", + "table": "cover_letter_version" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'auto'", + "generated": null, + "identity": null, + "name": "kind", + "entityType": "columns", + "schema": "public", + "table": "cover_letter_version" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "cover_letter_version" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "cover_letter_version" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "cover_letter_version" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "tags", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_public", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "show_download_buttons", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_locked", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "password", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "application_id", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "auto_name", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "data", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "resume" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "resume_slug_redirect" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "resume_slug_redirect" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resume_id", + "entityType": "columns", + "schema": "public", + "table": "resume_slug_redirect" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "resume_slug_redirect" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "resume_slug_redirect" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "resume_slug_redirect" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "views", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "downloads", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_viewed_at", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_downloaded_at", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resume_id", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics_daily" + }, + { + "type": "date", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "date", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics_daily" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "views", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics_daily" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "downloads", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics_daily" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resume_id", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics_daily" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics_daily" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "resume_statistics_daily" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "resume_version" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resume_id", + "entityType": "columns", + "schema": "public", + "table": "resume_version" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "user_id", + "entityType": "columns", + "schema": "public", + "table": "resume_version" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "data", + "entityType": "columns", + "schema": "public", + "table": "resume_version" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'auto'", + "generated": null, + "identity": null, + "name": "kind", + "entityType": "columns", + "schema": "public", + "table": "resume_version" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "resume_version" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "resume_version" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "resume_version" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "thread_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "created_at", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_actions_thread_id_created_at_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_actions" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "resume_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_actions_resume_id_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_actions" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "message_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_actions_message_id_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_actions" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "thread_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_attachments_thread_id_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_attachments" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "message_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_attachments_message_id_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_attachments" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_attachments_user_id_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_attachments" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "thread_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "sequence", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_messages_thread_id_sequence_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_messages" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "created_at", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_messages_user_id_created_at_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_messages" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "last_message_at", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_threads_user_id_status_last_message_at_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_threads" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "working_resume_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_threads_working_resume_id_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_threads" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "cover_letter_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_threads_cover_letter_id_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_threads" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "ai_provider_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "agent_threads_ai_provider_id_index", + "entityType": "indexes", + "schema": "public", + "table": "agent_threads" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "enabled", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "ai_providers_user_id_enabled_index", + "entityType": "indexes", + "schema": "public", + "table": "ai_providers" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "last_used_at", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "ai_providers_user_id_last_used_at_index", + "entityType": "indexes", + "schema": "public", + "table": "ai_providers" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "created_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "ai_providers_user_id_created_at_index", + "entityType": "indexes", + "schema": "public", + "table": "ai_providers" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "application_user_id_index", + "entityType": "indexes", + "schema": "public", + "table": "application" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "updated_at", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "application_user_id_updated_at_index", + "entityType": "indexes", + "schema": "public", + "table": "application" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "account_user_id_index", + "entityType": "indexes", + "schema": "public", + "table": "account" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "reference_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "apikey_user_id_index", + "entityType": "indexes", + "schema": "public", + "table": "apikey" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "key", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "apikey_key_index", + "entityType": "indexes", + "schema": "public", + "table": "apikey" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "config_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "apikey_config_id_index", + "entityType": "indexes", + "schema": "public", + "table": "apikey" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "enabled", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "reference_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "apikey_enabled_user_id_index", + "entityType": "indexes", + "schema": "public", + "table": "apikey" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "token", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "oauth_access_token_token_index", + "entityType": "indexes", + "schema": "public", + "table": "oauth_access_token" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "client_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "oauth_client_client_id_index", + "entityType": "indexes", + "schema": "public", + "table": "oauth_client" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "client_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "oauth_client_resource_client_id_index", + "entityType": "indexes", + "schema": "public", + "table": "oauth_client_resource" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "resource_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "oauth_client_resource_resource_id_index", + "entityType": "indexes", + "schema": "public", + "table": "oauth_client_resource" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "client_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "resource_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "oauth_client_resource_client_id_resource_id_index", + "entityType": "indexes", + "schema": "public", + "table": "oauth_client_resource" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "client_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "oauth_consent_user_id_client_id_index", + "entityType": "indexes", + "schema": "public", + "table": "oauth_consent" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "token", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "oauth_refresh_token_token_index", + "entityType": "indexes", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "passkey_user_id_index", + "entityType": "indexes", + "schema": "public", + "table": "passkey" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "token", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "session_token_user_id_index", + "entityType": "indexes", + "schema": "public", + "table": "session" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "expires_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "session_expires_at_index", + "entityType": "indexes", + "schema": "public", + "table": "session" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "two_factor_user_id_index", + "entityType": "indexes", + "schema": "public", + "table": "two_factor" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "secret", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "two_factor_secret_index", + "entityType": "indexes", + "schema": "public", + "table": "two_factor" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "created_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "user_created_at_index", + "entityType": "indexes", + "schema": "public", + "table": "user" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "lower(\"email\")", + "isExpression": true, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "user_email_lower_unique_idx", + "entityType": "indexes", + "schema": "public", + "table": "user" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "identifier", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "verification_identifier_index", + "entityType": "indexes", + "schema": "public", + "table": "verification" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "updated_at", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "cover_letter_user_id_updated_at_id_index", + "entityType": "indexes", + "schema": "public", + "table": "cover_letter" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "cover_letter_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "created_at", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "cover_letter_version_cover_letter_id_created_at_index", + "entityType": "indexes", + "schema": "public", + "table": "cover_letter_version" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "cover_letter_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "session_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"kind\" = 'auto'", + "with": "", + "method": "btree", + "concurrently": false, + "name": "cover_letter_version_session_unique", + "entityType": "indexes", + "schema": "public", + "table": "cover_letter_version" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "created_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "resume_created_at_index", + "entityType": "indexes", + "schema": "public", + "table": "resume" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "updated_at", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "resume_user_id_updated_at_index", + "entityType": "indexes", + "schema": "public", + "table": "resume" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "is_public", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "user_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "resume_is_public_slug_user_id_index", + "entityType": "indexes", + "schema": "public", + "table": "resume" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "resume_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "resume_slug_redirect_resume_id_index", + "entityType": "indexes", + "schema": "public", + "table": "resume_slug_redirect" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "resume_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "date", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "resume_statistics_daily_resume_id_date_index", + "entityType": "indexes", + "schema": "public", + "table": "resume_statistics_daily" + }, + { + "nameExplicit": false, + "columns": [ + { + "value": "resume_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "created_at", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "resume_version_resume_id_created_at_index", + "entityType": "indexes", + "schema": "public", + "table": "resume_version" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "resume_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "session_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"kind\" = 'auto'", + "with": "", + "method": "btree", + "concurrently": false, + "name": "resume_version_session_unique", + "entityType": "indexes", + "schema": "public", + "table": "resume_version" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "agent_actions_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_actions" + }, + { + "nameExplicit": false, + "columns": ["thread_id"], + "schemaTo": "public", + "tableTo": "agent_threads", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "agent_actions_thread_id_agent_threads_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_actions" + }, + { + "nameExplicit": false, + "columns": ["message_id"], + "schemaTo": "public", + "tableTo": "agent_messages", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "agent_actions_message_id_agent_messages_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_actions" + }, + { + "nameExplicit": false, + "columns": ["resume_id"], + "schemaTo": "public", + "tableTo": "resume", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "agent_actions_resume_id_resume_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_actions" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "agent_attachments_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_attachments" + }, + { + "nameExplicit": false, + "columns": ["thread_id"], + "schemaTo": "public", + "tableTo": "agent_threads", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "agent_attachments_thread_id_agent_threads_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_attachments" + }, + { + "nameExplicit": false, + "columns": ["message_id"], + "schemaTo": "public", + "tableTo": "agent_messages", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "agent_attachments_message_id_agent_messages_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_attachments" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "agent_messages_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_messages" + }, + { + "nameExplicit": false, + "columns": ["thread_id"], + "schemaTo": "public", + "tableTo": "agent_threads", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "agent_messages_thread_id_agent_threads_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_messages" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "agent_threads_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_threads" + }, + { + "nameExplicit": false, + "columns": ["ai_provider_id"], + "schemaTo": "public", + "tableTo": "ai_providers", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "agent_threads_ai_provider_id_ai_providers_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_threads" + }, + { + "nameExplicit": false, + "columns": ["source_resume_id"], + "schemaTo": "public", + "tableTo": "resume", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "agent_threads_source_resume_id_resume_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_threads" + }, + { + "nameExplicit": false, + "columns": ["working_resume_id"], + "schemaTo": "public", + "tableTo": "resume", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "agent_threads_working_resume_id_resume_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_threads" + }, + { + "nameExplicit": false, + "columns": ["cover_letter_id"], + "schemaTo": "public", + "tableTo": "cover_letter", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "agent_threads_cover_letter_id_cover_letter_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "agent_threads" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "ai_providers_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "ai_providers" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "application_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "application" + }, + { + "nameExplicit": false, + "columns": ["resume_id"], + "schemaTo": "public", + "tableTo": "resume", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "application_resume_id_resume_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "application" + }, + { + "nameExplicit": false, + "columns": ["cover_letter_id"], + "schemaTo": "public", + "tableTo": "cover_letter", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "application_cover_letter_id_cover_letter_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "application" + }, + { + "nameExplicit": false, + "columns": ["sent_resume_version_id"], + "schemaTo": "public", + "tableTo": "resume_version", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "application_sent_resume_version_id_resume_version_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "application" + }, + { + "nameExplicit": false, + "columns": ["sent_cover_letter_version_id"], + "schemaTo": "public", + "tableTo": "cover_letter_version", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "application_QJaGmijrxJ0T_fkey", + "entityType": "fks", + "schema": "public", + "table": "application" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "account_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "account" + }, + { + "nameExplicit": false, + "columns": ["reference_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "apikey_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "apikey" + }, + { + "nameExplicit": false, + "columns": ["client_id"], + "schemaTo": "public", + "tableTo": "oauth_client", + "columnsTo": ["client_id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "oauth_access_token_client_id_oauth_client_client_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_access_token" + }, + { + "nameExplicit": false, + "columns": ["session_id"], + "schemaTo": "public", + "tableTo": "session", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "oauth_access_token_session_id_session_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_access_token" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "oauth_access_token_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_access_token" + }, + { + "nameExplicit": false, + "columns": ["refresh_id"], + "schemaTo": "public", + "tableTo": "oauth_refresh_token", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "oauth_access_token_refresh_id_oauth_refresh_token_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_access_token" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "oauth_client_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_client" + }, + { + "nameExplicit": false, + "columns": ["client_id"], + "schemaTo": "public", + "tableTo": "oauth_client", + "columnsTo": ["client_id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "oauth_client_resource_client_id_oauth_client_client_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_client_resource" + }, + { + "nameExplicit": false, + "columns": ["resource_id"], + "schemaTo": "public", + "tableTo": "oauth_resource", + "columnsTo": ["identifier"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "oauth_client_resource_dn2L1gs9Dolm_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_client_resource" + }, + { + "nameExplicit": false, + "columns": ["client_id"], + "schemaTo": "public", + "tableTo": "oauth_client", + "columnsTo": ["client_id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "oauth_consent_client_id_oauth_client_client_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_consent" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "oauth_consent_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_consent" + }, + { + "nameExplicit": false, + "columns": ["client_id"], + "schemaTo": "public", + "tableTo": "oauth_client", + "columnsTo": ["client_id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "oauth_refresh_token_client_id_oauth_client_client_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "nameExplicit": false, + "columns": ["session_id"], + "schemaTo": "public", + "tableTo": "session", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "oauth_refresh_token_session_id_session_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "oauth_refresh_token_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "oauth_refresh_token" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "passkey_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "passkey" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "session_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "session" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "two_factor_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "two_factor" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "cover_letter_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "cover_letter" + }, + { + "nameExplicit": false, + "columns": ["source_resume_id"], + "schemaTo": "public", + "tableTo": "resume", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "cover_letter_source_resume_id_resume_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "cover_letter" + }, + { + "nameExplicit": false, + "columns": ["source_application_id"], + "schemaTo": "public", + "tableTo": "application", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "cover_letter_source_application_id_application_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "cover_letter" + }, + { + "nameExplicit": false, + "columns": ["cover_letter_id"], + "schemaTo": "public", + "tableTo": "cover_letter", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "cover_letter_version_cover_letter_id_cover_letter_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "cover_letter_version" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "cover_letter_version_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "cover_letter_version" + }, + { + "nameExplicit": false, + "columns": ["application_id"], + "schemaTo": "public", + "tableTo": "application", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "resume_application_id_application_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "resume" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "resume_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "resume" + }, + { + "nameExplicit": false, + "columns": ["resume_id"], + "schemaTo": "public", + "tableTo": "resume", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "resume_slug_redirect_resume_id_resume_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "resume_slug_redirect" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "resume_slug_redirect_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "resume_slug_redirect" + }, + { + "nameExplicit": false, + "columns": ["resume_id"], + "schemaTo": "public", + "tableTo": "resume", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "resume_statistics_resume_id_resume_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "resume_statistics" + }, + { + "nameExplicit": false, + "columns": ["resume_id"], + "schemaTo": "public", + "tableTo": "resume", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "resume_statistics_daily_resume_id_resume_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "resume_statistics_daily" + }, + { + "nameExplicit": false, + "columns": ["resume_id"], + "schemaTo": "public", + "tableTo": "resume", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "resume_version_resume_id_resume_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "resume_version" + }, + { + "nameExplicit": false, + "columns": ["user_id"], + "schemaTo": "public", + "tableTo": "user", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "resume_version_user_id_user_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "resume_version" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "agent_actions_pkey", + "schema": "public", + "table": "agent_actions", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "agent_attachments_pkey", + "schema": "public", + "table": "agent_attachments", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "agent_messages_pkey", + "schema": "public", + "table": "agent_messages", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "agent_threads_pkey", + "schema": "public", + "table": "agent_threads", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "ai_providers_pkey", + "schema": "public", + "table": "ai_providers", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "application_pkey", + "schema": "public", + "table": "application", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "account_pkey", + "schema": "public", + "table": "account", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "apikey_pkey", + "schema": "public", + "table": "apikey", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "jwks_pkey", + "schema": "public", + "table": "jwks", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "oauth_access_token_pkey", + "schema": "public", + "table": "oauth_access_token", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "oauth_client_pkey", + "schema": "public", + "table": "oauth_client", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "oauth_client_assertion_pkey", + "schema": "public", + "table": "oauth_client_assertion", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "oauth_client_resource_pkey", + "schema": "public", + "table": "oauth_client_resource", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "oauth_consent_pkey", + "schema": "public", + "table": "oauth_consent", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "oauth_refresh_token_pkey", + "schema": "public", + "table": "oauth_refresh_token", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "oauth_resource_pkey", + "schema": "public", + "table": "oauth_resource", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "passkey_pkey", + "schema": "public", + "table": "passkey", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "session_pkey", + "schema": "public", + "table": "session", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "two_factor_pkey", + "schema": "public", + "table": "two_factor", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "user_pkey", + "schema": "public", + "table": "user", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "verification_pkey", + "schema": "public", + "table": "verification", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "cover_letter_pkey", + "schema": "public", + "table": "cover_letter", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "cover_letter_version_pkey", + "schema": "public", + "table": "cover_letter_version", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "resume_pkey", + "schema": "public", + "table": "resume", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "resume_slug_redirect_pkey", + "schema": "public", + "table": "resume_slug_redirect", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "resume_statistics_pkey", + "schema": "public", + "table": "resume_statistics", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "resume_statistics_daily_pkey", + "schema": "public", + "table": "resume_statistics_daily", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "resume_version_pkey", + "schema": "public", + "table": "resume_version", + "entityType": "pks" + }, + { + "nameExplicit": false, + "columns": ["slug", "user_id"], + "nullsNotDistinct": false, + "name": "resume_slug_user_id_unique", + "entityType": "uniques", + "schema": "public", + "table": "resume" + }, + { + "nameExplicit": false, + "columns": ["user_id", "slug"], + "nullsNotDistinct": false, + "name": "resume_slug_redirect_user_id_slug_unique", + "entityType": "uniques", + "schema": "public", + "table": "resume_slug_redirect" + }, + { + "nameExplicit": false, + "columns": ["resume_id", "date"], + "nullsNotDistinct": false, + "name": "resume_statistics_daily_resume_id_date_unique", + "entityType": "uniques", + "schema": "public", + "table": "resume_statistics_daily" + }, + { + "nameExplicit": false, + "columns": ["token"], + "nullsNotDistinct": false, + "name": "oauth_access_token_token_key", + "schema": "public", + "table": "oauth_access_token", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": ["client_id"], + "nullsNotDistinct": false, + "name": "oauth_client_client_id_key", + "schema": "public", + "table": "oauth_client", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": ["identifier"], + "nullsNotDistinct": false, + "name": "oauth_resource_identifier_key", + "schema": "public", + "table": "oauth_resource", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": ["token"], + "nullsNotDistinct": false, + "name": "session_token_key", + "schema": "public", + "table": "session", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": ["email"], + "nullsNotDistinct": false, + "name": "user_email_key", + "schema": "public", + "table": "user", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": ["username"], + "nullsNotDistinct": false, + "name": "user_username_key", + "schema": "public", + "table": "user", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": ["display_username"], + "nullsNotDistinct": false, + "name": "user_display_username_key", + "schema": "public", + "table": "user", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": ["identifier"], + "nullsNotDistinct": false, + "name": "verification_identifier_key", + "schema": "public", + "table": "verification", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": ["resume_id"], + "nullsNotDistinct": false, + "name": "resume_statistics_resume_id_key", + "schema": "public", + "table": "resume_statistics", + "entityType": "uniques" + } + ], + "renames": [] +} diff --git a/packages/api/src/dto/cover-letter.ts b/packages/api/src/dto/cover-letter.ts index 5283b78d6..c0d426c7f 100644 --- a/packages/api/src/dto/cover-letter.ts +++ b/packages/api/src/dto/cover-letter.ts @@ -114,15 +114,6 @@ export const coverLetterDto = { refreshStyle: { input: revisionSchema.extend({ resumeId: z.string().min(1) }), output: coverLetterSchema }, duplicate: { input: idSchema.extend({ name: editableSchema.shape.name.optional() }), output: coverLetterSchema }, delete: { input: revisionSchema, output: z.void() }, - copyEmbedded: { - input: z.object({ - resumeId: z.string().min(1), - sectionId: z.string().min(1), - itemId: z.string().min(1), - name: editableSchema.shape.name.optional(), - }), - output: coverLetterSchema, - }, export: { input: idSchema, output: coverLetterDocumentSchema }, import: { input: z.object({ document: coverLetterDocumentSchema }), output: coverLetterSchema }, }; diff --git a/packages/api/src/features/cover-letters/embedded.ts b/packages/api/src/features/cover-letters/embedded.ts new file mode 100644 index 000000000..089ae5333 --- /dev/null +++ b/packages/api/src/features/cover-letters/embedded.ts @@ -0,0 +1,67 @@ +import type { db } from "@reactive-resume/db/client"; +import type { ResumeData } from "@reactive-resume/schema/resume/data"; +import { and, eq, inArray, sql } from "drizzle-orm"; +import * as schema from "@reactive-resume/db/schema"; +import { copyCoverLetterStyle, detachEmbeddedLetters } from "@reactive-resume/resume/cover-letter"; +import { coverLetterSchema } from "@reactive-resume/schema/cover-letter/data"; +import { sanitizeCoverLetterHtml } from "./html"; +import { writeLetterVersion } from "./versions"; + +type DbOrTx = typeof db | Parameters[0]>[0]; + +/** + * Letters are documents of their own. Older app versions, API clients, imported files and restored versions can + * still hand the server a resume with cover-letter sections; each resume write passes through here first, so those + * letters become saved letters (linked to the resume's details and design, as they read inside it) and the resume + * keeps none. Run it in the transaction that writes the resume, so the letters and the resume save together. + * + * A letter already saved from the same item with the same text isn't saved twice, so a client that keeps sending + * the section creates one letter. Mutates `data`. + */ +export async function adoptEmbeddedLetters( + client: DbOrTx, + input: { userId: string; resumeId: string; resumeName: string; data: ResumeData }, +) { + const style = (sectionId: string, itemId: string) => copyCoverLetterStyle(input.data, sectionId, itemId); + const letters = detachEmbeddedLetters(input.data); + if (letters.length === 0) return; + + const existing = await client + .select({ itemId: sql`${schema.coverLetter.style}->>'itemId'`, content: schema.coverLetter.content }) + .from(schema.coverLetter) + .where( + and( + eq(schema.coverLetter.userId, input.userId), + eq(schema.coverLetter.sourceResumeId, input.resumeId), + inArray( + sql`${schema.coverLetter.style}->>'itemId'`, + letters.map((letter) => letter.itemId), + ), + ), + ); + + for (const letter of letters) { + const content = sanitizeCoverLetterHtml(letter.content); + // Letters the migration moved are stored as they were written, so both sides are compared cleaned. + if (existing.some((row) => row.itemId === letter.itemId && sanitizeCoverLetterHtml(row.content) === content)) + continue; + + const name = `${input.resumeName.trim() || "Resume"} — ${letter.title.trim() || "Cover letter"}`.slice(0, 100); + const [row] = await client + .insert(schema.coverLetter) + .values({ + userId: input.userId, + name, + recipient: sanitizeCoverLetterHtml(letter.recipient), + content, + style: style(letter.sectionId, letter.itemId), + layout: "freeform", + sourceResumeId: input.resumeId, + senderLinked: true, + designLinked: true, + }) + .returning(); + if (row) + await writeLetterVersion(client, { letter: coverLetterSchema.parse(row), userId: input.userId, kind: "created" }); + } +} diff --git a/packages/api/src/features/cover-letters/router.ts b/packages/api/src/features/cover-letters/router.ts index 11860d7c5..36fb29810 100644 --- a/packages/api/src/features/cover-letters/router.ts +++ b/packages/api/src/features/cover-letters/router.ts @@ -101,19 +101,6 @@ export const coverLettersRouter = { .input(coverLetterDto.delete.input) .output(coverLetterDto.delete.output) .handler(({ context, input }) => coverLetterService.delete({ ...input, userId: context.user.id })), - copyEmbedded: protectedProcedure - .route({ - method: "POST", - path: "/cover-letters/from-resume", - tags: ["Cover Letters"], - operationId: "copyEmbeddedCoverLetter", - summary: "Copy an embedded cover letter", - description: "Creates a saved cover letter by copying an embedded cover-letter item from a resume.", - successDescription: "The newly created cover letter.", - }) - .input(coverLetterDto.copyEmbedded.input) - .output(coverLetterDto.copyEmbedded.output) - .handler(({ context, input }) => coverLetterService.copyEmbedded({ ...input, userId: context.user.id })), export: protectedProcedure .route({ method: "GET", diff --git a/packages/api/src/features/cover-letters/service.integration.test.ts b/packages/api/src/features/cover-letters/service.integration.test.ts index f480a5c4a..2186727c7 100644 --- a/packages/api/src/features/cover-letters/service.integration.test.ts +++ b/packages/api/src/features/cover-letters/service.integration.test.ts @@ -113,9 +113,11 @@ describe.skipIf(!process.env.COVER_LETTER_TEST_DATABASE_URL)("cover-letter owned expect(results.find((result) => result.status === "rejected")).toMatchObject({ reason: { code: "CONFLICT" } }); }); - it("copies an embedded letter without modifying the source and keeps targeted style identifiers", async () => { - const source = structuredClone(defaultResumeData); - source.customSections = [ + it("saves letters a resume still carries as linked letters, once, and leaves the resume without them", async () => { + const { adoptEmbeddedLetters } = await import("./embedded"); + const data = structuredClone(defaultResumeData); + data.basics.name = "Alice Sender"; + data.customSections = [ { id: "embedded", title: "Embedded Letter", @@ -125,27 +127,45 @@ describe.skipIf(!process.env.COVER_LETTER_TEST_DATABASE_URL)("cover-letter owned hidden: true, keepTogether: false, startOnNewPage: false, - items: [{ id: "embedded-item", hidden: true, recipient: "Recipient", content: "

Original

" }], + items: [{ id: "embedded-item", hidden: true, recipient: "

Recipient

", content: "

Original

" }], }, ]; - await getPool().query("UPDATE resume SET data=$1 WHERE id='alice-resume'", [source]); - const copy = await service.copyEmbedded({ - userId: "alice", - resumeId: "alice-resume", - sectionId: "embedded", - itemId: "embedded-item", - }); - expect(copy).toMatchObject({ - name: "Embedded Letter", + data.metadata.layout.pages = [{ fullWidth: true, main: ["experience", "embedded"], sidebar: [] }]; + const adopt = (input: typeof data) => + adoptEmbeddedLetters(fixture.db as never, { + userId: "alice", + resumeId: "alice-resume", + resumeName: "Frontend", + data: input, + }); + + const again = structuredClone(data); + await adopt(data); + expect(data.customSections).toEqual([]); + expect(data.metadata.layout.pages).toEqual([{ fullWidth: true, main: ["experience"], sidebar: [] }]); + + const letters = await service.list({ userId: "alice", limit: 20, offset: 0 }); + expect(letters.items).toHaveLength(1); + const [letter] = letters.items; + if (!letter) throw new Error("Missing letter."); + expect(letter).toMatchObject({ + name: "Frontend — Embedded Letter", + recipient: "

Recipient

", content: "

Original

", + layout: "freeform", + sourceResumeId: "alice-resume", + senderLinked: true, + designLinked: true, style: { sectionId: "embedded", itemId: "embedded-item" }, }); - await service.update({ userId: "alice", id: copy.id, expectedRevision: 1, content: "Changed independently" }); - const result = await getPool().query("SELECT data FROM resume WHERE id='alice-resume'"); - expect(result.rows[0].data).toEqual(source); - await expect( - service.copyEmbedded({ userId: "bob", resumeId: "alice-resume", sectionId: "embedded", itemId: "embedded-item" }), - ).rejects.toMatchObject({ code: "NOT_FOUND" }); + const versions = await getPool().query("SELECT kind FROM cover_letter_version WHERE cover_letter_id=$1", [ + letter.id, + ]); + expect(versions.rows).toEqual([{ kind: "created" }]); + + // The same section sent again (an older tab still open) doesn't save a second letter. + await adopt(again); + expect((await service.list({ userId: "alice", limit: 20, offset: 0 })).items).toHaveLength(1); }); it("isolates every read, mutation, export and context selection by account", async () => { diff --git a/packages/api/src/features/cover-letters/service.ts b/packages/api/src/features/cover-letters/service.ts index 26c27500d..4aacfa674 100644 --- a/packages/api/src/features/cover-letters/service.ts +++ b/packages/api/src/features/cover-letters/service.ts @@ -16,7 +16,7 @@ import { coverLetterDocumentSchema, coverLetterSchema, } from "@reactive-resume/schema/cover-letter/data"; -import { coverLetterItemSchema, resumeDataSchema } from "@reactive-resume/schema/resume/data"; +import { resumeDataSchema } from "@reactive-resume/schema/resume/data"; import { defaultResumeData } from "@reactive-resume/schema/resume/default"; import { resumeService } from "../resume/service"; import { sanitizeCoverLetterHtml } from "./html"; @@ -350,28 +350,6 @@ export const coverLetterService = { await assertUnlocked(input); throw new ORPCError("CONFLICT", { message: "This cover letter changed elsewhere. Reload it before deleting." }); }, - copyEmbedded: async (input: { - userId: string; - resumeId: string; - sectionId: string; - itemId: string; - name?: string | undefined; - }) => { - const resume = await resumeService.getById({ userId: input.userId, id: input.resumeId }); - const data = resumeDataSchema.parse(resume.data); - const section = data.customSections.find((item) => item.id === input.sectionId && item.type === "cover-letter"); - const item = section?.items.find((entry) => entry.id === input.itemId); - if (!item) throw new ORPCError("NOT_FOUND"); - const letter = coverLetterItemSchema.parse(item); - return insert({ - userId: input.userId, - name: input.name ?? (section?.title || "Cover Letter").slice(0, 100), - recipient: letter.recipient, - content: letter.content, - style: copyCoverLetterStyle(data, input.sectionId, input.itemId), - sourceResumeId: input.resumeId, - }); - }, export: async (input: OwnedId): Promise => { const letter = await getById(input); return coverLetterDocumentSchema.parse({ ...letter, format: "reactive-resume-cover-letter", version: 1 }); diff --git a/packages/api/src/features/resume/export.ts b/packages/api/src/features/resume/export.ts index 745508211..6744ca058 100644 --- a/packages/api/src/features/resume/export.ts +++ b/packages/api/src/features/resume/export.ts @@ -1,7 +1,5 @@ -import type { ResumeExportTarget } from "@reactive-resume/resume/export-sections"; import { ORPCError } from "@orpc/server"; import z from "zod"; -import { getResumeExportData, resumeHasCoverLetter } from "@reactive-resume/resume/export-sections"; import { generateFilename } from "@reactive-resume/utils/file"; import { protectedProcedure } from "../../context"; import { pdfExportRateLimit } from "../../middleware/rate-limit"; @@ -17,25 +15,19 @@ export { type CreateResumePdfDownloadInput = { id: string; userId: string; - target?: ResumeExportTarget; }; export async function createResumePdfDownload(input: CreateResumePdfDownloadInput) { const resume = await resumeService.getById({ id: input.id, userId: input.userId }); const data = parseStoredResumeData(resume.data); - const target = input.target ?? "resume"; - if (target === "cover-letter" && !resumeHasCoverLetter(data)) { - throw new ORPCError("NOT_FOUND", { message: "No cover letter found for this resume" }); - } - - const filename = generateFilename(target === "cover-letter" ? `${resume.name} Cover Letter` : resume.name, "pdf"); + const filename = generateFilename(resume.name, "pdf"); try { // Lazy-load the PDF renderer (@reactive-resume/pdf → the Forme WASM engine and // the icon drawings) only when a PDF is actually exported, instead of at server // boot. Keeps cold starts light on constrained/slow-disk hosts. const { createResumePdfFile } = await import("@reactive-resume/pdf/server"); - const body = await createResumePdfFile({ data: getResumeExportData(data, target), filename }); + const body = await createResumePdfFile({ data, filename }); return { headers: { @@ -64,7 +56,10 @@ export const downloadResumePdfProcedure = protectedProcedure .input( z.object({ id: z.string().describe("The ID of the resume."), - target: z.enum(["resume", "cover-letter"]).optional().describe("Which document to download."), + target: z + .literal("resume") + .optional() + .describe("Deprecated, only `resume`: cover letters are documents of their own (`/cover-letters`)."), }), ) .output( @@ -76,10 +71,4 @@ export const downloadResumePdfProcedure = protectedProcedure }), ) .use(pdfExportRateLimit) - .handler(({ context, input }) => - createResumePdfDownload({ - id: input.id, - userId: context.user.id, - ...(input.target ? { target: input.target } : {}), - }), - ); + .handler(({ context, input }) => createResumePdfDownload({ id: input.id, userId: context.user.id })); diff --git a/packages/api/src/features/resume/pdf-download-url.test.ts b/packages/api/src/features/resume/pdf-download-url.test.ts index 8b0a42efb..b13b660d5 100644 --- a/packages/api/src/features/resume/pdf-download-url.test.ts +++ b/packages/api/src/features/resume/pdf-download-url.test.ts @@ -44,32 +44,10 @@ describe("resume PDF signed download URLs", () => { ok: true, resumeId: "resume-1", userId: "user-1", - target: "resume", expiresAt: "2026-06-01T10:10:00.000Z", }); }); - it("binds the cover letter target to the signed token", () => { - const result = createResumePdfDownloadUrl({ - resumeId: "resume-1", - userId: "user-1", - target: "cover-letter", - now: new Date("2026-06-01T10:00:00.000Z"), - }); - const url = new URL(result.url); - const token = url.searchParams.get("token"); - - expect(url.searchParams.get("target")).toBe("cover-letter"); - if (!token) throw new Error("Expected signed URL token"); - expect( - verifyResumePdfDownloadToken({ - resumeId: "resume-1", - token, - now: new Date("2026-06-01T10:01:00.000Z"), - }), - ).toMatchObject({ ok: true, target: "cover-letter" }); - }); - it("accepts still-valid legacy tokens without a target", () => { const payload = Buffer.from( JSON.stringify({ diff --git a/packages/api/src/features/resume/pdf-download-url.ts b/packages/api/src/features/resume/pdf-download-url.ts index e8805f6d1..54f783f42 100644 --- a/packages/api/src/features/resume/pdf-download-url.ts +++ b/packages/api/src/features/resume/pdf-download-url.ts @@ -1,4 +1,3 @@ -import type { ResumeExportTarget } from "@reactive-resume/resume/export-sections"; import { createHmac, timingSafeEqual } from "node:crypto"; import { env } from "@reactive-resume/env/server"; @@ -8,7 +7,6 @@ type PdfDownloadTokenPayload = { v: 1; resumeId: string; userId: string; - target?: ResumeExportTarget; expiresAt: number; issuedAt: number; }; @@ -17,7 +15,6 @@ type CreateResumePdfDownloadUrlInput = { resumeId: string; userId: string; now?: Date; - target?: ResumeExportTarget; ttlSeconds?: number; }; @@ -32,7 +29,6 @@ type VerifyResumePdfDownloadTokenResult = ok: true; resumeId: string; userId: string; - target?: ResumeExportTarget; expiresAt: string; } | { @@ -71,7 +67,6 @@ function parsePayload(value: unknown): PdfDownloadTokenPayload | null { if (payload.v !== 1) return null; if (typeof payload.resumeId !== "string" || payload.resumeId.length === 0) return null; if (typeof payload.userId !== "string" || payload.userId.length === 0) return null; - if (payload.target !== undefined && payload.target !== "resume" && payload.target !== "cover-letter") return null; if (typeof payload.expiresAt !== "number" || !Number.isFinite(payload.expiresAt)) return null; if (typeof payload.issuedAt !== "number" || !Number.isFinite(payload.issuedAt)) return null; @@ -82,7 +77,6 @@ export function createResumePdfDownloadUrl({ resumeId, userId, now = new Date(), - target, ttlSeconds, }: CreateResumePdfDownloadUrlInput) { const expiresInSeconds = resolveTtlSeconds(ttlSeconds); @@ -91,14 +85,12 @@ export function createResumePdfDownloadUrl({ v: 1, resumeId, userId, - target: target ?? "resume", expiresAt: expiresAt.getTime(), issuedAt: now.getTime(), } satisfies PdfDownloadTokenPayload); const token = `${payload}.${sign(payload)}`; const url = new URL(`/api/resumes/${encodeURIComponent(resumeId)}/pdf`, env.APP_URL); url.searchParams.set("token", token); - if (target) url.searchParams.set("target", target); return { url: url.toString(), @@ -126,7 +118,6 @@ export function verifyResumePdfDownloadToken({ ok: true, resumeId: parsed.resumeId, userId: parsed.userId, - ...(parsed.target ? { target: parsed.target } : {}), expiresAt: new Date(parsed.expiresAt).toISOString(), }; } catch { diff --git a/packages/api/src/features/resume/service.test.ts b/packages/api/src/features/resume/service.test.ts index 4c93e8101..6f0449f39 100644 --- a/packages/api/src/features/resume/service.test.ts +++ b/packages/api/src/features/resume/service.test.ts @@ -20,6 +20,7 @@ const grantResumeAccessMock = vi.hoisted(() => vi.fn()); const hasResumeAccessMock = vi.hoisted(() => vi.fn()); const storageDeleteMock = vi.hoisted(() => vi.fn()); +vi.mock("../cover-letters/embedded", () => ({ adoptEmbeddedLetters: vi.fn(async () => undefined) })); vi.mock("@reactive-resume/db/client", () => ({ db: dbMock })); vi.mock("@reactive-resume/db/schema", () => ({ resume: { @@ -252,6 +253,11 @@ it("imports", () => { }); describe("create", () => { + // The resume and any letters it carried save in one transaction. + beforeEach(() => { + dbMock.transaction.mockImplementation(async (callback: (tx: unknown) => Promise) => callback(dbMock)); + }); + it("rejects out-of-range values before creating any record", async () => { const data = structuredClone(defaultResumeData); data.metadata.page.marginX = 500; @@ -333,6 +339,11 @@ describe("create", () => { }); describe("create", () => { + // The resume and any letters it carried save in one transaction. + beforeEach(() => { + dbMock.transaction.mockImplementation(async (callback: (tx: unknown) => Promise) => callback(dbMock)); + }); + it("generates a unique slug from the name and starts History with the document's origin", async () => { const values = vi.fn((_input: unknown) => Promise.resolve()); dbMock.insert.mockReturnValueOnce({ values }); diff --git a/packages/api/src/features/resume/service.ts b/packages/api/src/features/resume/service.ts index e4b9b7bb6..6dadbc7aa 100644 --- a/packages/api/src/features/resume/service.ts +++ b/packages/api/src/features/resume/service.ts @@ -9,9 +9,11 @@ import { get } from "es-toolkit/compat"; import { match } from "ts-pattern"; import { db } from "@reactive-resume/db/client"; import * as schema from "@reactive-resume/db/schema"; +import { detachEmbeddedLetters } from "@reactive-resume/resume/cover-letter"; import { applyResumePatches, ResumePatchError } from "@reactive-resume/resume/patch"; import { defaultResumeData } from "@reactive-resume/schema/resume/default"; import { generateId } from "@reactive-resume/utils/string"; +import { adoptEmbeddedLetters } from "../cover-letters/embedded"; import { getStorageService } from "../storage/service"; import { grantResumeAccess, hasResumeAccess } from "./access"; import { assertCanView, isOwner, redactResumeForViewer, shouldCountForStatistics } from "./access-policy"; @@ -81,6 +83,7 @@ async function applyResumePatchTx( ) { const [existing] = await client .select({ + name: schema.resume.name, data: schema.resume.data, isLocked: schema.resume.isLocked, updatedAt: schema.resume.updatedAt, @@ -118,6 +121,12 @@ async function applyResumePatchTx( } patchedData = parseWritableResumeData(patchedData); + await adoptEmbeddedLetters(client, { + userId: input.userId, + resumeId: input.id, + resumeName: existing.name, + data: patchedData, + }); // The version guard is the ms-precision JS check above, under the SELECT ... FOR UPDATE lock. // Never compare expectedUpdatedAt in SQL: rows stamped by Postgres now() (defaultNow() on // insert) carry microseconds, while JS Dates are ms-truncated — SQL equality then matches @@ -528,14 +537,20 @@ export const resumeService = { try { const slug = input.slug ?? (await findFreeSlug(db, input.userId, input.name)); - await db.insert(schema.resume).values({ - id, - name: input.name, - autoName: input.autoName ?? false, - slug, - tags: input.tags, - userId: input.userId, - data, + await db.transaction(async (tx) => { + // The resume row comes first: letters an imported file carried are saved linked to it. + const stored = structuredClone(data); + detachEmbeddedLetters(stored); + await tx.insert(schema.resume).values({ + id, + name: input.name, + autoName: input.autoName ?? false, + slug, + tags: input.tags, + userId: input.userId, + data: stored, + }); + await adoptEmbeddedLetters(tx, { userId: input.userId, resumeId: id, resumeName: input.name, data }); }); // History is never empty: its first entry is where the document came from (best effort). @@ -581,6 +596,7 @@ export const resumeService = { .transaction(async (tx) => { const [existing] = await tx .select({ + name: schema.resume.name, data: schema.resume.data, slug: schema.resume.slug, isLocked: schema.resume.isLocked, @@ -608,6 +624,13 @@ export const resumeService = { } const normalizedData = input.data ? parseWritableResumeData(input.data) : undefined; + if (normalizedData) + await adoptEmbeddedLetters(tx, { + userId: input.userId, + resumeId: input.id, + resumeName: input.name ?? existing.name, + data: normalizedData, + }); // A blank resume is named after its headline until someone names it by hand. const followedName = existing.autoName && input.name === undefined && normalizedData diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 66e9912dd..bb7f1a57f 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -21,7 +21,6 @@ "@reactive-resume/ai": "workspace:*", "@reactive-resume/api": "workspace:*", "@reactive-resume/env": "workspace:*", - "@reactive-resume/resume": "workspace:*", "@reactive-resume/schema": "workspace:*", "zod": "^4.6.5" }, diff --git a/packages/mcp/src/mcp-server-card.test.ts b/packages/mcp/src/mcp-server-card.test.ts index 2e5c95760..09d61d53e 100644 --- a/packages/mcp/src/mcp-server-card.test.ts +++ b/packages/mcp/src/mcp-server-card.test.ts @@ -40,8 +40,7 @@ describe("buildMcpServerCard", () => { expect(tool?.description).toContain("short-lived"); expect(tool?.description).toContain("10 minutes"); expect(tool?.annotations?.readOnlyHint).toBe(true); - const properties = tool?.inputSchema.properties as Record; - expect(properties.target).toMatchObject({ enum: ["resume", "cover-letter"], default: "resume" }); + expect(tool?.inputSchema.properties).not.toHaveProperty("target"); }); it("advertises application tracker tools", () => { @@ -64,7 +63,6 @@ describe("buildMcpServerCard", () => { "refresh_cover_letter_style", "duplicate_cover_letter", "delete_cover_letter", - "copy_embedded_cover_letter", "export_cover_letter", "import_cover_letter", ]), diff --git a/packages/mcp/src/mcp-tool-names.ts b/packages/mcp/src/mcp-tool-names.ts index 6ecfe191e..438096ae6 100644 --- a/packages/mcp/src/mcp-tool-names.ts +++ b/packages/mcp/src/mcp-tool-names.ts @@ -20,7 +20,6 @@ export const MCP_TOOL_NAME = { refreshCoverLetterStyle: "refresh_cover_letter_style", duplicateCoverLetter: "duplicate_cover_letter", deleteCoverLetter: "delete_cover_letter", - copyEmbeddedCoverLetter: "copy_embedded_cover_letter", exportCoverLetter: "export_cover_letter", importCoverLetter: "import_cover_letter", listApplications: "list_applications", diff --git a/packages/mcp/src/tool-annotations.test.ts b/packages/mcp/src/tool-annotations.test.ts index 7fe94f5b6..62766ec59 100644 --- a/packages/mcp/src/tool-annotations.test.ts +++ b/packages/mcp/src/tool-annotations.test.ts @@ -94,7 +94,6 @@ describe("tool annotations", () => { MCP_TOOL_NAME.draftApplicationMessage, MCP_TOOL_NAME.createCoverLetter, MCP_TOOL_NAME.duplicateCoverLetter, - MCP_TOOL_NAME.copyEmbeddedCoverLetter, MCP_TOOL_NAME.importCoverLetter, ]) { const annotations = TOOL_META[name].annotations; diff --git a/packages/mcp/src/tool-meta.ts b/packages/mcp/src/tool-meta.ts index c5aaeeedb..215765cf6 100644 --- a/packages/mcp/src/tool-meta.ts +++ b/packages/mcp/src/tool-meta.ts @@ -214,20 +214,13 @@ export const TOOL_META = { [T.downloadResumePdf]: { title: "Download Resume PDF", description: [ - "Create a short-lived authenticated URL for downloading a resume or its visible cover letter as a PDF.", + "Create a short-lived authenticated URL for downloading a resume as a PDF.", "The URL expires in 10 minutes and should be used immediately.", - "Set target to `cover-letter` to export the visible cover letter separately; omit it (or use `resume`) for the resume.", - "Returns JSON containing: resumeId, target, name, downloadUrl, expiresAt, expiresInSeconds, contentType.", + "Cover letters are documents of their own: use the cover-letter tools for them.", + "Returns JSON containing: resumeId, name, downloadUrl, expiresAt, expiresInSeconds, contentType.", `Use \`${T.listResumes}\` first to find valid IDs.`, ].join("\n"), - inputSchema: z.object({ - id: resumeIdSchema, - target: z - .enum(["resume", "cover-letter"]) - .optional() - .default("resume") - .describe("Document to export. Default: resume."), - }), + inputSchema: z.object({ id: resumeIdSchema }), annotations: READ_NON_IDEMPOTENT, }, [T.createResume]: { @@ -398,7 +391,7 @@ export const TOOL_META = { title: "List Cover Letters", description: [ "List independent cover letters in the account's cover-letter library.", - "These are separate from cover-letter sections embedded in resumes.", + "Letters are documents of their own, never part of a resume; attach one to an application with `coverLetterId`.", "Use this before other independent cover-letter tools to discover IDs.", ].join("\n"), inputSchema: z.object({ @@ -414,7 +407,6 @@ export const TOOL_META = { title: "Read Cover Letter", description: [ "Read one independent cover letter from the cover-letter library.", - "This does not read a cover-letter section embedded in a resume.", `Use \`${T.listCoverLetters}\` first to find valid IDs.`, ].join("\n"), inputSchema: z.object({ id: coverLetterIdSchema }), @@ -424,7 +416,7 @@ export const TOOL_META = { title: "Create Cover Letter", description: [ "Create an independent cover letter in the cover-letter library.", - "Optionally associate it with a resume or application; this does not add an embedded section to a resume.", + "Optionally link it to a resume (for its sender details and design) or an application.", ].join("\n"), inputSchema: z.object({ ...coverLetterEditableFieldsSchema, @@ -474,7 +466,6 @@ export const TOOL_META = { description: [ "Refresh an independent cover letter's sender styling from a resume while preserving its content and template.", "Pass the latest `revision` as `expectedRevision` to prevent stale concurrent writes.", - "This updates the independent letter; it does not modify the embedded cover letter in the resume.", ].join("\n"), inputSchema: z.object({ id: coverLetterIdSchema, @@ -487,7 +478,7 @@ export const TOOL_META = { title: "Duplicate Cover Letter", description: [ "Create an independent copy of a cover letter in the library.", - "The copy is separate from the original and from any embedded resume cover letter.", + "The copy is separate from the original.", ].join("\n"), inputSchema: z.object({ id: coverLetterIdSchema, name: z.string().min(1).max(100).optional() }), annotations: WRITE_NON_IDEMPOTENT, @@ -496,31 +487,16 @@ export const TOOL_META = { title: "Delete Cover Letter", description: [ "Move an independent cover letter to Trash, where it stays for 30 days before it's deleted.", - "Pass the latest `revision` as `expectedRevision`; this does not delete embedded cover-letter sections.", + "Pass the latest `revision` as `expectedRevision`.", ].join("\n"), inputSchema: z.object({ id: coverLetterIdSchema, expectedRevision: expectedRevisionSchema }), annotations: { ...WRITE_DESTRUCTIVE, openWorldHint: true }, }, - [T.copyEmbeddedCoverLetter]: { - title: "Copy Embedded Cover Letter", - description: [ - "Copy a cover-letter item embedded in a resume into the independent cover-letter library.", - "The embedded item remains in the resume; the returned letter is a new independent library record.", - ].join("\n"), - inputSchema: z.object({ - resumeId: z.string().min(1).describe("Resume containing the embedded cover letter."), - sectionId: z.string().min(1).describe("Embedded cover-letter section ID."), - itemId: z.string().min(1).describe("Embedded cover-letter item ID."), - name: z.string().min(1).max(100).optional().describe("Optional name for the independent copy."), - }), - annotations: WRITE_NON_IDEMPOTENT, - }, [T.exportCoverLetter]: { title: "Export Cover Letter", - description: [ - "Export an independent library cover letter as versioned Reactive Resume cover-letter JSON.", - "This is not a full resume export and does not export an embedded cover letter directly.", - ].join("\n"), + description: ["Export an independent library cover letter as versioned Reactive Resume cover-letter JSON."].join( + "\n", + ), inputSchema: z.object({ id: coverLetterIdSchema }), annotations: READ_IDEMPOTENT, }, diff --git a/packages/mcp/src/tools.test.ts b/packages/mcp/src/tools.test.ts index 8d67c6a01..a481c0592 100644 --- a/packages/mcp/src/tools.test.ts +++ b/packages/mcp/src/tools.test.ts @@ -129,14 +129,9 @@ describe("registerTools", () => { expect(tool.config.title).toBe("Download Resume PDF"); expect(clientMock.resume.getById).toHaveBeenCalledWith({ id: "resume-1" }); expect(mocks.resolveUserFromRequestHeaders).toHaveBeenCalledWith(requestHeaders); - expect(mocks.createResumePdfDownloadUrl).toHaveBeenCalledWith({ - resumeId: "resume-1", - userId: "user-1", - target: "resume", - }); + expect(mocks.createResumePdfDownloadUrl).toHaveBeenCalledWith({ resumeId: "resume-1", userId: "user-1" }); expect(payload).toEqual({ resumeId: "resume-1", - target: "resume", name: "Scizor", downloadUrl: "https://example.com/api/resumes/resume-1/pdf?token=signed", expiresAt: "2026-06-01T10:10:00.000Z", @@ -145,61 +140,6 @@ describe("registerTools", () => { }); }); - it("creates a cover-letter PDF URL and reports cover-letter metadata", async () => { - clientMock.resume.getById.mockResolvedValueOnce({ - id: "resume-1", - name: "Scizor", - data: { customSections: [{ type: "cover-letter", hidden: false, items: [{ hidden: false }] }] }, - }); - mocks.resolveUserFromRequestHeaders.mockResolvedValueOnce({ id: "user-1" }); - mocks.createResumePdfDownloadUrl.mockReturnValueOnce({ - url: "https://example.com/api/resumes/resume-1/pdf?token=signed&target=cover-letter", - expiresAt: "2026-06-01T10:10:00.000Z", - expiresInSeconds: 600, - }); - - const { server, registered } = makeFakeServer(); - registerTools(server as never, clientMock as never, new Headers()); - - const tool = registered.find((item) => item.name === "download_resume_pdf")!; - const result = await tool.handler({ id: "resume-1", target: "cover-letter" }); - - expect(mocks.createResumePdfDownloadUrl).toHaveBeenCalledWith({ - resumeId: "resume-1", - userId: "user-1", - target: "cover-letter", - }); - expect(JSON.parse(result.content[0]!.text)).toEqual({ - resumeId: "resume-1", - target: "cover-letter", - name: "Scizor Cover Letter", - downloadUrl: "https://example.com/api/resumes/resume-1/pdf?token=signed&target=cover-letter", - expiresAt: "2026-06-01T10:10:00.000Z", - expiresInSeconds: 600, - contentType: "application/pdf", - }); - }); - - for (const [name, data] of [ - ["missing", { customSections: [] }], - ["hidden", { customSections: [{ type: "cover-letter", hidden: true, items: [{ hidden: false }] }] }], - ] as const) { - it(`does not create a cover-letter URL when the cover letter is ${name}`, async () => { - clientMock.resume.getById.mockResolvedValueOnce({ id: "resume-1", name: "Scizor", data }); - mocks.resolveUserFromRequestHeaders.mockResolvedValueOnce({ id: "user-1" }); - - const { server, registered } = makeFakeServer(); - registerTools(server as never, clientMock as never, new Headers()); - - const tool = registered.find((item) => item.name === "download_resume_pdf")!; - const result = await tool.handler({ id: "resume-1", target: "cover-letter" }); - - expect(result.isError).toBe(true); - expect(result.content[0]?.text).toContain("No visible cover letter found for this resume."); - expect(mocks.createResumePdfDownloadUrl).not.toHaveBeenCalled(); - }); - } - it("keeps the tool name stable", () => { expect(MCP_TOOL_NAME.downloadResumePdf).toBe("download_resume_pdf"); }); @@ -231,7 +171,6 @@ describe("registerTools", () => { MCP_TOOL_NAME.refreshCoverLetterStyle, MCP_TOOL_NAME.duplicateCoverLetter, MCP_TOOL_NAME.deleteCoverLetter, - MCP_TOOL_NAME.copyEmbeddedCoverLetter, MCP_TOOL_NAME.exportCoverLetter, MCP_TOOL_NAME.importCoverLetter, ]), diff --git a/packages/mcp/src/tools.ts b/packages/mcp/src/tools.ts index 63f47570d..3758ebe43 100644 --- a/packages/mcp/src/tools.ts +++ b/packages/mcp/src/tools.ts @@ -9,7 +9,6 @@ import { ORPCError } from "@orpc/server"; import { resolveUserFromRequestHeaders } from "@reactive-resume/api/context"; import { createResumePdfDownloadUrl } from "@reactive-resume/api/features/resume/export"; import { env } from "@reactive-resume/env/server"; -import { resumeHasCoverLetter } from "@reactive-resume/resume/export-sections"; import { resumeDataSchema } from "@reactive-resume/schema/resume/data"; import { MCP_TOOL_NAME } from "./mcp-tool-names"; import { TOOL_META } from "./tool-meta"; @@ -161,40 +160,32 @@ export function registerTools(server: McpServer, client: RouterClient { - const resume = await client.resume.getById({ id }); - const user = await resolveUserFromRequestHeaders(requestHeaders); - if (!user) throw new Error("Unauthorized"); + withErrorHandling("creating PDF download URL", async ({ id }: { id: string }) => { + const resume = await client.resume.getById({ id }); + const user = await resolveUserFromRequestHeaders(requestHeaders); + if (!user) throw new Error("Unauthorized"); - const documentTarget = target ?? "resume"; - if (documentTarget === "cover-letter" && !resumeHasCoverLetter(resume.data)) - throw new Error("No visible cover letter found for this resume."); + const signedUrl = createResumePdfDownloadUrl({ resumeId: id, userId: user.id }); - const signedUrl = createResumePdfDownloadUrl({ resumeId: id, userId: user.id, target: documentTarget }); - - return text( - JSON.stringify( - { - resumeId: id, - target: documentTarget, - name: documentTarget === "cover-letter" ? `${resume.name} Cover Letter` : resume.name, - downloadUrl: signedUrl.url, - expiresAt: signedUrl.expiresAt, - expiresInSeconds: signedUrl.expiresInSeconds, - contentType: "application/pdf", - }, - null, - 2, - ), - ); - }, - ), + return text( + JSON.stringify( + { + resumeId: id, + name: resume.name, + downloadUrl: signedUrl.url, + expiresAt: signedUrl.expiresAt, + expiresInSeconds: signedUrl.expiresInSeconds, + contentType: "application/pdf", + }, + null, + 2, + ), + ); + }), ); // ── Create Resume ───────────────────────────────────────────── @@ -419,11 +410,6 @@ export function registerTools(server: McpServer, client: RouterClient json(await client.coverLetters.copyEmbedded(params as never)), - ], [ T.exportCoverLetter, "exporting cover letter", diff --git a/packages/pdf/src/semantic/all-templates-fixture.ts b/packages/pdf/src/semantic/all-templates-fixture.ts index a5cad9138..a78bae353 100644 --- a/packages/pdf/src/semantic/all-templates-fixture.ts +++ b/packages/pdf/src/semantic/all-templates-fixture.ts @@ -1,3 +1,4 @@ +import type { ResumeData } from "@reactive-resume/schema/resume/data"; import type { Template } from "@reactive-resume/schema/templates"; import { createSampleResumeData } from "@reactive-resume/schema/resume/sample"; @@ -17,6 +18,29 @@ resume[template="azurill"] template-part[name="timeline-dot"] { background-color `, } as const; +/** A cover letter, as resumes carried them and as a letter's own document still renders it. */ +const LETTER_SECTION: ResumeData["customSections"][number] = { + title: "Cover Letter", + icon: "envelope-simple", + columns: 1, + hidden: false, + showHeading: true, + keepTogether: false, + startOnNewPage: false, + id: "019bef5b-0b3d-7e2a-8a7c-12d9e23a4f6b", + type: "cover-letter", + items: [ + { + id: "019bef5b-0f8d-77d1-9b2a-4a1b65e1b8aa", + hidden: false, + recipient: + '

Hiring Manager
Sunrise Games Studio
Seattle, WA
hiring@sunrisegames.com

', + content: + "

Dear Hiring Manager,

I'm excited to apply for the Senior Gameplay Engineer role at Sunrise Games Studio. Over the past five years, I have shipped cross-platform titles in Unity and Unreal Engine, leading core gameplay and tooling efforts that improved iteration speed and player experience. At Cascade Studios, I architected combat systems and optimized performance to maintain 60 FPS on console while partnering closely with design and art.

I thrive in collaborative, cross-disciplinary teams and enjoy mentoring junior engineers. I'd welcome the chance to bring my gameplay systems expertise and tooling focus to your next title.

Sincerely,
David Kowalski

", + }, + ], +}; + export const buildAllTemplatesFixture = (template: Template) => { const data = structuredClone(createSampleResumeData("Semantic CSS Acceptance")); data.summary.content = [ @@ -50,6 +74,9 @@ export const buildAllTemplatesFixture = (template: Template) => { for (const certification of data.sections.certifications.items) { certification.description = "

Verified certification.

"; } + // Letters render through the same templates, as a cover-letter section; the fixture keeps one to cover it. + data.customSections.push(LETTER_SECTION); + data.metadata.layout.pages.push({ fullWidth: true, main: [LETTER_SECTION.id], sidebar: [] }); data.metadata.template = template; data.metadata.stylesheet = { mode: "semantic", diff --git a/packages/pdf/src/templates/shared/cover-letter.test.ts b/packages/pdf/src/templates/shared/cover-letter.test.ts index 0462a3cec..53bafdb98 100644 --- a/packages/pdf/src/templates/shared/cover-letter.test.ts +++ b/packages/pdf/src/templates/shared/cover-letter.test.ts @@ -1,25 +1,16 @@ import { describe, expect, it } from "vitest"; +import { copyCoverLetterStyle, createCoverLetterResumeData } from "@reactive-resume/resume/cover-letter"; import { sampleResumeData } from "@reactive-resume/schema/resume/sample"; import { shouldShowResumeHeader } from "./cover-letter"; -const createCoverLetterOnlyData = () => { - const data = structuredClone(sampleResumeData); - const coverLetter = data.customSections.find((section) => section.type === "cover-letter"); - - if (!coverLetter) throw new Error("sample resume must include a cover letter"); - - return { - ...data, - customSections: [coverLetter], - metadata: { - ...data.metadata, - layout: { - ...data.metadata.layout, - pages: [{ fullWidth: true, main: [coverLetter.id], sidebar: [] }], - }, - }, - }; -}; +// A letter's document: resume data with one cover-letter section, as the letter export builds it. +const createCoverLetterOnlyData = () => + createCoverLetterResumeData({ + name: "Cover Letter", + recipient: "

Hiring Manager

", + content: "

Dear Hiring Manager,

", + style: copyCoverLetterStyle(sampleResumeData, "letter-section", "letter-item"), + }); describe("shouldShowResumeHeader", () => { it("hides the header when every visible layout section is a cover letter", () => { diff --git a/packages/resume/src/cover-letter.test.ts b/packages/resume/src/cover-letter.test.ts index 53131552e..10ffbe53f 100644 --- a/packages/resume/src/cover-letter.test.ts +++ b/packages/resume/src/cover-letter.test.ts @@ -5,9 +5,43 @@ import { copyCoverLetterStyle, coverLetterTextToHtml, createCoverLetterResumeData, + detachEmbeddedLetters, greetingName, } from "./cover-letter"; +describe("detachEmbeddedLetters", () => { + it("takes letters out of the resume and its layout, and returns each one", () => { + const data = structuredClone(defaultResumeData); + const letter = createCoverLetterResumeData({ + name: "Letter", + recipient: "

Acme

", + content: "

Hello

", + style: copyCoverLetterStyle(data, "letters", "letter-1"), + }).customSections[0]; + if (!letter) throw new Error("Missing letter section."); + data.customSections = [ + { ...letter, items: [...letter.items, { ...letter.items[0], id: "letter-2", hidden: true } as never] }, + ]; + data.metadata.layout.pages = [ + { fullWidth: false, main: ["experience", "letters"], sidebar: ["letters", "skills"] }, + ]; + + expect(detachEmbeddedLetters(data)).toEqual([ + { sectionId: "letters", itemId: "letter-1", title: "Letter", recipient: "

Acme

", content: "

Hello

" }, + { sectionId: "letters", itemId: "letter-2", title: "Letter", recipient: "

Acme

", content: "

Hello

" }, + ]); + expect(data.customSections).toEqual([]); + expect(data.metadata.layout.pages).toEqual([{ fullWidth: false, main: ["experience"], sidebar: ["skills"] }]); + }); + + it("leaves a resume without letters as it is", () => { + const data = structuredClone(defaultResumeData); + const before = structuredClone(data); + expect(detachEmbeddedLetters(data)).toEqual([]); + expect(data).toEqual(before); + }); +}); + describe("independent cover letters", () => { it("copies sender and style without linking source mutations or retaining private notes", () => { const source = structuredClone(defaultResumeData); diff --git a/packages/resume/src/cover-letter.ts b/packages/resume/src/cover-letter.ts index 7793c6274..432404077 100644 --- a/packages/resume/src/cover-letter.ts +++ b/packages/resume/src/cover-letter.ts @@ -39,6 +39,46 @@ export function createCoverLetterResumeData( return data; } +/** A cover letter written inside a resume, as older versions of the app stored them. */ +export type EmbeddedLetter = { + sectionId: string; + itemId: string; + /** The section's title; empty when the template's default title was used. */ + title: string; + recipient: string; + content: string; +}; + +/** + * Letters are documents of their own; resumes no longer carry them. Takes every cover-letter section out of the + * resume (and out of its page layout) and returns the letters it held, so the caller can save them as letters. + * Mutates `data` in place; returns no letters, and changes nothing, for a resume without any. + */ +export function detachEmbeddedLetters(data: ResumeData): EmbeddedLetter[] { + const sections = data.customSections.filter((section) => section.type === "cover-letter"); + if (sections.length === 0) return []; + + const ids = new Set(sections.map((section) => section.id)); + data.customSections = data.customSections.filter((section) => !ids.has(section.id)); + for (const page of data.metadata.layout.pages) { + page.main = page.main.filter((id) => !ids.has(id)); + page.sidebar = page.sidebar.filter((id) => !ids.has(id)); + } + + return sections.flatMap((section) => + section.items.map((item) => { + const { recipient, content } = item as { recipient?: unknown; content?: unknown }; + return { + sectionId: section.id, + itemId: item.id, + title: section.title, + recipient: typeof recipient === "string" ? recipient : "", + content: typeof content === "string" ? content : "", + }; + }), + ); +} + const escapeHtml = (text: string) => text .replaceAll("&", "&") diff --git a/packages/resume/src/export-sections.test.ts b/packages/resume/src/export-sections.test.ts index 9cde8244a..62bd3facb 100644 --- a/packages/resume/src/export-sections.test.ts +++ b/packages/resume/src/export-sections.test.ts @@ -1,30 +1,44 @@ import { describe, expect, it } from "vitest"; import { defaultResumeData } from "@reactive-resume/schema/resume/default"; import { sampleResumeData } from "@reactive-resume/schema/resume/sample"; +import { copyCoverLetterStyle, createCoverLetterResumeData } from "./cover-letter"; import { getResumeExportData, resumeHasCoverLetter } from "./export-sections"; +// Letters render through the same templates: a letter's document is resume data with one cover-letter section. +// Here the sample resume carries one too, as resumes did before letters became documents of their own. +const LETTER_ID = "letter-section"; +const withLetter = () => { + const data = structuredClone(sampleResumeData); + const letter = createCoverLetterResumeData({ + name: "Cover Letter", + recipient: "

Hiring Manager

", + content: "

Dear Hiring Manager,

", + style: copyCoverLetterStyle(data, LETTER_ID, "letter-item"), + }); + data.customSections.push(...letter.customSections); + data.metadata.layout.pages.push({ fullWidth: true, main: [LETTER_ID], sidebar: [] }); + return data; +}; + describe("resume export sections", () => { it("detects visible cover letter sections", () => { expect(resumeHasCoverLetter(defaultResumeData)).toBe(false); - expect(resumeHasCoverLetter(sampleResumeData)).toBe(true); + expect(resumeHasCoverLetter(sampleResumeData)).toBe(false); + expect(resumeHasCoverLetter(withLetter())).toBe(true); }); it("removes cover letter sections from resume-only exports", () => { - const data = getResumeExportData(sampleResumeData, "resume"); + const data = getResumeExportData(withLetter(), "resume"); expect(data.customSections.some((section) => section.type === "cover-letter")).toBe(false); - expect(data.metadata.layout.pages.flatMap((page) => [...page.main, ...page.sidebar])).not.toContain( - "019bef5b-0b3d-7e2a-8a7c-12d9e23a4f6b", - ); + expect(data.metadata.layout.pages.flatMap((page) => [...page.main, ...page.sidebar])).not.toContain(LETTER_ID); }); it("keeps only cover letter sections for cover-letter exports", () => { - const data = getResumeExportData(sampleResumeData, "cover-letter"); + const data = getResumeExportData(withLetter(), "cover-letter"); expect(data.customSections).toHaveLength(1); expect(data.customSections[0]?.type).toBe("cover-letter"); - expect(data.metadata.layout.pages).toEqual([ - { fullWidth: true, main: ["019bef5b-0b3d-7e2a-8a7c-12d9e23a4f6b"], sidebar: [] }, - ]); + expect(data.metadata.layout.pages).toEqual([{ fullWidth: true, main: [LETTER_ID], sidebar: [] }]); }); }); diff --git a/packages/resume/src/markdown.test.ts b/packages/resume/src/markdown.test.ts index 0dc3ab931..9547cc9ac 100644 --- a/packages/resume/src/markdown.test.ts +++ b/packages/resume/src/markdown.test.ts @@ -1,8 +1,23 @@ import { describe, expect, it } from "vitest"; import { sampleResumeData } from "@reactive-resume/schema/resume/sample"; +import { copyCoverLetterStyle, createCoverLetterResumeData } from "./cover-letter"; import { getResumeExportData } from "./export-sections"; import { buildMarkdown, htmlToMarkdown } from "./markdown"; +// A letter's document, as the letter export builds it: resume data with one cover-letter section. +const withLetter = () => { + const data = structuredClone(sampleResumeData); + const letter = createCoverLetterResumeData({ + name: "Cover Letter", + recipient: "

Hiring Manager

", + content: "

Dear Hiring Manager,

I'm excited to apply.

", + style: copyCoverLetterStyle(data, "letter-section", "letter-item"), + }); + data.customSections.push(...letter.customSections); + data.metadata.layout.pages.push({ fullWidth: true, main: ["letter-section"], sidebar: [] }); + return data; +}; + describe("htmlToMarkdown", () => { it("converts the constrained tiptap tag set", () => { const html = "

Led teams of engineers.

  • Shipped X
  • Owned Y
"; @@ -46,13 +61,13 @@ describe("buildMarkdown", () => { }); it("excludes the cover letter from the resume scope and includes it in the cover-letter scope", () => { - const cover = buildMarkdown(getResumeExportData(sampleResumeData, "cover-letter")); + const cover = buildMarkdown(getResumeExportData(withLetter(), "cover-letter")); expect(cover.length).toBeGreaterThan(0); expect(cover).not.toBe(md); }); it("renders the cover-letter scope without resume header or section heading", () => { - const cover = buildMarkdown(getResumeExportData(sampleResumeData, "cover-letter")); + const cover = buildMarkdown(getResumeExportData(withLetter(), "cover-letter")); expect(cover).toContain("Dear Hiring Manager"); expect(cover).not.toContain(`# ${sampleResumeData.basics.name}`); diff --git a/packages/schema/src/resume/sample.ts b/packages/schema/src/resume/sample.ts index 145563f61..5e951df69 100644 --- a/packages/schema/src/resume/sample.ts +++ b/packages/schema/src/resume/sample.ts @@ -559,27 +559,6 @@ export const sampleResumeData: ResumeData = { }, ], }, - { - title: "Cover Letter", - icon: "envelope-simple", - columns: 1, - hidden: false, - showHeading: true, - keepTogether: false, - startOnNewPage: false, - id: "019bef5b-0b3d-7e2a-8a7c-12d9e23a4f6b", - type: "cover-letter", - items: [ - { - id: "019bef5b-0f8d-77d1-9b2a-4a1b65e1b8aa", - hidden: false, - recipient: - '

Hiring Manager
Sunrise Games Studio
Seattle, WA
hiring@sunrisegames.com

', - content: - "

Dear Hiring Manager,

I'm excited to apply for the Senior Gameplay Engineer role at Sunrise Games Studio. Over the past five years, I have shipped cross-platform titles in Unity and Unreal Engine, leading core gameplay and tooling efforts that improved iteration speed and player experience. At Cascade Studios, I architected combat systems and optimized performance to maintain 60 FPS on console while partnering closely with design and art.

I thrive in collaborative, cross-disciplinary teams and enjoy mentoring junior engineers. I'd welcome the chance to bring my gameplay systems expertise and tooling focus to your next title.

Sincerely,
David Kowalski

", - }, - ], - }, ], metadata: { template: "azurill", @@ -601,11 +580,6 @@ export const sampleResumeData: ResumeData = { main: ["projects", "publications", "volunteer"], sidebar: [], }, - { - fullWidth: true, - main: ["019bef5b-0b3d-7e2a-8a7c-12d9e23a4f6b"], - sidebar: [], - }, ], }, page: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aaab17ffb..b0c77fb82 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1242,9 +1242,6 @@ importers: '@reactive-resume/env': specifier: workspace:* version: link:../env - '@reactive-resume/resume': - specifier: workspace:* - version: link:../resume '@reactive-resume/schema': specifier: workspace:* version: link:../schema diff --git a/tests/e2e/specs/cover-letter-editor.spec.ts b/tests/e2e/specs/cover-letter-editor.spec.ts index 8b8336466..86d4bb413 100644 --- a/tests/e2e/specs/cover-letter-editor.spec.ts +++ b/tests/e2e/specs/cover-letter-editor.spec.ts @@ -2,7 +2,7 @@ import type { Page } from "@playwright/test"; import { randomUUID } from "node:crypto"; import { readFile } from "node:fs/promises"; import { Pool } from "pg"; -import { createSampleResumeFromDashboard, openSidebarSection } from "../fixtures/resume"; +import { createSampleResumeFromDashboard } from "../fixtures/resume"; import { expect, test } from "../fixtures/test"; /** New → "New cover letter instead" opens the letter editor on an untitled letter. */ @@ -101,10 +101,10 @@ test("writes a letter for an application, from the resume's details, and downloa } }); -test("names a version, restores it, and copies the letter into a resume", async ({ authPage: page }, testInfo) => { +test("names a version and restores it", async ({ authPage: page }, testInfo) => { test.setTimeout(90_000); await createSampleResumeFromDashboard(page, testInfo); - const builderUrl = page.url(); + const _builderUrl = page.url(); await newLetter(page); await page.getByRole("button", { name: "Write it myself" }).click(); @@ -130,12 +130,4 @@ test("names a version, restores it, and copies the letter into a resume", async await expect(versions.getByRole("button", { name: /^Before restore/ })).toBeVisible(); await page.keyboard.press("Escape"); await expect(body).toContainText("The first version of the letter."); - - // A saved letter can start a letter inside a resume, as a copy that doesn't follow later edits. - await page.goto(builderUrl); - await openSidebarSection(page, "Cover Letter"); - await page.getByRole("button", { name: "Add cover letter", exact: true }).click(); - await page.getByLabel("Import from library", { exact: true }).click(); - await page.getByRole("option", { name: "Untitled letter", exact: true }).click(); - await expect(page.getByRole("textbox", { name: "Letter", exact: true })).toContainText("first version"); }); diff --git a/tests/e2e/specs/json-export-import.spec.ts b/tests/e2e/specs/json-export-import.spec.ts index 7f84921c1..da6945458 100644 --- a/tests/e2e/specs/json-export-import.spec.ts +++ b/tests/e2e/specs/json-export-import.spec.ts @@ -1,4 +1,4 @@ -import { readFile } from "node:fs/promises"; +import { readFile, writeFile } from "node:fs/promises"; import { createSampleResumeFromDashboard, openDownloadDialog, openSidebarSection } from "../fixtures/resume"; import { expect, test } from "../fixtures/test"; @@ -27,3 +27,45 @@ test("exports and imports a resume JSON backup", async ({ authPage: page }, test await openSidebarSection(page, "Basics"); await expect(page.getByRole("textbox", { name: "Full name", exact: true })).toHaveValue(exportedData.basics.name); }); + +test("imports a resume file that carries a cover letter as a resume and a letter of its own", async ({ + authPage: page, +}, testInfo) => { + await createSampleResumeFromDashboard(page, testInfo); + const sheet = await openDownloadDialog(page); + await sheet.getByRole("radio", { name: /^JSON/ }).click(); + const downloadPromise = page.waitForEvent("download"); + await sheet.getByRole("button", { name: "Download JSON" }).click(); + const exported = await downloadPromise; + const data = JSON.parse(await readFile((await exported.path()) as string, "utf-8")) as { + customSections: unknown[]; + metadata: { layout: { pages: { fullWidth: boolean; main: string[]; sidebar: string[] }[] } }; + }; + + // A file from an older version, with the letter inside the resume. + data.customSections.push({ + id: "old-letter", + type: "cover-letter", + title: "Letter to Globex", + icon: "", + columns: 1, + hidden: false, + keepTogether: false, + startOnNewPage: false, + items: [{ id: "old-letter-item", hidden: false, recipient: "

Globex

", content: "

Dear Globex team,

" }], + }); + data.metadata.layout.pages.push({ fullWidth: true, main: ["old-letter"], sidebar: [] }); + const path = testInfo.outputPath("with-letter.json"); + await writeFile(path, JSON.stringify(data)); + + await page.goto("/dashboard"); + await page.getByRole("button", { name: "New", exact: true }).click(); + await page.getByRole("dialog", { name: "New document" }).getByLabel("Choose a file to import").setInputFiles(path); + await page.getByRole("button", { name: "Open in editor" }).click(); + await page.waitForURL(/\/builder\/.+/); + await expect(page.getByText("Dear Globex team,")).toHaveCount(0); + + await page.goto("/dashboard"); + await page.getByRole("tab", { name: /^Letters/ }).click(); + await expect(page.getByRole("heading", { name: /— Letter to Globex$/ })).toHaveCount(1); +});