diff --git a/apps/web/locales/af-ZA.po b/apps/web/locales/af-ZA.po
index 6664c9a36..137d58443 100644
--- a/apps/web/locales/af-ZA.po
+++ b/apps/web/locales/af-ZA.po
@@ -1338,6 +1338,11 @@ msgstr "Kon nie hierdie pleister herstel nie."
msgid "Could not set up two-factor authentication."
msgstr "Kon nie twee-faktor-magtiging opstel nie."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Kon nie verskafferverbinding verifieer nie."
@@ -5031,6 +5036,10 @@ msgstr "Iets het verkeerd geloop tydens jou aanmelding. Probeer asseblief weer."
msgid "Something went wrong. Please try again."
msgstr "Iets het verkeerd geloop. Probeer asseblief weer."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/am-ET.po b/apps/web/locales/am-ET.po
index af330033f..6d769a5c7 100644
--- a/apps/web/locales/am-ET.po
+++ b/apps/web/locales/am-ET.po
@@ -1338,6 +1338,11 @@ msgstr "ይህንን ፓች ወደነበረበት መመለስ አልተቻለ
msgid "Could not set up two-factor authentication."
msgstr "ሁለት-ደረጃ ማረጋገጫን ማዋቀር አልተቻለም።"
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "የአቅራቢውን ግንኙነት ማረጋገጥ አልተቻለም።"
@@ -5031,6 +5036,10 @@ msgstr "ስንገባዎት የሆነ ችግር ተፈጥሯል። እባክዎ
msgid "Something went wrong. Please try again."
msgstr "የተሳሳተ ነገር ተፈጥሯል። እባክዎን ደግመው ይሞክሩ።"
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/ar-SA.po b/apps/web/locales/ar-SA.po
index 785cf4c35..ec13e2e9e 100644
--- a/apps/web/locales/ar-SA.po
+++ b/apps/web/locales/ar-SA.po
@@ -1338,6 +1338,11 @@ msgstr "تعذر استعادة هذا التحديث."
msgid "Could not set up two-factor authentication."
msgstr "تعذّر إعداد المصادقة الثنائية."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "تعذر التحقق من اتصال مزود الخدمة."
@@ -5031,6 +5036,10 @@ msgstr "حدث خطأ ما أثناء تسجيل دخولك. يُرجى المح
msgid "Something went wrong. Please try again."
msgstr "حدث خطأ ما. يُرجى المحاولة مرة أخرى."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/az-AZ.po b/apps/web/locales/az-AZ.po
index c144999d2..ac9814687 100644
--- a/apps/web/locales/az-AZ.po
+++ b/apps/web/locales/az-AZ.po
@@ -1338,6 +1338,11 @@ msgstr "Bu yamağı bərpa etmək mümkün olmadı."
msgid "Could not set up two-factor authentication."
msgstr "İki mərhələli autentifikasiya qurula bilmədi."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Provayder bağlantısını yoxlamaq mümkün olmadı."
@@ -5031,6 +5036,10 @@ msgstr "Sizi daxil edərkən nəsə səhv getdi. Zəhmət olmasa yenidən cəhd
msgid "Something went wrong. Please try again."
msgstr "Nəsə səhv getdi. Zəhmət olmasa, yenidən cəhd edin."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/bg-BG.po b/apps/web/locales/bg-BG.po
index 8348237d3..1f4d4680f 100644
--- a/apps/web/locales/bg-BG.po
+++ b/apps/web/locales/bg-BG.po
@@ -1338,6 +1338,11 @@ msgstr "Не можа да се възстанови този пач."
msgid "Could not set up two-factor authentication."
msgstr "Двуфакторното удостоверяване не можа да бъде настроено."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Не можа да се провери връзката с доставчика."
@@ -5031,6 +5036,10 @@ msgstr "Нещо се обърка при влизането ви. Моля, о
msgid "Something went wrong. Please try again."
msgstr "Нещо се обърка. Моля, опитайте отново."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/bn-BD.po b/apps/web/locales/bn-BD.po
index b0b14fa69..a5d100c41 100644
--- a/apps/web/locales/bn-BD.po
+++ b/apps/web/locales/bn-BD.po
@@ -1338,6 +1338,11 @@ msgstr "এই প্যাচটি পুনরুদ্ধার করা
msgid "Could not set up two-factor authentication."
msgstr "টু‑ফ্যাক্টর প্রমাণীকরণ সেট আপ করা যায়নি।"
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "প্রোভাইডার সংযোগ যাচাই করা যায়নি।"
@@ -5031,6 +5036,10 @@ msgstr "আপনাকে সাইন ইন করানোর সময়
msgid "Something went wrong. Please try again."
msgstr "কিছু একটা ভুল হয়েছে। অনুগ্রহ করে আবার চেষ্টা করুন।"
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/ca-ES.po b/apps/web/locales/ca-ES.po
index bcbcf3209..27d9ba490 100644
--- a/apps/web/locales/ca-ES.po
+++ b/apps/web/locales/ca-ES.po
@@ -1338,6 +1338,11 @@ msgstr "No s'ha pogut restaurar aquest pegat."
msgid "Could not set up two-factor authentication."
msgstr "No s'ha pogut configurar l'autenticació en dos passos."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "No s'ha pogut verificar la connexió del proveïdor."
@@ -5031,6 +5036,10 @@ msgstr "Alguna cosa ha anat malament en iniciar la sessió. Torna-ho a provar."
msgid "Something went wrong. Please try again."
msgstr "Alguna cosa ha anat malament. Torna-ho a provar."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/cs-CZ.po b/apps/web/locales/cs-CZ.po
index 9760a5026..6cbea30dc 100644
--- a/apps/web/locales/cs-CZ.po
+++ b/apps/web/locales/cs-CZ.po
@@ -1338,6 +1338,11 @@ msgstr "Tuto záplatu se nepodařilo obnovit."
msgid "Could not set up two-factor authentication."
msgstr "Nepodařilo se nastavit dvoufaktorové ověření."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Nepodařilo se ověřit připojení poskytovatele."
@@ -5031,6 +5036,10 @@ msgstr "Při přihlašování se něco pokazilo. Zkuste to prosím znovu."
msgid "Something went wrong. Please try again."
msgstr "Něco se pokazilo. Zkuste to prosím znovu."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/da-DK.po b/apps/web/locales/da-DK.po
index 903860402..6c4b06096 100644
--- a/apps/web/locales/da-DK.po
+++ b/apps/web/locales/da-DK.po
@@ -1338,6 +1338,11 @@ msgstr "Kunne ikke gendanne denne programrettelse."
msgid "Could not set up two-factor authentication."
msgstr "Kunne ikke opsætte to-faktor-godkendelse."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Kunne ikke bekræfte udbyderforbindelsen."
@@ -5031,6 +5036,10 @@ msgstr "Noget gik galt, da du skulle logges ind. Prøv venligst igen."
msgid "Something went wrong. Please try again."
msgstr "Noget gik galt. Prøv igen."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/de-DE.po b/apps/web/locales/de-DE.po
index fdff6870e..f1f94c720 100644
--- a/apps/web/locales/de-DE.po
+++ b/apps/web/locales/de-DE.po
@@ -1338,6 +1338,11 @@ msgstr "Dieser Patch konnte nicht wiederhergestellt werden."
msgid "Could not set up two-factor authentication."
msgstr "Die Zwei-Faktor-Authentifizierung konnte nicht eingerichtet werden."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Die Providerverbindung konnte nicht verifiziert werden."
@@ -5031,6 +5036,10 @@ msgstr "Bei der Anmeldung ist etwas schiefgelaufen. Bitte versuchen Sie es erneu
msgid "Something went wrong. Please try again."
msgstr "Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/el-GR.po b/apps/web/locales/el-GR.po
index defbbb616..9f33a8582 100644
--- a/apps/web/locales/el-GR.po
+++ b/apps/web/locales/el-GR.po
@@ -1338,6 +1338,11 @@ msgstr "Δεν ήταν δυνατή η επαναφορά αυτής της ε
msgid "Could not set up two-factor authentication."
msgstr "Δεν ήταν δυνατή η ρύθμιση του ελέγχου ταυτότητας δύο σταδίων."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Δεν ήταν δυνατή η επαλήθευση της σύνδεσης του παρόχου."
@@ -5031,6 +5036,10 @@ msgstr "Κάτι πήγε στραβά κατά τη σύνδεσή σας. Δο
msgid "Something went wrong. Please try again."
msgstr "Κάτι πήγε στραβά. Παρακαλώ δοκιμάστε ξανά."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/en-GB.po b/apps/web/locales/en-GB.po
index d6f7c8c75..b74685c74 100644
--- a/apps/web/locales/en-GB.po
+++ b/apps/web/locales/en-GB.po
@@ -1338,6 +1338,11 @@ msgstr "Could not restore this patch."
msgid "Could not set up two-factor authentication."
msgstr "Could not set up two-factor authentication."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Could not verify provider connection."
@@ -5031,6 +5036,10 @@ msgstr "Something went wrong while signing you in. Please try again."
msgid "Something went wrong. Please try again."
msgstr "Something went wrong. Please try again."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/en-US.po b/apps/web/locales/en-US.po
index 6be1a104c..b5c0e1e44 100644
--- a/apps/web/locales/en-US.po
+++ b/apps/web/locales/en-US.po
@@ -1409,6 +1409,11 @@ msgstr "Could not save the cover letter. Please try again."
msgid "Could not set up two-factor authentication."
msgstr "Could not set up two-factor authentication."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr "Could not sort these items; they stayed at the end: {0}."
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Could not verify provider connection."
@@ -5297,6 +5302,10 @@ msgstr "Something went wrong while signing you in. Please try again."
msgid "Something went wrong. Please try again."
msgstr "Something went wrong. Please try again."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr "Sort by date"
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/es-ES.po b/apps/web/locales/es-ES.po
index 49b4d5451..f6ff185de 100644
--- a/apps/web/locales/es-ES.po
+++ b/apps/web/locales/es-ES.po
@@ -1338,6 +1338,11 @@ msgstr "No se pudo restaurar este parche."
msgid "Could not set up two-factor authentication."
msgstr "No se pudo configurar la autenticación de doble factor."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "No se pudo verificar la conexión con el proveedor."
@@ -5031,6 +5036,10 @@ msgstr "Algo salió mal al iniciar tu sesión. Inténtalo de nuevo."
msgid "Something went wrong. Please try again."
msgstr "Algo salió mal. Vuelve a intentarlo."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/fa-IR.po b/apps/web/locales/fa-IR.po
index e22f0c7c9..25548a710 100644
--- a/apps/web/locales/fa-IR.po
+++ b/apps/web/locales/fa-IR.po
@@ -1338,6 +1338,11 @@ msgstr "نتوانستم این پچ را بازیابی کنم."
msgid "Could not set up two-factor authentication."
msgstr "راهاندازی احراز هویت دو مرحلهای ممکن نشد."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "اتصال ارائه دهنده تأیید نشد."
@@ -5031,6 +5036,10 @@ msgstr "هنگام ورود شما مشکلی پیش آمد. لطفاً دوبا
msgid "Something went wrong. Please try again."
msgstr "مشکلی پیش آمد. لطفاً دوباره تلاش کنید."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/fi-FI.po b/apps/web/locales/fi-FI.po
index d18abc033..13343c1ad 100644
--- a/apps/web/locales/fi-FI.po
+++ b/apps/web/locales/fi-FI.po
@@ -1338,6 +1338,11 @@ msgstr "Tätä korjaustiedostoa ei voitu palauttaa."
msgid "Could not set up two-factor authentication."
msgstr "Kaksivaiheista todennusta ei voitu ottaa käyttöön."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Palveluntarjoajan yhteyden vahvistaminen epäonnistui."
@@ -5031,6 +5036,10 @@ msgstr "Kirjautumisessa tapahtui virhe. Yritä uudelleen."
msgid "Something went wrong. Please try again."
msgstr "Jokin meni pieleen. Yritä uudelleen."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/fr-FR.po b/apps/web/locales/fr-FR.po
index 33f27d08f..fc220a2c3 100644
--- a/apps/web/locales/fr-FR.po
+++ b/apps/web/locales/fr-FR.po
@@ -1338,6 +1338,11 @@ msgstr "Impossible de restaurer ce correctif."
msgid "Could not set up two-factor authentication."
msgstr "Impossible de configurer l'authentification à deux facteurs."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Impossible de vérifier la connexion au fournisseur."
@@ -5031,6 +5036,10 @@ msgstr "Une erreur s'est produite lors de votre connexion. Veuillez réessayer."
msgid "Something went wrong. Please try again."
msgstr "Une erreur s'est produite. Veuillez réessayer."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/he-IL.po b/apps/web/locales/he-IL.po
index f68f526f7..1400f217b 100644
--- a/apps/web/locales/he-IL.po
+++ b/apps/web/locales/he-IL.po
@@ -1338,6 +1338,11 @@ msgstr "לא ניתן היה לשחזר את התיקון הזה."
msgid "Could not set up two-factor authentication."
msgstr "לא ניתן היה להגדיר אימות דו־שלבי."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "לא ניתן היה לאמת את חיבור הספק."
@@ -5031,6 +5036,10 @@ msgstr "משהו השתבש בזמן ההתחברות שלך. נסה שוב."
msgid "Something went wrong. Please try again."
msgstr "משהו השתבש. נא לנסות שוב."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/hi-IN.po b/apps/web/locales/hi-IN.po
index 3157bab5a..2bff7bfc5 100644
--- a/apps/web/locales/hi-IN.po
+++ b/apps/web/locales/hi-IN.po
@@ -1338,6 +1338,11 @@ msgstr "इस पैच को पुनर्स्थापित नही
msgid "Could not set up two-factor authentication."
msgstr "दो कारक प्रमाणीकरण सेट नहीं किया जा सका।"
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "प्रदाता कनेक्शन सत्यापित नहीं हो सका।"
@@ -5031,6 +5036,10 @@ msgstr "आपको साइन इन करते समय कुछ गड
msgid "Something went wrong. Please try again."
msgstr "कुछ गड़बड़ हो गई। कृपया फिर से प्रयास करें।"
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/hu-HU.po b/apps/web/locales/hu-HU.po
index ccdda5b95..03c48be46 100644
--- a/apps/web/locales/hu-HU.po
+++ b/apps/web/locales/hu-HU.po
@@ -1338,6 +1338,11 @@ msgstr "Nem sikerült visszaállítani ezt a javítást."
msgid "Could not set up two-factor authentication."
msgstr "Nem sikerült beállítani a kétlépcsős hitelesítést."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Nem sikerült ellenőrizni a szolgáltató kapcsolatát."
@@ -5031,6 +5036,10 @@ msgstr "Hiba történt a bejelentkezés során. Kérjük, próbálja újra."
msgid "Something went wrong. Please try again."
msgstr "Valami hiba történt. Kérjük, próbáld újra."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/id-ID.po b/apps/web/locales/id-ID.po
index 0507bff73..8c1227c4e 100644
--- a/apps/web/locales/id-ID.po
+++ b/apps/web/locales/id-ID.po
@@ -1338,6 +1338,11 @@ msgstr "Patch ini tidak dapat dipulihkan."
msgid "Could not set up two-factor authentication."
msgstr "Tidak dapat menyiapkan autentikasi dua faktor."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Koneksi penyedia tidak dapat diverifikasi."
@@ -5031,6 +5036,10 @@ msgstr "Terjadi kesalahan saat memasukkan Anda. Silakan coba lagi."
msgid "Something went wrong. Please try again."
msgstr "Terjadi sesuatu yang salah. Silakan coba lagi."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/it-IT.po b/apps/web/locales/it-IT.po
index 81a8df200..81a78e836 100644
--- a/apps/web/locales/it-IT.po
+++ b/apps/web/locales/it-IT.po
@@ -1338,6 +1338,11 @@ msgstr "Impossibile ripristinare questa patch."
msgid "Could not set up two-factor authentication."
msgstr "Impossibile configurare l'autenticazione a due fattori."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Impossibile verificare la connessione al provider."
@@ -5031,6 +5036,10 @@ msgstr "Si è verificato un problema durante l'accesso. Riprova."
msgid "Something went wrong. Please try again."
msgstr "Qualcosa è andato storto. Riprova."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/ja-JP.po b/apps/web/locales/ja-JP.po
index cc63642c5..45d433ee3 100644
--- a/apps/web/locales/ja-JP.po
+++ b/apps/web/locales/ja-JP.po
@@ -1338,6 +1338,11 @@ msgstr "このパッチを復元できませんでした。"
msgid "Could not set up two-factor authentication."
msgstr "二要素認証を設定できませんでした。"
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "プロバイダとの接続を確認できませんでした。"
@@ -5031,6 +5036,10 @@ msgstr "サインイン中に問題が発生しました。もう一度お試し
msgid "Something went wrong. Please try again."
msgstr "問題が発生しました。もう一度お試しください。"
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/km-KH.po b/apps/web/locales/km-KH.po
index 697e06dce..a1ea79efa 100644
--- a/apps/web/locales/km-KH.po
+++ b/apps/web/locales/km-KH.po
@@ -1338,6 +1338,11 @@ msgstr "មិនអាចស្ដារបំណះនេះឡើងវិញ
msgid "Could not set up two-factor authentication."
msgstr "មិនអាចដំឡើងការផ្ទៀងផ្ទាត់ពីរជាន់បានទេ។"
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "មិនអាចផ្ទៀងផ្ទាត់ការតភ្ជាប់របស់អ្នកផ្តល់សេវាបានទេ។"
@@ -5031,6 +5036,10 @@ msgstr "មានបញ្ហាកើតឡើងពេលចូល។ សូ
msgid "Something went wrong. Please try again."
msgstr "មានអ្វីមួយខុសប្រក្រតី។ សូមព្យាយាមម្ដងទៀត។"
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/kn-IN.po b/apps/web/locales/kn-IN.po
index 0243d2e42..a5d3a77fc 100644
--- a/apps/web/locales/kn-IN.po
+++ b/apps/web/locales/kn-IN.po
@@ -1338,6 +1338,11 @@ msgstr "ಈ ಪ್ಯಾಚ್ ಅನ್ನು ಪುನಃಸ್ಥಾಪಿಸ
msgid "Could not set up two-factor authentication."
msgstr "ಎರಡು ಅಂಶಗಳ ದೃಢೀಕರಣವನ್ನು ಸಿದ್ಧಪಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "ಪೂರೈಕೆದಾರರ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."
@@ -5031,6 +5036,10 @@ msgstr "ನಿಮ್ಮನ್ನು ಸೈನ್ ಇನ್ ಮಾಡುವಾಗ
msgid "Something went wrong. Please try again."
msgstr "ಏನೋ ತಪ್ಪಾಗಿದೆ. ದಯವಿಟ್ಟು ಮರುಪ್ರಯತ್ನಿಸಿ."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/ko-KR.po b/apps/web/locales/ko-KR.po
index 7bbf4bd57..a1ed2ec80 100644
--- a/apps/web/locales/ko-KR.po
+++ b/apps/web/locales/ko-KR.po
@@ -1338,6 +1338,11 @@ msgstr "이 패치를 복원할 수 없습니다."
msgid "Could not set up two-factor authentication."
msgstr "2단계 인증을 설정하지 못했습니다."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "공급자 연결을 확인할 수 없습니다."
@@ -5031,6 +5036,10 @@ msgstr "로그인하는 중에 문제가 발생했습니다. 다시 시도해
msgid "Something went wrong. Please try again."
msgstr "문제가 발생했습니다. 다시 시도해 주세요."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/lt-LT.po b/apps/web/locales/lt-LT.po
index 339e862cc..6009d5045 100644
--- a/apps/web/locales/lt-LT.po
+++ b/apps/web/locales/lt-LT.po
@@ -1338,6 +1338,11 @@ msgstr "Nepavyko atkurti šio pataisymo."
msgid "Could not set up two-factor authentication."
msgstr "Nepavyko nustatyti dviejų veiksnių autentifikavimo."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Nepavyko patvirtinti tiekėjo ryšio."
@@ -5031,6 +5036,10 @@ msgstr "Jungiant įvyko klaida. Bandykite dar kartą."
msgid "Something went wrong. Please try again."
msgstr "Kažkas nepavyko. Bandykite dar kartą."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/lv-LV.po b/apps/web/locales/lv-LV.po
index 1d28952e5..9d821c9f6 100644
--- a/apps/web/locales/lv-LV.po
+++ b/apps/web/locales/lv-LV.po
@@ -1338,6 +1338,11 @@ msgstr "Nevarēja atjaunot šo ielāpu."
msgid "Could not set up two-factor authentication."
msgstr "Neizdevās iestatīt divu faktoru autentifikāciju."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Nevarēja pārbaudīt pakalpojumu sniedzēja savienojumu."
@@ -5031,6 +5036,10 @@ msgstr "Piesakoties radās kļūda. Lūdzu, mēģiniet vēlreiz."
msgid "Something went wrong. Please try again."
msgstr "Kaut kas nogāja greizi. Lūdzu, mēģiniet vēlreiz."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/ml-IN.po b/apps/web/locales/ml-IN.po
index 0b9fe43af..63d62fc58 100644
--- a/apps/web/locales/ml-IN.po
+++ b/apps/web/locales/ml-IN.po
@@ -1338,6 +1338,11 @@ msgstr "ഈ പാച്ച് പുനഃസ്ഥാപിക്കാൻ ക
msgid "Could not set up two-factor authentication."
msgstr "ടു-ഫാക്ടർ ഓത്ന്റിക്കേഷൻ സജ്ജമാക്കാനായില്ല."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "ദാതാവിന്റെ കണക്ഷൻ പരിശോധിക്കാൻ കഴിഞ്ഞില്ല."
@@ -5031,6 +5036,10 @@ msgstr "നിങ്ങളെ സൈൻ ഇൻ ചെയ്യുമ്പോൾ
msgid "Something went wrong. Please try again."
msgstr "എന്തോ പിശക് സംഭവിച്ചു. ദയവായി വീണ്ടും ശ്രമിക്കുക."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/mr-IN.po b/apps/web/locales/mr-IN.po
index 669c3a26e..f667da796 100644
--- a/apps/web/locales/mr-IN.po
+++ b/apps/web/locales/mr-IN.po
@@ -1338,6 +1338,11 @@ msgstr "हा पॅच पुनर्स्थापित करता आ
msgid "Could not set up two-factor authentication."
msgstr "दुहेरी घटक ओथेंटिकेशन सेट करता आले नाही."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "प्रोव्हायडर कनेक्शनची पडताळणी होऊ शकली नाही."
@@ -5031,6 +5036,10 @@ msgstr "तुम्हाला साइन इन करताना का
msgid "Something went wrong. Please try again."
msgstr "काही तरी चूक झाली. कृपया पुन्हा प्रयत्न करा."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/ms-MY.po b/apps/web/locales/ms-MY.po
index b9e54472a..00fc796da 100644
--- a/apps/web/locales/ms-MY.po
+++ b/apps/web/locales/ms-MY.po
@@ -1338,6 +1338,11 @@ msgstr "Tidak dapat memulihkan tampalan ini."
msgid "Could not set up two-factor authentication."
msgstr "Tidak dapat menyediakan pengesahan dua faktor."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Tidak dapat mengesahkan sambungan pembekal."
@@ -5031,6 +5036,10 @@ msgstr "Sesuatu telah berlaku semasa anda log masuk. Sila cuba lagi."
msgid "Something went wrong. Please try again."
msgstr "Ada sesuatu yang tidak kena. Sila cuba lagi."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/ne-NP.po b/apps/web/locales/ne-NP.po
index 7d7bfbfc6..174049f7f 100644
--- a/apps/web/locales/ne-NP.po
+++ b/apps/web/locales/ne-NP.po
@@ -1338,6 +1338,11 @@ msgstr "यो प्याच पुनर्स्थापित गर्न
msgid "Could not set up two-factor authentication."
msgstr "दुई-कारक प्रमाणीकरण सेटअप गर्न सकिएन।"
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "प्रदायक जडान प्रमाणित गर्न सकिएन।"
@@ -5031,6 +5036,10 @@ msgstr "तपाईंलाई साइन इन गर्दा केह
msgid "Something went wrong. Please try again."
msgstr "केही समस्या भयो। कृपया पुनः प्रयास गर्नुहोस्।"
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/nl-NL.po b/apps/web/locales/nl-NL.po
index c3541a605..a1b3931bd 100644
--- a/apps/web/locales/nl-NL.po
+++ b/apps/web/locales/nl-NL.po
@@ -1338,6 +1338,11 @@ msgstr "Deze patch kon niet worden hersteld."
msgid "Could not set up two-factor authentication."
msgstr "Tweestapsverificatie kon niet worden ingesteld."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "De verbinding met de provider kon niet worden geverifieerd."
@@ -5031,6 +5036,10 @@ msgstr "Er is iets misgegaan tijdens het inloggen. Probeer het opnieuw."
msgid "Something went wrong. Please try again."
msgstr "Er is iets misgegaan. Probeer het alstublieft opnieuw."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/no-NO.po b/apps/web/locales/no-NO.po
index b91718da1..0c5acaa5a 100644
--- a/apps/web/locales/no-NO.po
+++ b/apps/web/locales/no-NO.po
@@ -1338,6 +1338,11 @@ msgstr "Kunne ikke gjenopprette denne oppdateringen."
msgid "Could not set up two-factor authentication."
msgstr "Kunne ikke sette opp tofaktorautentisering."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Kunne ikke bekrefte leverandørtilkoblingen."
@@ -5031,6 +5036,10 @@ msgstr "Noe gikk galt under innloggingen. Prøv igjen."
msgid "Something went wrong. Please try again."
msgstr "Noe gikk galt. Vennligst prøv igjen."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/or-IN.po b/apps/web/locales/or-IN.po
index fb54d7dab..ee97bf452 100644
--- a/apps/web/locales/or-IN.po
+++ b/apps/web/locales/or-IN.po
@@ -1338,6 +1338,11 @@ msgstr "ଏହି ପ୍ୟାଚ୍ ପୁନଃସ୍ଥାପନ କରିପ
msgid "Could not set up two-factor authentication."
msgstr "ଦ୍ୱି-ଘଟକ ପରିଚୟ ପ୍ରମାଣିକରଣ ସେଟ୍ ଅପ୍ କରାଯାଇପାରିଲା ନାହିଁ।"
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "ପ୍ରଦାତା ସଂଯୋଗ ଯାଞ୍ଚ କରିପାରିଲା ନାହିଁ।"
@@ -5031,6 +5036,10 @@ msgstr "ଆପଣଙ୍କୁ ସାଇନ୍ ଇନ୍ କରିବା ସମ
msgid "Something went wrong. Please try again."
msgstr "କିଛି ଭୁଲ୍ ହୋଇଛି। ଦୟାକରି ପୁନଃ ଚେଷ୍ଟା କରନ୍ତୁ।"
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/pl-PL.po b/apps/web/locales/pl-PL.po
index 56ae5c976..3c0a3e4fe 100644
--- a/apps/web/locales/pl-PL.po
+++ b/apps/web/locales/pl-PL.po
@@ -1338,6 +1338,11 @@ msgstr "Nie udało się przywrócić tej poprawki."
msgid "Could not set up two-factor authentication."
msgstr "Nie udało się skonfigurować uwierzytelniania dwuskładnikowego."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Nie można zweryfikować połączenia z dostawcą."
@@ -5031,6 +5036,10 @@ msgstr "Coś poszło nie tak podczas logowania. Spróbuj ponownie."
msgid "Something went wrong. Please try again."
msgstr "Coś poszło nie tak. Spróbuj ponownie."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/pt-BR.po b/apps/web/locales/pt-BR.po
index a8bf0fd05..47e119bd1 100644
--- a/apps/web/locales/pt-BR.po
+++ b/apps/web/locales/pt-BR.po
@@ -1338,6 +1338,11 @@ msgstr "Não foi possível restaurar este patch."
msgid "Could not set up two-factor authentication."
msgstr "Não foi possível configurar a autenticação de dois fatores."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Não foi possível verificar a conexão com o provedor."
@@ -5031,6 +5036,10 @@ msgstr "Algo deu errado ao fazer seu login. Tente novamente."
msgid "Something went wrong. Please try again."
msgstr "Algo deu errado. Tente novamente."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/pt-PT.po b/apps/web/locales/pt-PT.po
index 054474ae9..05924b454 100644
--- a/apps/web/locales/pt-PT.po
+++ b/apps/web/locales/pt-PT.po
@@ -1338,6 +1338,11 @@ msgstr "Não foi possível restaurar este patch."
msgid "Could not set up two-factor authentication."
msgstr "Não foi possível configurar a autenticação de dois fatores."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Não foi possível verificar a ligação com o fornecedor."
@@ -5031,6 +5036,10 @@ msgstr "Algo correu mal ao iniciar a sua sessão. Tente novamente."
msgid "Something went wrong. Please try again."
msgstr "Algo correu mal. Tente novamente."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/ro-RO.po b/apps/web/locales/ro-RO.po
index 5adb25379..1f131a48b 100644
--- a/apps/web/locales/ro-RO.po
+++ b/apps/web/locales/ro-RO.po
@@ -1338,6 +1338,11 @@ msgstr "Nu s-a putut restaura acest patch."
msgid "Could not set up two-factor authentication."
msgstr "Nu s-a putut configura autentificarea cu doi factori."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Nu s-a putut verifica conexiunea furnizorului."
@@ -5031,6 +5036,10 @@ msgstr "A apărut o problemă la conectare. Încearcă din nou."
msgid "Something went wrong. Please try again."
msgstr "Ceva nu a funcționat. Vă rugăm să încercați din nou."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/ru-RU.po b/apps/web/locales/ru-RU.po
index c049eb177..045e0c708 100644
--- a/apps/web/locales/ru-RU.po
+++ b/apps/web/locales/ru-RU.po
@@ -1338,6 +1338,11 @@ msgstr "Восстановить этот патч не удалось."
msgid "Could not set up two-factor authentication."
msgstr "Не удалось настроить двухфакторную аутентификацию."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Не удалось проверить подключение к провайдеру."
@@ -5031,6 +5036,10 @@ msgstr "При входе что-то пошло не так. Попробуйт
msgid "Something went wrong. Please try again."
msgstr "Что-то пошло не так. Пожалуйста, попробуйте еще раз."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/sk-SK.po b/apps/web/locales/sk-SK.po
index ab715dbb3..f11908436 100644
--- a/apps/web/locales/sk-SK.po
+++ b/apps/web/locales/sk-SK.po
@@ -1338,6 +1338,11 @@ msgstr "Túto záplatu sa nepodarilo obnoviť."
msgid "Could not set up two-factor authentication."
msgstr "Nepodarilo sa nastaviť dvojfaktorové overenie."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Nepodarilo sa overiť pripojenie poskytovateľa."
@@ -5031,6 +5036,10 @@ msgstr "Pri prihlasovaní sa niečo pokazilo. Skúste to prosím znova."
msgid "Something went wrong. Please try again."
msgstr "Niečo sa pokazilo. Skús to, prosím, znova."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/sl-SI.po b/apps/web/locales/sl-SI.po
index a8906b37a..536076e21 100644
--- a/apps/web/locales/sl-SI.po
+++ b/apps/web/locales/sl-SI.po
@@ -1338,6 +1338,11 @@ msgstr "Tega popravka ni bilo mogoče obnoviti."
msgid "Could not set up two-factor authentication."
msgstr "Dvofaktorske avtentikacije ni bilo mogoče nastaviti."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Povezave s ponudnikom ni bilo mogoče preveriti."
@@ -5031,6 +5036,10 @@ msgstr "Pri prijavi je prišlo do napake. Poskusite znova."
msgid "Something went wrong. Please try again."
msgstr "Nekaj je šlo narobe. Prosimo, poskusite znova."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/sq-AL.po b/apps/web/locales/sq-AL.po
index 3601d5458..ea4de9209 100644
--- a/apps/web/locales/sq-AL.po
+++ b/apps/web/locales/sq-AL.po
@@ -1338,6 +1338,11 @@ msgstr "Nuk mundi ta rikthente këtë patch."
msgid "Could not set up two-factor authentication."
msgstr "Vërtetimi me dy faktorë nuk u konfigurua dot."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Nuk mund të verifikohej lidhja e ofruesit."
@@ -5031,6 +5036,10 @@ msgstr "Diçka shkoi keq gjatë hyrjes suaj. Ju lutemi provoni sërish."
msgid "Something went wrong. Please try again."
msgstr "Diçka shkoi keq. Ju lutemi provoni përsëri."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/sr-SP.po b/apps/web/locales/sr-SP.po
index 6998336b7..3dc82e024 100644
--- a/apps/web/locales/sr-SP.po
+++ b/apps/web/locales/sr-SP.po
@@ -1338,6 +1338,11 @@ msgstr "Није могуће вратити ову закрпу."
msgid "Could not set up two-factor authentication."
msgstr "Није било могуће подесити двофакторску аутентификацију."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Није могуће проверити везу са провајдером."
@@ -5031,6 +5036,10 @@ msgstr "Дошло је до грешке приликом пријављива
msgid "Something went wrong. Please try again."
msgstr "Нешто је пошло наопако. Покушајте поново."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/sv-SE.po b/apps/web/locales/sv-SE.po
index c91e82e48..e63382a1b 100644
--- a/apps/web/locales/sv-SE.po
+++ b/apps/web/locales/sv-SE.po
@@ -1338,6 +1338,11 @@ msgstr "Kunde inte återställa den här patchen."
msgid "Could not set up two-factor authentication."
msgstr "Det gick inte att ställa in tvåfaktorsautentisering."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Kunde inte verifiera leverantörsanslutningen."
@@ -5031,6 +5036,10 @@ msgstr "Något gick fel när du loggades in. Försök igen."
msgid "Something went wrong. Please try again."
msgstr "Något gick fel. Försök igen."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/ta-IN.po b/apps/web/locales/ta-IN.po
index 2555c6ca4..dbcd2ad3d 100644
--- a/apps/web/locales/ta-IN.po
+++ b/apps/web/locales/ta-IN.po
@@ -1338,6 +1338,11 @@ msgstr "இந்தத் திருத்தத்தை மீட்டெ
msgid "Could not set up two-factor authentication."
msgstr "இரண்டு நிலை அங்கீகாரத்தை அமைக்க முடியவில்லை."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "வழங்குநர் இணைப்பைச் சரிபார்க்க முடியவில்லை."
@@ -5031,6 +5036,10 @@ msgstr "உங்களை உள்நுழைக்கும்போது
msgid "Something went wrong. Please try again."
msgstr "ஏதோ தவறு நடந்துள்ளது. தயவுசெய்து மீண்டும் முயற்சிக்கவும்."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/te-IN.po b/apps/web/locales/te-IN.po
index 13e3c1174..331f66947 100644
--- a/apps/web/locales/te-IN.po
+++ b/apps/web/locales/te-IN.po
@@ -1338,6 +1338,11 @@ msgstr "ఈ ప్యాచ్ను పునరుద్ధరించల
msgid "Could not set up two-factor authentication."
msgstr "రెండు దశల ధృవీకరణను సెటప్ చేయలేకపోయాం."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "ప్రొవైడర్ కనెక్షన్ను ధృవీకరించలేకపోయాము."
@@ -5031,6 +5036,10 @@ msgstr "మిమ్మల్ని సైన్ ఇన్ చేస్తున
msgid "Something went wrong. Please try again."
msgstr "ఏదో తప్పు జరిగింది. దయచేసి మళ్లీ ప్రయత్నించండి."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/th-TH.po b/apps/web/locales/th-TH.po
index d29922384..66ad8413b 100644
--- a/apps/web/locales/th-TH.po
+++ b/apps/web/locales/th-TH.po
@@ -1338,6 +1338,11 @@ msgstr "ไม่สามารถกู้คืนแพทช์นี้ไ
msgid "Could not set up two-factor authentication."
msgstr "ไม่สามารถตั้งค่าการยืนยันตัวตนแบบสองขั้นตอนได้"
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "ไม่สามารถตรวจสอบการเชื่อมต่อของผู้ให้บริการได้"
@@ -5031,6 +5036,10 @@ msgstr "เกิดข้อผิดพลาดขณะลงชื่อเ
msgid "Something went wrong. Please try again."
msgstr "เกิดข้อผิดพลาดบางอย่าง กรุณาลองใหม่อีกครั้ง"
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/tr-TR.po b/apps/web/locales/tr-TR.po
index 2d126adaf..d696ca3e3 100644
--- a/apps/web/locales/tr-TR.po
+++ b/apps/web/locales/tr-TR.po
@@ -1338,6 +1338,11 @@ msgstr "Bu yama geri yüklenemedi."
msgid "Could not set up two-factor authentication."
msgstr "İki faktörlü kimlik doğrulama kurulamadı."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Servis sağlayıcı bağlantısı doğrulanamadı."
@@ -5031,6 +5036,10 @@ msgstr "Oturumunuz açılırken bir sorun oluştu. Lütfen tekrar deneyin."
msgid "Something went wrong. Please try again."
msgstr "Bir hata oluştu. Lütfen tekrar deneyin."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/uk-UA.po b/apps/web/locales/uk-UA.po
index 0cd7ed671..781aac1cb 100644
--- a/apps/web/locales/uk-UA.po
+++ b/apps/web/locales/uk-UA.po
@@ -1338,6 +1338,11 @@ msgstr "Не вдалося відновити цей патч."
msgid "Could not set up two-factor authentication."
msgstr "Не вдалося налаштувати двофакторну автентифікацію."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Не вдалося перевірити підключення постачальника."
@@ -5031,6 +5036,10 @@ msgstr "Під час входу сталася помилка. Спробуйт
msgid "Something went wrong. Please try again."
msgstr "Щось пішло не так. Будь ласка, спробуйте ще раз."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/uz-UZ.po b/apps/web/locales/uz-UZ.po
index 5b469dbdf..066de7d3f 100644
--- a/apps/web/locales/uz-UZ.po
+++ b/apps/web/locales/uz-UZ.po
@@ -1338,6 +1338,11 @@ msgstr "Ushbu yamoqni tiklab bo'lmadi."
msgid "Could not set up two-factor authentication."
msgstr "Ikki bosqichli autentifikatsiyani sozlab bo'lmadi."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Provayder ulanishini tekshirib bo'lmadi."
@@ -5031,6 +5036,10 @@ msgstr "Kirish paytida xatolik yuz berdi. Iltimos, qayta urinib ko‘ring."
msgid "Something went wrong. Please try again."
msgstr "Nimadir xato ketdi. Iltimos, qayta urinib koʻring."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/vi-VN.po b/apps/web/locales/vi-VN.po
index 69c012d15..c4c9b07b9 100644
--- a/apps/web/locales/vi-VN.po
+++ b/apps/web/locales/vi-VN.po
@@ -1338,6 +1338,11 @@ msgstr "Không thể khôi phục bản vá này."
msgid "Could not set up two-factor authentication."
msgstr "Không thể thiết lập xác thực hai yếu tố."
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "Không thể xác minh kết nối với nhà cung cấp."
@@ -5031,6 +5036,10 @@ msgstr "Đã xảy ra lỗi khi đăng nhập cho bạn. Vui lòng thử lại."
msgid "Something went wrong. Please try again."
msgstr "Đã xảy ra lỗi. Vui lòng thử lại."
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/zh-CN.po b/apps/web/locales/zh-CN.po
index a79e1e336..ca6a1eede 100644
--- a/apps/web/locales/zh-CN.po
+++ b/apps/web/locales/zh-CN.po
@@ -1338,6 +1338,11 @@ msgstr "无法恢复此补丁。"
msgid "Could not set up two-factor authentication."
msgstr "无法设置双重身份验证。"
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "无法验证提供商连接。"
@@ -5031,6 +5036,10 @@ msgstr "登录时出错。请重试。"
msgid "Something went wrong. Please try again."
msgstr "出现了一些问题。请重试。"
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/zh-TW.po b/apps/web/locales/zh-TW.po
index 2e92ddab5..217d8a75c 100644
--- a/apps/web/locales/zh-TW.po
+++ b/apps/web/locales/zh-TW.po
@@ -1338,6 +1338,11 @@ msgstr "無法恢復此補丁。"
msgid "Could not set up two-factor authentication."
msgstr "無法設定雙因子驗證。"
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr "無法驗證提供者連線。"
@@ -5031,6 +5036,10 @@ msgstr "登入時發生錯誤。請再試一次。"
msgid "Something went wrong. Please try again."
msgstr "發生錯誤。請再試一次。"
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/locales/zu-ZA.po b/apps/web/locales/zu-ZA.po
index 4d72b13d7..b0a9a2cf6 100644
--- a/apps/web/locales/zu-ZA.po
+++ b/apps/web/locales/zu-ZA.po
@@ -1324,6 +1324,11 @@ msgstr ""
msgid "Could not set up two-factor authentication."
msgstr ""
+#. placeholder {0}: unresolvedLabels.join(", ")
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Could not sort these items; they stayed at the end: {0}."
+msgstr ""
+
#: src/features/settings/integrations/components/ai-section.tsx
msgid "Could not verify provider connection."
msgstr ""
@@ -4998,6 +5003,10 @@ msgstr ""
msgid "Something went wrong. Please try again."
msgstr ""
+#: src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+msgid "Sort by date"
+msgstr ""
+
#: src/routes/dashboard/applications/index.tsx
#: src/routes/dashboard/resumes/index.tsx
msgid "Sort by"
diff --git a/apps/web/src/features/resume/builder/draft.test.ts b/apps/web/src/features/resume/builder/draft.test.ts
index 9db0f65e3..7bcef58aa 100644
--- a/apps/web/src/features/resume/builder/draft.test.ts
+++ b/apps/web/src/features/resume/builder/draft.test.ts
@@ -5,6 +5,7 @@ import type { Resume } from "./draft";
import { act, renderHook } from "@testing-library/react";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { i18n } from "@lingui/core";
+import { sortSectionItemsByPeriod } from "@reactive-resume/resume/section-sort";
import { defaultResumeData } from "@reactive-resume/schema/resume/default";
import {
isEditableElementFocused,
@@ -112,6 +113,24 @@ function withBasicsName(resume: Resume, name: string): Resume {
};
}
+function experienceItem(
+ id: string,
+ company: string,
+ period: string,
+): ResumeData["sections"]["experience"]["items"][number] {
+ return {
+ id,
+ company,
+ position: "Engineer",
+ location: "",
+ period,
+ description: "",
+ hidden: false,
+ website: { url: "", label: "", inlineLink: false },
+ roles: [],
+ };
+}
+
async function flushMicrotasks() {
await Promise.resolve();
await Promise.resolve();
@@ -480,6 +499,69 @@ describe("builder resume undo/redo", () => {
expect(store().canRedo).toBe(false);
});
+ it("restores the exact authored Experience order with one undo after a one-shot sort", () => {
+ const store = useResumeStore.getState;
+ const initial = makeResume("sort-undo");
+ initial.data.sections.experience.items = [
+ experienceItem("unknown", "Mystery Co", "Recently"),
+ experienceItem("older", "Older Co", "2018 - 2020"),
+ experienceItem("current", "Current Co", "2023 - Present"),
+ ];
+ const authoredItems = cloneResumeData(initial.data).sections.experience.items;
+ store().initialize(initial);
+
+ store().updateResumeData((draft) => {
+ draft.sections.experience.items = sortSectionItemsByPeriod(
+ draft.sections.experience.items,
+ draft.metadata.page.locale,
+ ).items;
+ });
+
+ expect(store().resume?.data.sections.experience.items.map(({ id }) => id)).toEqual(["current", "older", "unknown"]);
+ expect(store().undoStack).toHaveLength(1);
+
+ store().undo();
+ expect(store().resume?.data.sections.experience.items).toEqual(authoredItems);
+ expect(store().canUndo).toBe(false);
+ });
+
+ it("retains the chosen order through autosave/reload and never resorts later field edits", async () => {
+ const store = useResumeStore.getState;
+ const initial = makeResume("sort-persistence");
+ initial.data.sections.experience.items = [
+ experienceItem("older", "Older Co", "2018 - 2020"),
+ experienceItem("current", "Current Co", "2023 - Present"),
+ ];
+ let savedResume: Resume | undefined;
+ orpcMocks.updateResume.mockImplementation((input: { id: string; data: ResumeData }) => {
+ savedResume = { ...makeResume(input.id), data: cloneResumeData(input.data) };
+ return Promise.resolve(savedResume);
+ });
+ store().initialize(initial);
+
+ store().updateResumeData((draft) => {
+ draft.sections.experience.items = sortSectionItemsByPeriod(
+ draft.sections.experience.items,
+ draft.metadata.page.locale,
+ ).items;
+ });
+ vi.advanceTimersByTime(500);
+ await flushMicrotasks();
+
+ expect(orpcMocks.updateResume).toHaveBeenCalledTimes(1);
+ expect(savedResume?.data.sections.experience.items.map(({ id }) => id)).toEqual(["current", "older"]);
+ if (!savedResume) throw new Error("expected the sorted resume to be saved");
+
+ store().reset();
+ store().initialize(savedResume);
+ store().updateResumeData((draft) => {
+ const currentItem = draft.sections.experience.items.find(({ id }) => id === "current");
+ if (currentItem) currentItem.period = "2010 - 2011";
+ });
+
+ expect(store().resume?.data.sections.experience.items.map(({ id }) => id)).toEqual(["current", "older"]);
+ });
+
it("separates edits outside the coalesce window into distinct undo steps", async () => {
const store = useResumeStore.getState;
store().initialize(makeResume("undo-boundary"));
diff --git a/apps/web/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.test.tsx b/apps/web/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.test.tsx
index e4e948456..a24657a27 100644
--- a/apps/web/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.test.tsx
+++ b/apps/web/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.test.tsx
@@ -1,28 +1,25 @@
// @vitest-environment happy-dom
-import { render, screen } from "@testing-library/react";
+import type { Resume } from "@/features/resume/builder/draft";
+import { fireEvent, render, screen } from "@testing-library/react";
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
import { i18n } from "@lingui/core";
import { I18nProvider } from "@lingui/react";
import { SectionDropdownMenu } from "./section-menu";
-const mockUpdateResumeData = vi.fn();
+const mocks = vi.hoisted(() => ({
+ updateResumeData: vi.fn(),
+ toastAdd: vi.fn(),
+ resume: { value: {} as Resume },
+}));
vi.mock("@/features/resume/builder/draft", () => ({
- useCurrentResume: () => ({
- data: {
- sections: {
- skills: {
- title: "Skills",
- columns: 2,
- hidden: false,
- layout: "default",
- items: [],
- },
- },
- },
- }),
- useUpdateResumeData: () => mockUpdateResumeData,
+ useCurrentResume: () => mocks.resume.value,
+ useUpdateResumeData: () => mocks.updateResumeData,
+}));
+
+vi.mock("@reactive-resume/ui/components/toast", () => ({
+ toast: { add: mocks.toastAdd },
}));
vi.mock("@/hooks/use-confirm", () => ({
@@ -44,9 +41,49 @@ beforeAll(() => {
});
beforeEach(() => {
- mockUpdateResumeData.mockClear();
+ mocks.updateResumeData.mockClear();
+ mocks.toastAdd.mockClear();
+ mocks.resume.value = {
+ isLocked: false,
+ data: {
+ metadata: { page: { locale: "en-US" } },
+ sections: {
+ skills: {
+ title: "Skills",
+ columns: 2,
+ hidden: false,
+ layout: "default",
+ items: [],
+ },
+ experience: {
+ title: "Experience",
+ columns: 1,
+ hidden: false,
+ items: [
+ { id: "unknown", company: "Mystery Co", period: "Recently" },
+ { id: "older", company: "Older Co", period: "2018 - 2020" },
+ { id: "current", company: "Current Co", period: "2023 - Present" },
+ ],
+ },
+ education: {
+ title: "Education",
+ columns: 1,
+ hidden: false,
+ items: [
+ { id: "earlier", school: "Earlier School", period: "2016 - 2020" },
+ { id: "later", school: "Later School", period: "2020 - 2024" },
+ ],
+ },
+ },
+ },
+ } as unknown as Resume;
});
+function openSectionOptions() {
+ fireEvent.click(screen.getByRole("button", { name: "Section options" }));
+ return screen.findByRole("menu");
+}
+
describe("SkillsSectionDropdownMenu", () => {
it("updates resume data correctly when selecting 'inline' for skills section", async () => {
render(
@@ -55,16 +92,16 @@ describe("SkillsSectionDropdownMenu", () => {
,
);
- screen.getByRole("button", { name: "Section options" }).click();
+ await openSectionOptions();
(await screen.findByRole("menuitem", { name: /columns/i })).click();
(await screen.findByRole("menuitemradio", { name: /inline/i })).click();
- expect(mockUpdateResumeData).toHaveBeenCalledTimes(1);
- expect(mockUpdateResumeData).toHaveBeenCalledWith(expect.any(Function));
+ expect(mocks.updateResumeData).toHaveBeenCalledTimes(1);
+ expect(mocks.updateResumeData).toHaveBeenCalledWith(expect.any(Function));
- const mutation = mockUpdateResumeData.mock.calls[0][0];
+ const mutation = mocks.updateResumeData.mock.calls[0][0];
const mockDraft = {
sections: {
skills: {
@@ -90,16 +127,16 @@ describe("SkillsSectionDropdownMenu", () => {
,
);
- screen.getByRole("button", { name: "Section options" }).click();
+ await openSectionOptions();
(await screen.findByRole("menuitem", { name: /columns/i })).click();
(await screen.findByRole("menuitemradio", { name: /3 columns/i })).click();
- expect(mockUpdateResumeData).toHaveBeenCalledTimes(1);
- expect(mockUpdateResumeData).toHaveBeenCalledWith(expect.any(Function));
+ expect(mocks.updateResumeData).toHaveBeenCalledTimes(1);
+ expect(mocks.updateResumeData).toHaveBeenCalledWith(expect.any(Function));
- const mutation = mockUpdateResumeData.mock.calls[0][0];
+ const mutation = mocks.updateResumeData.mock.calls[0][0];
const mockDraft = {
sections: {
skills: {
@@ -118,3 +155,74 @@ describe("SkillsSectionDropdownMenu", () => {
expect(mockDraft.sections.skills.columns).toBe(3);
});
});
+
+describe("chronological section sorting", () => {
+ it("sorts Experience once through one draft mutation and names only unresolved items", async () => {
+ render(
+
+
+ ,
+ );
+
+ await openSectionOptions();
+ fireEvent.click(await screen.findByRole("menuitem", { name: "Sort by date" }));
+
+ expect(mocks.updateResumeData).toHaveBeenCalledTimes(1);
+ const mutation = mocks.updateResumeData.mock.calls[0]?.[0] as (draft: Resume["data"]) => void;
+ const draft = structuredClone(mocks.resume.value.data);
+ mutation(draft);
+
+ expect(draft.sections.experience.items.map(({ id }) => id)).toEqual(["current", "older", "unknown"]);
+ expect(mocks.toastAdd).toHaveBeenCalledWith({
+ type: "warning",
+ description: "Could not sort these items; they stayed at the end: Mystery Co.",
+ });
+ });
+
+ it("sorts Education once without showing an unresolved notice", async () => {
+ render(
+
+
+ ,
+ );
+
+ await openSectionOptions();
+ fireEvent.click(await screen.findByRole("menuitem", { name: "Sort by date" }));
+
+ expect(mocks.updateResumeData).toHaveBeenCalledTimes(1);
+ const mutation = mocks.updateResumeData.mock.calls[0]?.[0] as (draft: Resume["data"]) => void;
+ const draft = structuredClone(mocks.resume.value.data);
+ mutation(draft);
+
+ expect(draft.sections.education.items.map(({ id }) => id)).toEqual(["later", "earlier"]);
+ expect(mocks.toastAdd).not.toHaveBeenCalled();
+ });
+
+ it("disables sorting when the resume is locked", async () => {
+ mocks.resume.value = { ...mocks.resume.value, isLocked: true };
+ render(
+
+
+ ,
+ );
+
+ await openSectionOptions();
+ const sortItem = await screen.findByRole("menuitem", { name: "Sort by date" });
+
+ expect(sortItem).toHaveAttribute("aria-disabled", "true");
+ fireEvent.keyDown(sortItem, { key: "Escape" });
+ expect(mocks.updateResumeData).not.toHaveBeenCalled();
+ });
+
+ it("does not offer date sorting for other built-in sections", async () => {
+ render(
+
+
+ ,
+ );
+
+ await openSectionOptions();
+
+ expect(screen.queryByRole("menuitem", { name: "Sort by date" })).not.toBeInTheDocument();
+ });
+});
diff --git a/apps/web/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx b/apps/web/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
index 3bae583e2..34d1016d9 100644
--- a/apps/web/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+++ b/apps/web/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
@@ -9,7 +9,9 @@ import {
ListIcon,
PencilSimpleLineIcon,
PlusIcon,
+ SortDescendingIcon,
} from "@phosphor-icons/react";
+import { sortSectionItemsByPeriod } from "@reactive-resume/resume/section-sort";
import { Button } from "@reactive-resume/ui/components/button";
import {
DropdownMenu,
@@ -24,6 +26,7 @@ import {
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from "@reactive-resume/ui/components/dropdown-menu";
+import { toast } from "@reactive-resume/ui/components/toast";
import { useDialogStore } from "@/dialogs/store";
import { useCurrentResume, useUpdateResumeData } from "@/features/resume/builder/draft";
import { useConfirm } from "@/hooks/use-confirm";
@@ -49,6 +52,36 @@ export function SectionDropdownMenu({ type }: Props) {
openDialog(`resume.sections.${type}.create`, undefined);
};
+ const onSortByDate = () => {
+ if ((type !== "experience" && type !== "education") || resume.isLocked) return;
+
+ let unresolvedLabels: string[] = [];
+ if (type === "experience") {
+ const currentItems = resume.data.sections.experience.items;
+ const result = sortSectionItemsByPeriod(currentItems, resume.data.metadata.page.locale);
+ const labelById = new Map(currentItems.map((item) => [item.id, item.company.trim() || item.id]));
+ unresolvedLabels = result.unresolvedIds.map((id) => labelById.get(id) ?? id);
+ updateResumeData((draft) => {
+ draft.sections.experience.items = result.items;
+ });
+ } else {
+ const currentItems = resume.data.sections.education.items;
+ const result = sortSectionItemsByPeriod(currentItems, resume.data.metadata.page.locale);
+ const labelById = new Map(currentItems.map((item) => [item.id, item.school.trim() || item.id]));
+ unresolvedLabels = result.unresolvedIds.map((id) => labelById.get(id) ?? id);
+ updateResumeData((draft) => {
+ draft.sections.education.items = result.items;
+ });
+ }
+
+ if (unresolvedLabels.length > 0) {
+ toast.add({
+ type: "warning",
+ description: t`Could not sort these items; they stayed at the end: ${unresolvedLabels.join(", ")}.`,
+ });
+ }
+ };
+
const onToggleVisibility = () => {
updateResumeData((draft) => {
if (type === "summary") {
@@ -137,6 +170,13 @@ export function SectionDropdownMenu({ type }: Props) {
Add a new item
+
+ {(type === "experience" || type === "education") && (
+
+
+ Sort by date
+
+ )}
diff --git a/packages/resume/package.json b/packages/resume/package.json
index fa0bf05a2..5f1da1180 100644
--- a/packages/resume/package.json
+++ b/packages/resume/package.json
@@ -12,6 +12,7 @@
"./markdown": "./src/markdown.ts",
"./patch": "./src/patch.ts",
"./section-availability": "./src/section-availability.ts",
+ "./section-sort": "./src/section-sort.ts",
"./social-meta": "./src/social-meta.ts",
"./stylesheet": "./src/stylesheet/index.ts",
"./stylesheet/registry": "./src/stylesheet/registry/index.ts",
diff --git a/packages/resume/src/ats/period.test.ts b/packages/resume/src/ats/period.test.ts
index c671bb18f..120c22345 100644
--- a/packages/resume/src/ats/period.test.ts
+++ b/packages/resume/src/ats/period.test.ts
@@ -4,6 +4,25 @@ import { isFutureEndpoint, isReversedPeriod, ONGOING_TOKENS_BY_LANGUAGE, parsePe
const NOW = new Date("2024-06-15T00:00:00Z");
describe("parsePeriod", () => {
+ it.each([
+ ["numeric range", "2020 - 2024", "en-US", { start: { year: 2020 }, end: { year: 2024 }, ongoing: false }],
+ [
+ "localized range",
+ "janvier 2020 - mars 2022",
+ "fr-FR",
+ { start: { year: 2020, month: 1 }, end: { year: 2022, month: 3 }, ongoing: false },
+ ],
+ ["ongoing range", "January 2024 - Present", "en-US", { start: { year: 2024, month: 1 }, ongoing: true }],
+ ["year-only value", "2024", "en-US", { start: { year: 2024 }, ongoing: false }],
+ ["reversed range", "2024 - 2020", "en-US", { start: { year: 2024 }, end: { year: 2020 }, ongoing: false }],
+ ["blank value", "", "en-US", null],
+ ["bare ongoing value", "Present", "en-US", null],
+ ["prose value", "Summer of love", "en-US", null],
+ ["equal range", "2024 - 2024", "en-US", { start: { year: 2024 }, end: { year: 2024 }, ongoing: false }],
+ ] as const)("characterizes %s", (_case, input, locale, expected) => {
+ expect(parsePeriod(input, locale)).toEqual(expected);
+ });
+
it.each([
["Jan 2020 - Present", { start: { year: 2020, month: 1 }, ongoing: true }],
["January 2020 – March 2022", { start: { year: 2020, month: 1 }, end: { year: 2022, month: 3 }, ongoing: false }],
diff --git a/packages/resume/src/section-sort.test.ts b/packages/resume/src/section-sort.test.ts
new file mode 100644
index 000000000..5d0bd3508
--- /dev/null
+++ b/packages/resume/src/section-sort.test.ts
@@ -0,0 +1,133 @@
+import { describe, expect, it } from "vitest";
+import { sortSectionItemsByPeriod } from "./section-sort";
+
+type Item = {
+ id: string;
+ period: string;
+ title: string;
+ metadata?: { note: string };
+};
+
+const item = (id: string, period: string, title = id): Item => ({ id, period, title });
+const ids = (items: readonly Item[]) => items.map(({ id }) => id);
+
+describe("sortSectionItemsByPeriod", () => {
+ it("orders ongoing, ended, equal, and unresolved periods by the documented total order", () => {
+ const equalFirst = item("equal-first", "2020 - 2023");
+ const equalSecond = item("equal-second", "2020 - 2023");
+ const input = [
+ item("blank", ""),
+ equalFirst,
+ item("ended-2024", "2020 - 2024"),
+ item("ongoing-2020", "2020 - Present"),
+ item("prose", "A long time ago"),
+ item("ended-2025", "2022 - 2025"),
+ equalSecond,
+ item("ongoing-2024", "January 2024 - Present"),
+ item("reversed", "2025 - 2024"),
+ ];
+
+ const result = sortSectionItemsByPeriod(input, "en-US");
+
+ expect(ids(result.items)).toEqual([
+ "ongoing-2024",
+ "ongoing-2020",
+ "ended-2025",
+ "ended-2024",
+ "equal-first",
+ "equal-second",
+ "blank",
+ "prose",
+ "reversed",
+ ]);
+ expect(result.unresolvedIds).toEqual(["blank", "prose", "reversed"]);
+ });
+
+ it("uses locale-aware months and ranks year precision below a known month in the same year", () => {
+ const input = [
+ item("year-only-end", "2020 - 2024"),
+ item("localized-march", "janvier 2020 - mars 2024"),
+ item("localized-february", "janvier 2020 - février 2024"),
+ ];
+
+ const result = sortSectionItemsByPeriod(input, "fr-FR");
+
+ expect(ids(result.items)).toEqual(["localized-march", "localized-february", "year-only-end"]);
+ expect(result.unresolvedIds).toEqual([]);
+ });
+
+ it("ranks missing end points after known end points, then compares known starts", () => {
+ const input = [item("single-2025", "2025"), item("ended-2020", "2019 - 2020"), item("single-2024", "2024")];
+
+ const result = sortSectionItemsByPeriod(input, "en-US");
+
+ expect(ids(result.items)).toEqual(["ended-2020", "single-2025", "single-2024"]);
+ });
+
+ it("keeps mixed-precision comparisons transitive", () => {
+ const input = [
+ item("december-2023", "2020 - December 2023"),
+ item("may-2024", "2020 - May 2024"),
+ item("year-2024", "2020 - 2024"),
+ ];
+
+ expect(ids(sortSectionItemsByPeriod(input, "en-US").items)).toEqual(["may-2024", "year-2024", "december-2023"]);
+ });
+
+ it("leaves bare ongoing tokens, blanks, prose, and reversed periods stable at the end", () => {
+ const input = [
+ item("present", "Present"),
+ item("known", "2020 - 2021"),
+ item("blank", " "),
+ item("prose", "During university"),
+ item("reversed", "March 2024 - February 2024"),
+ ];
+
+ const result = sortSectionItemsByPeriod(input, "en-US");
+
+ expect(ids(result.items)).toEqual(["known", "present", "blank", "prose", "reversed"]);
+ expect(result.unresolvedIds).toEqual(["present", "blank", "prose", "reversed"]);
+ });
+
+ it("returns new arrays while preserving every original object and all content", () => {
+ const first = item("first", "2020 - 2021", "Original title");
+ first.metadata = { note: "Keep me" };
+ const second = item("second", "2022 - Present", "Another title");
+ const input = [first, second];
+ const snapshot = structuredClone(input);
+
+ const result = sortSectionItemsByPeriod(input, "en-US");
+
+ expect(result.items).not.toBe(input);
+ expect(result.items).toEqual([second, first]);
+ expect(result.items[0]).toBe(second);
+ expect(result.items[1]).toBe(first);
+ expect([...ids(result.items)].sort()).toEqual([...ids(input)].sort());
+ expect(input).toEqual(snapshot);
+ });
+
+ it("is deterministic across repeated invocation without changing stable ties", () => {
+ const input = [item("equal-a", "2020 - 2024"), item("newest", "2021 - 2025"), item("equal-b", "2020 - 2024")];
+
+ const first = sortSectionItemsByPeriod(input, "en-US");
+ const second = sortSectionItemsByPeriod(first.items, "en-US");
+
+ expect(ids(first.items)).toEqual(["newest", "equal-a", "equal-b"]);
+ expect(ids(second.items)).toEqual(ids(first.items));
+ expect(second.unresolvedIds).toEqual(first.unresolvedIds);
+ });
+
+ it("returns fresh arrays for empty and single-item inputs", () => {
+ const empty: Item[] = [];
+ const single = [item("only", "2024")];
+
+ const emptyResult = sortSectionItemsByPeriod(empty, "en-US");
+ const singleResult = sortSectionItemsByPeriod(single, "en-US");
+
+ expect(emptyResult).toEqual({ items: [], unresolvedIds: [] });
+ expect(emptyResult.items).not.toBe(empty);
+ expect(singleResult).toEqual({ items: single, unresolvedIds: [] });
+ expect(singleResult.items).not.toBe(single);
+ expect(singleResult.items[0]).toBe(single[0]);
+ });
+});
diff --git a/packages/resume/src/section-sort.ts b/packages/resume/src/section-sort.ts
new file mode 100644
index 000000000..2d686054b
--- /dev/null
+++ b/packages/resume/src/section-sort.ts
@@ -0,0 +1,82 @@
+import type { PeriodEndpoint } from "./ats/period";
+import { isReversedPeriod, parsePeriod } from "./ats/period";
+
+type SectionItemWithPeriod = {
+ id: string;
+ period: string;
+};
+
+export type SortSectionItemsByPeriodResult = {
+ items: T[];
+ unresolvedIds: string[];
+};
+
+type SortGroup = "ongoing" | "ended" | "unresolved";
+
+type RankedItem = {
+ item: T;
+ index: number;
+ group: SortGroup;
+ start?: PeriodEndpoint;
+ end?: PeriodEndpoint;
+};
+
+function compareEndpointDescending(left: PeriodEndpoint | undefined, right: PeriodEndpoint | undefined): number {
+ if (!left && !right) return 0;
+ if (!left) return 1;
+ if (!right) return -1;
+ if (left.year !== right.year) return right.year - left.year;
+ return (right.month ?? 0) - (left.month ?? 0);
+}
+
+function rankItem(item: T, index: number, locale: string): RankedItem {
+ const period = parsePeriod(item.period, locale);
+ if (!period?.start || (period.end && isReversedPeriod(period.start, period.end))) {
+ return { item, index, group: "unresolved" };
+ }
+
+ return {
+ item,
+ index,
+ group: period.ongoing ? "ongoing" : "ended",
+ start: period.start,
+ ...(period.end ? { end: period.end } : {}),
+ };
+}
+
+const GROUP_RANK: Readonly> = {
+ ongoing: 0,
+ ended: 1,
+ unresolved: 2,
+};
+
+function compareRankedItems(left: RankedItem, right: RankedItem): number {
+ const groupOrder = GROUP_RANK[left.group] - GROUP_RANK[right.group];
+ if (groupOrder !== 0) return groupOrder;
+
+ if (left.group === "ongoing" && right.group === "ongoing") {
+ return compareEndpointDescending(left.start, right.start) || left.index - right.index;
+ }
+
+ if (left.group === "ended" && right.group === "ended") {
+ return (
+ compareEndpointDescending(left.end, right.end) ||
+ compareEndpointDescending(left.start, right.start) ||
+ left.index - right.index
+ );
+ }
+
+ return left.index - right.index;
+}
+
+export function sortSectionItemsByPeriod(
+ items: readonly T[],
+ locale: string,
+): SortSectionItemsByPeriodResult {
+ const rankedItems = items.map((item, index) => rankItem(item, index, locale));
+
+ return {
+ items: rankedItems.toSorted(compareRankedItems).map(({ item }) => item),
+ unresolvedIds: rankedItems.filter(({ group }) => group === "unresolved").map(({ item }) => item.id),
+ };
+}
diff --git a/tests/e2e/specs/section-date-sorting.spec.ts b/tests/e2e/specs/section-date-sorting.spec.ts
new file mode 100644
index 000000000..4697765a8
--- /dev/null
+++ b/tests/e2e/specs/section-date-sorting.spec.ts
@@ -0,0 +1,126 @@
+import { Pool } from "pg";
+import { createSampleResumeFromDashboard, openSidebarSection } from "../fixtures/resume";
+import { resumeIdFromPage } from "../fixtures/semantic-css";
+import { expect, test } from "../fixtures/test";
+
+type ExperienceItem = {
+ id: string;
+ company: string;
+ position: string;
+ location: string;
+ period: string;
+ description: string;
+ hidden: boolean;
+ website: { url: string; label: string; inlineLink: boolean };
+ roles: [];
+};
+
+const experienceItem = (id: string, company: string, period: string): ExperienceItem => ({
+ id,
+ company,
+ position: "Engineer",
+ location: "",
+ period,
+ description: "",
+ hidden: false,
+ website: { url: "", label: "", inlineLink: false },
+ roles: [],
+});
+
+function databasePool() {
+ if (!process.env.DATABASE_URL) throw new Error("DATABASE_URL is required for section sorting E2E coverage.");
+ return new Pool({ connectionString: process.env.DATABASE_URL });
+}
+
+async function seedExperienceItems(resumeId: string, items: ExperienceItem[]) {
+ const pool = databasePool();
+ try {
+ const result = await pool.query<{ data: { sections: { experience: { items: ExperienceItem[] } } } }>(
+ 'select data from "resume" where id = $1',
+ [resumeId],
+ );
+ const data = result.rows[0]?.data;
+ if (!data) throw new Error(`Resume ${resumeId} was not found.`);
+ data.sections.experience.items = items;
+ await pool.query('update "resume" set data = $2, updated_at = now() where id = $1', [resumeId, data]);
+ } finally {
+ await pool.end();
+ }
+}
+
+async function readExperienceItems(resumeId: string) {
+ const pool = databasePool();
+ try {
+ const result = await pool.query<{ data: { sections: { experience: { items: ExperienceItem[] } } } }>(
+ 'select data from "resume" where id = $1',
+ [resumeId],
+ );
+ const items = result.rows[0]?.data.sections.experience.items;
+ if (!items) throw new Error(`Resume ${resumeId} was not found.`);
+ return items;
+ } finally {
+ await pool.end();
+ }
+}
+
+const itemIds = (items: ExperienceItem[]) => items.map(({ id }) => id);
+
+test("sorts Experience once while preserving undo, persistence, later edits, and locking", async ({
+ authPage: page,
+}, testInfo) => {
+ test.setTimeout(90_000);
+ await createSampleResumeFromDashboard(page, testInfo);
+ const resumeId = resumeIdFromPage(page);
+ const authoredItems = [
+ experienceItem("unknown-sort", "Mystery Co", "Recently"),
+ experienceItem("older-sort", "Older Co", "2018 - 2020"),
+ experienceItem("current-sort", "Current Co", "2023 - Present"),
+ ];
+ await seedExperienceItems(resumeId, authoredItems);
+ await page.reload();
+ await openSidebarSection(page, "Experience");
+ const section = page.locator("#sidebar-experience");
+ const renderedItemIds = () =>
+ section
+ .locator('[id^="resume-item-"]')
+ .evaluateAll((nodes) => nodes.map(({ id }) => id.replace("resume-item-", "")));
+
+ await expect.poll(renderedItemIds).toEqual(["unknown-sort", "older-sort", "current-sort"]);
+ await section.getByRole("button", { name: "Section options" }).click();
+ await page.getByRole("menuitem", { name: "Sort by date" }).click();
+ await expect(page.getByText("Could not sort these items; they stayed at the end: Mystery Co.")).toBeVisible();
+ await expect
+ .poll(async () => itemIds(await readExperienceItems(resumeId)))
+ .toEqual(["current-sort", "older-sort", "unknown-sort"]);
+ await expect.poll(renderedItemIds).toEqual(["current-sort", "older-sort", "unknown-sort"]);
+
+ await page.getByRole("button", { name: "Undo", exact: true }).click();
+ await expect
+ .poll(async () => itemIds(await readExperienceItems(resumeId)))
+ .toEqual(["unknown-sort", "older-sort", "current-sort"]);
+
+ await section.getByRole("button", { name: "Section options" }).click();
+ await page.getByRole("menuitem", { name: "Sort by date" }).click();
+ await expect
+ .poll(async () => itemIds(await readExperienceItems(resumeId)))
+ .toEqual(["current-sort", "older-sort", "unknown-sort"]);
+ await page.reload();
+ await openSidebarSection(page, "Experience");
+ await expect.poll(renderedItemIds).toEqual(["current-sort", "older-sort", "unknown-sort"]);
+
+ await section.getByText("Current Co", { exact: true }).click();
+ const updateDialog = page.getByRole("dialog", { name: "Update an existing experience" });
+ await updateDialog.getByLabel("Period").fill("2010 - 2011");
+ await updateDialog.getByRole("button", { name: "Save Changes" }).click();
+ await expect
+ .poll(async () => {
+ const items = await readExperienceItems(resumeId);
+ return { ids: itemIds(items), currentPeriod: items.find(({ id }) => id === "current-sort")?.period };
+ })
+ .toEqual({ ids: ["current-sort", "older-sort", "unknown-sort"], currentPeriod: "2010 - 2011" });
+
+ await page.getByRole("button", { name: "Resume options" }).click();
+ await page.getByRole("menuitem", { name: "Lock" }).click();
+ await page.getByRole("alertdialog").getByRole("button", { name: "Confirm" }).click();
+ await expect(section.getByRole("button", { name: "Section options" })).toBeDisabled();
+});