mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-06-22 04:11:55 +10:00
chore: add missing translations
This commit is contained in:
@@ -39,6 +39,21 @@ Internal packages are source-consumed through `package.json` export maps that po
|
||||
- The builder shell lives under `apps/web/src/routes/builder/$resumeId`. The nested preview route is client-only (`ssr: false`), while the public resume route `apps/web/src/routes/$username/$slug.tsx` uses `ssr: "data-only"`.
|
||||
- Browser-only resume preview code lives under `apps/web/src/features/resume/preview`, and public resume PDF viewer code lives under `apps/web/src/features/resume/public`. Keep PDF.js/canvas/browser APIs out of SSR paths and out of `packages/pdf`.
|
||||
- The isomorphic oRPC client is in `apps/web/src/libs/orpc/client.ts`; server calls use an in-process router client and browser calls use `/api/rpc` with credentials included.
|
||||
- For React components with explicit props, prefer a named TypeScript props type over inline object annotations in the function signature, especially once the props include more than one field or generics. For example:
|
||||
|
||||
```ts
|
||||
type IntentSelectFieldProps<TValue extends string> = {
|
||||
label: string;
|
||||
id: string;
|
||||
value: TValue | undefined;
|
||||
options: readonly ComboboxOption<TValue>[];
|
||||
onChange: (value: TValue | undefined) => void;
|
||||
};
|
||||
|
||||
function IntentSelectField<TValue extends string>(props: IntentSelectFieldProps<TValue>) {
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
### Package and feature boundaries
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Toep"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Toepassingstatistiek"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabies"
|
||||
@@ -671,6 +675,10 @@ msgstr "Sirkel"
|
||||
msgid "Clear"
|
||||
msgstr "Klaar"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Klik hier om 'n lêer te kies om in te voer"
|
||||
@@ -953,6 +961,10 @@ msgstr "Pasgemaakte OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Pasgemaakte afdelings"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Tsjeggies"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Nog geen paswoorde geregistreer nie."
|
||||
msgid "No results found."
|
||||
msgstr "Geen resultate gevind nie."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Geen getoetste verskaffer nie"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Herstel"
|
||||
msgid "Reset Password"
|
||||
msgstr "Herstel wagwoord"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Herstel jou wagwoord"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Roemeens"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotasie"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Voer jou eerste ontleding uit om 'n puntkaart, sterkpunte en geprioritiseerde voorstelle te kry."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Besig om jou wagwoord by te werk..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Besig om jou CV by te werk..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Laai prent op"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Zoem uit"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zoeloe"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "መተግበሪያ"
|
||||
msgid "Application Statistics"
|
||||
msgstr "የመተግበሪያ ስታቲስቲክስ"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "ዓረብኛ"
|
||||
@@ -671,6 +675,10 @@ msgstr "ክብ"
|
||||
msgid "Clear"
|
||||
msgstr "አጽዳ"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "ፋይል ለማምጣት ለመምረጥ እዚህ ጠቅ ያድርጉ"
|
||||
@@ -953,6 +961,10 @@ msgstr "ብጁ OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "ብጁ ክፍሎች"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "ቼክኛ"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "እስካሁን ምንም ፓስኪዎች አልተመዘገቡም።"
|
||||
msgid "No results found."
|
||||
msgstr "ምንም ውጤት አልተገኘም።"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "የተፈተነ አቅራቢ የለም"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "ዳግም ለመጀመር"
|
||||
msgid "Reset Password"
|
||||
msgstr "የይለፍ ቃል ዳግም አስጀምር"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "የይለፍ ቃልዎን ዳግም ያስጀምሩ"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "ሮማኒያንኛ"
|
||||
msgid "Rotation"
|
||||
msgstr "ማሽከርከር"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "የውጤት ካርድ፣ ጥንካሬዎች እና ቅድሚያ የተሰጣቸው አስተያየቶችን ለማግኘት የመጀመሪያ ትንተናዎን ያከናውኑ።"
|
||||
@@ -3708,6 +3736,10 @@ msgstr "የይለፍ ቃልዎን በመዘመን ላይ…"
|
||||
msgid "Updating your resume..."
|
||||
msgstr "የየታሪክዎን በመዘመን ላይ…"
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "ምስል ስቀል"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "አጉር"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "ዙሉ"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "التطبيق"
|
||||
msgid "Application Statistics"
|
||||
msgstr "إحصاءات التطبيق"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "العربية"
|
||||
@@ -671,6 +675,10 @@ msgstr "دائرة"
|
||||
msgid "Clear"
|
||||
msgstr "واضح"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "انقر هنا لتحديد ملف لاستيراده"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth مخصص"
|
||||
msgid "Custom Sections"
|
||||
msgstr "أقسام مخصصة"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "التشيكية"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "لم يتم تسجيل أي مفاتيح مرور حتى الآن."
|
||||
msgid "No results found."
|
||||
msgstr "لم نعثر على نتائج."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "لم يتم اختبار أي مزود خدمة"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "إعادة تعيين"
|
||||
msgid "Reset Password"
|
||||
msgstr "إعادة تعيين كلمة المرور"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "إعادة تعيين كلمة المرور"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "الرومانية"
|
||||
msgid "Rotation"
|
||||
msgstr "الدوران"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "قم بإجراء تحليلك الأول للحصول على بطاقة الأداء ونقاط القوة والاقتراحات ذات الأولوية."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "جاري تحديث كلمة المرور..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "جاري تحديث سيرتك الذاتية..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "تحميل الصورة"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "تصغير"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "الزولو"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Tətbiq"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Tətbiq Statistikası"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Ərəb"
|
||||
@@ -671,6 +675,10 @@ msgstr "Dairə"
|
||||
msgid "Clear"
|
||||
msgstr "Açıq"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "İdxal üçün fayl seçmək üçün bura klikləyin"
|
||||
@@ -953,6 +961,10 @@ msgstr "Fərdiləşdirilmiş OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Xüsusi Bölmələr"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Çex"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Hələ heç bir giriş açarı qeydiyyatdan keçməyib."
|
||||
msgid "No results found."
|
||||
msgstr "Nəticə tapılmadı."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Test edilmiş provayder yoxdur"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Sıfırla"
|
||||
msgid "Reset Password"
|
||||
msgstr "Parolu Sıfırla"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Parolunuzu sıfırlayın"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumın"
|
||||
msgid "Rotation"
|
||||
msgstr "Döndürmə"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "İlk təhlilinizi işə salın, skor kartı, güclü tərəflər və prioritetləşdirilmiş təkliflər əldə edin."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Parolunuz yenilənir..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Özgeçmişiniz yenilənir..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Şəkil yüklə"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Uzaqlaşdır"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Приложение"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Статистика на приложението"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Арабски"
|
||||
@@ -671,6 +675,10 @@ msgstr "Кръг"
|
||||
msgid "Clear"
|
||||
msgstr "Clear"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Кликнете тук, за да изберете файл за импортиране"
|
||||
@@ -953,6 +961,10 @@ msgstr "Потребителски OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Потребителски раздели"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Чешки"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Все още няма регистрирани ключове за до
|
||||
msgid "No results found."
|
||||
msgstr "Няма намерени резултати."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Няма тестван доставчик"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Нулиране"
|
||||
msgid "Reset Password"
|
||||
msgstr "Нулиране на паролата"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Нулирайте паролата си"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Румънски"
|
||||
msgid "Rotation"
|
||||
msgstr "Завъртане"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Извършете първия си анализ, за да получите карта с резултати, силни страни и предложения по приоритети."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Актуализиране на паролата ви..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Актуализиране на автобиографията ви..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Качване на снимка"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Намаляване"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Зулуски"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "অ্যাপ"
|
||||
msgid "Application Statistics"
|
||||
msgstr "অ্যাপ্লিকেশন পরিসংখ্যান"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "আরবি"
|
||||
@@ -671,6 +675,10 @@ msgstr "বৃত্ত"
|
||||
msgid "Clear"
|
||||
msgstr "স্বচ্ছ"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "ইমপোর্ট করার জন্য এখান ক্লিক করে একটি ফাইল নির্বাচন করুন"
|
||||
@@ -953,6 +961,10 @@ msgstr "কাস্টম OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "কাস্টম বিভাগসমূহ"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "চেক"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "এখনও কোনো পাসকি নিবন্ধিত হ
|
||||
msgid "No results found."
|
||||
msgstr "কোন ফলাফল খুঁজে পাওয়া যায়নি।"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "কোন পরীক্ষিত সরবরাহকারী নেই"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "রিসেট"
|
||||
msgid "Reset Password"
|
||||
msgstr "পাসওয়ার্ড রিসেট করুন"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "আপনার পাসওয়ার্ড রিসেট করুন"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "রোমানিয়ান"
|
||||
msgid "Rotation"
|
||||
msgstr "রোটেশন"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "আপনার প্রথম বিশ্লেষণ চালান একটি স্কোরকার্ড, শক্তি এবং অগ্রাধিকারপ্রাপ্ত পরামর্শ পেতে।"
|
||||
@@ -3708,6 +3736,10 @@ msgstr "আপনার পাসওয়ার্ড আপডেট করা
|
||||
msgid "Updating your resume..."
|
||||
msgstr "আপনার জীবনবৃত্তান্ত আপডেট করা হচ্ছে..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "ছবি আপলোড করুন"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "জুম আউট"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "জুলু"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Aplicació"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Estadístiques de l’aplicació"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Àrab"
|
||||
@@ -671,6 +675,10 @@ msgstr "Cercle"
|
||||
msgid "Clear"
|
||||
msgstr "Clar"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Fes clic aquí per seleccionar un fitxer per importar"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth personalitzat"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Seccions personalitzades"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Txec"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Encara no s'han registrat cap clau d'accés."
|
||||
msgid "No results found."
|
||||
msgstr "No s’han trobat resultats."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Cap proveïdor provat"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Restableix"
|
||||
msgid "Reset Password"
|
||||
msgstr "Restableix la contrasenya"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Restableix la contrasenya"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Romanès"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotació"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Executa la teva primera anàlisi per obtenir un quadre de comandament, els punts forts i suggeriments prioritzats."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "S’està actualitzant la contrasenya..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "S’està actualitzant el currículum..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Pujar foto"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Allunya"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulú"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Aplikace"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Statistiky aplikace"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabština"
|
||||
@@ -671,6 +675,10 @@ msgstr "Kruh"
|
||||
msgid "Clear"
|
||||
msgstr "Přehledně"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Kliknutím zde vyberte soubor k importu"
|
||||
@@ -953,6 +961,10 @@ msgstr "Vlastní OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Vlastní sekce"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Čeština"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Zatím nebyly zaregistrovány žádné pasové klíče."
|
||||
msgid "No results found."
|
||||
msgstr "Nebyly nalezeny žádné výsledky."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Žádný ověřený poskytovatel"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Resetovat"
|
||||
msgid "Reset Password"
|
||||
msgstr "Obnovit heslo"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Obnovte své heslo"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumunština"
|
||||
msgid "Rotation"
|
||||
msgstr "Otočení"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Proveďte první analýzu a získejte hodnotící tabulku, silné stránky a návrhy priorit."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Aktualizace hesla…"
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Aktualizace životopisu…"
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Nahrát obrázek"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Oddálit"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "App"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Applikationsstatistik"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabisk"
|
||||
@@ -671,6 +675,10 @@ msgstr "Cirkel"
|
||||
msgid "Clear"
|
||||
msgstr "Klar"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Klik her for at vælge en fil, der skal importeres"
|
||||
@@ -953,6 +961,10 @@ msgstr "Brugerdefineret OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Brugerdefinerede afsnit"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Tjekkisk"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Ingen nøgler registreret endnu."
|
||||
msgid "No results found."
|
||||
msgstr "Ingen resultater fundet."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Ingen testet udbyder"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Nulstil"
|
||||
msgid "Reset Password"
|
||||
msgstr "Nulstil adgangskode"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Nulstil din adgangskode"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumænsk"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotation"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Kør din første analyse for at få et scorekort, styrker og prioriterede forslag."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Opdaterer din adgangskode..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Opdaterer dit CV..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Upload billede"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Zoom ud"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "App"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Anwendungsstatistiken"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabisch"
|
||||
@@ -671,6 +675,10 @@ msgstr "Kreis"
|
||||
msgid "Clear"
|
||||
msgstr "Klar"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Hier klicken, um eine Datei zum Importieren auszuwählen"
|
||||
@@ -953,6 +961,10 @@ msgstr "Benutzerdefiniertes OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Benutzerdefinierte Abschnitte"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Tschechisch"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Noch keine Passkeys registriert."
|
||||
msgid "No results found."
|
||||
msgstr "Keine Ergebnisse gefunden."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Kein geprüfter Anbieter"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Zurücksetzen"
|
||||
msgid "Reset Password"
|
||||
msgstr "Passwort zurücksetzen"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Setzen Sie Ihr Passwort zurück"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumänisch"
|
||||
msgid "Rotation"
|
||||
msgstr "Drehung"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Führen Sie Ihre erste Analyse durch, um eine Scorecard, Stärken und priorisierte Vorschläge zu erhalten."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Ihr Passwort wird aktualisiert..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Ihr Lebenslauf wird aktualisiert..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Bild hochladen"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Herauszoomen"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Εφαρμογή"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Στατιστικά εφαρμογής"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Αραβικά"
|
||||
@@ -671,6 +675,10 @@ msgstr "Κύκλος"
|
||||
msgid "Clear"
|
||||
msgstr "Σαφής"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Κάντε κλικ εδώ για να επιλέξετε ένα αρχείο προς εισαγωγή"
|
||||
@@ -953,6 +961,10 @@ msgstr "Προσαρμοσμένο OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Προσαρμοσμένες ενότητες"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Τσεχικά"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Δεν έχουν καταχωρηθεί ακόμη passkeys."
|
||||
msgid "No results found."
|
||||
msgstr "Δεν βρέθηκαν αποτελέσματα."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Δεν υπάρχει δοκιμασμένος πάροχος"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Επαναφορά"
|
||||
msgid "Reset Password"
|
||||
msgstr "Επαναφορά κωδικού πρόσβασης"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Επαναφορά κωδικού πρόσβασης"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Ρουμανικά"
|
||||
msgid "Rotation"
|
||||
msgstr "Περιστροφή"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Εκτελέστε την πρώτη σας ανάλυση για να λάβετε έναν πίνακα βαθμολογίας, τα δυνατά σημεία και τις προτάσεις με προτεραιότητες."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Ενημέρωση του κωδικού πρόσβασής σας..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Ενημέρωση του βιογραφικού σας σημειώματος..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Ανέβασμα εικόνας"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Σμίκρυνση"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Ζουλού"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "App"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Application Statistics"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabic"
|
||||
@@ -671,6 +675,10 @@ msgstr "Circle"
|
||||
msgid "Clear"
|
||||
msgstr "Clear"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Click here to select a file to import"
|
||||
@@ -953,6 +961,10 @@ msgstr "Custom OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Custom Sections"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Czech"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "No passkeys registered yet."
|
||||
msgid "No results found."
|
||||
msgstr "No results found."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "No tested provider"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Reset"
|
||||
msgid "Reset Password"
|
||||
msgstr "Reset Password"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Reset your password"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Romanian"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotation"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Updating your password..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Updating your resume..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Upload picture"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Zoom out"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -368,6 +368,10 @@ msgstr "App"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Application Statistics"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr "Applied Rules"
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabic"
|
||||
@@ -666,6 +670,10 @@ msgstr "Circle"
|
||||
msgid "Clear"
|
||||
msgstr "Clear"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr "Clear selection"
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Click here to select a file to import"
|
||||
@@ -948,6 +956,10 @@ msgstr "Custom OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Custom Sections"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr "Custom Styles"
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Czech"
|
||||
@@ -2242,6 +2254,10 @@ msgstr "No passkeys registered yet."
|
||||
msgid "No results found."
|
||||
msgstr "No results found."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr "No style rules yet."
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "No tested provider"
|
||||
@@ -2709,6 +2725,10 @@ msgstr "Reset"
|
||||
msgid "Reset Password"
|
||||
msgstr "Reset Password"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr "Reset Style"
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Reset your password"
|
||||
@@ -2785,6 +2805,14 @@ msgstr "Romanian"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotation"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr "rule"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr "rules"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
@@ -3703,6 +3731,10 @@ msgstr "Updating your password..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Updating your resume..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr "Upload attachments"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Upload picture"
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Aplicación"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Estadísticas de la aplicación"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Árabe"
|
||||
@@ -671,6 +675,10 @@ msgstr "Círculo"
|
||||
msgid "Clear"
|
||||
msgstr "Claro"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Haz clic aquí para seleccionar un archivo para importar"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth personalizado"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Secciones personalizadas"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Checo"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Aún no se ha registrado ninguna llave de paso."
|
||||
msgid "No results found."
|
||||
msgstr "No se han encontrado resultados."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "No hay ningún proveedor probado"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Restablecer"
|
||||
msgid "Reset Password"
|
||||
msgstr "Restablecer contraseña"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Restablecer tu contraseña"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumano"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotación"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Realice su primer análisis para obtener un cuadro de mando, los puntos fuertes y las sugerencias priorizadas."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Actualizando tu contraseña..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Actualizando tu currículum..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Subir foto"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Alejar"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulú"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "اپ"
|
||||
msgid "Application Statistics"
|
||||
msgstr "آمار اپلیکیشن"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "عربی"
|
||||
@@ -671,6 +675,10 @@ msgstr "دایره"
|
||||
msgid "Clear"
|
||||
msgstr "شفاف"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "برای انتخاب فایل برای وارد کردن، اینجا کلیک کنید"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth سفارشی"
|
||||
msgid "Custom Sections"
|
||||
msgstr "بخشهای سفارشی"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "چکی"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "هنوز هیچ کلید عبوری ثبت نشده است."
|
||||
msgid "No results found."
|
||||
msgstr "موردی یافت نشد."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "هیچ ارائه دهنده آزمایش شده ای وجود ندارد"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "ریست"
|
||||
msgid "Reset Password"
|
||||
msgstr "تنظیم مجدد گذرواژه"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "تنظیم مجدد گذرواژهٔ شما"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "رومانیایی"
|
||||
msgid "Rotation"
|
||||
msgstr "چرخش"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "اولین تحلیل خود را اجرا کنید تا کارت امتیاز، نقاط قوت و پیشنهادهای اولویتبندیشده را دریافت کنید."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "در حال بهروزرسانی گذرواژه شما..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "در حال بهروزرسانی رزومه شما..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "بارگذاری تصویر"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "کوچکنمایی"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "زولو"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Sovellus"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Sovelluksen tilastot"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "arabia"
|
||||
@@ -671,6 +675,10 @@ msgstr "Ympyrä"
|
||||
msgid "Clear"
|
||||
msgstr "Kirkas"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Napsauta tästä valitaksesi tuotavan tiedoston"
|
||||
@@ -953,6 +961,10 @@ msgstr "Mukautettu OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Mukautetut osiot"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "tšekki"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Ei vielä rekisteröityjä kulkulupia."
|
||||
msgid "No results found."
|
||||
msgstr "Tuloksia ei löytynyt."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Ei testattua tarjoajaa"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Palauta"
|
||||
msgid "Reset Password"
|
||||
msgstr "Palauta salasana"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Palauta salasanasi"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "romania"
|
||||
msgid "Rotation"
|
||||
msgstr "Kierrätys"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Suorita ensimmäinen analyysi, jotta saat tuloskortin, vahvuudet ja priorisoidut ehdotukset."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Päivitetään salasanaasi..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Päivitetään ansioluetteloasi..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Lataa kuva"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Loitonna"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "App"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Statistiques d'application"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabe"
|
||||
@@ -671,6 +675,10 @@ msgstr "Cercle"
|
||||
msgid "Clear"
|
||||
msgstr "Clair"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Cliquez ici pour sélectionner un fichier à importer"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth personnalisé"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Sections personnalisées"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Tchèque"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Aucun passe-partout n'a encore été enregistré."
|
||||
msgid "No results found."
|
||||
msgstr "Aucun résultat trouvé."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Fournisseur non testé"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Réinitialiser"
|
||||
msgid "Reset Password"
|
||||
msgstr "Réinitialiser le mot de passe"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Réinitialisez votre mot de passe"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Roumain"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotation"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Effectuez votre première analyse pour obtenir un tableau de bord, des points forts et des suggestions classées par ordre de priorité."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Mise à jour de votre mot de passe..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Mise à jour de votre CV..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Télécharger l'image"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Zoom arrière"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zoulou"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "יישום"
|
||||
msgid "Application Statistics"
|
||||
msgstr "סטטיסטיקת היישום"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "ערבית"
|
||||
@@ -671,6 +675,10 @@ msgstr "עיגול"
|
||||
msgid "Clear"
|
||||
msgstr "נקה"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "לחץ כאן כדי לבחור קובץ לייבוא"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth מותאם אישית"
|
||||
msgid "Custom Sections"
|
||||
msgstr "סעיפים מותאמים אישית"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "צ׳כית"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "עדיין לא נרשמו מפתחות גישה."
|
||||
msgid "No results found."
|
||||
msgstr "לא נמצאו תוצאות."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "אין ספק שנבדק"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "איפוס"
|
||||
msgid "Reset Password"
|
||||
msgstr "איפוס סיסמה"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "איפוס הסיסמה שלך"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "רומנית"
|
||||
msgid "Rotation"
|
||||
msgstr "סיבוב"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "בצע את הניתוח הראשון שלך כדי לקבל דוח ביצועים, נקודות חוזק והצעות מסודרות לפי סדר עדיפויות."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "מעדכן את הסיסמה שלך..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "מעדכן את קורות החיים שלך..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "העלה תמונה"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "התרחקות"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "זולו"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "ऐप"
|
||||
msgid "Application Statistics"
|
||||
msgstr "ऐप आँकड़े"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "अरबी"
|
||||
@@ -671,6 +675,10 @@ msgstr "गोला"
|
||||
msgid "Clear"
|
||||
msgstr "स्पष्ट"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "इम्पोर्ट करने के लिए फ़ाइल चुनने हेतु यहाँ क्लिक करें"
|
||||
@@ -953,6 +961,10 @@ msgstr "कस्टम OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "कस्टम अनुभाग"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "चेक"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "अभी तक कोई पासकी पंजीकृत नह
|
||||
msgid "No results found."
|
||||
msgstr "कोई परिणाम नहीं मिला।"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "कोई परीक्षित प्रदाता नहीं"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "रीसेट"
|
||||
msgid "Reset Password"
|
||||
msgstr "पासवर्ड रीसेट करें"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "अपना पासवर्ड रीसेट करें"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "रोमानियाई"
|
||||
msgid "Rotation"
|
||||
msgstr "रोटेशन"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "अपना पहला विश्लेषण चलाएँ ताकि आपको एक स्कोरकार्ड, ताकतें और प्राथमिकता-आधारित सुझाव मिल सकें।"
|
||||
@@ -3708,6 +3736,10 @@ msgstr "आपका पासवर्ड अपडेट किया जा
|
||||
msgid "Updating your resume..."
|
||||
msgstr "आपका रेज़्यूमे अपडेट किया जा रहा है..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "तस्वीर अपलोड करें"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "ज़ूम आउट"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "ज़ुलु"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Alkalmazás"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Alkalmazásstatisztikák"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "arab"
|
||||
@@ -671,6 +675,10 @@ msgstr "Kör"
|
||||
msgid "Clear"
|
||||
msgstr "Tiszta"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Kattints ide az importálandó fájl kiválasztásához"
|
||||
@@ -953,6 +961,10 @@ msgstr "Egyéni OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Egyéni szekciók"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "cseh"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Még nincsenek regisztrált kulcsok."
|
||||
msgid "No results found."
|
||||
msgstr "Nincs találat."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Nincs tesztelt szolgáltató"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Visszaállítás"
|
||||
msgid "Reset Password"
|
||||
msgstr "Jelszó visszaállítása"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Jelszó visszaállítása"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Román"
|
||||
msgid "Rotation"
|
||||
msgstr "Forgatás"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Futtassa le az első elemzést, hogy kapjon egy értékelőlapot, erősségeket és rangsorolt javaslatokat."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Jelszó frissítése..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Önéletrajz frissítése..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Kép feltöltése"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Kicsinyítés"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Aplikasi"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Statistik Aplikasi"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arab"
|
||||
@@ -671,6 +675,10 @@ msgstr "Lingkaran"
|
||||
msgid "Clear"
|
||||
msgstr "Jelas"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Klik di sini untuk memilih file yang akan diimpor"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth khusus"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Bagian Kustom"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Ceko"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Belum ada kunci sandi yang terdaftar."
|
||||
msgid "No results found."
|
||||
msgstr "Tidak ada hasil."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Tidak ada penyedia yang teruji"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Atur Ulang"
|
||||
msgid "Reset Password"
|
||||
msgstr "Atur Ulang Kata Sandi"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Atur ulang kata sandi Anda"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumania"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotasi"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Jalankan analisis pertama Anda untuk mendapatkan kartu skor, kekuatan, dan saran yang diprioritaskan."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Memperbarui kata sandi Anda..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Memperbarui resume Anda..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Unggah gambar"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Perkecil"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "App"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Statistiche dell'applicazione"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabo"
|
||||
@@ -671,6 +675,10 @@ msgstr "Cerchio"
|
||||
msgid "Clear"
|
||||
msgstr "Libero"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Fai clic qui per selezionare un file da importare"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth personalizzato"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Sezioni personalizzate"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Ceco"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Non sono ancora stati registrati dei passepartout."
|
||||
msgid "No results found."
|
||||
msgstr "Nessun risultato trovato."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Nessun fornitore segnalato"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Ripristina"
|
||||
msgid "Reset Password"
|
||||
msgstr "Reimposta password"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Reimposta la tua password"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumeno"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotazione"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Esegua la prima analisi per ottenere una scorecard, i punti di forza e i suggerimenti prioritari."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Aggiornamento della tua password in corso..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Aggiornamento del tuo curriculum in corso..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Carica l'immagine"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Rimpicciolisci"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "アプリ"
|
||||
msgid "Application Statistics"
|
||||
msgstr "アプリケーション統計"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "アラビア語"
|
||||
@@ -671,6 +675,10 @@ msgstr "円"
|
||||
msgid "Clear"
|
||||
msgstr "クリア"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "ここをクリックしてインポートするファイルを選択"
|
||||
@@ -953,6 +961,10 @@ msgstr "カスタムOAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "カスタムセクション"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "チェコ語"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "パスキーはまだ登録されていない。"
|
||||
msgid "No results found."
|
||||
msgstr "結果が見つかりません。"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "テスト済みのプロバイダーはありません"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "リセット"
|
||||
msgid "Reset Password"
|
||||
msgstr "パスワードをリセット"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "パスワードをリセット"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "ルーマニア語"
|
||||
msgid "Rotation"
|
||||
msgstr "回転"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "最初の分析を実行し、スコアカード、強み、優先順位付けされた提案を得る。"
|
||||
@@ -3708,6 +3736,10 @@ msgstr "パスワードを更新しています..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "履歴書を更新しています..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "画像のアップロード"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "ズームアウト"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "ズールー語"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "កម្មវិធី"
|
||||
msgid "Application Statistics"
|
||||
msgstr "ស្ថិតិកម្មវិធី"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabic"
|
||||
@@ -671,6 +675,10 @@ msgstr "រង្វង់"
|
||||
msgid "Clear"
|
||||
msgstr "សម្អាត"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "ចុចទីនេះដើម្បីជ្រើសឯកសារមួយដើម្បីនាំចូល"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth ផ្ទាល់ខ្លួន"
|
||||
msgid "Custom Sections"
|
||||
msgstr "ផ្នែកផ្ទាល់ខ្លួន"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Czech"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "មិនទាន់មាន passkey បានចុះឈ្មោះ
|
||||
msgid "No results found."
|
||||
msgstr "រកមិនឃើញលទ្ធផល។"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "គ្មានអ្នកផ្តល់សេវាដែលបានធ្វើតេស្តទេ"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "កំណត់ឡើងវិញ"
|
||||
msgid "Reset Password"
|
||||
msgstr "កំណត់ពាក្យសម្ងាត់ឡើងវិញ"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "កំណត់ពាក្យសម្ងាត់របស់អ្នកឡើងវិញ"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Romanian"
|
||||
msgid "Rotation"
|
||||
msgstr "មុំបង្វែរ"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "ដំណើរការវិភាគលើកដំបូងរបស់អ្នកដើម្បីទទួលបានតារាងពិន្ទុ ចំណុចខ្លាំង និងសំណើដែលបានកំណត់អាទិភាព។"
|
||||
@@ -3708,6 +3736,10 @@ msgstr "កំពុងបច្ចុប្បន្នភាពពាក
|
||||
msgid "Updating your resume..."
|
||||
msgstr "កំពុងបច្ចុប្បន្នភាពប្រវត្តិរូបរបស់អ្នក..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "អាប់ឡូដរូបភាព"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "បង្រួម"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "ಆ್ಯಪ್"
|
||||
msgid "Application Statistics"
|
||||
msgstr "ಅಪ್ಲಿಕೇಶನ್ ಅಂಕಿಅಂಶಗಳು"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "ಅರೇಬಿಕ್"
|
||||
@@ -671,6 +675,10 @@ msgstr "ವೃತ್ತ"
|
||||
msgid "Clear"
|
||||
msgstr "ತೆರವುಗೊಳಿಸಿ"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "ಆಮದು ಮಾಡಲು ಕಡತವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ"
|
||||
@@ -953,6 +961,10 @@ msgstr "ಕಸ್ಟಮ್ OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "ಕಸ್ಟಮ್ ವಿಭಾಗಗಳು"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "ಚೆಕ್"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "ಇನ್ನೂ ಯಾವುದೇ ಪಾಸ್ಕೀಗಳು ನೋ
|
||||
msgid "No results found."
|
||||
msgstr "ಯಾವುದೇ ಫಲಿತಾಂಶಗಳು ಕಂಡುಬರಲಿಲ್ಲ."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "ಪರೀಕ್ಷಿಸದ ಪೂರೈಕೆದಾರರು ಇಲ್ಲ."
|
||||
@@ -2714,6 +2730,10 @@ msgstr "ಮರುಹೊಂದಿಸಿ"
|
||||
msgid "Reset Password"
|
||||
msgstr "ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಮರುಹೊಂದಿಸಿ"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಮರುಹೊಂದಿಸಿ"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "ರೊಮೇನಿಯನ್"
|
||||
msgid "Rotation"
|
||||
msgstr "ಭ್ರಮನ"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "ಸ್ಕೋರ್ಕಾರ್ಡ್, ಬಲಗಳು ಮತ್ತು ಆದ್ಯತೆಯ ಸಲಹೆಗಳನ್ನು ಪಡೆಯಲು ನಿಮ್ಮ ಮೊದಲ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಚಲಾಯಿಸಿ."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನವೀ
|
||||
msgid "Updating your resume..."
|
||||
msgstr "ನಿಮ್ಮ ರೆಸ್ಯೂಮ್ ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "ಚಿತ್ರವನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡಿ"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "ಗಾತ್ರ ಕುಗ್ಗಿಸಿ"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "ಜೂಲೂ"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "앱"
|
||||
msgid "Application Statistics"
|
||||
msgstr "애플리케이션 통계"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "아랍어"
|
||||
@@ -671,6 +675,10 @@ msgstr "원"
|
||||
msgid "Clear"
|
||||
msgstr "지우기"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "가져올 파일을 선택하려면 여기를 클릭하세요"
|
||||
@@ -953,6 +961,10 @@ msgstr "사용자 지정 OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "사용자 지정 섹션"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "체코어"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "아직 등록된 패스키가 없습니다."
|
||||
msgid "No results found."
|
||||
msgstr "결과가 없습니다."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "검증되지 않은 제공업체"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "초기화"
|
||||
msgid "Reset Password"
|
||||
msgstr "비밀번호 재설정"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "비밀번호 재설정"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "루마니아어"
|
||||
msgid "Rotation"
|
||||
msgstr "회전"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "첫 번째 분석을 실행하여 스코어카드, 강점, 우선순위가 지정된 제안을 확인하세요."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "비밀번호를 업데이트하는 중입니다..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "이력서를 업데이트하는 중입니다..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "사진 업로드"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "축소"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "줄루어"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Programa"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Programos statistika"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabų"
|
||||
@@ -671,6 +675,10 @@ msgstr "Apskritimas"
|
||||
msgid "Clear"
|
||||
msgstr "Skaidrus"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Spustelėkite čia, kad pasirinktumėte importuojamą failą"
|
||||
@@ -953,6 +961,10 @@ msgstr "Pasirinktinis OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Pasirinktiniai skyriai"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Čekų"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Kol kas neužregistruota jokių passkeys."
|
||||
msgid "No results found."
|
||||
msgstr "Rezultatų nerasta."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Nėra patikrinto tiekėjo"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Nustatyti iš naujo"
|
||||
msgid "Reset Password"
|
||||
msgstr "Atkurti slaptažodį"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Atkurkite slaptažodį"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumunų"
|
||||
msgid "Rotation"
|
||||
msgstr "Sukimas"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Atlikite pirmąją analizę, kad gautumėte rezultatų lentelę, stipriąsias puses ir prioritetinius pasiūlymus."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Atnaujinamas jūsų slaptažodis..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Atnaujinamas jūsų gyvenimo aprašymas..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Įkelti nuotrauką"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Tolinti"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulų"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Lietotne"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Lietotnes statistika"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arābu"
|
||||
@@ -671,6 +675,10 @@ msgstr "Aplis"
|
||||
msgid "Clear"
|
||||
msgstr "Skaidrs"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Noklikšķiniet šeit, lai izvēlētos importējamo failu"
|
||||
@@ -953,6 +961,10 @@ msgstr "Pielāgotais OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Pielāgotās sadaļas"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Čehu"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Pagaidām nav reģistrēti pases taustiņi."
|
||||
msgid "No results found."
|
||||
msgstr "Rezultāti nav atrasti."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Nav pārbaudīta pakalpojumu sniedzēja"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Atiestatīt"
|
||||
msgid "Reset Password"
|
||||
msgstr "Atiestatīt paroli"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Atiestatīt paroli"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumāņu"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotācija"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Veiciet pirmo analīzi, lai iegūtu rezultātu tabulu, stiprās puses un prioritizētus ieteikumus."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Tiek atjaunināta jūsu parole..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Tiek atjaunināts jūsu CV..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Augšupielādēt attēlu"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Tālināt"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "ആപ്പ്"
|
||||
msgid "Application Statistics"
|
||||
msgstr "ആപ്ലിക്കേഷൻ സ്റ്റാറ്റിസ്റ്റിക്സ്"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "അറബിക്"
|
||||
@@ -671,6 +675,10 @@ msgstr "വൃത്തം"
|
||||
msgid "Clear"
|
||||
msgstr "വ്യക്തമാക്കുക"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "ഇംപോർട്ട് ചെയ്യാൻ ഒരു ഫയൽ തിരഞ്ഞെടുക്കാൻ ഇവിടെ ക്ലിക്ക് ചെയ്യുക"
|
||||
@@ -953,6 +961,10 @@ msgstr "ഇഷ്ടാനുസൃത OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "കസ്റ്റം സെക്ഷനുകൾ"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "ചെക്ക്"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "ഇതുവരെ പാസ്കീകൾ രജിസ്റ്റ
|
||||
msgid "No results found."
|
||||
msgstr "ഒരൊന്നുമാത്രം ഫലങ്ങളൊന്നും ലഭ്യമല്ല."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "പരിശോധിച്ച ദാതാവില്ല."
|
||||
@@ -2714,6 +2730,10 @@ msgstr "റീസെറ്റ് ചെയ്യുക"
|
||||
msgid "Reset Password"
|
||||
msgstr "പാസ്വേഡ് റീസെറ്റ് ചെയ്യുക"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "നിങ്ങളുടെ പാസ്വേഡ് റീസെറ്റ് ചെയ്യുക"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "റൊമാനിയൻ"
|
||||
msgid "Rotation"
|
||||
msgstr "ററോട്ടേഷൻ"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "നിങ്ങളുടെ ആദ്യ വിശകലനം നടത്തി ഒരു സ്കോർകാർഡ്, ശക്തികൾ, മുൻഗണനാ നിർദ്ദേശങ്ങൾ എന്നിവ നേടുക."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "നിങ്ങളുടെ പാസ്വേഡ് അപ്ഡ
|
||||
msgid "Updating your resume..."
|
||||
msgstr "നിങ്ങളുടെ റിസ്യൂം അപ്ഡേറ്റ് ചെയ്യുന്നു..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "ചിത്രം അപ്ലോഡ് ചെയ്യുക"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "സൂം ഔട്ട് ചെയ്യുക"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "സൂളു"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "अॅप"
|
||||
msgid "Application Statistics"
|
||||
msgstr "अॅप्लिकेशन आकडेवारी"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "अरबी"
|
||||
@@ -671,6 +675,10 @@ msgstr "गोलाकार"
|
||||
msgid "Clear"
|
||||
msgstr "स्पष्ट"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "इम्पोर्ट करण्यासाठी फाईल निवडण्यासाठी येथे क्लिक करा"
|
||||
@@ -953,6 +961,10 @@ msgstr "सानुकूल OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "सानुकूल विभाग"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "चेक"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "अद्याप कोणतीही पासकी नोंदव
|
||||
msgid "No results found."
|
||||
msgstr "कोणतेही परिणाम आढळले नाहीत."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "कोणताही तपासलेला प्रदाता नाही"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "रीसेट करा"
|
||||
msgid "Reset Password"
|
||||
msgstr "पासवर्ड रीसेट करा"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "तुमचा पासवर्ड रीसेट करा"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "रोमानियन"
|
||||
msgid "Rotation"
|
||||
msgstr "रोटेशन"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "तुमचे पहिले विश्लेषण चालवा आणि स्कोरकार्ड, सामर्थ्ये आणि प्राधान्यक्रमाने सुचवलेल्या सूचना मिळवा."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "तुमचा पासवर्ड अपडेट केला ज
|
||||
msgid "Updating your resume..."
|
||||
msgstr "तुमचा रेझ्युमे अपडेट केला जात आहे..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "चित्र अपलोड करा"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "बाहेर झूम करा"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "झुलू"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Apl"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Statistik Aplikasi"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Bahasa Arab"
|
||||
@@ -671,6 +675,10 @@ msgstr "Bulatan"
|
||||
msgid "Clear"
|
||||
msgstr "Jelas"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Klik di sini untuk memilih fail untuk diimport"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth Tersuai"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Seksyen Tersuai"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Czech"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Tiada kunci laluan yang didaftarkan lagi."
|
||||
msgid "No results found."
|
||||
msgstr "Tiada keputusan dijumpai."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Tiada pembekal yang diuji"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Tetapkan Semula"
|
||||
msgid "Reset Password"
|
||||
msgstr "Tetapkan Semula Kata Laluan"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Tetapkan semula kata laluan anda"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rom"
|
||||
msgid "Rotation"
|
||||
msgstr "Putaran"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Jalankan analisis pertama anda untuk mendapatkan kad skor, kekuatan, dan cadangan yang diutamakan."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Mengemas kini kata laluan anda..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Mengemas kini resume anda..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Muat naik gambar"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Zum keluar"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "एप"
|
||||
msgid "Application Statistics"
|
||||
msgstr "अनुप्रयोग तथ्याङ्क"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "अरबी"
|
||||
@@ -671,6 +675,10 @@ msgstr "वृत्त"
|
||||
msgid "Clear"
|
||||
msgstr "स्पष्ट"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "आयात गर्न फाइल छान्न यहाँ क्लिक गर्नुहोस्"
|
||||
@@ -953,6 +961,10 @@ msgstr "अनुकूलित OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "अनुकूल (Custom) खण्डहरू"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "चेक"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "अहिलेसम्म कुनै पासकी दर्ता
|
||||
msgid "No results found."
|
||||
msgstr "कुनै परिणाम फेला परेन।"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "परीक्षण गरिएको कुनै प्रदायक छैन"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "रिसेट गर्नुहोस्"
|
||||
msgid "Reset Password"
|
||||
msgstr "पासवर्ड रिसेट गर्नुहोस्"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "तपाईंको पासवर्ड रिसेट गर्नुहोस्"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "रुमानियन"
|
||||
msgid "Rotation"
|
||||
msgstr "घुमाउने कोण (Rotation)"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "स्कोरकार्ड, शक्तिहरू, र प्राथमिकता दिइएका सुझावहरू प्राप्त गर्न आफ्नो पहिलो विश्लेषण चलाउनुहोस्।"
|
||||
@@ -3708,6 +3736,10 @@ msgstr "तपाईंको पासवर्ड अद्यावधिक
|
||||
msgid "Updating your resume..."
|
||||
msgstr "तपाईंको बायोडाटा अद्यावधिक हुँदैछ..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "तस्बिर अपलोड गर्नुहोस्"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "जूम आउट"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "जुलु"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "App"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Applicatiestatistieken"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabisch"
|
||||
@@ -671,6 +675,10 @@ msgstr "Cirkel"
|
||||
msgid "Clear"
|
||||
msgstr "Duidelijk"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Klik hier om een bestand te selecteren om te importeren"
|
||||
@@ -953,6 +961,10 @@ msgstr "Aangepaste OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Aangepaste secties"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Tsjechisch"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Er zijn nog geen paskeys geregistreerd."
|
||||
msgid "No results found."
|
||||
msgstr "Geen resultaten gevonden."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Geen geteste provider"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Resetten"
|
||||
msgid "Reset Password"
|
||||
msgstr "Wachtwoord resetten"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Reset uw wachtwoord"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Roemeens"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotatie"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Voer uw eerste analyse uit om een scorekaart, sterke punten en geprioriteerde suggesties te krijgen."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Uw wachtwoord wordt bijgewerkt..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Uw cv wordt bijgewerkt..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Afbeelding uploaden"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Uitzoomen"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "App"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Applikasjonsstatistikk"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabisk"
|
||||
@@ -671,6 +675,10 @@ msgstr "Sirkel"
|
||||
msgid "Clear"
|
||||
msgstr "Tøm"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Klikk her for å velge en fil å importere"
|
||||
@@ -953,6 +961,10 @@ msgstr "Egendefinert OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Tilpassede seksjoner"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Tsjekkisk"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Ingen passnøkler registrert ennå."
|
||||
msgid "No results found."
|
||||
msgstr "Ingen resultater funnet."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Ingen testet leverandør"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Tilbakestill"
|
||||
msgid "Reset Password"
|
||||
msgstr "Tilbakestill passord"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Tilbakestill passordet ditt"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumensk"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotasjon"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Kjør din første analyse for å få et poengkort, styrker og prioriterte forslag."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Oppdaterer passordet ditt..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Oppdaterer CV-en din..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Last opp bilde"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Zoom ut"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "ଆପ୍"
|
||||
msgid "Application Statistics"
|
||||
msgstr "ଆପ୍ଲିକେସନ୍ ସଂଖ୍ୟାତ୍ମକ ତଥ୍ୟ"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "ଆରବୀ"
|
||||
@@ -671,6 +675,10 @@ msgstr "ବୃତ୍ତ"
|
||||
msgid "Clear"
|
||||
msgstr "ସଫା କରନ୍ତୁ"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "ଆୟାତ କରିବା ପାଇଁ ଫାଇଲ୍ ଚୟନ କରିବାକୁ ଏଠାରେ କ୍ଲିକ୍ କରନ୍ତୁ"
|
||||
@@ -953,6 +961,10 @@ msgstr "କଷ୍ଟମ୍ OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "କଷ୍ଟମ୍ ବିଭାଗଗୁଡିକ"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "ଚେକ୍"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "ଏପର୍ଯ୍ୟନ୍ତ କୌଣସି ପାସକି ପଞ୍
|
||||
msgid "No results found."
|
||||
msgstr "କୌଣସି ଫଳାଫଳ ମିଳିଲା ନାହିଁ।"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "କୌଣସି ପରୀକ୍ଷିତ ପ୍ରଦାନକାରୀ ନାହାଁନ୍ତି"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "ରିସେଟ୍ କରନ୍ତୁ"
|
||||
msgid "Reset Password"
|
||||
msgstr "ପାସୱାର୍ଡ ରିସେଟ୍ କରନ୍ତୁ"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "ଆପଣଙ୍କ ପାସୱାର୍ଡ ରିସେଟ୍ କରନ୍ତୁ"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "ରୋମାନିଆନ୍"
|
||||
msgid "Rotation"
|
||||
msgstr "ଘୁର୍ଣ୍ଣନ"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "ସ୍କୋରକାର୍ଡ, ଶକ୍ତି ଏବଂ ପ୍ରାଥମିକତାଭିତ୍ତିକ ପରାମର୍ଶ ପାଇବା ପାଇଁ ଆପଣଙ୍କ ପ୍ରଥମ ବିଶ୍ଳେଷଣ ଚଲାନ୍ତୁ।"
|
||||
@@ -3708,6 +3736,10 @@ msgstr "ଆପଣଙ୍କ ପାସୱାର୍ଡ ଅଦ୍ୟତନ ହେଉ
|
||||
msgid "Updating your resume..."
|
||||
msgstr "ଆପଣଙ୍କ ରେଜ୍ୟୁମେ ଅଦ୍ୟତନ ହେଉଛି..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "ଛବି ଅପଲୋଡ୍ କରନ୍ତୁ"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "ଜୁମ୍ ଆଉଟ୍ କରନ୍ତୁ"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "ଜୁଲୁ"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Aplikacja"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Statystyki aplikacji"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabski"
|
||||
@@ -671,6 +675,10 @@ msgstr "Koło"
|
||||
msgid "Clear"
|
||||
msgstr "Wyczyść"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Kliknij tutaj, aby wybrać plik do importu"
|
||||
@@ -953,6 +961,10 @@ msgstr "Niestandardowy OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Sekcje niestandardowe"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Czeski"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Nie zarejestrowano jeszcze żadnych kluczy dostępu."
|
||||
msgid "No results found."
|
||||
msgstr "Brak wyników."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Brak sprawdzonego dostawcy"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Zresetuj"
|
||||
msgid "Reset Password"
|
||||
msgstr "Zresetuj hasło"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Zresetuj swoje hasło"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumuński"
|
||||
msgid "Rotation"
|
||||
msgstr "Obrót"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Proszę przeprowadzić pierwszą analizę, aby uzyskać kartę wyników, mocne strony i sugestie dotyczące priorytetów."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Aktualizowanie hasła..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Aktualizowanie CV..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Proszę przesłać zdjęcie"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Pomniejsz"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Aplicativo"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Estatísticas do aplicativo"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Árabe"
|
||||
@@ -671,6 +675,10 @@ msgstr "Círculo"
|
||||
msgid "Clear"
|
||||
msgstr "Limpo"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Clique aqui para selecionar um arquivo para importar"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth personalizado"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Seções personalizadas"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Tcheco"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Ainda não há chaves de acesso registradas."
|
||||
msgid "No results found."
|
||||
msgstr "Nenhum resultado encontrado."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Nenhum fornecedor testado"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Redefinir"
|
||||
msgid "Reset Password"
|
||||
msgstr "Redefinir senha"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Redefinir a sua senha"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Romeno"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotação"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Faça sua primeira análise para obter um quadro de resultados, pontos fortes e sugestões priorizadas."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Atualizando sua senha..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Atualizando seu currículo..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Carregar imagem"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Diminuir zoom"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Aplicação"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Estatísticas da aplicação"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Árabe"
|
||||
@@ -671,6 +675,10 @@ msgstr "Círculo"
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Clique aqui para selecionar um ficheiro para importar"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth personalizado"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Secções personalizadas"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Checo"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Ainda não há chaves de acesso registadas."
|
||||
msgid "No results found."
|
||||
msgstr "Nenhum resultado encontrado."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Nenhum fornecedor testado"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Repor"
|
||||
msgid "Reset Password"
|
||||
msgstr "Repor senha"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Repor a sua senha"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Romeno"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotação"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Execute a sua primeira análise para obter um quadro de pontuação, pontos fortes e sugestões prioritárias."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "A atualizar a sua senha..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "A atualizar o seu currículo..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Carregar imagem"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Afastar"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Aplicație"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Statistici aplicație"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabă"
|
||||
@@ -671,6 +675,10 @@ msgstr "Cerc"
|
||||
msgid "Clear"
|
||||
msgstr "Clar"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Faceți clic aici pentru a selecta un fișier de importat"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth personalizat"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Secțiuni personalizate"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Cehă"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Nicio cheie de acces înregistrată încă."
|
||||
msgid "No results found."
|
||||
msgstr "Nu s-a găsit niciun rezultat."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Niciun furnizor testat"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Resetează"
|
||||
msgid "Reset Password"
|
||||
msgstr "Resetați parola"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Resetați-vă parola"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Română"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotire"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Efectuați prima analiză pentru a obține o fișă de evaluare, puncte forte și sugestii prioritizate."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Se actualizează parola..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Se actualizează CV-ul..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Încărcați imaginea"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Micșorează"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Приложение"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Статистика приложения"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Арабский"
|
||||
@@ -671,6 +675,10 @@ msgstr "Круг"
|
||||
msgid "Clear"
|
||||
msgstr "Clear"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Нажмите здесь, чтобы выбрать файл для импорта"
|
||||
@@ -953,6 +961,10 @@ msgstr "Пользовательский OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Пользовательские разделы"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Чешский"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Паски пока не зарегистрированы."
|
||||
msgid "No results found."
|
||||
msgstr "Результатов не найдено."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Нет проверенного поставщика"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Сброс"
|
||||
msgid "Reset Password"
|
||||
msgstr "Сбросить пароль"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Сбросить пароль"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Румынский"
|
||||
msgid "Rotation"
|
||||
msgstr "Поворот"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Проведите свой первый анализ, чтобы получить оценочный лист, сильные стороны и приоритетные предложения."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Обновление пароля..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Обновление вашего резюме..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Загрузите картинку"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Уменьшить"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Зулу"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Aplikácia"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Štatistiky aplikácie"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabčina"
|
||||
@@ -671,6 +675,10 @@ msgstr "Kruh"
|
||||
msgid "Clear"
|
||||
msgstr "Jasné"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Kliknutím sem vyber súbor na import"
|
||||
@@ -953,6 +961,10 @@ msgstr "Vlastný OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Vlastné sekcie"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Čeština"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Zatiaľ neboli zaregistrované žiadne pasové kľúče."
|
||||
msgid "No results found."
|
||||
msgstr "Nenašli sa žiadne výsledky."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Žiadny testovaný poskytovateľ"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Resetovať"
|
||||
msgid "Reset Password"
|
||||
msgstr "Obnoviť heslo"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Obnov svoje heslo"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumunčina"
|
||||
msgid "Rotation"
|
||||
msgstr "Otočenie"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Spustite prvú analýzu, aby ste získali hodnotiacu tabuľku, silné stránky a prioritné návrhy."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Aktualizujem tvoje heslo..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Aktualizujem tvoj životopis..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Nahrať obrázok"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Oddialiť"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Aplikacija"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Statistika aplikacije"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabščina"
|
||||
@@ -671,6 +675,10 @@ msgstr "Krog"
|
||||
msgid "Clear"
|
||||
msgstr "Jasno"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Kliknite tukaj za izbiro datoteke za uvoz"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth po meri"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Poljubni razdelki"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Češčina"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Registriranih še ni nobenih ključev pasov."
|
||||
msgid "No results found."
|
||||
msgstr "Ni rezultatov."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Ni preizkušenega ponudnika"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Ponastavi"
|
||||
msgid "Reset Password"
|
||||
msgstr "Ponastavi geslo"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Ponastavite svoje geslo"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "romunščina"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotacija"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Izvedite prvo analizo in pridobite preglednico, prednosti in prednostne predloge."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Posodabljanje vašega gesla..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Posodabljanje vašega življenjepisa..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Naloži sliko"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Oddalji"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zuluščina"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Aplikacioni"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Statistikat e aplikacionit"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabisht"
|
||||
@@ -671,6 +675,10 @@ msgstr "Rreth"
|
||||
msgid "Clear"
|
||||
msgstr "E qartë"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Klikoni këtu për të zgjedhur një skedar për importim"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth i personalizuar"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Rubrika të personalizuara"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Çekisht"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Ende nuk janë regjistruar asnjë fjalëkalim."
|
||||
msgid "No results found."
|
||||
msgstr "Nuk u gjetën rezultate."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Asnjë ofrues i testuar"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Rivendos"
|
||||
msgid "Reset Password"
|
||||
msgstr "Rivendos fjalëkalimin"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Rivendosni fjalëkalimin tuaj"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumanisht"
|
||||
msgid "Rotation"
|
||||
msgstr "Rrotullimi"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Ekzekutoni analizën tuaj të parë për të marrë një kartë rezultatesh, pikat e forta dhe sugjerime të prioritizuara."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Po përditësohet fjalëkalimi juaj..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Po përditësohet CV-ja juaj..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Ngarko foton"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Zvogëlo"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Апликација"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Статистика апликације"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Арапски"
|
||||
@@ -671,6 +675,10 @@ msgstr "Круг"
|
||||
msgid "Clear"
|
||||
msgstr "Јасно"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Кликните овде да изаберете датотеку за увоз"
|
||||
@@ -953,6 +961,10 @@ msgstr "Прилагођени OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Прилагођени одељци"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Чешки"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Још нису регистровани никакви кључеви
|
||||
msgid "No results found."
|
||||
msgstr "Нема резултата."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Нема тестираног добављача"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Ресетуј"
|
||||
msgid "Reset Password"
|
||||
msgstr "Ресетуј лозинку"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Ресетујте своју лозинку"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Румунски"
|
||||
msgid "Rotation"
|
||||
msgstr "Ротација"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Покрените прву анализу да бисте добили контролну таблу, снаге и приоритезоване предлоге."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Ажурирање ваше лозинке..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Ажурирање вашег резимеа..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Отпреми фотографију"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Умањи"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Зулу"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "App"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Applikationsstatistik"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arabiska"
|
||||
@@ -671,6 +675,10 @@ msgstr "Cirkel"
|
||||
msgid "Clear"
|
||||
msgstr "Klart"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Klicka här för att välja en fil att importera"
|
||||
@@ -953,6 +961,10 @@ msgstr "Anpassad OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Anpassade avsnitt"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Tjeckiska"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Inga nycklar registrerade ännu."
|
||||
msgid "No results found."
|
||||
msgstr "Inga resultat hittades."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Ingen testad leverantör"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Återställ"
|
||||
msgid "Reset Password"
|
||||
msgstr "Återställ lösenord"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Återställ ditt lösenord"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumänska"
|
||||
msgid "Rotation"
|
||||
msgstr "Rotation"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Kör din första analys för att få ett scorecard, styrkor och prioriterade förslag."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Uppdaterar ditt lösenord..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Uppdaterar ditt CV..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Ladda upp bild"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Zooma ut"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "செயலி"
|
||||
msgid "Application Statistics"
|
||||
msgstr "செயலி புள்ளிவிபரங்கள்"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "அரபிக்"
|
||||
@@ -671,6 +675,10 @@ msgstr "வட்டம்"
|
||||
msgid "Clear"
|
||||
msgstr "தெளிவான"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "இறக்குமதி செய்ய ஒரு கோப்பை தேர்ந்தெடுக்க இங்கே கிளிக் செய்யவும்"
|
||||
@@ -953,6 +961,10 @@ msgstr "தனிப்பயன் OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "தனிப்பயன் பகுதிகள்"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "செக்"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "இன்னும் கடவுச்சொற்கள் எது
|
||||
msgid "No results found."
|
||||
msgstr "எந்த முடிவுகளும் கிடைக்கவில்லை."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "சோதிக்கப்பட்ட வழங்குநர் இல்லை"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "மீட்டமை"
|
||||
msgid "Reset Password"
|
||||
msgstr "கடவுச்சொல்லை மீட்டமைக்கவும்"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "உங்கள் கடவுச்சொல்லை மீட்டமைக்கவும்"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "ரோமேனியன்"
|
||||
msgid "Rotation"
|
||||
msgstr "சுழற்சி"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "மதிப்பெண் அட்டை, பலங்கள் மற்றும் முன்னுரிமைப்படுத்தப்பட்ட பரிந்துரைகளைப் பெற உங்கள் முதல் பகுப்பாய்வை இயக்கவும்."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "உங்கள் கடவுச்சொல்லை புதுப
|
||||
msgid "Updating your resume..."
|
||||
msgstr "உங்கள் ரெஸ்யூமியை புதுப்பித்து கொண்டிருக்கிறது..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "படத்தைப் பதிவேற்றவும்"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "சிறிதாக்கு"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "ஜூலு"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "యాప్"
|
||||
msgid "Application Statistics"
|
||||
msgstr "యాప్ గణాంకాలు"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "అరబిక్"
|
||||
@@ -671,6 +675,10 @@ msgstr "వృత్తం"
|
||||
msgid "Clear"
|
||||
msgstr "తొలగించు"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "ఇంపోర్ట్ చేయడానికి ఫైల్ ను ఎంచుకోవడానికి ఇక్కడ క్లిక్ చేయండి"
|
||||
@@ -953,6 +961,10 @@ msgstr "కస్టమ్ OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "కస్టమ్ విభాగాలు"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "చెక్"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "ఇంకా పాస్కీలు నమోదు కాలేద
|
||||
msgid "No results found."
|
||||
msgstr "ఏ ఫలితాలు లభించలేదు."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "పరీక్షించిన ప్రొవైడర్ లేదు"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "రీసెట్ చేయండి"
|
||||
msgid "Reset Password"
|
||||
msgstr "పాస్వర్డ్ రీసెట్ చేయండి"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "మీ పాస్వర్డ్ను రీసెట్ చేయండి"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "రోమేనియన్"
|
||||
msgid "Rotation"
|
||||
msgstr "రోటేషన్"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "స్కోర్కార్డ్, బలాలు మరియు ప్రాధాన్యతా సూచనలను పొందడానికి మీ మొదటి విశ్లేషణను అమలు చేయండి."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "మీ పాస్వర్డ్ను నవీకరిస్
|
||||
msgid "Updating your resume..."
|
||||
msgstr "మీ రిజ్యూమ్ను నవీకరిస్తోంది..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "చిత్రాన్ని అప్లోడ్ చేయండి"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "జూమ్ అవుట్ చేయండి"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "జులు"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "แอป"
|
||||
msgid "Application Statistics"
|
||||
msgstr "สถิติของแอปพลิเคชัน"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "อารบิก"
|
||||
@@ -671,6 +675,10 @@ msgstr "วงกลม"
|
||||
msgid "Clear"
|
||||
msgstr "ชัดเจน"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "คลิกที่นี่เพื่อเลือกไฟล์ที่จะนำเข้า"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth แบบกำหนดเอง"
|
||||
msgid "Custom Sections"
|
||||
msgstr "ส่วนที่กำหนดเอง"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "เช็ก"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "ยังไม่มีพาสคีย์ที่ลงทะเบ
|
||||
msgid "No results found."
|
||||
msgstr "ไม่พบผลลัพธ์"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "ไม่มีผู้ให้บริการที่ผ่านการทดสอบ"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "รีเซ็ต"
|
||||
msgid "Reset Password"
|
||||
msgstr "รีเซ็ตรหัสผ่าน"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "รีเซ็ตรหัสผ่านของคุณ"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "โรมาเนีย"
|
||||
msgid "Rotation"
|
||||
msgstr "การหมุน"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "ดำเนินการวิเคราะห์ครั้งแรกของคุณเพื่อรับสกอร์การ์ด จุดแข็ง และข้อเสนอแนะที่จัดลำดับความสำคัญ"
|
||||
@@ -3708,6 +3736,10 @@ msgstr "กำลังอัปเดตรหัสผ่านของคุ
|
||||
msgid "Updating your resume..."
|
||||
msgstr "กำลังอัปเดตประวัติย่อของคุณ..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "อัปโหลดรูปภาพ"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "ซูมออก"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "ซูลู"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Uygulama"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Uygulama İstatistikleri"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arapça"
|
||||
@@ -671,6 +675,10 @@ msgstr "Daire"
|
||||
msgid "Clear"
|
||||
msgstr "Temiz"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "İçe aktarmak için bir dosya seçmek üzere buraya tıklayın"
|
||||
@@ -953,6 +961,10 @@ msgstr "Özel OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Özel Bölümler"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Çekçe"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Henüz kayıtlı geçiş anahtarı yok."
|
||||
msgid "No results found."
|
||||
msgstr "Hiçbir sonuç bulunamadı."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Test edilmiş sağlayıcı yok."
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Sıfırla"
|
||||
msgid "Reset Password"
|
||||
msgstr "Şifreyi Sıfırla"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Şifrenizi sıfırlayın"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumence"
|
||||
msgid "Rotation"
|
||||
msgstr "Döndürme"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Bir puan kartı, güçlü yönler ve önceliklendirilmiş öneriler elde etmek için ilk analizinizi çalıştırın."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Şifreniz güncelleniyor..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Özgeçmişiniz güncelleniyor..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Resim yükle"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Uzaklaştır"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Додаток"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Статистика заявок"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Арабська"
|
||||
@@ -671,6 +675,10 @@ msgstr "Кругле"
|
||||
msgid "Clear"
|
||||
msgstr "Чисто"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Натисніть тут, щоб вибрати файл для імпорту"
|
||||
@@ -953,6 +961,10 @@ msgstr "Користувацький OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Користувацькі розділи"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Чеська"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Поки що не зареєстровано жодного парол
|
||||
msgid "No results found."
|
||||
msgstr "Результатів не знайдено."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Немає перевіреного постачальника"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Скинути"
|
||||
msgid "Reset Password"
|
||||
msgstr "Скинути пароль"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Скинути пароль"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Румунська"
|
||||
msgid "Rotation"
|
||||
msgstr "Обертання"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Проведіть перший аналіз, щоб отримати оціночну таблицю, сильні сторони та пріоритетні пропозиції."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Оновлення пароля..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Оновлення резюме..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Завантажити зображення"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Зменшити"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Зулу"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Ilova"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Ilova statistikasi"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Arab tili"
|
||||
@@ -671,6 +675,10 @@ msgstr "Doira"
|
||||
msgid "Clear"
|
||||
msgstr "Tiniq"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Import qilish uchun faylni tanlash uchun shu yerni bosing"
|
||||
@@ -953,6 +961,10 @@ msgstr "Moslashtirilgan OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Maxsus boʻlimlar"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Chex tili"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Hali hech qanday kirish kalitlari ro'yxatdan o'tmagan."
|
||||
msgid "No results found."
|
||||
msgstr "Hech qanday natija topilmadi."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Sinovdan o'tgan provayder yo'q"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Tiklash"
|
||||
msgid "Reset Password"
|
||||
msgstr "Parolni tiklash"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Parolingizni tiklang"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumin tili"
|
||||
msgid "Rotation"
|
||||
msgstr "Aylantirish"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Birinchi tahlilingizni ishga tushiring va ballar jadvali, kuchli tomonlar hamda ustuvor tavsiyalarni oling."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Parolingiz yangilanmoqda..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Rezyume yangilanmoqda..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Rasmni yuklang"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Kichraytirish"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "Ứng dụng"
|
||||
msgid "Application Statistics"
|
||||
msgstr "Thống kê ứng dụng"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "Tiếng Ả Rập"
|
||||
@@ -671,6 +675,10 @@ msgstr "Vòng tròn"
|
||||
msgid "Clear"
|
||||
msgstr "Xóa"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "Nhấn vào đây để chọn file cần nhập khẩu"
|
||||
@@ -953,6 +961,10 @@ msgstr "OAuth tùy chỉnh"
|
||||
msgid "Custom Sections"
|
||||
msgstr "Các mục tùy chỉnh"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "Tiếng Séc"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "Chưa có khóa truy cập nào được đăng ký."
|
||||
msgid "No results found."
|
||||
msgstr "Không tìm thấy kết quả."
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "Không có nhà cung cấp nào được kiểm thử"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "Thiết lập lại"
|
||||
msgid "Reset Password"
|
||||
msgstr "Đặt mật khẩu mới"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "Đặt lại mật khẩu"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "Rumani"
|
||||
msgid "Rotation"
|
||||
msgstr "Xoay"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "Hãy thực hiện phân tích đầu tiên để nhận được bảng điểm, điểm mạnh và các đề xuất được sắp xếp theo mức độ ưu tiên."
|
||||
@@ -3708,6 +3736,10 @@ msgstr "Đang cập nhật mật khẩu của bạn..."
|
||||
msgid "Updating your resume..."
|
||||
msgstr "Đang cập nhật resume của bạn..."
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "Tải ảnh lên"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "Thu nhỏ"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "Zulu"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "应用"
|
||||
msgid "Application Statistics"
|
||||
msgstr "应用统计数据"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "阿拉伯语"
|
||||
@@ -671,6 +675,10 @@ msgstr "圆形"
|
||||
msgid "Clear"
|
||||
msgstr "清晰"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "点击此处选择要导入的文件"
|
||||
@@ -953,6 +961,10 @@ msgstr "自定义 OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "自定义章节"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "捷克语"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "尚未登记通行钥匙。"
|
||||
msgid "No results found."
|
||||
msgstr "没找到结果。"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "没有经过测试的提供商"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "重置"
|
||||
msgid "Reset Password"
|
||||
msgstr "重置密码"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "重置密码"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "罗马尼亚语"
|
||||
msgid "Rotation"
|
||||
msgstr "旋转"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "进行首次分析,以获得记分卡、优势和优先建议。"
|
||||
@@ -3708,6 +3736,10 @@ msgstr "正在更新你的密码…"
|
||||
msgid "Updating your resume..."
|
||||
msgstr "正在更新你的简历…"
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "上传图片"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "缩小"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "祖鲁语"
|
||||
|
||||
|
||||
@@ -373,6 +373,10 @@ msgstr "應用程式"
|
||||
msgid "Application Statistics"
|
||||
msgstr "應用程式統計資料"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr "阿拉伯文"
|
||||
@@ -671,6 +675,10 @@ msgstr "圓形"
|
||||
msgid "Clear"
|
||||
msgstr "清除"
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr "按這裡選擇要匯入的檔案"
|
||||
@@ -953,6 +961,10 @@ msgstr "自訂 OAuth"
|
||||
msgid "Custom Sections"
|
||||
msgstr "自訂段落"
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr "捷克語"
|
||||
@@ -2247,6 +2259,10 @@ msgstr "尚未註冊通行鑰匙。"
|
||||
msgid "No results found."
|
||||
msgstr "找不到相符的結果。"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr "沒有經過測試的提供者"
|
||||
@@ -2714,6 +2730,10 @@ msgstr "重置"
|
||||
msgid "Reset Password"
|
||||
msgstr "重設密碼"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr "重設您的密碼"
|
||||
@@ -2790,6 +2810,14 @@ msgstr "羅馬尼亞語"
|
||||
msgid "Rotation"
|
||||
msgstr "旋轉"
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr "執行您的第一次分析,以獲得計分卡、優勢和優先建議。"
|
||||
@@ -3708,6 +3736,10 @@ msgstr "正在更新您的密碼…"
|
||||
msgid "Updating your resume..."
|
||||
msgstr "正在更新您的履歷…"
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr "上傳圖片"
|
||||
@@ -3959,4 +3991,3 @@ msgstr "縮小"
|
||||
#: src/libs/locale.ts
|
||||
msgid "Zulu"
|
||||
msgstr "祖魯語"
|
||||
|
||||
|
||||
@@ -368,6 +368,10 @@ msgstr ""
|
||||
msgid "Application Statistics"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Applied Rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Arabic"
|
||||
msgstr ""
|
||||
@@ -666,6 +670,10 @@ msgstr ""
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/ui/combobox.tsx
|
||||
msgid "Clear selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/dialogs/resume/import.tsx
|
||||
msgid "Click here to select a file to import"
|
||||
msgstr ""
|
||||
@@ -948,6 +956,10 @@ msgstr ""
|
||||
msgid "Custom Sections"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/resume/section.tsx
|
||||
msgid "Custom Styles"
|
||||
msgstr ""
|
||||
|
||||
#: src/libs/locale.ts
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
@@ -2242,6 +2254,10 @@ msgstr ""
|
||||
msgid "No results found."
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "No style rules yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/features/settings/integrations/components/ai-section.tsx
|
||||
msgid "No tested provider"
|
||||
msgstr ""
|
||||
@@ -2709,6 +2725,10 @@ msgstr ""
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "Reset Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/features/auth/pages/reset-password.tsx
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
@@ -2785,6 +2805,14 @@ msgstr ""
|
||||
msgid "Rotation"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rule"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/custom-styles.tsx
|
||||
msgid "rules"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/resume-analysis.tsx
|
||||
msgid "Run your first analysis to get a scorecard, strengths, and prioritized suggestions."
|
||||
msgstr ""
|
||||
@@ -3703,6 +3731,10 @@ msgstr ""
|
||||
msgid "Updating your resume..."
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/agent/$threadId.tsx
|
||||
msgid "Upload attachments"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
|
||||
msgid "Upload picture"
|
||||
msgstr ""
|
||||
|
||||
@@ -35,7 +35,11 @@ type ChipItemProps = {
|
||||
onRemove: (index: number) => void;
|
||||
};
|
||||
|
||||
function ChipDragPreview({ chip }: { chip: string }) {
|
||||
type ChipDragPreviewProps = {
|
||||
chip: string;
|
||||
};
|
||||
|
||||
function ChipDragPreview({ chip }: ChipDragPreviewProps) {
|
||||
return (
|
||||
<Badge
|
||||
variant="outline"
|
||||
@@ -46,7 +50,11 @@ function ChipDragPreview({ chip }: { chip: string }) {
|
||||
);
|
||||
}
|
||||
|
||||
function ChipDragOverlay({ activeChip }: { activeChip: string | null }) {
|
||||
type ChipDragOverlayProps = {
|
||||
activeChip: string | null;
|
||||
};
|
||||
|
||||
function ChipDragOverlay({ activeChip }: ChipDragOverlayProps) {
|
||||
const overlay = (
|
||||
<DragOverlay dropAnimation={null}>{activeChip ? <ChipDragPreview chip={activeChip} /> : null}</DragOverlay>
|
||||
);
|
||||
|
||||
@@ -7,6 +7,10 @@ import { I18nProvider } from "@lingui/react";
|
||||
|
||||
const queryResult = vi.hoisted(() => ({ data: undefined as number | undefined }));
|
||||
|
||||
type CountUpProps = {
|
||||
to: number;
|
||||
};
|
||||
|
||||
vi.mock("@tanstack/react-query", () => ({
|
||||
useQuery: () => queryResult,
|
||||
}));
|
||||
@@ -14,7 +18,7 @@ vi.mock("@/libs/orpc/client", () => ({
|
||||
orpc: { statistics: { github: { getStarCount: { queryOptions: () => ({}) } } } },
|
||||
}));
|
||||
vi.mock("../animation/count-up", () => ({
|
||||
CountUp: ({ to }: { to: number }) => <span data-testid="count-up">{to.toLocaleString()}</span>,
|
||||
CountUp: ({ to }: CountUpProps) => <span data-testid="count-up">{to.toLocaleString()}</span>,
|
||||
}));
|
||||
|
||||
const { GithubStarsButton } = await import("./github-stars-button");
|
||||
|
||||
@@ -5,23 +5,20 @@ import { beforeAll, describe, expect, it, vi } from "vitest";
|
||||
import { i18n } from "@lingui/core";
|
||||
import { I18nProvider } from "@lingui/react";
|
||||
|
||||
type GridProps = {
|
||||
rowCount: number;
|
||||
columnCount: number;
|
||||
cellComponent: React.ComponentType<
|
||||
{ rowIndex: number; columnIndex: number; style: React.CSSProperties } & Record<string, unknown>
|
||||
>;
|
||||
cellProps: Record<string, unknown>;
|
||||
};
|
||||
|
||||
// react-window's <Grid> uses ResizeObserver / IntersectionObserver heavily and
|
||||
// expects measurable layouts that happy-dom can't provide. Stub it with a simple
|
||||
// pass-through that renders the first row of cells via the supplied cellComponent.
|
||||
vi.mock("react-window", () => ({
|
||||
Grid: ({
|
||||
rowCount,
|
||||
columnCount,
|
||||
cellComponent: CellComponent,
|
||||
cellProps,
|
||||
}: {
|
||||
rowCount: number;
|
||||
columnCount: number;
|
||||
cellComponent: React.ComponentType<
|
||||
{ rowIndex: number; columnIndex: number; style: React.CSSProperties } & Record<string, unknown>
|
||||
>;
|
||||
cellProps: Record<string, unknown>;
|
||||
}) => {
|
||||
Grid: ({ rowCount, columnCount, cellComponent: CellComponent, cellProps }: GridProps) => {
|
||||
const cells: React.ReactNode[] = [];
|
||||
for (let r = 0; r < Math.min(rowCount, 1); r++) {
|
||||
for (let c = 0; c < columnCount; c++) {
|
||||
|
||||
@@ -372,7 +372,12 @@ function useEditorToolbarState(editor: Editor) {
|
||||
|
||||
type EditorToolbarState = ReturnType<typeof useEditorToolbarState>;
|
||||
|
||||
function EditorToolbar({ editor, isFullscreen }: { editor: Editor; isFullscreen: boolean }) {
|
||||
type EditorToolbarProps = {
|
||||
editor: Editor;
|
||||
isFullscreen: boolean;
|
||||
};
|
||||
|
||||
function EditorToolbar({ editor, isFullscreen }: EditorToolbarProps) {
|
||||
const state = useEditorToolbarState(editor);
|
||||
|
||||
return renderEditorToolbar(state, isFullscreen);
|
||||
|
||||
@@ -8,8 +8,12 @@ const comboboxMock = vi.hoisted(() => ({
|
||||
props: undefined as { onValueChange?: (value: string[] | null) => void } | undefined,
|
||||
}));
|
||||
|
||||
type ComboboxProps = {
|
||||
onValueChange?: (value: string[] | null) => void;
|
||||
};
|
||||
|
||||
vi.mock("@/components/ui/combobox", () => ({
|
||||
Combobox: (props: { onValueChange?: (value: string[] | null) => void }) => {
|
||||
Combobox: (props: ComboboxProps) => {
|
||||
comboboxMock.props = props;
|
||||
return null;
|
||||
},
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import type { ComboboxOption } from "./combobox";
|
||||
import { render, screen } from "@testing-library/react";
|
||||
import userEvent from "@testing-library/user-event";
|
||||
import { beforeAll, describe, expect, it } from "vitest";
|
||||
import { i18n } from "@lingui/core";
|
||||
import { I18nProvider } from "@lingui/react";
|
||||
@@ -46,6 +47,26 @@ describe("Combobox", () => {
|
||||
expect(screen.getAllByText(/Gamma/).length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it("renders grouped options with group labels", async () => {
|
||||
const user = userEvent.setup();
|
||||
const groupedOptions: ComboboxOption[] = [
|
||||
{ value: "alpha", label: "Alpha", group: "Primary" },
|
||||
{ value: "beta", label: "Beta", group: { value: "secondary", label: "Secondary" } },
|
||||
{ value: "gamma", label: "Gamma", group: { value: "secondary", label: "Secondary" } },
|
||||
];
|
||||
|
||||
wrap(<Combobox options={groupedOptions} placeholder="Pick something" />);
|
||||
|
||||
await user.click(screen.getByRole("combobox"));
|
||||
|
||||
expect(screen.getByText("Primary")).toBeInTheDocument();
|
||||
expect(screen.getByText("Secondary")).toBeInTheDocument();
|
||||
expect(screen.getByText("Alpha")).toBeInTheDocument();
|
||||
expect(screen.getByText("Beta")).toBeInTheDocument();
|
||||
expect(screen.getByText("Gamma")).toBeInTheDocument();
|
||||
expect(document.querySelectorAll("[data-slot=combobox-group]")).toHaveLength(2);
|
||||
});
|
||||
|
||||
it("renders nothing extra when given an empty options array (no crash)", () => {
|
||||
expect(() => wrap(<Combobox options={[]} placeholder="Empty" />)).not.toThrow();
|
||||
expect(screen.getByText("Empty")).toBeInTheDocument();
|
||||
|
||||
@@ -5,10 +5,13 @@ import React from "react";
|
||||
import { Button } from "@reactive-resume/ui/components/button";
|
||||
import {
|
||||
ComboboxClear,
|
||||
ComboboxCollection,
|
||||
ComboboxContent,
|
||||
ComboboxEmpty,
|
||||
ComboboxGroup,
|
||||
ComboboxInput,
|
||||
ComboboxItem,
|
||||
ComboboxLabel,
|
||||
ComboboxList,
|
||||
ComboboxRoot,
|
||||
ComboboxTrigger,
|
||||
@@ -22,10 +25,21 @@ import { useControlledState } from "@/hooks/use-controlled-state";
|
||||
type ComboboxOption<TValue extends string | number = string> = {
|
||||
value: TValue;
|
||||
label: React.ReactNode;
|
||||
group?: string | ComboboxOptionGroup;
|
||||
keywords?: string[];
|
||||
disabled?: boolean;
|
||||
};
|
||||
|
||||
type ComboboxOptionGroup = {
|
||||
value: string;
|
||||
label: React.ReactNode;
|
||||
};
|
||||
|
||||
type GroupedComboboxOption<TValue extends string | number = string> = ComboboxOptionGroup & {
|
||||
key: string;
|
||||
items: ComboboxOption<TValue>[];
|
||||
};
|
||||
|
||||
type SingleComboboxProps<TValue extends string | number = string> = {
|
||||
options: ComboboxOption<TValue>[];
|
||||
value?: TValue | null;
|
||||
@@ -81,6 +95,40 @@ function Combobox<TValue extends string | number = string>(props: ComboboxProps<
|
||||
|
||||
const optionMap = React.useMemo(() => new Map(options.map((opt) => [String(opt.value), opt])), [options]);
|
||||
|
||||
const optionGroups = React.useMemo(() => {
|
||||
const groups: GroupedComboboxOption<TValue>[] = [];
|
||||
const groupMap = new Map<string, GroupedComboboxOption<TValue>>();
|
||||
let ungroupedGroup: GroupedComboboxOption<TValue> | null = null;
|
||||
let hasGroupedOptions = false;
|
||||
|
||||
for (const option of options) {
|
||||
if (option.group === undefined) {
|
||||
if (!ungroupedGroup) {
|
||||
ungroupedGroup = { key: "ungrouped", value: "", label: null, items: [] };
|
||||
groups.push(ungroupedGroup);
|
||||
}
|
||||
|
||||
ungroupedGroup.items.push(option);
|
||||
continue;
|
||||
}
|
||||
|
||||
hasGroupedOptions = true;
|
||||
|
||||
const group = typeof option.group === "string" ? { value: option.group, label: option.group } : option.group;
|
||||
let optionGroup = groupMap.get(group.value);
|
||||
|
||||
if (!optionGroup) {
|
||||
optionGroup = { ...group, key: `group:${group.value}`, items: [] };
|
||||
groupMap.set(group.value, optionGroup);
|
||||
groups.push(optionGroup);
|
||||
}
|
||||
|
||||
optionGroup.items.push(option);
|
||||
}
|
||||
|
||||
return hasGroupedOptions ? groups : null;
|
||||
}, [options]);
|
||||
|
||||
const findOption = React.useCallback(
|
||||
(v: TValue | TValue[] | null | undefined) => {
|
||||
if (multiple) {
|
||||
@@ -157,6 +205,13 @@ function Combobox<TValue extends string | number = string>(props: ComboboxProps<
|
||||
</ComboboxItem>
|
||||
);
|
||||
|
||||
const groupedListContent = (group: GroupedComboboxOption<TValue>) => (
|
||||
<ComboboxGroup key={group.key} items={group.items}>
|
||||
{group.label !== null && group.label !== undefined ? <ComboboxLabel>{group.label}</ComboboxLabel> : null}
|
||||
<ComboboxCollection>{listContent}</ComboboxCollection>
|
||||
</ComboboxGroup>
|
||||
);
|
||||
|
||||
const triggerNode = (
|
||||
<ComboboxTrigger
|
||||
id={id}
|
||||
@@ -179,7 +234,7 @@ function Combobox<TValue extends string | number = string>(props: ComboboxProps<
|
||||
return (
|
||||
<ComboboxRoot
|
||||
name={name}
|
||||
items={options}
|
||||
items={optionGroups ?? options}
|
||||
filter={filter}
|
||||
disabled={disabled}
|
||||
value={selectedValue as ComboboxOption<TValue>[] & ComboboxOption<TValue>}
|
||||
@@ -210,7 +265,7 @@ function Combobox<TValue extends string | number = string>(props: ComboboxProps<
|
||||
render={<Input disabled={disabled} className="border-none focus-visible:border-none focus-visible:ring-0" />}
|
||||
/>
|
||||
<ComboboxEmpty>{emptyMessage ?? t`No results found.`}</ComboboxEmpty>
|
||||
<ComboboxList>{listContent}</ComboboxList>
|
||||
<ComboboxList>{optionGroups ? groupedListContent : listContent}</ComboboxList>
|
||||
</ComboboxContent>
|
||||
</ComboboxRoot>
|
||||
);
|
||||
|
||||
@@ -36,6 +36,14 @@ const verifyFormSchema = z.object({
|
||||
|
||||
type TwoFactorSetupStep = "backup" | "enable" | "verify";
|
||||
|
||||
type TwoFactorStepProps = {
|
||||
step: TwoFactorSetupStep;
|
||||
};
|
||||
|
||||
type TwoFactorQRCodeProps = {
|
||||
totpUri: string;
|
||||
};
|
||||
|
||||
export function EnableTwoFactorDialog(_: DialogProps<"auth.two-factor.enable">) {
|
||||
const router = useRouter();
|
||||
|
||||
@@ -345,7 +353,7 @@ function extractSecretFromTotpUri(totpUri: string): string | null {
|
||||
}
|
||||
}
|
||||
|
||||
function TwoFactorDialogTitle({ step }: { step: TwoFactorSetupStep }) {
|
||||
function TwoFactorDialogTitle({ step }: TwoFactorStepProps) {
|
||||
return match(step)
|
||||
.with("enable", () => <Trans>Enable Two-Factor Authentication</Trans>)
|
||||
.with("verify", () => <Trans>Setup Authenticator App</Trans>)
|
||||
@@ -353,7 +361,7 @@ function TwoFactorDialogTitle({ step }: { step: TwoFactorSetupStep }) {
|
||||
.exhaustive();
|
||||
}
|
||||
|
||||
function TwoFactorDialogDescription({ step }: { step: TwoFactorSetupStep }) {
|
||||
function TwoFactorDialogDescription({ step }: TwoFactorStepProps) {
|
||||
return match(step)
|
||||
.with("enable", () => (
|
||||
<Trans>
|
||||
@@ -371,7 +379,7 @@ function TwoFactorDialogDescription({ step }: { step: TwoFactorSetupStep }) {
|
||||
.exhaustive();
|
||||
}
|
||||
|
||||
function TwoFactorQRCode({ totpUri }: { totpUri: string }) {
|
||||
function TwoFactorQRCode({ totpUri }: TwoFactorQRCodeProps) {
|
||||
return (
|
||||
<QRCodeSVG
|
||||
value={totpUri}
|
||||
|
||||
@@ -42,6 +42,7 @@ vi.mock("pdfjs-dist", () => {
|
||||
vi.mock("pdfjs-dist/legacy/build/pdf.mjs", () => pdfjsMock.legacyModule);
|
||||
|
||||
const pdfCanvasModule = import("./pdf-canvas");
|
||||
const pdfCanvasModuleTimeoutMs = 15_000;
|
||||
|
||||
describe("PDF.js browser entrypoints", () => {
|
||||
beforeEach(() => {
|
||||
@@ -60,18 +61,22 @@ describe("PDF.js browser entrypoints", () => {
|
||||
vi.restoreAllMocks();
|
||||
});
|
||||
|
||||
it("loads the canvas preview renderer from the legacy PDF.js runtime", async () => {
|
||||
await expect(pdfCanvasModule).resolves.toEqual(
|
||||
expect.objectContaining({
|
||||
PdfCanvasDocument: expect.any(Function),
|
||||
PdfCanvasPage: expect.any(Function),
|
||||
}),
|
||||
);
|
||||
it(
|
||||
"loads the canvas preview renderer from the legacy PDF.js runtime",
|
||||
async () => {
|
||||
await expect(pdfCanvasModule).resolves.toEqual(
|
||||
expect.objectContaining({
|
||||
PdfCanvasDocument: expect.any(Function),
|
||||
PdfCanvasPage: expect.any(Function),
|
||||
}),
|
||||
);
|
||||
|
||||
expect(pdfjsMock.legacyModule.GlobalWorkerOptions.workerSrc).toContain(
|
||||
"pdfjs-dist/legacy/build/pdf.worker.min.mjs",
|
||||
);
|
||||
});
|
||||
expect(pdfjsMock.legacyModule.GlobalWorkerOptions.workerSrc).toContain(
|
||||
"pdfjs-dist/legacy/build/pdf.worker.min.mjs",
|
||||
);
|
||||
},
|
||||
pdfCanvasModuleTimeoutMs,
|
||||
);
|
||||
|
||||
it("creates thumbnails with the legacy PDF.js runtime", async () => {
|
||||
vi.spyOn(HTMLCanvasElement.prototype, "getContext").mockReturnValue({} as CanvasRenderingContext2D);
|
||||
|
||||
@@ -11,6 +11,18 @@ const previewMock = vi.hoisted(() => ({
|
||||
toBlob: vi.fn(async () => new Blob(["%PDF"], { type: "application/pdf" })),
|
||||
}));
|
||||
|
||||
type PdfCanvasDocumentProps = {
|
||||
children: (document: { numPages: number }) => React.ReactNode;
|
||||
onLoadSuccess: (document: { numPages: number }) => void;
|
||||
};
|
||||
|
||||
type PdfCanvasPageProps = {
|
||||
onLoadSuccess: (pageNumber: number, pageSize: { height: number; width: number }) => void;
|
||||
onRenderSuccess?: () => void;
|
||||
pageNumber: number;
|
||||
totalPages: number;
|
||||
};
|
||||
|
||||
const resumeDataWithPageCount = (pageCount: number): ResumeData => ({
|
||||
...sampleResumeData,
|
||||
metadata: {
|
||||
@@ -35,30 +47,14 @@ vi.mock("./pdf-canvas", async () => {
|
||||
const pdfDocument = { numPages: 1 };
|
||||
|
||||
return {
|
||||
PdfCanvasDocument: ({
|
||||
children,
|
||||
onLoadSuccess,
|
||||
}: {
|
||||
children: (document: typeof pdfDocument) => React.ReactNode;
|
||||
onLoadSuccess: (document: typeof pdfDocument) => void;
|
||||
}) => {
|
||||
PdfCanvasDocument: ({ children, onLoadSuccess }: PdfCanvasDocumentProps) => {
|
||||
React.useEffect(() => {
|
||||
onLoadSuccess(pdfDocument);
|
||||
}, [onLoadSuccess]);
|
||||
|
||||
return React.createElement(React.Fragment, null, children(pdfDocument));
|
||||
},
|
||||
PdfCanvasPage: ({
|
||||
onLoadSuccess,
|
||||
onRenderSuccess,
|
||||
pageNumber,
|
||||
totalPages,
|
||||
}: {
|
||||
onLoadSuccess: (pageNumber: number, pageSize: { height: number; width: number }) => void;
|
||||
onRenderSuccess?: () => void;
|
||||
pageNumber: number;
|
||||
totalPages: number;
|
||||
}) => {
|
||||
PdfCanvasPage: ({ onLoadSuccess, onRenderSuccess, pageNumber, totalPages }: PdfCanvasPageProps) => {
|
||||
React.useEffect(() => {
|
||||
onLoadSuccess(pageNumber, { height: 200, width: 100 });
|
||||
onRenderSuccess?.();
|
||||
|
||||
@@ -8,11 +8,16 @@ import { i18n } from "@lingui/core";
|
||||
import { I18nProvider } from "@lingui/react";
|
||||
import { sampleResumeData } from "@reactive-resume/schema/resume/sample";
|
||||
|
||||
type PdfViewerProps = {
|
||||
className?: string;
|
||||
data: ResumeData;
|
||||
};
|
||||
|
||||
const publicResumeMock = vi.hoisted(() => ({
|
||||
createResumePdfBlob: vi.fn(async () => new Blob(["%PDF"], { type: "application/pdf" })),
|
||||
downloadWithAnchor: vi.fn(),
|
||||
generateFilename: vi.fn((name: string, extension: string) => `${name}.${extension}`),
|
||||
PdfViewer: vi.fn<(_props: { className?: string; data: ResumeData }) => ReactNode>(() => null),
|
||||
PdfViewer: vi.fn<(_props: PdfViewerProps) => ReactNode>(() => null),
|
||||
resume: undefined as
|
||||
| undefined
|
||||
| {
|
||||
|
||||
@@ -23,6 +23,10 @@ import { orpc } from "@/libs/orpc/client";
|
||||
type SavedProvider = RouterOutput["aiProviders"]["list"][number];
|
||||
type AIProviderOption = ComboboxOption<AIProvider> & { defaultBaseURL: string };
|
||||
|
||||
type ProviderRowProps = {
|
||||
provider: SavedProvider;
|
||||
};
|
||||
|
||||
const providerOptions: AIProviderOption[] = [
|
||||
{
|
||||
value: "openai",
|
||||
@@ -110,7 +114,7 @@ function isAiProviderConfigError(error: unknown) {
|
||||
return status === "PRECONDITION_FAILED" || status === 412;
|
||||
}
|
||||
|
||||
function ProviderRow({ provider }: { provider: SavedProvider }) {
|
||||
function ProviderRow({ provider }: ProviderRowProps) {
|
||||
const queryClient = useQueryClient();
|
||||
const invalidate = () => queryClient.invalidateQueries({ queryKey: orpc.aiProviders.list.queryKey() });
|
||||
const { mutate: testProvider, isPending: isTesting } = useMutation(orpc.aiProviders.test.mutationOptions());
|
||||
|
||||
@@ -4,9 +4,11 @@ import { act, renderHook } from "@testing-library/react";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { ConfirmDialogProvider, useConfirm } from "./use-confirm";
|
||||
|
||||
const wrapper = ({ children }: { children: React.ReactNode }) => (
|
||||
<ConfirmDialogProvider>{children}</ConfirmDialogProvider>
|
||||
);
|
||||
type HookWrapperProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
const wrapper = ({ children }: HookWrapperProps) => <ConfirmDialogProvider>{children}</ConfirmDialogProvider>;
|
||||
|
||||
describe("useConfirm", () => {
|
||||
it("throws when used outside ConfirmDialogProvider", () => {
|
||||
|
||||
@@ -27,9 +27,13 @@ type ConfirmContextType = {
|
||||
confirm: (title: string, options?: ConfirmOptions) => Promise<boolean>;
|
||||
};
|
||||
|
||||
type ConfirmDialogProviderProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
const ConfirmContext = React.createContext<ConfirmContextType | null>(null);
|
||||
|
||||
export function ConfirmDialogProvider({ children }: { children: React.ReactNode }) {
|
||||
export function ConfirmDialogProvider({ children }: ConfirmDialogProviderProps) {
|
||||
const [state, setState] = React.useState<ConfirmState>({
|
||||
open: false,
|
||||
resolve: null,
|
||||
|
||||
@@ -5,13 +5,15 @@ import { beforeAll, describe, expect, it } from "vitest";
|
||||
import { i18n } from "@lingui/core";
|
||||
import { PromptDialogProvider, usePrompt } from "./use-prompt";
|
||||
|
||||
type HookWrapperProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
beforeAll(() => {
|
||||
i18n.loadAndActivate({ locale: "en", messages: {} });
|
||||
});
|
||||
|
||||
const wrapper = ({ children }: { children: React.ReactNode }) => (
|
||||
<PromptDialogProvider>{children}</PromptDialogProvider>
|
||||
);
|
||||
const wrapper = ({ children }: HookWrapperProps) => <PromptDialogProvider>{children}</PromptDialogProvider>;
|
||||
|
||||
const clickButton = (re: RegExp) => {
|
||||
const buttons = Array.from(document.body.querySelectorAll<HTMLButtonElement>("button"));
|
||||
|
||||
@@ -32,9 +32,13 @@ type PromptContextType = {
|
||||
prompt: (title: string, options?: PromptOptions) => Promise<string | null>;
|
||||
};
|
||||
|
||||
type PromptDialogProviderProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
const PromptContext = React.createContext<PromptContextType | null>(null);
|
||||
|
||||
export function PromptDialogProvider({ children }: { children: React.ReactNode }) {
|
||||
export function PromptDialogProvider({ children }: PromptDialogProviderProps) {
|
||||
const inputRef = React.useRef<HTMLInputElement>(null);
|
||||
|
||||
const [state, setState] = React.useState<PromptState>({
|
||||
|
||||
@@ -5,8 +5,16 @@ import { describe, expect, it, vi } from "vitest";
|
||||
import { i18n } from "@lingui/core";
|
||||
import { I18nProvider } from "@lingui/react";
|
||||
|
||||
type LinkProps = React.PropsWithChildren<{
|
||||
to: string;
|
||||
}>;
|
||||
|
||||
type LocaleComboboxProps = {
|
||||
render: React.ReactElement;
|
||||
};
|
||||
|
||||
vi.mock("@tanstack/react-router", () => ({
|
||||
Link: ({ children, to, ...rest }: React.PropsWithChildren<{ to: string }>) => (
|
||||
Link: ({ children, to, ...rest }: LinkProps) => (
|
||||
<a href={typeof to === "string" ? to : "#"} {...rest}>
|
||||
{children}
|
||||
</a>
|
||||
@@ -16,7 +24,7 @@ vi.mock("@/components/input/github-stars-button", () => ({
|
||||
GithubStarsButton: () => <div data-testid="github-stars-button" />,
|
||||
}));
|
||||
vi.mock("@/features/locale/combobox", () => ({
|
||||
LocaleCombobox: ({ render: renderProp }: { render: React.ReactElement }) => renderProp,
|
||||
LocaleCombobox: ({ render: renderProp }: LocaleComboboxProps) => renderProp,
|
||||
}));
|
||||
vi.mock("@/features/theme/toggle-button", () => ({
|
||||
ThemeToggleButton: () => <button type="button" data-testid="theme-toggle" />,
|
||||
|
||||
@@ -64,21 +64,106 @@ type AgentAction = AgentThreadDetail["actions"][number];
|
||||
type AgentAttachment = AgentThreadDetail["attachments"][number];
|
||||
type PatchOperation = AgentAction["operations"][number];
|
||||
|
||||
function toRecord(value: unknown) {
|
||||
return typeof value === "object" && value !== null ? (value as Record<string, unknown>) : null;
|
||||
}
|
||||
|
||||
function PatchToolCard({
|
||||
part,
|
||||
action,
|
||||
onRevert,
|
||||
isReverting,
|
||||
}: {
|
||||
type PatchToolCardProps = {
|
||||
part: UIMessage["parts"][number];
|
||||
action: AgentAction | undefined;
|
||||
onRevert: (actionId: string) => void;
|
||||
isReverting: boolean;
|
||||
}) {
|
||||
};
|
||||
|
||||
type StarterPromptMarqueeProps = {
|
||||
onSelect: (prompt: string) => void;
|
||||
};
|
||||
|
||||
type AssistantMarkdownProps = {
|
||||
text: string;
|
||||
};
|
||||
|
||||
type MessagePartProps = {
|
||||
part: UIMessage["parts"][number];
|
||||
isUser: boolean;
|
||||
onAnswer: (toolCallId: string, answer: string) => void;
|
||||
onRevert: (actionId: string) => void;
|
||||
isReverting: boolean;
|
||||
actionsById: Map<string, AgentAction>;
|
||||
};
|
||||
|
||||
type ChatMessageProps = {
|
||||
message: UIMessage;
|
||||
onAnswer: (toolCallId: string, answer: string) => void;
|
||||
onRevert: (actionId: string) => void;
|
||||
isReverting: boolean;
|
||||
actionsById: Map<string, AgentAction>;
|
||||
};
|
||||
|
||||
type AgentChatProps = {
|
||||
threadId: string;
|
||||
initialMessages: UIMessage[];
|
||||
isReadOnly: boolean;
|
||||
readOnlyReason: "archived" | "missing" | null;
|
||||
threadStatus: string;
|
||||
activeRunId: string | null;
|
||||
actions: AgentAction[];
|
||||
onToggleThreads?: () => void;
|
||||
onToggleResume?: () => void;
|
||||
};
|
||||
|
||||
type AgentChatReadOnlyBannerProps = {
|
||||
isReadOnly: boolean;
|
||||
readOnlyReason: "archived" | "missing" | null;
|
||||
};
|
||||
|
||||
type AgentChatMessagesProps = {
|
||||
actionsById: Map<string, AgentAction>;
|
||||
error: Error | undefined;
|
||||
isReadOnly: boolean;
|
||||
isReverting: boolean;
|
||||
isStreaming: boolean;
|
||||
messages: UIMessage[];
|
||||
onAnswer: (toolCallId: string, answer: string) => void;
|
||||
onRevert: (actionId: string) => void;
|
||||
onRetry: () => void;
|
||||
onStarterSelect: (prompt: string) => void;
|
||||
};
|
||||
|
||||
type AgentChatHeaderProps = {
|
||||
isArchived: boolean;
|
||||
isArchivePending: boolean;
|
||||
isDeletePending: boolean;
|
||||
onArchive: () => void;
|
||||
onCopyConversation: () => void;
|
||||
onCopyConversationJson: () => void;
|
||||
onDelete: () => void;
|
||||
onToggleResume?: () => void;
|
||||
onToggleThreads?: () => void;
|
||||
};
|
||||
|
||||
type AgentChatComposerProps = {
|
||||
fileInputRef: React.RefObject<HTMLInputElement | null>;
|
||||
input: string;
|
||||
isReadOnly: boolean;
|
||||
isStreaming: boolean;
|
||||
isUploading: boolean;
|
||||
pendingAttachments: Array<Pick<AgentAttachment, "filename" | "id" | "mediaType">>;
|
||||
onInputChange: (value: string) => void;
|
||||
onSend: () => void;
|
||||
onStopRun: () => void;
|
||||
onUploadFiles: (files: FileList | null) => void;
|
||||
};
|
||||
|
||||
type ToolbarButtonProps = React.ComponentProps<typeof Button> & {
|
||||
label: string;
|
||||
};
|
||||
|
||||
type ResumePaneProps = {
|
||||
resume: AgentThreadDetail["resume"];
|
||||
};
|
||||
|
||||
function toRecord(value: unknown) {
|
||||
return typeof value === "object" && value !== null ? (value as Record<string, unknown>) : null;
|
||||
}
|
||||
|
||||
function PatchToolCard({ part, action, onRevert, isReverting }: PatchToolCardProps) {
|
||||
const partRecord = part as Record<string, unknown>;
|
||||
const state = typeof partRecord.state === "string" ? partRecord.state : null;
|
||||
const input = toRecord(partRecord.input);
|
||||
@@ -235,7 +320,7 @@ function chunkPrompts(prompts: string[], columns: number) {
|
||||
);
|
||||
}
|
||||
|
||||
function StarterPromptMarquee({ onSelect }: { onSelect: (prompt: string) => void }) {
|
||||
function StarterPromptMarquee({ onSelect }: StarterPromptMarqueeProps) {
|
||||
const prompts = [
|
||||
t`Tailor this resume to a product manager job description and emphasize roadmap ownership, stakeholder communication, and measurable launch outcomes.`,
|
||||
t`Compare this resume against this role URL and update keywords while keeping the voice concise and credible.`,
|
||||
@@ -297,7 +382,7 @@ function getMessagePartKey(messageId: string, part: UIMessage["parts"][number])
|
||||
return `${messageId}-${part.type}-${JSON.stringify(part)}`;
|
||||
}
|
||||
|
||||
function AssistantMarkdown({ text }: { text: string }) {
|
||||
function AssistantMarkdown({ text }: AssistantMarkdownProps) {
|
||||
return (
|
||||
<ReactMarkdown
|
||||
skipHtml
|
||||
@@ -331,21 +416,7 @@ function AssistantMarkdown({ text }: { text: string }) {
|
||||
);
|
||||
}
|
||||
|
||||
function MessagePart({
|
||||
part,
|
||||
isUser,
|
||||
onAnswer,
|
||||
onRevert,
|
||||
isReverting,
|
||||
actionsById,
|
||||
}: {
|
||||
part: UIMessage["parts"][number];
|
||||
isUser: boolean;
|
||||
onAnswer: (toolCallId: string, answer: string) => void;
|
||||
onRevert: (actionId: string) => void;
|
||||
isReverting: boolean;
|
||||
actionsById: Map<string, AgentAction>;
|
||||
}) {
|
||||
function MessagePart({ part, isUser, onAnswer, onRevert, isReverting, actionsById }: MessagePartProps) {
|
||||
if (part.type === "text") {
|
||||
return isUser ? (
|
||||
<div className="whitespace-pre-wrap leading-relaxed">{part.text}</div>
|
||||
@@ -427,19 +498,7 @@ function MessagePart({
|
||||
return null;
|
||||
}
|
||||
|
||||
function ChatMessage({
|
||||
message,
|
||||
onAnswer,
|
||||
onRevert,
|
||||
isReverting,
|
||||
actionsById,
|
||||
}: {
|
||||
message: UIMessage;
|
||||
onAnswer: (toolCallId: string, answer: string) => void;
|
||||
onRevert: (actionId: string) => void;
|
||||
isReverting: boolean;
|
||||
actionsById: Map<string, AgentAction>;
|
||||
}) {
|
||||
function ChatMessage({ message, onAnswer, onRevert, isReverting, actionsById }: ChatMessageProps) {
|
||||
const isUser = message.role === "user";
|
||||
|
||||
return (
|
||||
@@ -478,17 +537,7 @@ function AgentChat({
|
||||
actions,
|
||||
onToggleThreads,
|
||||
onToggleResume,
|
||||
}: {
|
||||
threadId: string;
|
||||
initialMessages: UIMessage[];
|
||||
isReadOnly: boolean;
|
||||
readOnlyReason: "archived" | "missing" | null;
|
||||
threadStatus: string;
|
||||
activeRunId: string | null;
|
||||
actions: AgentAction[];
|
||||
onToggleThreads?: () => void;
|
||||
onToggleResume?: () => void;
|
||||
}) {
|
||||
}: AgentChatProps) {
|
||||
const queryClient = useQueryClient();
|
||||
const navigate = useNavigate();
|
||||
const confirm = useConfirm();
|
||||
@@ -767,13 +816,7 @@ function AgentChat({
|
||||
);
|
||||
}
|
||||
|
||||
function AgentChatReadOnlyBanner({
|
||||
isReadOnly,
|
||||
readOnlyReason,
|
||||
}: {
|
||||
isReadOnly: boolean;
|
||||
readOnlyReason: "archived" | "missing" | null;
|
||||
}) {
|
||||
function AgentChatReadOnlyBanner({ isReadOnly, readOnlyReason }: AgentChatReadOnlyBannerProps) {
|
||||
if (!isReadOnly) return null;
|
||||
|
||||
return (
|
||||
@@ -798,18 +841,7 @@ function AgentChatMessages({
|
||||
onRevert,
|
||||
onRetry,
|
||||
onStarterSelect,
|
||||
}: {
|
||||
actionsById: Map<string, AgentAction>;
|
||||
error: Error | undefined;
|
||||
isReadOnly: boolean;
|
||||
isReverting: boolean;
|
||||
isStreaming: boolean;
|
||||
messages: UIMessage[];
|
||||
onAnswer: (toolCallId: string, answer: string) => void;
|
||||
onRevert: (actionId: string) => void;
|
||||
onRetry: () => void;
|
||||
onStarterSelect: (prompt: string) => void;
|
||||
}) {
|
||||
}: AgentChatMessagesProps) {
|
||||
return (
|
||||
<ScrollArea className="min-h-0 flex-1">
|
||||
<div className="mx-auto flex max-w-3xl flex-col gap-4 p-4">
|
||||
@@ -868,17 +900,7 @@ function AgentChatHeader({
|
||||
onDelete,
|
||||
onToggleResume,
|
||||
onToggleThreads,
|
||||
}: {
|
||||
isArchived: boolean;
|
||||
isArchivePending: boolean;
|
||||
isDeletePending: boolean;
|
||||
onArchive: () => void;
|
||||
onCopyConversation: () => void;
|
||||
onCopyConversationJson: () => void;
|
||||
onDelete: () => void;
|
||||
onToggleResume?: () => void;
|
||||
onToggleThreads?: () => void;
|
||||
}) {
|
||||
}: AgentChatHeaderProps) {
|
||||
return (
|
||||
<div className="flex h-14 shrink-0 items-center justify-between border-b px-4">
|
||||
<div className="flex min-w-0 items-center gap-2">
|
||||
@@ -957,18 +979,7 @@ function AgentChatComposer({
|
||||
onSend,
|
||||
onStopRun,
|
||||
onUploadFiles,
|
||||
}: {
|
||||
fileInputRef: React.RefObject<HTMLInputElement | null>;
|
||||
input: string;
|
||||
isReadOnly: boolean;
|
||||
isStreaming: boolean;
|
||||
isUploading: boolean;
|
||||
pendingAttachments: Array<Pick<AgentAttachment, "filename" | "id" | "mediaType">>;
|
||||
onInputChange: (value: string) => void;
|
||||
onSend: () => void;
|
||||
onStopRun: () => void;
|
||||
onUploadFiles: (files: FileList | null) => void;
|
||||
}) {
|
||||
}: AgentChatComposerProps) {
|
||||
return (
|
||||
<form
|
||||
className="border-t p-3"
|
||||
@@ -1066,13 +1077,7 @@ function getInitialPreviewZoom() {
|
||||
return Number.isFinite(stored) ? clampPreviewZoom(stored) : DEFAULT_PREVIEW_ZOOM;
|
||||
}
|
||||
|
||||
function ToolbarButton({
|
||||
label,
|
||||
children,
|
||||
...props
|
||||
}: React.ComponentProps<typeof Button> & {
|
||||
label: string;
|
||||
}) {
|
||||
function ToolbarButton({ label, children, ...props }: ToolbarButtonProps) {
|
||||
return (
|
||||
<Tooltip>
|
||||
<TooltipTrigger
|
||||
@@ -1089,7 +1094,7 @@ function ToolbarButton({
|
||||
);
|
||||
}
|
||||
|
||||
function ResumePane({ resume }: { resume: AgentThreadDetail["resume"] }) {
|
||||
function ResumePane({ resume }: ResumePaneProps) {
|
||||
const [zoom, setZoom] = useState(getInitialPreviewZoom);
|
||||
const [isPrinting, setIsPrinting] = useState(false);
|
||||
|
||||
|
||||
@@ -15,6 +15,10 @@ import { Combobox } from "@/components/ui/combobox";
|
||||
import { getOrpcErrorMessage } from "@/libs/error-message";
|
||||
import { orpc } from "@/libs/orpc/client";
|
||||
|
||||
type NewThreadSetupProps = {
|
||||
resumeId?: string;
|
||||
};
|
||||
|
||||
function providerLabel(provider: { label: string; provider: AIProvider; model: string }) {
|
||||
return `${provider.label} · ${provider.provider} · ${provider.model}`;
|
||||
}
|
||||
@@ -27,7 +31,7 @@ function isAgentConfigError(error: unknown) {
|
||||
return typeof message === "string" && /REDIS_URL|ENCRYPTION_SECRET/.test(message);
|
||||
}
|
||||
|
||||
export function NewThreadSetup({ resumeId }: { resumeId?: string }) {
|
||||
export function NewThreadSetup({ resumeId }: NewThreadSetupProps) {
|
||||
const isClient = useIsClient();
|
||||
const navigate = useNavigate();
|
||||
const {
|
||||
|
||||
@@ -29,6 +29,18 @@ import { orpc } from "@/libs/orpc/client";
|
||||
|
||||
type AgentThreadSummary = RouterOutput["agent"]["threads"]["list"][number];
|
||||
|
||||
type ThreadActionsProps = {
|
||||
thread: AgentThreadSummary;
|
||||
activeThreadId: string | null;
|
||||
};
|
||||
|
||||
type ThreadRowProps = ThreadActionsProps;
|
||||
|
||||
type AgentThreadSidebarProps = {
|
||||
activeThreadId?: string | null;
|
||||
className?: string;
|
||||
};
|
||||
|
||||
const RELATIVE_TIME_DIVISIONS: Array<{ amount: number; unit: Intl.RelativeTimeFormatUnit }> = [
|
||||
{ amount: 31_536_000_000, unit: "year" },
|
||||
{ amount: 2_592_000_000, unit: "month" },
|
||||
@@ -51,7 +63,7 @@ function formatRelativeTime(value: Date | string, formatter: Intl.RelativeTimeFo
|
||||
return formatter.format(Math.round(diffMs / division.amount), division.unit);
|
||||
}
|
||||
|
||||
function ThreadActions({ thread, activeThreadId }: { thread: AgentThreadSummary; activeThreadId: string | null }) {
|
||||
function ThreadActions({ thread, activeThreadId }: ThreadActionsProps) {
|
||||
const navigate = useNavigate();
|
||||
const confirm = useConfirm();
|
||||
const queryClient = useQueryClient();
|
||||
@@ -127,7 +139,7 @@ function ThreadActions({ thread, activeThreadId }: { thread: AgentThreadSummary;
|
||||
);
|
||||
}
|
||||
|
||||
function ThreadRow({ thread, activeThreadId }: { thread: AgentThreadSummary; activeThreadId: string | null }) {
|
||||
function ThreadRow({ thread, activeThreadId }: ThreadRowProps) {
|
||||
const { i18n } = useLingui();
|
||||
const relativeTimeFormatter = useMemo(
|
||||
() => Reflect.construct(Intl.RelativeTimeFormat, [i18n.locale, { numeric: "auto" }]) as Intl.RelativeTimeFormat,
|
||||
@@ -160,13 +172,7 @@ function ThreadRow({ thread, activeThreadId }: { thread: AgentThreadSummary; act
|
||||
);
|
||||
}
|
||||
|
||||
export function AgentThreadSidebar({
|
||||
activeThreadId = null,
|
||||
className,
|
||||
}: {
|
||||
activeThreadId?: string | null;
|
||||
className?: string;
|
||||
}) {
|
||||
export function AgentThreadSidebar({ activeThreadId = null, className }: AgentThreadSidebarProps) {
|
||||
const { data: threads, isLoading } = useQuery(orpc.agent.threads.list.queryOptions());
|
||||
|
||||
return (
|
||||
|
||||
@@ -133,7 +133,11 @@ export function CustomSectionBuilder() {
|
||||
);
|
||||
}
|
||||
|
||||
function CustomSectionContainer({ section }: { section: CustomSection }) {
|
||||
type CustomSectionContainerProps = {
|
||||
section: CustomSection;
|
||||
};
|
||||
|
||||
function CustomSectionContainer({ section }: CustomSectionContainerProps) {
|
||||
const { openDialog } = useDialogStore();
|
||||
const updateResumeData = useUpdateResumeData();
|
||||
|
||||
@@ -203,7 +207,11 @@ function CustomSectionContainer({ section }: { section: CustomSection }) {
|
||||
);
|
||||
}
|
||||
|
||||
function CustomSectionDropdownMenu({ section }: { section: CustomSection }) {
|
||||
type CustomSectionDropdownMenuProps = {
|
||||
section: CustomSection;
|
||||
};
|
||||
|
||||
function CustomSectionDropdownMenu({ section }: CustomSectionDropdownMenuProps) {
|
||||
const confirm = useConfirm();
|
||||
const { openDialog } = useDialogStore();
|
||||
const updateResumeData = useUpdateResumeData();
|
||||
|
||||
+16
-3
@@ -61,6 +61,19 @@ const experienceItems = vi.hoisted(() => [
|
||||
},
|
||||
]);
|
||||
|
||||
type SectionBaseProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
type SectionAddItemButtonProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
type SectionItemProps = {
|
||||
title: string;
|
||||
subtitle: string;
|
||||
};
|
||||
|
||||
vi.mock("@/features/resume/builder/draft", () => ({
|
||||
useCurrentResume: () => ({
|
||||
data: {
|
||||
@@ -73,11 +86,11 @@ vi.mock("@/features/resume/builder/draft", () => ({
|
||||
useUpdateResumeData: () => vi.fn(),
|
||||
}));
|
||||
vi.mock("../shared/section-base", () => ({
|
||||
SectionBase: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
|
||||
SectionBase: ({ children }: SectionBaseProps) => <div>{children}</div>,
|
||||
}));
|
||||
vi.mock("../shared/section-item", () => ({
|
||||
SectionAddItemButton: ({ children }: { children: React.ReactNode }) => <button type="button">{children}</button>,
|
||||
SectionItem: ({ title, subtitle }: { title: string; subtitle: string }) => (
|
||||
SectionAddItemButton: ({ children }: SectionAddItemButtonProps) => <button type="button">{children}</button>,
|
||||
SectionItem: ({ title, subtitle }: SectionItemProps) => (
|
||||
<div>
|
||||
<span data-testid="item-title">{title}</span>
|
||||
<span data-testid="item-subtitle">{subtitle}</span>
|
||||
|
||||
+17
-3
@@ -72,6 +72,20 @@ const sections = vi.hoisted(() => ({
|
||||
],
|
||||
}));
|
||||
|
||||
type SectionBaseProps = {
|
||||
children: React.ReactNode;
|
||||
className?: string;
|
||||
};
|
||||
|
||||
type SectionAddItemButtonProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
type SectionItemProps = {
|
||||
title: string;
|
||||
subtitle: string;
|
||||
};
|
||||
|
||||
vi.mock("@/features/resume/builder/draft", () => ({
|
||||
useCurrentResume: () => ({
|
||||
data: {
|
||||
@@ -89,19 +103,19 @@ vi.mock("@/features/resume/builder/draft", () => ({
|
||||
useUpdateResumeData: () => vi.fn(),
|
||||
}));
|
||||
vi.mock("../shared/section-base", () => ({
|
||||
SectionBase: ({ children, className }: { children: React.ReactNode; className?: string }) => (
|
||||
SectionBase: ({ children, className }: SectionBaseProps) => (
|
||||
<div className={className} data-testid="section-base">
|
||||
{children}
|
||||
</div>
|
||||
),
|
||||
}));
|
||||
vi.mock("../shared/section-item", () => ({
|
||||
SectionAddItemButton: ({ children }: { children: React.ReactNode }) => (
|
||||
SectionAddItemButton: ({ children }: SectionAddItemButtonProps) => (
|
||||
<button type="button" data-testid="add-button">
|
||||
{children}
|
||||
</button>
|
||||
),
|
||||
SectionItem: ({ title, subtitle }: { title: string; subtitle: string }) => (
|
||||
SectionItem: ({ title, subtitle }: SectionItemProps) => (
|
||||
<div>
|
||||
<span data-testid="item-title">{title}</span>
|
||||
<span data-testid="item-subtitle">{subtitle}</span>
|
||||
|
||||
@@ -32,6 +32,18 @@ export function PictureSectionBuilder() {
|
||||
);
|
||||
}
|
||||
|
||||
type PicturePreviewControlsProps = {
|
||||
fileInputRef: React.RefObject<HTMLInputElement | null>;
|
||||
form: PictureSettingsForm;
|
||||
normalizedPictureUrl: string;
|
||||
picture: PictureValues;
|
||||
pictureSrc: string;
|
||||
onAutoSave: () => void;
|
||||
onDeletePicture: () => void;
|
||||
onSelectPicture: () => void;
|
||||
onUploadPicture: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
||||
};
|
||||
|
||||
function PicturePreviewControls({
|
||||
fileInputRef,
|
||||
form,
|
||||
@@ -42,17 +54,7 @@ function PicturePreviewControls({
|
||||
onDeletePicture,
|
||||
onSelectPicture,
|
||||
onUploadPicture,
|
||||
}: {
|
||||
fileInputRef: React.RefObject<HTMLInputElement | null>;
|
||||
form: PictureSettingsForm;
|
||||
normalizedPictureUrl: string;
|
||||
picture: PictureValues;
|
||||
pictureSrc: string;
|
||||
onAutoSave: () => void;
|
||||
onDeletePicture: () => void;
|
||||
onSelectPicture: () => void;
|
||||
onUploadPicture: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
||||
}) {
|
||||
}: PicturePreviewControlsProps) {
|
||||
return (
|
||||
<div className="flex items-center gap-x-4">
|
||||
<input
|
||||
@@ -122,7 +124,12 @@ function PicturePreviewControls({
|
||||
);
|
||||
}
|
||||
|
||||
function PictureGeometryFields({ form, onAutoSave }: { form: PictureSettingsForm; onAutoSave: () => void }) {
|
||||
type PictureGeometryFieldsProps = {
|
||||
form: PictureSettingsForm;
|
||||
onAutoSave: () => void;
|
||||
};
|
||||
|
||||
function PictureGeometryFields({ form, onAutoSave }: PictureGeometryFieldsProps) {
|
||||
return (
|
||||
<>
|
||||
<form.Field name="size">
|
||||
|
||||
@@ -26,6 +26,20 @@ const sectionItems = vi.hoisted(() => [
|
||||
},
|
||||
]);
|
||||
|
||||
type SectionBaseProps = {
|
||||
children: React.ReactNode;
|
||||
className?: string;
|
||||
};
|
||||
|
||||
type SectionAddItemButtonProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
type SectionItemProps = {
|
||||
title: string;
|
||||
subtitle: string;
|
||||
};
|
||||
|
||||
vi.mock("@/features/resume/builder/draft", () => ({
|
||||
useCurrentResume: () => ({
|
||||
data: {
|
||||
@@ -35,15 +49,15 @@ vi.mock("@/features/resume/builder/draft", () => ({
|
||||
useUpdateResumeData: () => vi.fn(),
|
||||
}));
|
||||
vi.mock("../shared/section-base", () => ({
|
||||
SectionBase: ({ children, className }: { children: React.ReactNode; className?: string }) => (
|
||||
SectionBase: ({ children, className }: SectionBaseProps) => (
|
||||
<div className={className} data-testid="section-base">
|
||||
{children}
|
||||
</div>
|
||||
),
|
||||
}));
|
||||
vi.mock("../shared/section-item", () => ({
|
||||
SectionAddItemButton: ({ children }: { children: React.ReactNode }) => <button type="button">{children}</button>,
|
||||
SectionItem: ({ title, subtitle }: { title: string; subtitle: string }) => (
|
||||
SectionAddItemButton: ({ children }: SectionAddItemButtonProps) => <button type="button">{children}</button>,
|
||||
SectionItem: ({ title, subtitle }: SectionItemProps) => (
|
||||
<div>
|
||||
<span data-testid="item-title">{title}</span>
|
||||
<span data-testid="item-subtitle">{subtitle}</span>
|
||||
|
||||
@@ -35,6 +35,19 @@ const items = vi.hoisted(() => [
|
||||
},
|
||||
]);
|
||||
|
||||
type SectionBaseProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
type SectionAddItemButtonProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
type SectionItemProps = {
|
||||
title: string;
|
||||
subtitle?: string;
|
||||
};
|
||||
|
||||
vi.mock("@/features/resume/builder/draft", () => ({
|
||||
useCurrentResume: () => ({
|
||||
data: { sections: { projects: { title: "Projects", columns: 1, hidden: false, items } } },
|
||||
@@ -42,11 +55,11 @@ vi.mock("@/features/resume/builder/draft", () => ({
|
||||
useUpdateResumeData: () => vi.fn(),
|
||||
}));
|
||||
vi.mock("../shared/section-base", () => ({
|
||||
SectionBase: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
|
||||
SectionBase: ({ children }: SectionBaseProps) => <div>{children}</div>,
|
||||
}));
|
||||
vi.mock("../shared/section-item", () => ({
|
||||
SectionAddItemButton: ({ children }: { children: React.ReactNode }) => <button type="button">{children}</button>,
|
||||
SectionItem: ({ title, subtitle }: { title: string; subtitle?: string }) => (
|
||||
SectionAddItemButton: ({ children }: SectionAddItemButtonProps) => <button type="button">{children}</button>,
|
||||
SectionItem: ({ title, subtitle }: SectionItemProps) => (
|
||||
<div>
|
||||
<span data-testid="item-title">{title}</span>
|
||||
<span data-testid="item-subtitle">{subtitle ?? "<undefined>"}</span>
|
||||
|
||||
@@ -10,6 +10,20 @@ const sectionItems = vi.hoisted(() => [
|
||||
{ id: "s2", name: "Go", proficiency: "Intermediate", level: 3, keywords: [], description: "", hidden: false },
|
||||
]);
|
||||
|
||||
type SectionBaseProps = {
|
||||
children: React.ReactNode;
|
||||
className?: string;
|
||||
};
|
||||
|
||||
type SectionAddItemButtonProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
type SectionItemProps = {
|
||||
title: string;
|
||||
subtitle: string;
|
||||
};
|
||||
|
||||
vi.mock("@/features/resume/builder/draft", () => ({
|
||||
useCurrentResume: () => ({
|
||||
data: { sections: { skills: { title: "Skills", columns: 1, hidden: false, items: sectionItems } } },
|
||||
@@ -17,15 +31,15 @@ vi.mock("@/features/resume/builder/draft", () => ({
|
||||
useUpdateResumeData: () => vi.fn(),
|
||||
}));
|
||||
vi.mock("../shared/section-base", () => ({
|
||||
SectionBase: ({ children, className }: { children: React.ReactNode; className?: string }) => (
|
||||
SectionBase: ({ children, className }: SectionBaseProps) => (
|
||||
<div className={className} data-testid="section-base">
|
||||
{children}
|
||||
</div>
|
||||
),
|
||||
}));
|
||||
vi.mock("../shared/section-item", () => ({
|
||||
SectionAddItemButton: ({ children }: { children: React.ReactNode }) => <button type="button">{children}</button>,
|
||||
SectionItem: ({ title, subtitle }: { title: string; subtitle: string }) => (
|
||||
SectionAddItemButton: ({ children }: SectionAddItemButtonProps) => <button type="button">{children}</button>,
|
||||
SectionItem: ({ title, subtitle }: SectionItemProps) => (
|
||||
<div>
|
||||
<span data-testid="item-title">{title}</span>
|
||||
<span data-testid="item-subtitle">{subtitle}</span>
|
||||
|
||||
+35
-5
@@ -18,8 +18,12 @@ const styleRules = vi.hoisted<StyleRule[]>(() => [
|
||||
},
|
||||
]);
|
||||
|
||||
type SectionBaseProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
vi.mock("../shared/section-base", () => ({
|
||||
SectionBase: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
|
||||
SectionBase: ({ children }: SectionBaseProps) => <div>{children}</div>,
|
||||
}));
|
||||
|
||||
vi.mock("@/features/resume/builder/draft", () => ({
|
||||
@@ -77,6 +81,15 @@ describe("CustomStylesSectionBuilder", () => {
|
||||
expect(screen.getByLabelText("Target Scope")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Style Slot")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Text Color")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Text Color").parentElement).toHaveClass("gap-3");
|
||||
expect(screen.getByLabelText("Text Color").parentElement?.parentElement?.parentElement).toHaveClass(
|
||||
"grid-cols-1",
|
||||
"@min-[20rem]:grid-cols-2",
|
||||
"@min-[35rem]:grid-cols-4",
|
||||
);
|
||||
expect(screen.getByLabelText("Text Color").parentElement?.parentElement?.parentElement).not.toHaveClass(
|
||||
"grid-cols-[repeat(auto-fit,minmax(8rem,1fr))]",
|
||||
);
|
||||
expect(screen.getByLabelText("Text Decoration Color")).toBeInTheDocument();
|
||||
expect(screen.getByRole("heading", { name: "Color" })).toBeInTheDocument();
|
||||
expect(screen.getByRole("heading", { name: "Text" })).toBeInTheDocument();
|
||||
@@ -90,6 +103,7 @@ describe("CustomStylesSectionBuilder", () => {
|
||||
expect(screen.getByLabelText("Text Align")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Text Transform")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Opacity")).toBeInTheDocument();
|
||||
expect(screen.getByText("Padding")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Margin Top")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Margin Right")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Margin Bottom")).toBeInTheDocument();
|
||||
@@ -97,7 +111,14 @@ describe("CustomStylesSectionBuilder", () => {
|
||||
expect(screen.getByLabelText("Row Gap")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Column Gap")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Border Style")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Border Width").parentElement?.parentElement).toHaveClass(
|
||||
"grid-cols-1",
|
||||
"@min-[20rem]:grid-cols-2",
|
||||
"@min-[35rem]:grid-cols-4",
|
||||
);
|
||||
fireEvent.click(screen.getByLabelText("Style Slot"));
|
||||
expect(await screen.findByText("Section")).toBeInTheDocument();
|
||||
expect(screen.getByText("Rich text")).toBeInTheDocument();
|
||||
expect(await screen.findByRole("option", { name: "Section heading" })).toBeInTheDocument();
|
||||
expect(screen.getByRole("option", { name: "List" })).toBeInTheDocument();
|
||||
expect(screen.getByRole("option", { name: "List item content" })).toBeInTheDocument();
|
||||
@@ -147,14 +168,16 @@ describe("CustomStylesSectionBuilder", () => {
|
||||
styleRules.splice(0, styleRules.length);
|
||||
renderCustomStyles();
|
||||
|
||||
expect(screen.queryByLabelText("Padding")).not.toBeInTheDocument();
|
||||
expect(screen.getByText("Padding")).toBeInTheDocument();
|
||||
expect(screen.getByText("Padding")).toHaveClass("shrink-0");
|
||||
expect(screen.getByText("Padding").parentElement).toHaveClass("flex");
|
||||
expect(screen.queryByText("Padding Top")).not.toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Padding Top")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Padding Right")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Padding Bottom")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Padding Left")).toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Padding Top").closest("div")?.parentElement).toHaveClass(
|
||||
"grid-cols-[repeat(auto-fit,minmax(7rem,1fr))]",
|
||||
);
|
||||
expect(screen.getByLabelText("Padding Top")).toHaveAttribute("placeholder", "top");
|
||||
expect(screen.getByLabelText("Padding Right")).toHaveClass("text-center", "tabular-nums");
|
||||
|
||||
fireEvent.change(screen.getByLabelText("Padding Top"), { target: { value: "12" } });
|
||||
|
||||
@@ -200,8 +223,15 @@ describe("CustomStylesSectionBuilder", () => {
|
||||
styleRules.splice(0, styleRules.length);
|
||||
renderCustomStyles();
|
||||
|
||||
expect(screen.getByText("Margin")).toBeInTheDocument();
|
||||
expect(screen.getByText("Margin")).toHaveClass("shrink-0");
|
||||
expect(screen.queryByText("Margin Bottom")).not.toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Margin Bottom")).toHaveAttribute("min", "-72");
|
||||
expect(screen.getByLabelText("Margin Bottom")).toHaveAttribute("placeholder", "bottom");
|
||||
expect(screen.getByText("Gap")).toBeInTheDocument();
|
||||
expect(screen.queryByText("Row Gap")).not.toBeInTheDocument();
|
||||
expect(screen.getByLabelText("Row Gap")).toHaveAttribute("min", "-72");
|
||||
expect(screen.getByLabelText("Row Gap")).toHaveAttribute("placeholder", "row");
|
||||
|
||||
fireEvent.change(screen.getByLabelText("Margin Bottom"), { target: { value: "-10" } });
|
||||
fireEvent.change(screen.getByLabelText("Row Gap"), { target: { value: "-6" } });
|
||||
|
||||
@@ -57,6 +57,7 @@ const styleSlotOptions: StyleSlotOption[] = [
|
||||
const styleSlotComboboxOptions: ComboboxOption<StyleSlot>[] = styleSlotOptions.map((option) => ({
|
||||
value: option.value,
|
||||
label: option.label,
|
||||
group: option.group,
|
||||
keywords: [option.group],
|
||||
}));
|
||||
|
||||
@@ -94,7 +95,9 @@ const borderStyleOptions = [
|
||||
] as const satisfies readonly { value: NonNullable<StyleIntent["borderStyle"]>; label: string }[];
|
||||
|
||||
const controlGridClassName = "grid grid-cols-[repeat(auto-fit,minmax(8rem,1fr))] gap-3";
|
||||
const compactControlGridClassName = "grid grid-cols-[repeat(auto-fit,minmax(7rem,1fr))] gap-3";
|
||||
const exactFourControlGridClassName = "grid grid-cols-1 gap-3 @min-[20rem]:grid-cols-2 @min-[35rem]:grid-cols-4";
|
||||
const compactSpacingInputClassName =
|
||||
"h-8 w-18 max-w-18 min-w-0 px-1.5 text-center text-xs tabular-nums placeholder:text-[0.68rem] placeholder:uppercase placeholder:tracking-wide";
|
||||
|
||||
export function CustomStylesSectionBuilder() {
|
||||
return (
|
||||
@@ -270,7 +273,13 @@ function CustomStylesSectionForm() {
|
||||
);
|
||||
}
|
||||
|
||||
function Field({ label, id, children }: { label: string; id: string; children: ReactNode }) {
|
||||
type FieldProps = {
|
||||
label: string;
|
||||
id: string;
|
||||
children: ReactNode;
|
||||
};
|
||||
|
||||
function Field({ label, id, children }: FieldProps) {
|
||||
return (
|
||||
<div className="min-w-0 space-y-2">
|
||||
<Label htmlFor={id} className="block min-w-0 text-pretty leading-snug">
|
||||
@@ -281,24 +290,19 @@ function Field({ label, id, children }: { label: string; id: string; children: R
|
||||
);
|
||||
}
|
||||
|
||||
function ColorField({
|
||||
label,
|
||||
id,
|
||||
value,
|
||||
placeholder,
|
||||
fallback,
|
||||
onChange,
|
||||
}: {
|
||||
type ColorFieldProps = {
|
||||
label: string;
|
||||
id: string;
|
||||
value: string | undefined;
|
||||
placeholder?: string;
|
||||
fallback: string;
|
||||
onChange: (value: string | undefined) => void;
|
||||
}) {
|
||||
};
|
||||
|
||||
function ColorField({ label, id, value, placeholder, fallback, onChange }: ColorFieldProps) {
|
||||
return (
|
||||
<Field label={label} id={id}>
|
||||
<div className="flex min-w-0 items-center gap-2">
|
||||
<div className="flex min-w-0 items-center gap-3">
|
||||
<ColorPicker value={value ?? fallback} defaultValue={fallback} onChange={(color) => onChange(color)} />
|
||||
<Input
|
||||
id={id}
|
||||
@@ -312,15 +316,7 @@ function ColorField({
|
||||
);
|
||||
}
|
||||
|
||||
function NumberInput({
|
||||
label,
|
||||
id,
|
||||
value,
|
||||
min,
|
||||
max,
|
||||
step = 1,
|
||||
onChange,
|
||||
}: {
|
||||
type NumberInputProps = {
|
||||
label: string;
|
||||
id?: string;
|
||||
value: number | undefined;
|
||||
@@ -328,7 +324,9 @@ function NumberInput({
|
||||
max: number;
|
||||
step?: number;
|
||||
onChange: (value: number | undefined) => void;
|
||||
}) {
|
||||
};
|
||||
|
||||
function NumberInput({ label, id, value, min, max, step = 1, onChange }: NumberInputProps) {
|
||||
const inputId = id ?? `style-${label.toLowerCase().replaceAll(" ", "-")}`;
|
||||
|
||||
return (
|
||||
@@ -350,19 +348,15 @@ function NumberInput({
|
||||
);
|
||||
}
|
||||
|
||||
function AppliedRulesList({
|
||||
data,
|
||||
rules,
|
||||
onToggleRule,
|
||||
onEditRule,
|
||||
onDeleteRule,
|
||||
}: {
|
||||
type AppliedRulesListProps = {
|
||||
data: ResumeData;
|
||||
rules: StyleRule[];
|
||||
onToggleRule: (ruleId: string, enabled: boolean) => void;
|
||||
onEditRule: (rule: StyleRule) => void;
|
||||
onDeleteRule: (ruleId: string) => void;
|
||||
}) {
|
||||
};
|
||||
|
||||
function AppliedRulesList({ data, rules, onToggleRule, onEditRule, onDeleteRule }: AppliedRulesListProps) {
|
||||
return (
|
||||
<section className="space-y-3">
|
||||
<div className="space-y-0.5">
|
||||
@@ -396,19 +390,15 @@ function AppliedRulesList({
|
||||
);
|
||||
}
|
||||
|
||||
function AppliedRuleCard({
|
||||
data,
|
||||
rule,
|
||||
onToggleRule,
|
||||
onEditRule,
|
||||
onDeleteRule,
|
||||
}: {
|
||||
type AppliedRuleCardProps = {
|
||||
data: ResumeData;
|
||||
rule: StyleRule;
|
||||
onToggleRule: (ruleId: string, enabled: boolean) => void;
|
||||
onEditRule: (rule: StyleRule) => void;
|
||||
onDeleteRule: (ruleId: string) => void;
|
||||
}) {
|
||||
};
|
||||
|
||||
function AppliedRuleCard({ data, rule, onToggleRule, onEditRule, onDeleteRule }: AppliedRuleCardProps) {
|
||||
const slots = getConfiguredSlots(rule);
|
||||
const primaryIntent = slots[0] ? rule.slots[slots[0]] : undefined;
|
||||
const fallbackLabel = getRuleFallbackLabel(data, rule);
|
||||
@@ -462,7 +452,12 @@ function AppliedRuleCard({
|
||||
);
|
||||
}
|
||||
|
||||
function RuleScopePill({ target, slot }: { target: string; slot: string }) {
|
||||
type RuleScopePillProps = {
|
||||
target: string;
|
||||
slot: string;
|
||||
};
|
||||
|
||||
function RuleScopePill({ target, slot }: RuleScopePillProps) {
|
||||
return (
|
||||
<div className="inline-flex max-w-full overflow-hidden rounded-sm border border-border/80 bg-background text-xs shadow-xs">
|
||||
<span className="min-w-0 max-w-32 truncate bg-secondary px-2.5 py-1 font-medium text-secondary-foreground">
|
||||
@@ -473,23 +468,20 @@ function RuleScopePill({ target, slot }: { target: string; slot: string }) {
|
||||
);
|
||||
}
|
||||
|
||||
function RuleIntentEditor({
|
||||
idPrefix,
|
||||
intent,
|
||||
labelPrefix,
|
||||
onChange,
|
||||
}: {
|
||||
type RuleIntentEditorProps = {
|
||||
idPrefix: string;
|
||||
intent: StyleIntent;
|
||||
labelPrefix?: string;
|
||||
onChange: (patch: Partial<StyleIntent>) => void;
|
||||
}) {
|
||||
};
|
||||
|
||||
function RuleIntentEditor({ idPrefix, intent, labelPrefix, onChange }: RuleIntentEditorProps) {
|
||||
const labelStart = labelPrefix ? `${labelPrefix} ` : "";
|
||||
|
||||
return (
|
||||
<div className="space-y-3">
|
||||
<ControlPanel title="Color">
|
||||
<div className={controlGridClassName}>
|
||||
<div className={exactFourControlGridClassName}>
|
||||
<ColorField
|
||||
label={`${labelStart}Text Color`}
|
||||
id={`${idPrefix}-color`}
|
||||
@@ -599,38 +591,34 @@ function RuleIntentEditor({
|
||||
</ControlPanel>
|
||||
|
||||
<ControlPanel title="Spacing">
|
||||
<div className="space-y-4">
|
||||
<ControlSubsection title="Padding">
|
||||
<PaddingSideInputs idPrefix={idPrefix} intent={intent} labelPrefix={labelPrefix} onChange={onChange} />
|
||||
</ControlSubsection>
|
||||
<ControlSubsection title="Margin">
|
||||
<MarginSideInputs idPrefix={idPrefix} intent={intent} labelPrefix={labelPrefix} onChange={onChange} />
|
||||
</ControlSubsection>
|
||||
<ControlSubsection title="Gap">
|
||||
<div className={controlGridClassName}>
|
||||
<NumberInput
|
||||
label={`${labelStart}Row Gap`}
|
||||
id={`${idPrefix}-row-gap`}
|
||||
value={intent.rowGap}
|
||||
min={-72}
|
||||
max={72}
|
||||
onChange={(rowGap) => onChange({ rowGap })}
|
||||
/>
|
||||
<NumberInput
|
||||
label={`${labelStart}Column Gap`}
|
||||
id={`${idPrefix}-column-gap`}
|
||||
value={intent.columnGap}
|
||||
min={-72}
|
||||
max={72}
|
||||
onChange={(columnGap) => onChange({ columnGap })}
|
||||
/>
|
||||
</div>
|
||||
</ControlSubsection>
|
||||
<div className="space-y-3">
|
||||
<PaddingSideInputs idPrefix={idPrefix} intent={intent} labelPrefix={labelPrefix} onChange={onChange} />
|
||||
<MarginSideInputs idPrefix={idPrefix} intent={intent} labelPrefix={labelPrefix} onChange={onChange} />
|
||||
<SpacingInputGroup label="Gap">
|
||||
<CompactNumberInput
|
||||
ariaLabel={`${labelStart}Row Gap`}
|
||||
id={`${idPrefix}-row-gap`}
|
||||
placeholder="row"
|
||||
value={intent.rowGap}
|
||||
min={-72}
|
||||
max={72}
|
||||
onChange={(rowGap) => onChange({ rowGap })}
|
||||
/>
|
||||
<CompactNumberInput
|
||||
ariaLabel={`${labelStart}Column Gap`}
|
||||
id={`${idPrefix}-column-gap`}
|
||||
placeholder="column"
|
||||
value={intent.columnGap}
|
||||
min={-72}
|
||||
max={72}
|
||||
onChange={(columnGap) => onChange({ columnGap })}
|
||||
/>
|
||||
</SpacingInputGroup>
|
||||
</div>
|
||||
</ControlPanel>
|
||||
|
||||
<ControlPanel title="Border">
|
||||
<div className={controlGridClassName}>
|
||||
<div className={exactFourControlGridClassName}>
|
||||
<IntentSelectField
|
||||
label={`${labelStart}Border Style`}
|
||||
id={`${idPrefix}-border-style`}
|
||||
@@ -668,23 +656,27 @@ function RuleIntentEditor({
|
||||
);
|
||||
}
|
||||
|
||||
function ControlPanel({ title, children }: { title: string; children: ReactNode }) {
|
||||
type ControlPanelProps = {
|
||||
title: string;
|
||||
children: ReactNode;
|
||||
};
|
||||
|
||||
function ControlPanel({ title, children }: ControlPanelProps) {
|
||||
return (
|
||||
<section className="space-y-3 rounded-lg border bg-muted/10 p-3">
|
||||
<section className="@container space-y-3 rounded-lg border bg-muted/10 p-3">
|
||||
<h3 className="font-medium text-muted-foreground text-xs uppercase tracking-wide">{title}</h3>
|
||||
{children}
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
function ControlSubsection({ title, children }: { title: string; children: ReactNode }) {
|
||||
return (
|
||||
<div className="space-y-2">
|
||||
<div className="font-medium text-muted-foreground text-xs">{title}</div>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
type IntentSelectFieldProps<TValue extends string> = {
|
||||
label: string;
|
||||
id: string;
|
||||
value: TValue | undefined;
|
||||
options: readonly ComboboxOption<TValue>[];
|
||||
onChange: (value: TValue | undefined) => void;
|
||||
};
|
||||
|
||||
function IntentSelectField<TValue extends string>({
|
||||
label,
|
||||
@@ -692,13 +684,7 @@ function IntentSelectField<TValue extends string>({
|
||||
value,
|
||||
options,
|
||||
onChange,
|
||||
}: {
|
||||
label: string;
|
||||
id: string;
|
||||
value: TValue | undefined;
|
||||
options: readonly ComboboxOption<TValue>[];
|
||||
onChange: (value: TValue | undefined) => void;
|
||||
}) {
|
||||
}: IntentSelectFieldProps<TValue>) {
|
||||
return (
|
||||
<Field label={label} id={id}>
|
||||
<Combobox
|
||||
@@ -715,17 +701,14 @@ function IntentSelectField<TValue extends string>({
|
||||
);
|
||||
}
|
||||
|
||||
function FontWeightField({
|
||||
label,
|
||||
id,
|
||||
value,
|
||||
onChange,
|
||||
}: {
|
||||
type FontWeightFieldProps = {
|
||||
label: string;
|
||||
id: string;
|
||||
value: StyleIntent["fontWeight"] | undefined;
|
||||
onChange: (value: StyleIntent["fontWeight"] | undefined) => void;
|
||||
}) {
|
||||
};
|
||||
|
||||
function FontWeightField({ label, id, value, onChange }: FontWeightFieldProps) {
|
||||
const options: ComboboxOption<NonNullable<StyleIntent["fontWeight"]>>[] = fontWeightOptions.map((weight) => ({
|
||||
value: weight,
|
||||
label: weight,
|
||||
@@ -765,66 +748,116 @@ const marginSideOptions = [
|
||||
|
||||
type MarginSideProperty = (typeof marginSideOptions)[number]["property"];
|
||||
|
||||
function PaddingSideInputs({
|
||||
idPrefix,
|
||||
intent,
|
||||
labelPrefix,
|
||||
onChange,
|
||||
}: {
|
||||
type PaddingSideInputsProps = {
|
||||
idPrefix: string;
|
||||
intent: StyleIntent;
|
||||
labelPrefix?: string;
|
||||
onChange: (patch: Partial<StyleIntent>) => void;
|
||||
}) {
|
||||
};
|
||||
|
||||
function PaddingSideInputs({ idPrefix, intent, labelPrefix, onChange }: PaddingSideInputsProps) {
|
||||
const labelStart = labelPrefix ? `${labelPrefix} ` : "";
|
||||
|
||||
return (
|
||||
<div className={compactControlGridClassName}>
|
||||
<SpacingInputGroup label="Padding">
|
||||
{paddingSideOptions.map((side) => (
|
||||
<NumberInput
|
||||
<CompactNumberInput
|
||||
key={side.property}
|
||||
label={`${labelStart}Padding ${side.label}`}
|
||||
ariaLabel={`${labelStart}Padding ${side.label}`}
|
||||
id={`${idPrefix}-${side.property}`}
|
||||
placeholder={side.label.toLowerCase()}
|
||||
value={getPaddingSideValue(intent, side.property)}
|
||||
min={-72}
|
||||
max={72}
|
||||
onChange={(value) => onChange(createPaddingSidePatch(intent, side.property, value))}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</SpacingInputGroup>
|
||||
);
|
||||
}
|
||||
|
||||
function MarginSideInputs({
|
||||
idPrefix,
|
||||
intent,
|
||||
labelPrefix,
|
||||
onChange,
|
||||
}: {
|
||||
type MarginSideInputsProps = {
|
||||
idPrefix: string;
|
||||
intent: StyleIntent;
|
||||
labelPrefix?: string;
|
||||
onChange: (patch: Partial<StyleIntent>) => void;
|
||||
}) {
|
||||
};
|
||||
|
||||
function MarginSideInputs({ idPrefix, intent, labelPrefix, onChange }: MarginSideInputsProps) {
|
||||
const labelStart = labelPrefix ? `${labelPrefix} ` : "";
|
||||
|
||||
return (
|
||||
<div className={compactControlGridClassName}>
|
||||
<SpacingInputGroup label="Margin">
|
||||
{marginSideOptions.map((side) => (
|
||||
<NumberInput
|
||||
<CompactNumberInput
|
||||
key={side.property}
|
||||
label={`${labelStart}Margin ${side.label}`}
|
||||
ariaLabel={`${labelStart}Margin ${side.label}`}
|
||||
id={`${idPrefix}-${side.property}`}
|
||||
placeholder={side.label.toLowerCase()}
|
||||
value={intent[side.property]}
|
||||
min={-72}
|
||||
max={72}
|
||||
onChange={(value) => onChange(createMarginSidePatch(side.property, value))}
|
||||
/>
|
||||
))}
|
||||
</SpacingInputGroup>
|
||||
);
|
||||
}
|
||||
|
||||
type SpacingInputGroupProps = {
|
||||
label: string;
|
||||
children: ReactNode;
|
||||
};
|
||||
|
||||
function SpacingInputGroup({ label, children }: SpacingInputGroupProps) {
|
||||
return (
|
||||
<div className="flex min-w-0 items-center gap-4">
|
||||
<div className="w-20 shrink-0 font-medium text-muted-foreground text-xs">{label}</div>
|
||||
<div className="flex min-w-0 flex-1 flex-wrap gap-2">{children}</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
type CompactNumberInputProps = {
|
||||
ariaLabel: string;
|
||||
id: string;
|
||||
placeholder: string;
|
||||
value: number | undefined;
|
||||
min: number;
|
||||
max: number;
|
||||
step?: number;
|
||||
onChange: (value: number | undefined) => void;
|
||||
};
|
||||
|
||||
function CompactNumberInput({
|
||||
ariaLabel,
|
||||
id,
|
||||
placeholder,
|
||||
value,
|
||||
min,
|
||||
max,
|
||||
step = 1,
|
||||
onChange,
|
||||
}: CompactNumberInputProps) {
|
||||
return (
|
||||
<Input
|
||||
id={id}
|
||||
aria-label={ariaLabel}
|
||||
className={compactSpacingInputClassName}
|
||||
value={value ?? ""}
|
||||
placeholder={placeholder}
|
||||
type="number"
|
||||
min={min}
|
||||
max={max}
|
||||
step={step}
|
||||
onChange={(event) => {
|
||||
const value = event.target.value;
|
||||
onChange(value === "" ? undefined : Number(value));
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function getPaddingSideValue(intent: StyleIntent, property: PaddingSideProperty) {
|
||||
return intent[property] ?? intent.padding;
|
||||
}
|
||||
@@ -851,7 +884,11 @@ function createMarginSidePatch(property: MarginSideProperty, value: number | und
|
||||
return { [property]: value };
|
||||
}
|
||||
|
||||
function RulePropertySummary({ intent }: { intent: StyleIntent }) {
|
||||
type RulePropertySummaryProps = {
|
||||
intent: StyleIntent;
|
||||
};
|
||||
|
||||
function RulePropertySummary({ intent }: RulePropertySummaryProps) {
|
||||
const properties = [
|
||||
intent.color && { label: "Text", value: intent.color, color: intent.color },
|
||||
intent.backgroundColor && { label: "Background", value: intent.backgroundColor, color: intent.backgroundColor },
|
||||
@@ -935,15 +972,13 @@ function getGapSummary(intent: StyleIntent) {
|
||||
return values.length > 0 ? values.join(" / ") : undefined;
|
||||
}
|
||||
|
||||
function createTarget({
|
||||
targetScope,
|
||||
sectionType,
|
||||
sectionId,
|
||||
}: {
|
||||
type CreateTargetParams = {
|
||||
targetScope: TargetScope;
|
||||
sectionType: string;
|
||||
sectionId: string;
|
||||
}): StyleRuleTarget {
|
||||
};
|
||||
|
||||
function createTarget({ targetScope, sectionType, sectionId }: CreateTargetParams): StyleRuleTarget {
|
||||
if (targetScope === "sectionType") {
|
||||
return {
|
||||
scope: "sectionType",
|
||||
|
||||
@@ -10,8 +10,12 @@ const downloadWithAnchor = vi.hoisted(() => vi.fn());
|
||||
const buildDocx = vi.hoisted(() => vi.fn().mockResolvedValue(new Blob(["x"], { type: "application/x-docx" })));
|
||||
const createResumePdfBlob = vi.hoisted(() => vi.fn().mockResolvedValue(new Blob(["x"], { type: "application/pdf" })));
|
||||
|
||||
type SectionBaseProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
vi.mock("../shared/section-base", () => ({
|
||||
SectionBase: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
|
||||
SectionBase: ({ children }: SectionBaseProps) => <div>{children}</div>,
|
||||
}));
|
||||
vi.mock("@reactive-resume/utils/file", () => ({
|
||||
downloadWithAnchor,
|
||||
|
||||
@@ -5,8 +5,12 @@ import { beforeAll, describe, expect, it, vi } from "vitest";
|
||||
import { i18n } from "@lingui/core";
|
||||
import { I18nProvider } from "@lingui/react";
|
||||
|
||||
type SectionBaseProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
vi.mock("../shared/section-base", () => ({
|
||||
SectionBase: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
|
||||
SectionBase: ({ children }: SectionBaseProps) => <div>{children}</div>,
|
||||
}));
|
||||
|
||||
const { InformationSectionBuilder } = await import("./information");
|
||||
|
||||
@@ -11,11 +11,20 @@ const richInputProps = vi.hoisted(() => ({
|
||||
onChange: undefined as ((value: string) => void) | undefined,
|
||||
}));
|
||||
|
||||
type SectionBaseProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
type RichInputProps = {
|
||||
value: string;
|
||||
onChange: (value: string) => void;
|
||||
};
|
||||
|
||||
vi.mock("../shared/section-base", () => ({
|
||||
SectionBase: ({ children }: { children: React.ReactNode }) => <div data-testid="section-base">{children}</div>,
|
||||
SectionBase: ({ children }: SectionBaseProps) => <div data-testid="section-base">{children}</div>,
|
||||
}));
|
||||
vi.mock("@/components/input/rich-input", () => ({
|
||||
RichInput: (props: { value: string; onChange: (value: string) => void }) => {
|
||||
RichInput: (props: RichInputProps) => {
|
||||
richInputProps.value = props.value;
|
||||
richInputProps.onChange = props.onChange;
|
||||
return <textarea data-testid="rich-input" value={props.value} readOnly />;
|
||||
|
||||
@@ -17,6 +17,10 @@ const queryResult = vi.hoisted(() => ({
|
||||
},
|
||||
}));
|
||||
|
||||
type SectionBaseProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
vi.mock("@tanstack/react-query", () => ({
|
||||
useQuery: () => queryResult,
|
||||
}));
|
||||
@@ -27,7 +31,7 @@ vi.mock("@/libs/orpc/client", () => ({
|
||||
orpc: { resume: { statistics: { getById: { queryOptions: () => ({}) } } } },
|
||||
}));
|
||||
vi.mock("../shared/section-base", () => ({
|
||||
SectionBase: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
|
||||
SectionBase: ({ children }: SectionBaseProps) => <div>{children}</div>,
|
||||
}));
|
||||
|
||||
const { StatisticsSectionBuilder } = await import("./statistics");
|
||||
|
||||
@@ -6,8 +6,12 @@ import { i18n } from "@lingui/core";
|
||||
import { I18nProvider } from "@lingui/react";
|
||||
import { useDialogStore } from "@/dialogs/store";
|
||||
|
||||
type SectionBaseProps = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
vi.mock("../shared/section-base", () => ({
|
||||
SectionBase: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
|
||||
SectionBase: ({ children }: SectionBaseProps) => <div>{children}</div>,
|
||||
}));
|
||||
vi.mock("@/features/resume/builder/draft", () => ({
|
||||
useCurrentResume: () => ({
|
||||
|
||||
@@ -322,7 +322,11 @@ function TypographySectionForm() {
|
||||
);
|
||||
}
|
||||
|
||||
function TypographyFieldGroup({ label }: { label: ReactNode }) {
|
||||
type TypographyFieldGroupProps = {
|
||||
label: ReactNode;
|
||||
};
|
||||
|
||||
function TypographyFieldGroup({ label }: TypographyFieldGroupProps) {
|
||||
return (
|
||||
<div className="col-span-full flex items-center gap-x-2">
|
||||
<Separator className="basis-[16px]" />
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import {
|
||||
DEFAULT_BUILDER_LAYOUT,
|
||||
DESKTOP_BUILDER_SIDEBAR_COLLAPSED_SIZE,
|
||||
DESKTOP_BUILDER_SIDEBAR_MIN_SIZE,
|
||||
getBuilderSidebarResizeConfig,
|
||||
mapPanelLayoutToBuilderLayout,
|
||||
parseBuilderLayoutCookie,
|
||||
useBuilderSidebarStore,
|
||||
@@ -64,6 +67,25 @@ describe("mapPanelLayoutToBuilderLayout", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("getBuilderSidebarResizeConfig", () => {
|
||||
it("uses a desktop minimum width that is larger than the collapsed rail", () => {
|
||||
const config = getBuilderSidebarResizeConfig({ isMobile: false, width: 1280 });
|
||||
|
||||
expect(config.minSidebarSize).toBe(DESKTOP_BUILDER_SIDEBAR_MIN_SIZE);
|
||||
expect(config.collapsedSidebarSize).toBe(DESKTOP_BUILDER_SIDEBAR_COLLAPSED_SIZE);
|
||||
expect(config.minSidebarSize).toBeGreaterThan(config.collapsedSidebarSize);
|
||||
expect(config.groupResizeBehavior).toBe("preserve-pixel-size");
|
||||
});
|
||||
|
||||
it("allows mobile sidebars to collapse fully without a desktop minimum", () => {
|
||||
const config = getBuilderSidebarResizeConfig({ isMobile: true, width: 390 });
|
||||
|
||||
expect(config.minSidebarSize).toBe(0);
|
||||
expect(config.collapsedSidebarSize).toBe(0);
|
||||
expect(config.maxSidebarSize).toBe("95%");
|
||||
});
|
||||
});
|
||||
|
||||
describe("useBuilderSidebarStore", () => {
|
||||
it("starts with default layout and null panel refs", () => {
|
||||
const state = useBuilderSidebarStore.getState();
|
||||
|
||||
@@ -20,6 +20,22 @@ export const DEFAULT_BUILDER_LAYOUT: BuilderLayout = {
|
||||
right: 22,
|
||||
};
|
||||
|
||||
export const DESKTOP_BUILDER_SIDEBAR_COLLAPSED_SIZE = 48;
|
||||
export const DESKTOP_BUILDER_SIDEBAR_MIN_SIZE = 320;
|
||||
|
||||
type BuilderSidebarResizeConfigInput = {
|
||||
isMobile: boolean;
|
||||
width: number;
|
||||
};
|
||||
|
||||
export const getBuilderSidebarResizeConfig = ({ isMobile, width }: BuilderSidebarResizeConfigInput) => ({
|
||||
maxSidebarSize: !width ? 0 : isMobile ? "95%" : "45%",
|
||||
minSidebarSize: !width ? 0 : isMobile ? 0 : DESKTOP_BUILDER_SIDEBAR_MIN_SIZE,
|
||||
collapsedSidebarSize: !width ? 0 : isMobile ? 0 : DESKTOP_BUILDER_SIDEBAR_COLLAPSED_SIZE,
|
||||
expandSize: isMobile ? "95%" : "30%",
|
||||
groupResizeBehavior: "preserve-pixel-size" as const,
|
||||
});
|
||||
|
||||
export const mapPanelLayoutToBuilderLayout = (layout: Layout): BuilderLayout => {
|
||||
const left = layout.left;
|
||||
const artboard = layout.artboard;
|
||||
@@ -78,7 +94,9 @@ export const useBuilderSidebarStore = create<BuilderSidebar>((set) => ({
|
||||
|
||||
type UseBuilderSidebarReturn = {
|
||||
maxSidebarSize: string | number;
|
||||
minSidebarSize: number;
|
||||
collapsedSidebarSize: number;
|
||||
groupResizeBehavior: "preserve-pixel-size";
|
||||
isCollapsed: (side: "left" | "right") => boolean;
|
||||
toggleSidebar: (side: "left" | "right", forceState?: boolean) => void;
|
||||
};
|
||||
@@ -87,9 +105,8 @@ export function useBuilderSidebar<T = UseBuilderSidebarReturn>(selector?: (build
|
||||
const isMobile = useIsMobile();
|
||||
const { width } = useWindowSize();
|
||||
|
||||
const maxSidebarSize: string | number = !width ? 0 : isMobile ? "95%" : "45%";
|
||||
const collapsedSidebarSize = !width ? 0 : isMobile ? 0 : 48;
|
||||
const expandSize = isMobile ? "95%" : "30%";
|
||||
const { maxSidebarSize, minSidebarSize, collapsedSidebarSize, expandSize, groupResizeBehavior } =
|
||||
getBuilderSidebarResizeConfig({ isMobile, width });
|
||||
|
||||
const isCollapsed = useCallback((side: "left" | "right") => {
|
||||
const sidebar =
|
||||
@@ -121,11 +138,13 @@ export function useBuilderSidebar<T = UseBuilderSidebarReturn>(selector?: (build
|
||||
const state = useMemo(() => {
|
||||
return {
|
||||
maxSidebarSize,
|
||||
minSidebarSize,
|
||||
collapsedSidebarSize,
|
||||
groupResizeBehavior,
|
||||
isCollapsed,
|
||||
toggleSidebar,
|
||||
};
|
||||
}, [maxSidebarSize, collapsedSidebarSize, isCollapsed, toggleSidebar]);
|
||||
}, [maxSidebarSize, minSidebarSize, collapsedSidebarSize, groupResizeBehavior, isCollapsed, toggleSidebar]);
|
||||
|
||||
return selector ? selector(state) : (state as T);
|
||||
}
|
||||
|
||||
@@ -104,9 +104,11 @@ function BuilderLayoutShell({ initialLayout }: BuilderLayoutShellProps) {
|
||||
const setRightSidebar = useBuilderSidebarStore((state) => state.setRightSidebar);
|
||||
const setLayout = useBuilderSidebarStore((state) => state.setLayout);
|
||||
|
||||
const { maxSidebarSize, collapsedSidebarSize } = useBuilderSidebar((state) => ({
|
||||
const { maxSidebarSize, minSidebarSize, collapsedSidebarSize, groupResizeBehavior } = useBuilderSidebar((state) => ({
|
||||
maxSidebarSize: state.maxSidebarSize,
|
||||
minSidebarSize: state.minSidebarSize,
|
||||
collapsedSidebarSize: state.collapsedSidebarSize,
|
||||
groupResizeBehavior: state.groupResizeBehavior,
|
||||
}));
|
||||
|
||||
useEffect(() => {
|
||||
@@ -128,7 +130,7 @@ function BuilderLayoutShell({ initialLayout }: BuilderLayoutShellProps) {
|
||||
setRightSidebar(rightSidebarRef);
|
||||
}, [leftSidebarRef, rightSidebarRef, setLeftSidebar, setRightSidebar]);
|
||||
|
||||
const sidebarMinSize = isMobile ? "0%" : `${collapsedSidebarSize * 2}px`;
|
||||
const sidebarMinSize = isMobile ? "0%" : `${minSidebarSize}px`;
|
||||
const sidebarCollapsedSize = isMobile ? "0%" : `${collapsedSidebarSize}px`;
|
||||
const leftSidebarSize = isMobile ? "0%" : `${initialLayout.left}%`;
|
||||
const rightSidebarSize = isMobile ? "0%" : `${initialLayout.right}%`;
|
||||
@@ -143,6 +145,7 @@ function BuilderLayoutShell({ initialLayout }: BuilderLayoutShellProps) {
|
||||
collapsible
|
||||
id="left"
|
||||
panelRef={leftSidebarRef}
|
||||
groupResizeBehavior={groupResizeBehavior}
|
||||
maxSize={maxSidebarSize}
|
||||
minSize={sidebarMinSize}
|
||||
collapsedSize={sidebarCollapsedSize}
|
||||
@@ -160,6 +163,7 @@ function BuilderLayoutShell({ initialLayout }: BuilderLayoutShellProps) {
|
||||
collapsible
|
||||
id="right"
|
||||
panelRef={rightSidebarRef}
|
||||
groupResizeBehavior={groupResizeBehavior}
|
||||
maxSize={maxSidebarSize}
|
||||
minSize={sidebarMinSize}
|
||||
collapsedSize={sidebarCollapsedSize}
|
||||
|
||||
@@ -13,6 +13,10 @@ type ResumeCardProps = {
|
||||
resume: RouterOutput["resume"]["list"][number];
|
||||
};
|
||||
|
||||
type ResumeLockOverlayProps = {
|
||||
isLocked: boolean;
|
||||
};
|
||||
|
||||
export function ResumeCard({ resume }: ResumeCardProps) {
|
||||
const { i18n } = useLingui();
|
||||
|
||||
@@ -40,7 +44,7 @@ export function ResumeCard({ resume }: ResumeCardProps) {
|
||||
);
|
||||
}
|
||||
|
||||
function ResumeLockOverlay({ isLocked }: { isLocked: boolean }) {
|
||||
function ResumeLockOverlay({ isLocked }: ResumeLockOverlayProps) {
|
||||
return (
|
||||
<AnimatePresence>
|
||||
{isLocked && (
|
||||
|
||||
@@ -15,6 +15,11 @@ type ResumeListItem = RouterOutput["resume"]["list"][number];
|
||||
|
||||
type ThumbnailState = { status: "error" | "idle" | "loading" } | { status: "ready"; url: string };
|
||||
|
||||
type ResumeThumbnailProps = {
|
||||
isLocked: boolean;
|
||||
resume: ResumeListItem;
|
||||
};
|
||||
|
||||
const throwIfAborted = (signal: AbortSignal) => {
|
||||
if (signal.aborted) throw new DOMException("Thumbnail generation aborted.", "AbortError");
|
||||
};
|
||||
@@ -63,7 +68,7 @@ function useResumeThumbnail(data: ResumeData | undefined, cacheKey: string | und
|
||||
return { status: "loading" };
|
||||
}
|
||||
|
||||
export function ResumeThumbnail({ isLocked, resume }: { isLocked: boolean; resume: ResumeListItem }) {
|
||||
export function ResumeThumbnail({ isLocked, resume }: ResumeThumbnailProps) {
|
||||
const containerRef = useRef<HTMLDivElement>(null);
|
||||
const isInView = useInView(containerRef, { amount: 0.1, margin: "240px", once: true });
|
||||
const resumeQuery = useQuery({
|
||||
|
||||
@@ -11,11 +11,15 @@ import { ResumeDropdownMenu } from "./menus/dropdown-menu";
|
||||
|
||||
type Resume = RouterOutput["resume"]["list"][number];
|
||||
|
||||
type Props = {
|
||||
type ListViewProps = {
|
||||
resumes: Resume[];
|
||||
};
|
||||
|
||||
export function ListView({ resumes }: Props) {
|
||||
type ResumeListItemProps = {
|
||||
resume: Resume;
|
||||
};
|
||||
|
||||
export function ListView({ resumes }: ListViewProps) {
|
||||
const { openDialog } = useDialogStore();
|
||||
|
||||
const handleCreateResume = () => {
|
||||
@@ -96,7 +100,7 @@ export function ListView({ resumes }: Props) {
|
||||
);
|
||||
}
|
||||
|
||||
function ResumeListItem({ resume }: { resume: Resume }) {
|
||||
function ResumeListItem({ resume }: ResumeListItemProps) {
|
||||
const { i18n } = useLingui();
|
||||
|
||||
const updatedAt = useMemo(() => {
|
||||
|
||||
@@ -191,6 +191,24 @@ describe("registerFonts", () => {
|
||||
expect(pdfTypography.body.fontWeights).toEqual(["400", "600", "800"]);
|
||||
expect(pdfTypography.heading.fontWeights).toEqual(["500", "900"]);
|
||||
});
|
||||
|
||||
it("replaces unsupported font weights with an available fallback pair", async () => {
|
||||
const registerSpy = vi.spyOn(Font, "register").mockImplementation(() => {});
|
||||
const { registerFonts } = await import("./use-register-fonts");
|
||||
|
||||
const migratedTypography = {
|
||||
...typography,
|
||||
body: { ...typography.body, fontFamily: "Lato", fontWeights: ["400"] },
|
||||
heading: { ...typography.heading, fontFamily: "Lato", fontWeights: ["600"] },
|
||||
} satisfies Typography;
|
||||
|
||||
const pdfTypography = registerFonts(migratedTypography, "en-US");
|
||||
|
||||
expect(pdfTypography.body.fontWeights).toEqual(["400"]);
|
||||
expect(pdfTypography.heading.fontWeights).toEqual(["400", "700"]);
|
||||
expect(registerSpy).not.toHaveBeenCalledWith(expect.objectContaining({ family: "Lato", fontWeight: 600 }));
|
||||
expect(registerSpy).toHaveBeenCalledWith(expect.objectContaining({ family: "Lato", fontWeight: 700 }));
|
||||
});
|
||||
});
|
||||
|
||||
describe("resumeContentContainsCJK", () => {
|
||||
|
||||
@@ -21,6 +21,8 @@ type FontWeightRange = {
|
||||
const registeredFontVariants = new Set<string>();
|
||||
const fallbackFontFamily = "IBM Plex Serif";
|
||||
const cjkLetterRegex = cjkLetters().toRegExp();
|
||||
const fontWeightValues = new Set<FontWeight>(["100", "200", "300", "400", "500", "600", "700", "800", "900"]);
|
||||
const preferredFallbackFontWeights = ["400", "700", "600", "500"] satisfies FontWeight[];
|
||||
|
||||
// `fontFamily` is widened to `string | string[]` so react-pdf can do
|
||||
// glyph-level font fallback for CJK characters (#2986).
|
||||
@@ -46,6 +48,52 @@ const getFontWeightRange = (fontWeights: string[]): FontWeightRange => {
|
||||
return { lowest, highest };
|
||||
};
|
||||
|
||||
const isFontWeight = (weight: string): weight is FontWeight => fontWeightValues.has(weight as FontWeight);
|
||||
|
||||
const uniqueSortedFontWeights = (fontWeights: FontWeight[]): FontWeight[] => {
|
||||
return [...new Set(sortFontWeights(fontWeights))];
|
||||
};
|
||||
|
||||
const getFallbackFontWeights = (availableWeights: FontWeight[]): FontWeight[] => {
|
||||
const sortedAvailableWeights = uniqueSortedFontWeights(availableWeights);
|
||||
const availableWeightSet = new Set(sortedAvailableWeights);
|
||||
const preferredWeights = preferredFallbackFontWeights.filter((weight) => availableWeightSet.has(weight));
|
||||
|
||||
if (preferredWeights.length >= 2) {
|
||||
return uniqueSortedFontWeights(preferredWeights.slice(0, 2));
|
||||
}
|
||||
|
||||
if (preferredWeights.length === 1) {
|
||||
const firstWeight = preferredWeights[0];
|
||||
if (!firstWeight) return [];
|
||||
|
||||
const secondWeight =
|
||||
sortedAvailableWeights.find((weight) => Number(weight) > Number(firstWeight)) ??
|
||||
sortedAvailableWeights.find((weight) => weight !== firstWeight);
|
||||
|
||||
return uniqueSortedFontWeights(secondWeight ? [firstWeight, secondWeight] : [firstWeight]);
|
||||
}
|
||||
|
||||
return sortedAvailableWeights.slice(0, 2);
|
||||
};
|
||||
|
||||
const resolvePdfFontWeights = (family: string, fontWeights: string[]): FontWeight[] => {
|
||||
const requestedWeights = uniqueSortedFontWeights(fontWeights.filter(isFontWeight));
|
||||
const availableWeights = getFont(family)?.weights;
|
||||
|
||||
if (!availableWeights || availableWeights.length === 0) {
|
||||
return requestedWeights.length > 0 ? requestedWeights : ["400", "700"];
|
||||
}
|
||||
|
||||
const availableWeightSet = new Set(availableWeights);
|
||||
const allRequestedWeightsAreAvailable =
|
||||
requestedWeights.length > 0 && requestedWeights.every((weight) => availableWeightSet.has(weight));
|
||||
|
||||
if (allRequestedWeightsAreAvailable) return requestedWeights;
|
||||
|
||||
return getFallbackFontWeights(availableWeights);
|
||||
};
|
||||
|
||||
const toFontWeight = (weight: number): FontWeight => {
|
||||
if (weight <= 100) return "100";
|
||||
if (weight <= 200) return "200";
|
||||
@@ -82,8 +130,8 @@ const resolvePdfFontFamily = (family: string) => {
|
||||
const resolvePdfTypography = (typography: Typography): Typography => {
|
||||
const bodyFontFamily = resolvePdfFontFamily(typography.body.fontFamily);
|
||||
const headingFontFamily = resolvePdfFontFamily(typography.heading.fontFamily);
|
||||
const bodyFontWeights = sortFontWeights(typography.body.fontWeights);
|
||||
const headingFontWeights = sortFontWeights(typography.heading.fontWeights);
|
||||
const bodyFontWeights = resolvePdfFontWeights(bodyFontFamily, typography.body.fontWeights);
|
||||
const headingFontWeights = resolvePdfFontWeights(headingFontFamily, typography.heading.fontWeights);
|
||||
|
||||
return {
|
||||
...typography,
|
||||
|
||||
@@ -42,6 +42,10 @@ type AzurillTemplate = {
|
||||
featureStyles: TemplateFeatureStyleSlots;
|
||||
};
|
||||
|
||||
type AzurillHeaderProps = {
|
||||
styles: AzurillStyles;
|
||||
};
|
||||
|
||||
const azurillFeatures = {
|
||||
sectionTimeline: true,
|
||||
} satisfies TemplateFeatures;
|
||||
@@ -88,7 +92,7 @@ export const AzurillPage = ({ page, pageIndex }: TemplatePageProps) => {
|
||||
);
|
||||
};
|
||||
|
||||
const Header = ({ styles }: { styles: AzurillStyles }) => {
|
||||
const Header = ({ styles }: AzurillHeaderProps) => {
|
||||
const { basics, picture } = useRender();
|
||||
const hasPicture = hasTemplatePicture(picture);
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user