mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-07-26 01:44:53 +10:00
v5.0.12 (#2814)
* refactor to @base-ui/react * fix all * fixes to accordion * more updates * switch to chat/completions api from openai * update version to v5.0.12
This commit is contained in:
+4
-1
@@ -27,13 +27,16 @@ GOOGLE_CLIENT_SECRET=""
|
|||||||
GITHUB_CLIENT_ID=""
|
GITHUB_CLIENT_ID=""
|
||||||
GITHUB_CLIENT_SECRET=""
|
GITHUB_CLIENT_SECRET=""
|
||||||
|
|
||||||
# Custom OAuth Provider
|
# Custom OAuth Provider (optional)
|
||||||
OAUTH_PROVIDER_NAME=""
|
OAUTH_PROVIDER_NAME=""
|
||||||
OAUTH_CLIENT_ID=""
|
OAUTH_CLIENT_ID=""
|
||||||
OAUTH_CLIENT_SECRET=""
|
OAUTH_CLIENT_SECRET=""
|
||||||
OAUTH_DISCOVERY_URL=""
|
OAUTH_DISCOVERY_URL=""
|
||||||
OAUTH_AUTHORIZATION_URL=""
|
OAUTH_AUTHORIZATION_URL=""
|
||||||
|
|
||||||
|
# Better Auth Dashboard (optional)
|
||||||
|
BETTER_AUTH_API_KEY=""
|
||||||
|
|
||||||
# --- Email (optional) ---
|
# --- Email (optional) ---
|
||||||
# If all keys are disabled, the app logs the email to be sent to the console instead.
|
# If all keys are disabled, the app logs the email to be sent to the console instead.
|
||||||
SMTP_HOST="localhost"
|
SMTP_HOST="localhost"
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
const nextPackages = ["@monaco-editor/react"];
|
const nextPackages = ["@monaco-editor/react"];
|
||||||
|
|
||||||
const betaPackages = ["vite", "drizzle-orm", "drizzle-kit"];
|
const betaPackages = ["drizzle-orm", "drizzle-kit"];
|
||||||
|
|
||||||
/** @type {import('npm-check-updates').RunOptions} */
|
/** @type {import('npm-check-updates').RunOptions} */
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|||||||
Vendored
+2
-2
@@ -24,6 +24,7 @@
|
|||||||
"i18n-ally.enabledParsers": ["po"],
|
"i18n-ally.enabledParsers": ["po"],
|
||||||
"i18n-ally.localesPaths": ["locales"],
|
"i18n-ally.localesPaths": ["locales"],
|
||||||
"i18n-ally.sourceLanguage": "en-US",
|
"i18n-ally.sourceLanguage": "en-US",
|
||||||
|
"js/ts.experimental.useTsgo": true,
|
||||||
"search.exclude": {
|
"search.exclude": {
|
||||||
"**/routeTree.gen.ts": true,
|
"**/routeTree.gen.ts": true,
|
||||||
"locales/**.po": true,
|
"locales/**.po": true,
|
||||||
@@ -35,6 +36,5 @@
|
|||||||
["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"],
|
["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"],
|
||||||
["cn\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"]
|
["cn\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"]
|
||||||
],
|
],
|
||||||
"tailwindCSS.experimental.configFile": "src/styles/globals.css",
|
"tailwindCSS.experimental.configFile": "src/styles/globals.css"
|
||||||
"typescript.tsdk": "node_modules/typescript/lib"
|
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://ui.shadcn.com/schema.json",
|
"$schema": "https://ui.shadcn.com/schema.json",
|
||||||
"style": "radix-vega",
|
"style": "base-vega",
|
||||||
"rsc": false,
|
"rsc": false,
|
||||||
"tsx": true,
|
"tsx": true,
|
||||||
"tailwind": {
|
"tailwind": {
|
||||||
@@ -12,12 +12,15 @@
|
|||||||
},
|
},
|
||||||
"iconLibrary": "phosphor",
|
"iconLibrary": "phosphor",
|
||||||
"menuColor": "default",
|
"menuColor": "default",
|
||||||
"menuAccent": "subtle",
|
"menuAccent": "bold",
|
||||||
"aliases": {
|
"aliases": {
|
||||||
"components": "@/components",
|
"components": "@/components",
|
||||||
"utils": "@/utils/style",
|
"utils": "@/utils/style",
|
||||||
"ui": "@/components/ui",
|
"ui": "@/components/ui",
|
||||||
"lib": "@/utils",
|
"lib": "@/utils",
|
||||||
"hooks": "@/hooks"
|
"hooks": "@/hooks"
|
||||||
|
},
|
||||||
|
"registries": {
|
||||||
|
"@animate-ui": "https://animate-ui.com/r/{name}.json"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,23 @@ description: "List of all notable changes and updates to Reactive Resume"
|
|||||||
rss: true
|
rss: true
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<Update label="v5.0.12" description="17th March 2026">
|
||||||
|
- **Features & Improvements**
|
||||||
|
- Refactor the component system to `@base-ui/react` across the app, replacing older primitive wrappers and standardizing interactive UI behavior (dialogs, menus, accordions, comboboxes, switches, and more).
|
||||||
|
- Improve auth infrastructure with Better Auth dashboard/sentinel integration and expanded IP/header handling for proxied deployments.
|
||||||
|
- Add a dedicated `src/server.ts` server entry using `FastResponse` to improve runtime compatibility for server responses.
|
||||||
|
|
||||||
|
- **Fixes**
|
||||||
|
- Switch OpenAI integration to the `chat/completions` flow for resume import and AI features, reducing provider compatibility issues.
|
||||||
|
- Improve AI PDF/DOCX resume parsing by sending files directly to models (multimodal input), removing fragile local text extraction.
|
||||||
|
- Harden AI resume import normalization: merge section defaults, enforce required fields, and auto-generate missing IDs/flags so parsed resumes validate reliably.
|
||||||
|
- Fix regressions introduced during the UI migration, including accordion behavior and button styling/interaction edge cases.
|
||||||
|
|
||||||
|
- **Other**
|
||||||
|
- Update dependencies and lockfile.
|
||||||
|
- Sync translation strings across locales.
|
||||||
|
</Update>
|
||||||
|
|
||||||
<Update label="v5.0.10" description="24th February 2026">
|
<Update label="v5.0.10" description="24th February 2026">
|
||||||
- **Fixes**
|
- **Fixes**
|
||||||
- Show section titles for summary-type custom sections in the resume builder. [#2744](https://github.com/amruthpillai/reactive-resume/pull/2744)
|
- Show section titles for summary-type custom sections in the resume builder. [#2744](https://github.com/amruthpillai/reactive-resume/pull/2744)
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ export default defineConfig({
|
|||||||
"de-DE",
|
"de-DE",
|
||||||
"el-GR",
|
"el-GR",
|
||||||
"en-US",
|
"en-US",
|
||||||
|
"en-GB",
|
||||||
"es-ES",
|
"es-ES",
|
||||||
"fa-IR",
|
"fa-IR",
|
||||||
"fi-FI",
|
"fi-FI",
|
||||||
|
|||||||
Generated
BIN
Binary file not shown.
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "ለሁሉም ይገናኛል"
|
msgstr "ለሁሉም ይገናኛል"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "መለያ አለዎት? <0><1>አሁን ይግቡ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "መመለሻን ወደ መሀከል አድርግ"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "የማረጋገጫዎች"
|
msgstr "የማረጋገጫዎች"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "ቋንቋ ቀይር"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "ቋንቋን ወደ ... ቀይር"
|
msgstr "ቋንቋን ወደ ... ቀይር"
|
||||||
@@ -552,14 +548,15 @@ msgstr "ክብ"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "ምርጫን ሰርዝ"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "ፋይል ለማምጣት ለመምረጥ እዚህ ጠቅ ያድርጉ"
|
msgstr "ፋይል ለማምጣት ለመምረጥ እዚህ ጠቅ ያድርጉ"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "የኮድ ብሎክ"
|
msgstr "የኮድ ብሎክ"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "ሰነዶች"
|
msgstr "ሰነዶች"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "መለያ የለዎትም? <0><1>አሁን መለያ ፍጠሩ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "ሁለት-ደረጃ ማረጋገጫን በመነቃቃት ላይ…"
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "እንግሊዝኛ"
|
msgstr "እንግሊዝኛ"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "የመለያዎን ደህንነት በተጨማሪ ደረጃዎች በመጨመር ያጠናክሩ።"
|
msgstr "የመለያዎን ደህንነት በተጨማሪ ደረጃዎች በመጨመር ያጠናክሩ።"
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "ምንም ማስታወቂያ የለም፣ ምንም መከታተያ የለም"
|
msgstr "ምንም ማስታወቂያ የለም፣ ምንም መከታተያ የለም"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "ምንም ውጤት አልተገኘም።"
|
msgstr "ምንም ውጤት አልተገኘም።"
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "ዳስ አድርግ"
|
msgstr "ዳስ አድርግ"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "የይለፍ ቃልዎ አስታውሰዎ? <0><1>አሁን ይግቡ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "ፈልግ..."
|
msgstr "ፈልግ..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "ፈልግ..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "የክፍል ዓይነት"
|
msgstr "የክፍል ዓይነት"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "ይምረጡ..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "አጉር"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "ዙሉ"
|
msgstr "ዙሉ"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "السماح بالوصول العام"
|
msgstr "السماح بالوصول العام"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "لديك حساب بالفعل؟ <0><1>سجّل الدخول الآن <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "مركزة العرض"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "الشهادات"
|
msgstr "الشهادات"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "تغيير اللغة"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "تغيير اللغة إلى..."
|
msgstr "تغيير اللغة إلى..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "دائرة"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "مسح التحديد"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "انقر هنا لتحديد ملف لاستيراده"
|
msgstr "انقر هنا لتحديد ملف لاستيراده"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "كتلة برمجية"
|
msgstr "كتلة برمجية"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "إرشادات الاستخدام"
|
msgstr "إرشادات الاستخدام"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "لا تملك حسابًا؟ <0><1>أنشئ واحدًا الآن <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "جاري تمكين المصادقة الثنائية..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "الإنجليزية"
|
msgstr "الإنجليزية"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "عزّز أمان حسابك بطبقات إضافية من الحماية."
|
msgstr "عزّز أمان حسابك بطبقات إضافية من الحماية."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "بدون إعلانات، بدون تتبّع"
|
msgstr "بدون إعلانات، بدون تتبّع"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "لم نعثر على نتائج."
|
msgstr "لم نعثر على نتائج."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "تحديث"
|
msgstr "تحديث"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "هل تذكّرت كلمة المرور؟ <0><1>سجّل الدخول الآن <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "ابحث عن..."
|
msgstr "ابحث عن..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "ابحث..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "نوع القسم"
|
msgstr "نوع القسم"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "اختر..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "تصغير"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "الزولو"
|
msgstr "الزولو"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "İctimai Girişi İcazə ver"
|
msgstr "İctimai Girişi İcazə ver"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Artıq hesabınız var? <0><1>İndi daxil olun <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Baxışı mərkəzləşdir"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Sertifikatlar"
|
msgstr "Sertifikatlar"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Dili dəyiş"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Dili dəyiş..."
|
msgstr "Dili dəyiş..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Dairə"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Seçimi təmizlə"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "İdxal üçün fayl seçmək üçün bura klikləyin"
|
msgstr "İdxal üçün fayl seçmək üçün bura klikləyin"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Kod Bloku"
|
msgstr "Kod Bloku"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Sənədləşmə"
|
msgstr "Sənədləşmə"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Hesabınız yoxdur? <0><1>İndi qeydiyyatdan keçin <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "İki mərhələli autentifikasiyanı aktivləşdirmə prosesi gedir..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "İngilis"
|
msgstr "İngilis"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Hesabınızın təhlükəsizliyini əlavə qoruma qatları ilə gücləndirin."
|
msgstr "Hesabınızın təhlükəsizliyini əlavə qoruma qatları ilə gücləndirin."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Reklam yoxdur, İzləmə yoxdur"
|
msgstr "Reklam yoxdur, İzləmə yoxdur"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Nəticə tapılmadı."
|
msgstr "Nəticə tapılmadı."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Yenilə"
|
msgstr "Yenilə"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Parolunuzu xatırladınız? <0><1>İndi daxil olun <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Axtar..."
|
msgstr "Axtar..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Axtar..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Bölmə Növü"
|
msgstr "Bölmə Növü"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Seç..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Uzaqlaşdır"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Разрешаване на публичен достъп"
|
msgstr "Разрешаване на публичен достъп"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Вече имате акаунт? <0><1>Влезте сега <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Центриране на изгледа"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Сертификати"
|
msgstr "Сертификати"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Промяна на езика"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Промяна на езика на..."
|
msgstr "Промяна на езика на..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Кръг"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Изчистване на избора"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Кликнете тук, за да изберете файл за импортиране"
|
msgstr "Кликнете тук, за да изберете файл за импортиране"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Блок с код"
|
msgstr "Блок с код"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Документация"
|
msgstr "Документация"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Нямате профил? <0><1>Създайте един сега <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Активиране на двуфакторно удостоверяв
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Английски"
|
msgstr "Английски"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Подобрете сигурността на профила си с допълнителни нива на защита."
|
msgstr "Подобрете сигурността на профила си с допълнителни нива на защита."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Без реклами, без проследяване"
|
msgstr "Без реклами, без проследяване"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Няма намерени резултати."
|
msgstr "Няма намерени резултати."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Опресняване"
|
msgstr "Опресняване"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Спомнихте си паролата? <0><1>Влезте сега <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Търсене на..."
|
msgstr "Търсене на..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Търсене..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Тип раздел"
|
msgstr "Тип раздел"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Изберете..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Намаляване"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Зулуски"
|
msgstr "Зулуски"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "সর্বজনীন অ্যাক্সেসের অনুমতি দিন"
|
msgstr "সর্বজনীন অ্যাক্সেসের অনুমতি দিন"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "ইতিমধ্যেই একটি অ্যাকাউন্ট আছে? <0><1>এখনই সাইন ইন করুন <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "ভিউ কেন্দ্র করুন"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "সার্টিফিকেশনসমূহ"
|
msgstr "সার্টিফিকেশনসমূহ"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "ভাষা পরিবর্তন করুন"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "ভাষা পরিবর্তন করুন..."
|
msgstr "ভাষা পরিবর্তন করুন..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "বৃত্ত"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "নির্বাচন মুছে ফেলুন"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "ইমপোর্ট করার জন্য এখান ক্লিক করে একটি ফাইল নির্বাচন করুন"
|
msgstr "ইমপোর্ট করার জন্য এখান ক্লিক করে একটি ফাইল নির্বাচন করুন"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "কোড ব্লক"
|
msgstr "কোড ব্লক"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "ডকুমেন্টেশন"
|
msgstr "ডকুমেন্টেশন"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "অ্যাকাউন্ট নেই? <0><1>এখনই একটি তৈরি করুন <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "টু‑ফ্যাক্টর প্রমাণীকরণ সক
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "ইংরেজি"
|
msgstr "ইংরেজি"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "অতিরিক্ত সুরক্ষার স্তর যোগ করে আপনার অ্যাকাউন্টের নিরাপত্তা বাড়িয়ে তুলুন।"
|
msgstr "অতিরিক্ত সুরক্ষার স্তর যোগ করে আপনার অ্যাকাউন্টের নিরাপত্তা বাড়িয়ে তুলুন।"
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "কোনো বিজ্ঞাপন নয়, কোনো ট্র্যাকিং নয়"
|
msgstr "কোনো বিজ্ঞাপন নয়, কোনো ট্র্যাকিং নয়"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "কোন ফলাফল খুঁজে পাওয়া যায়নি।"
|
msgstr "কোন ফলাফল খুঁজে পাওয়া যায়নি।"
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "রিফ্রেশ"
|
msgstr "রিফ্রেশ"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "পাসওয়ার্ড মনে আছে? <0><1>এখনই সাইন ইন করুন <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "খুঁজুন..."
|
msgstr "খুঁজুন..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "অনুসন্ধান..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "বিভাগের ধরন"
|
msgstr "বিভাগের ধরন"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "নির্বাচন করুন..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "জুম আউট"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "জুলু"
|
msgstr "জুলু"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Permet accés públic"
|
msgstr "Permet accés públic"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Ja tens un compte? <0><1>Inicia sessió ara <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Centra la vista"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certificacions"
|
msgstr "Certificacions"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Canvia l’idioma"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Canvia l’idioma a..."
|
msgstr "Canvia l’idioma a..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Cercle"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Esborra la selecció"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Fes clic aquí per seleccionar un fitxer per importar"
|
msgstr "Fes clic aquí per seleccionar un fitxer per importar"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Bloc de codi"
|
msgstr "Bloc de codi"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Documentació"
|
msgstr "Documentació"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "No tens un compte? <0><1>Crea’n un ara <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "S’està activant l’autenticació en dos passos..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Anglès"
|
msgstr "Anglès"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Millora la seguretat del compte amb capes addicionals de protecció."
|
msgstr "Millora la seguretat del compte amb capes addicionals de protecció."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Sense publicitat, sense seguiment"
|
msgstr "Sense publicitat, sense seguiment"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "No s’han trobat resultats."
|
msgstr "No s’han trobat resultats."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Actualitza"
|
msgstr "Actualitza"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Recordes la contrasenya? <0><1>Inicia sessió ara <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Cerca..."
|
msgstr "Cerca..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Cerca..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Tipus de secció"
|
msgstr "Tipus de secció"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Selecciona..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Allunya"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulú"
|
msgstr "Zulú"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Povolit veřejný přístup"
|
msgstr "Povolit veřejný přístup"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Máte už účet? <0><1>Přihlaste se nyní <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Vycentrovat zobrazení"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Osvědčení"
|
msgstr "Osvědčení"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Změnit jazyk"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Změnit jazyk na…"
|
msgstr "Změnit jazyk na…"
|
||||||
@@ -552,14 +548,15 @@ msgstr "Kruh"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Zrušit výběr"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Kliknutím zde vyberte soubor k importu"
|
msgstr "Kliknutím zde vyberte soubor k importu"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Blok kódu"
|
msgstr "Blok kódu"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentace"
|
msgstr "Dokumentace"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Nemáte účet? <0><1>Vytvořte si ho nyní <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Aktivace dvoufázového ověření…"
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Angličtina"
|
msgstr "Angličtina"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Zvyšte zabezpečení svého účtu pomocí dalších vrstev ochrany."
|
msgstr "Zvyšte zabezpečení svého účtu pomocí dalších vrstev ochrany."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Bez reklam, bez sledování"
|
msgstr "Bez reklam, bez sledování"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Nebyly nalezeny žádné výsledky."
|
msgstr "Nebyly nalezeny žádné výsledky."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Obnovit"
|
msgstr "Obnovit"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Pamatujete si heslo? <0><1>Přihlaste se nyní <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Hledat…"
|
msgstr "Hledat…"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Hledat…"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Typ sekce"
|
msgstr "Typ sekce"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Vybrat…"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Oddálit"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Tillad offentlig adgang"
|
msgstr "Tillad offentlig adgang"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Har du allerede en konto? <0><1>Log ind nu <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Centrér visning"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certificeringer"
|
msgstr "Certificeringer"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Skift sprog"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Skift sprog til..."
|
msgstr "Skift sprog til..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Cirkel"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Ryd markering"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Klik her for at vælge en fil, der skal importeres"
|
msgstr "Klik her for at vælge en fil, der skal importeres"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Kodeblok"
|
msgstr "Kodeblok"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentation"
|
msgstr "Dokumentation"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Har du ikke en konto? <0><1>Opret en nu <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Aktiverer to-faktor-godkendelse..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Engelsk"
|
msgstr "Engelsk"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Forstærk sikkerheden på din konto med ekstra beskyttelseslag."
|
msgstr "Forstærk sikkerheden på din konto med ekstra beskyttelseslag."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Ingen reklamer, ingen sporing"
|
msgstr "Ingen reklamer, ingen sporing"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Ingen resultater fundet."
|
msgstr "Ingen resultater fundet."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Opdater"
|
msgstr "Opdater"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Kan du huske din adgangskode? <0><1>Log ind nu <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Søg efter..."
|
msgstr "Søg efter..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Søg..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Afsnitstype"
|
msgstr "Afsnitstype"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Vælg..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Zoom ud"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Öffentlichen Zugriff erlauben"
|
msgstr "Öffentlichen Zugriff erlauben"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Sie haben bereits ein Konto? <0><1>Jetzt anmelden <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Ansicht zentrieren"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Zertifizierungen"
|
msgstr "Zertifizierungen"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Sprache ändern"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Sprache ändern zu..."
|
msgstr "Sprache ändern zu..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Kreis"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr "Chatverlauf löschen"
|
msgstr "Chatverlauf löschen"
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Auswahl löschen"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Hier klicken, um eine Datei zum Importieren auszuwählen"
|
msgstr "Hier klicken, um eine Datei zum Importieren auszuwählen"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Code-Block"
|
msgstr "Code-Block"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentation"
|
msgstr "Dokumentation"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Sie haben noch kein Konto? <0><1>Jetzt erstellen <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Die Zwei-Faktor-Authentifizierung wird aktiviert..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Englisch"
|
msgstr "Englisch"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Verbessere die Sicherheit deines Kontos mit zusätzlichen Schutzebenen."
|
msgstr "Verbessere die Sicherheit deines Kontos mit zusätzlichen Schutzebenen."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Keine Werbung, kein Tracking"
|
msgstr "Keine Werbung, kein Tracking"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Keine Ergebnisse gefunden."
|
msgstr "Keine Ergebnisse gefunden."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Aktualisieren"
|
msgstr "Aktualisieren"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Sie erinnern sich wieder an Ihr Passwort? <0><1>Jetzt anmelden <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Suchen nach..."
|
msgstr "Suchen nach..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Suchen..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Abschnittstyp"
|
msgstr "Abschnittstyp"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Auswählen..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Herauszoomen"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Να επιτρέπεται δημόσια πρόσβαση"
|
msgstr "Να επιτρέπεται δημόσια πρόσβαση"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Έχετε ήδη λογαριασμό; <0><1>Συνδεθείτε τώρα <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Κεντράρισμα προβολής"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Πιστοποιήσεις"
|
msgstr "Πιστοποιήσεις"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Αλλαγή γλώσσας"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Αλλαγή γλώσσας σε..."
|
msgstr "Αλλαγή γλώσσας σε..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Κύκλος"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Απαλοιφή επιλογής"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Κάντε κλικ εδώ για να επιλέξετε ένα αρχείο προς εισαγωγή"
|
msgstr "Κάντε κλικ εδώ για να επιλέξετε ένα αρχείο προς εισαγωγή"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Μπλοκ κώδικα"
|
msgstr "Μπλοκ κώδικα"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Τεκμηρίωση"
|
msgstr "Τεκμηρίωση"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Δεν έχετε λογαριασμό; <0><1>Δημιουργήστε έναν τώρα <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Ενεργοποίηση ελέγχου ταυτότητας δύο πα
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Αγγλικά"
|
msgstr "Αγγλικά"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Ενισχύστε την ασφάλεια του λογαριασμού σας με επιπλέον επίπεδα προστασίας."
|
msgstr "Ενισχύστε την ασφάλεια του λογαριασμού σας με επιπλέον επίπεδα προστασίας."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Χωρίς διαφημίσεις, χωρίς παρακολούθηση"
|
msgstr "Χωρίς διαφημίσεις, χωρίς παρακολούθηση"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Δεν βρέθηκαν αποτελέσματα."
|
msgstr "Δεν βρέθηκαν αποτελέσματα."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Ανανέωση"
|
msgstr "Ανανέωση"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Θυμάστε τον κωδικό πρόσβασής σας; <0><1>Συνδεθείτε τώρα <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Αναζήτηση για..."
|
msgstr "Αναζήτηση για..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Αναζήτηση..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Τύπος ενότητας"
|
msgstr "Τύπος ενότητας"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Επιλέξτε..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Σμίκρυνση"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Ζουλού"
|
msgstr "Ζουλού"
|
||||||
|
|
||||||
|
|||||||
Generated
+34
-37
@@ -149,7 +149,7 @@ msgstr "Add a new custom section"
|
|||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/education.tsx
|
#: src/routes/builder/$resumeId/-sidebar/left/sections/education.tsx
|
||||||
msgid "Add a new education"
|
msgid "Add a new education"
|
||||||
msgstr "Add a new certification"
|
msgstr "Add a new education"
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/experience.tsx
|
#: src/routes/builder/$resumeId/-sidebar/left/sections/experience.tsx
|
||||||
msgid "Add a new experience"
|
msgid "Add a new experience"
|
||||||
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Allow Public Access"
|
msgstr "Allow Public Access"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgstr "Already have an account? <0/>"
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -387,7 +387,7 @@ msgstr "Back to Login"
|
|||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/design.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/design.tsx
|
||||||
msgid "Background Color"
|
msgid "Background Color"
|
||||||
msgstr "Background Colour"
|
msgstr "Background Color"
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Backup codes copied to clipboard."
|
msgid "Backup codes copied to clipboard."
|
||||||
@@ -446,7 +446,7 @@ msgstr "By the community, for the community."
|
|||||||
|
|
||||||
#: src/routes/_home/-sections/faq.tsx
|
#: src/routes/_home/-sections/faq.tsx
|
||||||
msgid "Can I customize the templates?"
|
msgid "Can I customize the templates?"
|
||||||
msgstr "Can I customise the templates?"
|
msgstr "Can I customize the templates?"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/faq.tsx
|
#: src/routes/_home/-sections/faq.tsx
|
||||||
msgid "Can I export my resume to PDF?"
|
msgid "Can I export my resume to PDF?"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Center view"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certifications"
|
msgstr "Certifications"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Change language"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Change language to..."
|
msgstr "Change language to..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Circle"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr "Clear chat history"
|
msgstr "Clear chat history"
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Clear selection"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Click here to select a file to import"
|
msgstr "Click here to select a file to import"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Code Block"
|
msgstr "Code Block"
|
||||||
@@ -669,7 +666,7 @@ msgstr "Create a new account"
|
|||||||
#: src/dialogs/api-key/create.tsx
|
#: src/dialogs/api-key/create.tsx
|
||||||
#: src/routes/dashboard/settings/api-keys.tsx
|
#: src/routes/dashboard/settings/api-keys.tsx
|
||||||
msgid "Create a new API key"
|
msgid "Create a new API key"
|
||||||
msgstr "Create new API key"
|
msgstr "Create a new API key"
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/award.tsx
|
#: src/dialogs/resume/sections/award.tsx
|
||||||
msgid "Create a new award"
|
msgid "Create a new award"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Documentation"
|
msgstr "Documentation"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgstr "Don't have an account? <0/>"
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1012,7 +1009,11 @@ msgstr "Enabling two-factor authentication..."
|
|||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "English (UK)"
|
msgstr "English"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
@@ -1052,11 +1053,11 @@ msgstr "Everything entered here is stored locally on your browser. Your data is
|
|||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Everything you need to create, customize, and share professional resumes. Built with privacy in mind, powered by open source, and completely free forever."
|
msgid "Everything you need to create, customize, and share professional resumes. Built with privacy in mind, powered by open source, and completely free forever."
|
||||||
msgstr "Everything you need to create, customise, and share professional resumes. Built with privacy in mind, powered by open source, and completely free forever."
|
msgstr "Everything you need to create, customize, and share professional resumes. Built with privacy in mind, powered by open source, and completely free forever."
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Exit Fullscreen"
|
msgid "Exit Fullscreen"
|
||||||
msgstr "Exit fullscreen"
|
msgstr "Exit Fullscreen"
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/custom.tsx
|
#: src/dialogs/resume/sections/custom.tsx
|
||||||
#: src/utils/resume/section.tsx
|
#: src/utils/resume/section.tsx
|
||||||
@@ -1169,7 +1170,7 @@ msgstr "French"
|
|||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/layout/pages.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/layout/pages.tsx
|
||||||
msgid "Full Width"
|
msgid "Full Width"
|
||||||
msgstr "Full width"
|
msgstr "Full Width"
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Fullscreen"
|
msgid "Fullscreen"
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "No Advertising, No Tracking"
|
msgstr "No Advertising, No Tracking"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "No results found."
|
msgstr "No results found."
|
||||||
|
|
||||||
@@ -1689,7 +1689,7 @@ msgstr "Ordered List"
|
|||||||
|
|
||||||
#: src/dialogs/resume/sections/volunteer.tsx
|
#: src/dialogs/resume/sections/volunteer.tsx
|
||||||
msgid "Organization"
|
msgid "Organization"
|
||||||
msgstr "Organisation"
|
msgstr "Organization"
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Overall Period"
|
msgid "Overall Period"
|
||||||
@@ -1760,7 +1760,7 @@ msgstr "Persian"
|
|||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Personalize your resume with any colors, fonts or designs, and make it your own."
|
msgid "Personalize your resume with any colors, fonts or designs, and make it your own."
|
||||||
msgstr "Personalise your resume with any colours, fonts or designs, and make it your own."
|
msgstr "Personalize your resume with any colors, fonts or designs, and make it your own."
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/reference.tsx
|
#: src/dialogs/resume/sections/reference.tsx
|
||||||
#: src/routes/builder/$resumeId/-sidebar/left/sections/basics.tsx
|
#: src/routes/builder/$resumeId/-sidebar/left/sections/basics.tsx
|
||||||
@@ -1824,7 +1824,7 @@ msgstr "Press <0>{RETURN_KEY}</0> or <1>{COMMA_KEY}</1> to add or save the curre
|
|||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/design.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/design.tsx
|
||||||
msgid "Primary Color"
|
msgid "Primary Color"
|
||||||
msgstr "Primary Colour"
|
msgstr "Primary Color"
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/skill.tsx
|
#: src/dialogs/resume/sections/skill.tsx
|
||||||
msgid "Proficiency"
|
msgid "Proficiency"
|
||||||
@@ -1853,7 +1853,7 @@ msgstr "Projects"
|
|||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/sharing.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/sharing.tsx
|
||||||
msgid "Protect your resume from unauthorized access with a password"
|
msgid "Protect your resume from unauthorized access with a password"
|
||||||
msgstr "Protect your resume from unauthorised access with a password"
|
msgstr "Protect your resume from unauthorized access with a password"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Protect your resume with a password, and let only people with the password view it."
|
msgid "Protect your resume with a password, and let only people with the password view it."
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Refresh"
|
msgstr "Refresh"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgstr "Remember your password? <0/>"
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Search for..."
|
msgstr "Search for..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Search..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Section Type"
|
msgstr "Section Type"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Select..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2327,7 +2325,7 @@ msgstr "Tags"
|
|||||||
|
|
||||||
#: src/dialogs/resume/index.tsx
|
#: src/dialogs/resume/index.tsx
|
||||||
msgid "Tags can be used to categorize your resume by keywords."
|
msgid "Tags can be used to categorize your resume by keywords."
|
||||||
msgstr "Tags can be used to categorise your resume by keywords."
|
msgstr "Tags can be used to categorize your resume by keywords."
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Tamil"
|
msgid "Tamil"
|
||||||
@@ -2359,7 +2357,7 @@ msgstr "Testimonials"
|
|||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/design.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/design.tsx
|
||||||
msgid "Text Color"
|
msgid "Text Color"
|
||||||
msgstr "Text Colour"
|
msgstr "Text Color"
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Thai"
|
msgid "Thai"
|
||||||
@@ -2498,7 +2496,7 @@ msgstr "Turn on public sharing to track how many times your resume has been view
|
|||||||
|
|
||||||
#: src/dialogs/resume/template/data.ts
|
#: src/dialogs/resume/template/data.ts
|
||||||
msgid "Two-column with a bold colored sidebar and skill bars; great for creative or tech roles where visual flair is welcome."
|
msgid "Two-column with a bold colored sidebar and skill bars; great for creative or tech roles where visual flair is welcome."
|
||||||
msgstr "Two-column with a bold coloured sidebar and skill bars; great for creative or tech roles where visual flair is welcome."
|
msgstr "Two-column with a bold colored sidebar and skill bars; great for creative or tech roles where visual flair is welcome."
|
||||||
|
|
||||||
#: src/dialogs/resume/template/data.ts
|
#: src/dialogs/resume/template/data.ts
|
||||||
msgid "Two-column with a dark teal sidebar and skills grid; modern feel for developers, data scientists, or technical PMs."
|
msgid "Two-column with a dark teal sidebar and skills grid; modern feel for developers, data scientists, or technical PMs."
|
||||||
@@ -2789,7 +2787,7 @@ msgstr "When locked, the resume cannot be updated or deleted."
|
|||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Write your own CSS (or use an AI to generate it for you) to customize your resume to the fullest."
|
msgid "Write your own CSS (or use an AI to generate it for you) to customize your resume to the fullest."
|
||||||
msgstr "Write your own CSS (or use an AI to generate it for you) to customise your resume to the fullest."
|
msgstr "Write your own CSS (or use an AI to generate it for you) to customize your resume to the fullest."
|
||||||
|
|
||||||
#: src/routes/_home/-sections/faq.tsx
|
#: src/routes/_home/-sections/faq.tsx
|
||||||
msgid "Yes, Reactive Resume is available in multiple languages. You can choose your preferred language in the settings page, or using the language switcher in the top right corner. If you don't see your language, or you would like to improve the existing translations, you can <0>contribute to the translations on Crowdin<1> (opens in new tab)</1></0>."
|
msgid "Yes, Reactive Resume is available in multiple languages. You can choose your preferred language in the settings page, or using the language switcher in the top right corner. If you don't see your language, or you would like to improve the existing translations, you can <0>contribute to the translations on Crowdin<1> (opens in new tab)</1></0>."
|
||||||
@@ -2797,7 +2795,7 @@ msgstr "Yes, Reactive Resume is available in multiple languages. You can choose
|
|||||||
|
|
||||||
#: src/routes/_home/-sections/faq.tsx
|
#: src/routes/_home/-sections/faq.tsx
|
||||||
msgid "Yes! Every template is fully customizable. You can change colors, fonts, spacing, and even write custom CSS for complete control over your resume's appearance."
|
msgid "Yes! Every template is fully customizable. You can change colors, fonts, spacing, and even write custom CSS for complete control over your resume's appearance."
|
||||||
msgstr "Yes! Every template is fully customisable. You can change colours, fonts, spacing, and even write custom CSS for complete control over your resume's appearance."
|
msgstr "Yes! Every template is fully customizable. You can change colors, fonts, spacing, and even write custom CSS for complete control over your resume's appearance."
|
||||||
|
|
||||||
#: src/routes/_home/-sections/faq.tsx
|
#: src/routes/_home/-sections/faq.tsx
|
||||||
msgid "Yes! Reactive Resume is completely free to use, with no hidden costs, premium tiers, or subscription fees. It's open-source and will always remain free."
|
msgid "Yes! Reactive Resume is completely free to use, with no hidden costs, premium tiers, or subscription fees. It's open-source and will always remain free."
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Zoom out"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+15
-17
@@ -241,8 +241,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Allow Public Access"
|
msgstr "Allow Public Access"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgstr "Already have an account? <0/>"
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -503,10 +503,6 @@ msgstr "Center view"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certifications"
|
msgstr "Certifications"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Change language"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Change language to..."
|
msgstr "Change language to..."
|
||||||
@@ -547,14 +543,15 @@ msgstr "Circle"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr "Clear chat history"
|
msgstr "Clear chat history"
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Clear selection"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Click here to select a file to import"
|
msgstr "Click here to select a file to import"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr "Close"
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Code Block"
|
msgstr "Code Block"
|
||||||
@@ -891,8 +888,8 @@ msgid "Documentation"
|
|||||||
msgstr "Documentation"
|
msgstr "Documentation"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgstr "Don't have an account? <0/>"
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1009,6 +1006,10 @@ msgstr "Enabling two-factor authentication..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "English"
|
msgstr "English"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr "English (United Kingdom)"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Enhance the security of your account with additional layers of protection."
|
msgstr "Enhance the security of your account with additional layers of protection."
|
||||||
@@ -1625,7 +1626,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "No Advertising, No Tracking"
|
msgstr "No Advertising, No Tracking"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "No results found."
|
msgstr "No results found."
|
||||||
|
|
||||||
@@ -1918,8 +1918,8 @@ msgid "Refresh"
|
|||||||
msgstr "Refresh"
|
msgstr "Refresh"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgstr "Remember your password? <0/>"
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2050,7 +2050,6 @@ msgid "Search for..."
|
|||||||
msgstr "Search for..."
|
msgstr "Search for..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Search..."
|
msgstr "Search..."
|
||||||
|
|
||||||
@@ -2063,7 +2062,6 @@ msgid "Section Type"
|
|||||||
msgstr "Section Type"
|
msgstr "Section Type"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Select..."
|
msgstr "Select..."
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Permitir acceso público"
|
msgstr "Permitir acceso público"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "¿Ya tienes una cuenta? <0><1>Inicia sesión ahora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Centrar vista"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certificaciones"
|
msgstr "Certificaciones"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Cambiar idioma"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Cambiar idioma a..."
|
msgstr "Cambiar idioma a..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Círculo"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr "Limpiar historial del chat"
|
msgstr "Limpiar historial del chat"
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Borrar selección"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Haz clic aquí para seleccionar un archivo para importar"
|
msgstr "Haz clic aquí para seleccionar un archivo para importar"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Bloque de código"
|
msgstr "Bloque de código"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Documentación"
|
msgstr "Documentación"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "¿No tienes una cuenta? <0><1>Crea una ahora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Habilitando la autenticación de doble factor..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Inglés"
|
msgstr "Inglés"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Refuerza la seguridad de tu cuenta con capas adicionales de protección."
|
msgstr "Refuerza la seguridad de tu cuenta con capas adicionales de protección."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Sin publicidad, sin rastreo"
|
msgstr "Sin publicidad, sin rastreo"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "No se han encontrado resultados."
|
msgstr "No se han encontrado resultados."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Actualizar"
|
msgstr "Actualizar"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "¿Recuerdas tu contraseña? <0><1>Inicia sesión ahora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Buscar..."
|
msgstr "Buscar..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Buscar..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Tipo de sección"
|
msgstr "Tipo de sección"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Seleccionar..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Alejar"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulú"
|
msgstr "Zulú"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "اجازهٔ دسترسی عمومی"
|
msgstr "اجازهٔ دسترسی عمومی"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "قبلاً حساب دارید؟ <0><1>همین حالا وارد شوید <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "مرکز نما"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "گواهینامهها"
|
msgstr "گواهینامهها"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "تغییر زبان"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "تغییر زبان به..."
|
msgstr "تغییر زبان به..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "دایره"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "پاک کردن انتخاب"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "برای انتخاب فایل برای وارد کردن، اینجا کلیک کنید"
|
msgstr "برای انتخاب فایل برای وارد کردن، اینجا کلیک کنید"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "بلوک کد"
|
msgstr "بلوک کد"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "مستندات"
|
msgstr "مستندات"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "حساب ندارید؟ <0><1>همین حالا یکی بسازید <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "در حال فعالکردن احراز هویت دو مرحلها
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "انگلیسی"
|
msgstr "انگلیسی"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "امنیت حساب خود را با لایههای اضافی حفاظت افزایش دهید."
|
msgstr "امنیت حساب خود را با لایههای اضافی حفاظت افزایش دهید."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "بدون تبلیغات، بدون رهگیری"
|
msgstr "بدون تبلیغات، بدون رهگیری"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "موردی یافت نشد."
|
msgstr "موردی یافت نشد."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "تازهسازی"
|
msgstr "تازهسازی"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "گذرواژهتان را به یاد آوردید؟ <0><1>همین حالا وارد شوید <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "جستجو برای..."
|
msgstr "جستجو برای..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "جستجو..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "نوع بخش"
|
msgstr "نوع بخش"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "انتخاب..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "کوچکنمایی"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "زولو"
|
msgstr "زولو"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Salli julkinen käyttö"
|
msgstr "Salli julkinen käyttö"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Onko sinulla jo tili? <0><1>Kirjaudu sisään nyt <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Keskitä näkymä"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Sertifikaatit"
|
msgstr "Sertifikaatit"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Vaihda kieli"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Vaihda kieli..."
|
msgstr "Vaihda kieli..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Ympyrä"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Tyhjennä valinta"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Napsauta tästä valitaksesi tuotavan tiedoston"
|
msgstr "Napsauta tästä valitaksesi tuotavan tiedoston"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Koodilohko"
|
msgstr "Koodilohko"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentaatio"
|
msgstr "Dokumentaatio"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Eikö sinulla ole tiliä? <0><1>Luo tili nyt <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Otetaan kaksivaiheista todennusta käyttöön..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "englanti"
|
msgstr "englanti"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Paranna tilisi turvallisuutta lisäsuojaustasoilla."
|
msgstr "Paranna tilisi turvallisuutta lisäsuojaustasoilla."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Ei mainoksia, ei seurantaa"
|
msgstr "Ei mainoksia, ei seurantaa"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Tuloksia ei löytynyt."
|
msgstr "Tuloksia ei löytynyt."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Päivitä"
|
msgstr "Päivitä"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Muistatko salasanasi? <0><1>Kirjaudu sisään nyt <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Etsi..."
|
msgstr "Etsi..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Hae..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Osion tyyppi"
|
msgstr "Osion tyyppi"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Valitse..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Loitonna"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Autoriser l'accès public"
|
msgstr "Autoriser l'accès public"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Vous avez déjà un compte ? <0><1>Connectez-vous maintenant <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Centrer la vue"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certifications"
|
msgstr "Certifications"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Changer la langue"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Changer la langue en..."
|
msgstr "Changer la langue en..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Cercle"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr "Effacer l'historique de chat"
|
msgstr "Effacer l'historique de chat"
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Effacer la sélection"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Cliquez ici pour sélectionner un fichier à importer"
|
msgstr "Cliquez ici pour sélectionner un fichier à importer"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Bloc de code"
|
msgstr "Bloc de code"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Documentation"
|
msgstr "Documentation"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Vous n'avez pas de compte ? <0><1>Créez-en un maintenant <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Activation de l'authentification à deux facteurs..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Anglais"
|
msgstr "Anglais"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Améliorez la sécurité de votre compte avec des niveaux de protection supplémentaires."
|
msgstr "Améliorez la sécurité de votre compte avec des niveaux de protection supplémentaires."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Pas de publicité, pas de suivi"
|
msgstr "Pas de publicité, pas de suivi"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Aucun résultat trouvé."
|
msgstr "Aucun résultat trouvé."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Actualiser"
|
msgstr "Actualiser"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Vous vous souvenez de votre mot de passe ? <0><1>Connectez-vous maintenant <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Rechercher..."
|
msgstr "Rechercher..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Recherche..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Type de section"
|
msgstr "Type de section"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Sélectionner..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Zoom arrière"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zoulou"
|
msgstr "Zoulou"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "לאפשר גישה ציבורית"
|
msgstr "לאפשר גישה ציבורית"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "כבר יש לך חשבון? <0><1>התחברות עכשיו <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "מרכוז התצוגה"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "הסמכות"
|
msgstr "הסמכות"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "שינוי שפה"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "שינוי השפה אל..."
|
msgstr "שינוי השפה אל..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "עיגול"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "ניקוי הבחירה"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "לחץ כאן כדי לבחור קובץ לייבוא"
|
msgstr "לחץ כאן כדי לבחור קובץ לייבוא"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "בלוק קוד"
|
msgstr "בלוק קוד"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "תיעוד"
|
msgstr "תיעוד"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "אין לך חשבון? <0><1>יצירת חשבון עכשיו <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "הגנה עם אימות דו־שלבי..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "אנגלית"
|
msgstr "אנגלית"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "חזק את האבטחה של החשבון שלך עם שכבות הגנה נוספות."
|
msgstr "חזק את האבטחה של החשבון שלך עם שכבות הגנה נוספות."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "בלי פרסום, בלי מעקב"
|
msgstr "בלי פרסום, בלי מעקב"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "לא נמצאו תוצאות."
|
msgstr "לא נמצאו תוצאות."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "רענון"
|
msgstr "רענון"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "נזכרת בסיסמה? <0><1>התחברות עכשיו <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "חיפוש..."
|
msgstr "חיפוש..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "חיפוש..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "סוג סעיף"
|
msgstr "סוג סעיף"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "בחירה..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "התרחקות"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "זולו"
|
msgstr "זולו"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "सार्वजनिक एक्सेस की अनुमति दें"
|
msgstr "सार्वजनिक एक्सेस की अनुमति दें"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "पहले से ही खाता है? <0><1>अभी साइन इन करें <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "दृश्य को केंद्र में करें"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "प्रमाणपत्र"
|
msgstr "प्रमाणपत्र"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "भाषा बदलें"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "भाषा बदलें..."
|
msgstr "भाषा बदलें..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "गोला"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "चयन साफ़ करें"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "इम्पोर्ट करने के लिए फ़ाइल चुनने हेतु यहाँ क्लिक करें"
|
msgstr "इम्पोर्ट करने के लिए फ़ाइल चुनने हेतु यहाँ क्लिक करें"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "कोड ब्लॉक"
|
msgstr "कोड ब्लॉक"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "आलेख"
|
msgstr "आलेख"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "खाता नहीं है? <0><1>अभी एक बनाएँ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "दो‑कारक प्रमाणीकरण सक्षम क
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "अंग्रेज़ी"
|
msgstr "अंग्रेज़ी"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "अपने खाते की सुरक्षा को अतिरिक्त सुरक्षा स्तरों के साथ बढ़ाएँ।"
|
msgstr "अपने खाते की सुरक्षा को अतिरिक्त सुरक्षा स्तरों के साथ बढ़ाएँ।"
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "कोई विज्ञापन नहीं, कोई ट्रैकिंग नहीं"
|
msgstr "कोई विज्ञापन नहीं, कोई ट्रैकिंग नहीं"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "कोई परिणाम नहीं मिला।"
|
msgstr "कोई परिणाम नहीं मिला।"
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "रिफ़्रेश"
|
msgstr "रिफ़्रेश"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "पासवर्ड याद है? <0><1>अभी साइन इन करें <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "खोजें..."
|
msgstr "खोजें..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "खोजें..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "अनुभाग प्रकार"
|
msgstr "अनुभाग प्रकार"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "चुनें..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "ज़ूम आउट"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "ज़ुलु"
|
msgstr "ज़ुलु"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Nyilvános hozzáférés engedélyezése"
|
msgstr "Nyilvános hozzáférés engedélyezése"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Már van fiókod? <0><1>Jelentkezz be most <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Nézet középre"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Tanúsítványok"
|
msgstr "Tanúsítványok"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Nyelv módosítása"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Nyelv módosítása erre..."
|
msgstr "Nyelv módosítása erre..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Kör"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Kijelölés törlése"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Kattints ide az importálandó fájl kiválasztásához"
|
msgstr "Kattints ide az importálandó fájl kiválasztásához"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Kódblokk"
|
msgstr "Kódblokk"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentáció"
|
msgstr "Dokumentáció"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Nincs fiókod? <0><1>Hozz létre egyet most <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Kétlépcsős hitelesítés engedélyezése..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Angol"
|
msgstr "Angol"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Növeld a fiókod biztonságát további védelmi rétegek hozzáadásával."
|
msgstr "Növeld a fiókod biztonságát további védelmi rétegek hozzáadásával."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Nincs reklám, nincs követés"
|
msgstr "Nincs reklám, nincs követés"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Nincs találat."
|
msgstr "Nincs találat."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Frissítés"
|
msgstr "Frissítés"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Eszébe jutott a jelszó? <0><1>Jelentkezz be most <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Keresés önéletrajzra..."
|
msgstr "Keresés önéletrajzra..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Keresés..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Szekció típusa"
|
msgstr "Szekció típusa"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Válassz..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Kicsinyítés"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Izinkan Akses Publik"
|
msgstr "Izinkan Akses Publik"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Sudah punya akun? <0><1>Masuk sekarang <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Pusatkan tampilan"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Sertifikasi"
|
msgstr "Sertifikasi"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Ubah bahasa"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Ubah bahasa ke..."
|
msgstr "Ubah bahasa ke..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Lingkaran"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Hapus pilihan"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Klik di sini untuk memilih file yang akan diimpor"
|
msgstr "Klik di sini untuk memilih file yang akan diimpor"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Blok Kode"
|
msgstr "Blok Kode"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentasi"
|
msgstr "Dokumentasi"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Tidak punya akun? <0><1>Buat sekarang <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Mengaktifkan autentikasi dua faktor..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Inggris"
|
msgstr "Inggris"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Tingkatkan keamanan akun Anda dengan lapisan perlindungan tambahan."
|
msgstr "Tingkatkan keamanan akun Anda dengan lapisan perlindungan tambahan."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Tanpa Iklan, Tanpa Pelacakan"
|
msgstr "Tanpa Iklan, Tanpa Pelacakan"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Tidak ada hasil."
|
msgstr "Tidak ada hasil."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Muat Ulang"
|
msgstr "Muat Ulang"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Ingat kata sandi Anda? <0><1>Masuk sekarang <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Cari..."
|
msgstr "Cari..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Cari..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Tipe Bagian"
|
msgstr "Tipe Bagian"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Pilih..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Perkecil"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Consenti accesso pubblico"
|
msgstr "Consenti accesso pubblico"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Hai già un account? <0><1>Accedi ora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Centra vista"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certificazioni"
|
msgstr "Certificazioni"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Cambia lingua"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Cambia lingua in..."
|
msgstr "Cambia lingua in..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Cerchio"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Pulisci selezione"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Fai clic qui per selezionare un file da importare"
|
msgstr "Fai clic qui per selezionare un file da importare"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Blocco di codice"
|
msgstr "Blocco di codice"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Documentazione"
|
msgstr "Documentazione"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Non hai un account? <0><1>Creane uno ora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Attivazione dell'autenticazione a due fattori..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Inglese"
|
msgstr "Inglese"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Aumenta la sicurezza del tuo account con ulteriori livelli di protezione."
|
msgstr "Aumenta la sicurezza del tuo account con ulteriori livelli di protezione."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Nessuna pubblicità, nessun tracciamento"
|
msgstr "Nessuna pubblicità, nessun tracciamento"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Nessun risultato trovato."
|
msgstr "Nessun risultato trovato."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Aggiorna"
|
msgstr "Aggiorna"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Ti ricordi la password? <0><1>Accedi ora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Cerca..."
|
msgstr "Cerca..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Cerca..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Tipo di sezione"
|
msgstr "Tipo di sezione"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Seleziona..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Rimpicciolisci"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "公開アクセスを許可"
|
msgstr "公開アクセスを許可"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "すでにアカウントをお持ちですか?<0><1>今すぐサインイン <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "中央に表示"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "認定資格"
|
msgstr "認定資格"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "言語を変更"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "言語を変更..."
|
msgstr "言語を変更..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "円"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "選択をクリア"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "ここをクリックしてインポートするファイルを選択"
|
msgstr "ここをクリックしてインポートするファイルを選択"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "コードブロック"
|
msgstr "コードブロック"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "ドキュメンテーション"
|
msgstr "ドキュメンテーション"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "アカウントをお持ちでないですか?<0><1>今すぐ作成 <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "二要素認証を有効にしています..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "英語"
|
msgstr "英語"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "アカウントのセキュリティを強化するために、追加の保護レイヤーを有効にしましょう。"
|
msgstr "アカウントのセキュリティを強化するために、追加の保護レイヤーを有効にしましょう。"
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "広告なし・トラッキングなし"
|
msgstr "広告なし・トラッキングなし"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "結果が見つかりません。"
|
msgstr "結果が見つかりません。"
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "再読み込み"
|
msgstr "再読み込み"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "パスワードを思い出しましたか?<0><1>今すぐサインイン <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "検索..."
|
msgstr "検索..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "検索..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "セクションタイプ"
|
msgstr "セクションタイプ"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "選択..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "ズームアウト"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "ズールー語"
|
msgstr "ズールー語"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "អនុញ្ញាតឱ្យចូលដំណើរការសាធារណៈ"
|
msgstr "អនុញ្ញាតឱ្យចូលដំណើរការសាធារណៈ"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "មានគណនីរួចហើយឬ? <0><1>ចូលឥឡូវនេះ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "ផ្ដោតទិដ្ឋភាពទៅកណ្ដាល
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "វិញ្ញាបនបត្រ"
|
msgstr "វិញ្ញាបនបត្រ"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "ប្ដូរភាសា"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "ប្តូរភាសាទៅ..."
|
msgstr "ប្តូរភាសាទៅ..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "រង្វង់"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "សម្អាតការជ្រើសរើស"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "ចុចទីនេះដើម្បីជ្រើសឯកសារមួយដើម្បីនាំចូល"
|
msgstr "ចុចទីនេះដើម្បីជ្រើសឯកសារមួយដើម្បីនាំចូល"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "កូដប្លុក"
|
msgstr "កូដប្លុក"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "ឯកសារ"
|
msgstr "ឯកសារ"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "មិនមានគណនីឬ? <0><1>បង្កើតមួយឥឡូវនេះ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "កំពុងបើកការផ្ទៀងផ្ទាត
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "ភាសាអង់គ្លេស"
|
msgstr "ភាសាអង់គ្លេស"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "បង្កើនសុវត្ថិភាពគណនីរបស់អ្នកដោយបន្ថែមក្រឡុកការពារបន្ថែម។"
|
msgstr "បង្កើនសុវត្ថិភាពគណនីរបស់អ្នកដោយបន្ថែមក្រឡុកការពារបន្ថែម។"
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "គ្មានការផ្សពាណិជ្ជកម្ម គ្មានការតាមដាន"
|
msgstr "គ្មានការផ្សពាណិជ្ជកម្ម គ្មានការតាមដាន"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "រកមិនឃើញលទ្ធផល។"
|
msgstr "រកមិនឃើញលទ្ធផល។"
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "ផ្ទៀងផ្ទាត់ម្ដងទៀត"
|
msgstr "ផ្ទៀងផ្ទាត់ម្ដងទៀត"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "ចង់ចាំពាក្យសម្ងាត់វិញហើយឬ? <0><1>ចូលឥឡូវនេះ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "ស្វែងរកប្រវត្តិរូប..."
|
msgstr "ស្វែងរកប្រវត្តិរូប..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "ស្វែងរក..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "ប្រភេទផ្នែក"
|
msgstr "ប្រភេទផ្នែក"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "ជ្រើស..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "បង្រួម"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "ಸಾರ್ವಜನಿಕ ಪ್ರವೇಶಕ್ಕೆ ಅನುಮತಿಸಿ"
|
msgstr "ಸಾರ್ವಜನಿಕ ಪ್ರವೇಶಕ್ಕೆ ಅನುಮತಿಸಿ"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "ಈಗಾಗಲೇ ಖಾತೆಯಿದೆಯಾ? <0><1>ಈಗಲೇ ಸೈನ್ ಇನ್ ಮಾಡಿ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "ಮಧ್ಯದಲ್ಲಿ ವೀಕ್ಷಿಸಿ"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "ಪ್ರಮಾಣಪತ್ರಗಳು"
|
msgstr "ಪ್ರಮಾಣಪತ್ರಗಳು"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "ಭಾಷೆ ಬದಲಾಯಿಸಿ"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "ಭಾಷೆಯನ್ನು ಈ ಕೆಳಗಿನದಕ್ಕೆ ಬದಲಾಯಿಸಿ..."
|
msgstr "ಭಾಷೆಯನ್ನು ಈ ಕೆಳಗಿನದಕ್ಕೆ ಬದಲಾಯಿಸಿ..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "ವೃತ್ತ"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "ಆಯ್ಕೆಯನ್ನು ತೆರವುಗೊಳಿಸಿ"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "ಆಮದು ಮಾಡಲು ಕಡತವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ"
|
msgstr "ಆಮದು ಮಾಡಲು ಕಡತವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "ಕೋಡ್ ಬ್ಲಾಕ್"
|
msgstr "ಕೋಡ್ ಬ್ಲಾಕ್"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "ದಾಖಲೀಕರಣ"
|
msgstr "ದಾಖಲೀಕರಣ"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "ಖಾತೆಯಿಲ್ಲವೇ? <0><1>ಈಗಲೇ ಖಾತೇ ರಚಿಸಿ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "ಎರಡು ಅಂಶದ ದೃಢೀಕರಣವನ್ನು ಸಕ್
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "ಆಂಗ್ಲ"
|
msgstr "ಆಂಗ್ಲ"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "ನಿಮ್ಮ ಖಾತೆಯ ಭದ್ರತೆಯನ್ನು ಹೆಚ್ಚುವರಿ ರಕ್ಷಣಾ ಪದರಗಳೊಂದಿಗೆ ಹೆಚ್ಚಿಸಿ."
|
msgstr "ನಿಮ್ಮ ಖಾತೆಯ ಭದ್ರತೆಯನ್ನು ಹೆಚ್ಚುವರಿ ರಕ್ಷಣಾ ಪದರಗಳೊಂದಿಗೆ ಹೆಚ್ಚಿಸಿ."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "ಯಾವುದೇ ಜಾಹೀರಾತುಗಳಿಲ್ಲ, ಯಾವುದೇ ಟ್ರ್ಯಾಕಿಂಗ್ ಇಲ್ಲ"
|
msgstr "ಯಾವುದೇ ಜಾಹೀರಾತುಗಳಿಲ್ಲ, ಯಾವುದೇ ಟ್ರ್ಯಾಕಿಂಗ್ ಇಲ್ಲ"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "ಯಾವುದೇ ಫಲಿತಾಂಶಗಳು ಕಂಡುಬರಲಿಲ್ಲ."
|
msgstr "ಯಾವುದೇ ಫಲಿತಾಂಶಗಳು ಕಂಡುಬರಲಿಲ್ಲ."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "ರಿಫ್ರೆಶ್ ಮಾಡಿ"
|
msgstr "ರಿಫ್ರೆಶ್ ಮಾಡಿ"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ನೆನಪಿದೆಯೇ? <0><1>ಈಗಲೇ ಸೈನ್ ಇನ್ ಮಾಡಿ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "ಹುಡುಕಿ..."
|
msgstr "ಹುಡುಕಿ..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "ಹುಡುಕಿ..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "ವಿಭಾಗದ ಪ್ರಕಾರ"
|
msgstr "ವಿಭಾಗದ ಪ್ರಕಾರ"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "ಆಯ್ಕೆಮಾಡಿ..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "ಗಾತ್ರ ಕುಗ್ಗಿಸಿ"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "ಜೂಲೂ"
|
msgstr "ಜೂಲೂ"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "공개 액세스 허용"
|
msgstr "공개 액세스 허용"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "이미 계정이 있으신가요? <0><1>지금 로그인하기 <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "보기 가운데로"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "자격증"
|
msgstr "자격증"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "언어 변경"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "언어를 변경..."
|
msgstr "언어를 변경..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "원"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "선택 해제"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "가져올 파일을 선택하려면 여기를 클릭하세요"
|
msgstr "가져올 파일을 선택하려면 여기를 클릭하세요"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "코드 블록"
|
msgstr "코드 블록"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "문서"
|
msgstr "문서"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "계정이 없으신가요? <0><1>지금 가입하기 <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "2단계 인증을 활성화하는 중입니다..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "영어"
|
msgstr "영어"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "계정 보안을 강화하기 위해 추가 보호 계층을 적용하세요."
|
msgstr "계정 보안을 강화하기 위해 추가 보호 계층을 적용하세요."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "광고 없음, 추적 없음"
|
msgstr "광고 없음, 추적 없음"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "결과가 없습니다."
|
msgstr "결과가 없습니다."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "새로고침"
|
msgstr "새로고침"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "비밀번호가 기억나시나요? <0><1>지금 로그인하기 <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "검색..."
|
msgstr "검색..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "검색..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "섹션 유형"
|
msgstr "섹션 유형"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "선택..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "축소"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "줄루어"
|
msgstr "줄루어"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Leisti viešą prieigą"
|
msgstr "Leisti viešą prieigą"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Jau turite paskyrą? <0><1>Prisijunkite dabar <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Centruoti vaizdą"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Sertifikatai"
|
msgstr "Sertifikatai"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Pakeisti kalbą"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Pakeisti kalbą į..."
|
msgstr "Pakeisti kalbą į..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Apskritimas"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Išvalyti pasirinkimą"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Spustelėkite čia, kad pasirinktumėte importuojamą failą"
|
msgstr "Spustelėkite čia, kad pasirinktumėte importuojamą failą"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Kodo blokas"
|
msgstr "Kodo blokas"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentacija"
|
msgstr "Dokumentacija"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Neturite paskyros? <0><1>Sukurkite ją dabar <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Įjungiamas dviejų veiksnių tapatumo patvirtinimas..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Anglų"
|
msgstr "Anglų"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Sustiprinkite savo paskyros saugumą papildomais apsaugos lygiais."
|
msgstr "Sustiprinkite savo paskyros saugumą papildomais apsaugos lygiais."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Be reklamų, be sekimo"
|
msgstr "Be reklamų, be sekimo"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Rezultatų nerasta."
|
msgstr "Rezultatų nerasta."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Perkrauti"
|
msgstr "Perkrauti"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Prisiminate slaptažodį? <0><1>Prisijunkite dabar <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Ieškoti..."
|
msgstr "Ieškoti..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Paieška..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Skyriaus tipas"
|
msgstr "Skyriaus tipas"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Pasirinkti..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Tolinti"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulų"
|
msgstr "Zulų"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Atļaut publisku piekļuvi"
|
msgstr "Atļaut publisku piekļuvi"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Jums jau ir konts? <0><1>Piesakieties tagad <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Centra skats"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Sertifikāti"
|
msgstr "Sertifikāti"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Mainīt valodu"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Mainīt valodu uz..."
|
msgstr "Mainīt valodu uz..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Aplis"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Notīrīt izvēli"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Noklikšķiniet šeit, lai izvēlētos importējamo failu"
|
msgstr "Noklikšķiniet šeit, lai izvēlētos importējamo failu"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Koda bloks"
|
msgstr "Koda bloks"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentācija"
|
msgstr "Dokumentācija"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Nav konta? <0><1>Izveidojiet to tagad <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Tiek ieslēgta divu faktoru autentifikācija..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Angļu"
|
msgstr "Angļu"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Pastipriniet sava konta drošību ar papildu aizsardzības līmeņiem."
|
msgstr "Pastipriniet sava konta drošību ar papildu aizsardzības līmeņiem."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Bez reklāmām, bez izsekošanas"
|
msgstr "Bez reklāmām, bez izsekošanas"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Rezultāti nav atrasti."
|
msgstr "Rezultāti nav atrasti."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Atsvaidzināt"
|
msgstr "Atsvaidzināt"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Atceraties savu paroli? <0><1>Piesakieties tagad <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Meklēt..."
|
msgstr "Meklēt..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Meklēt..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Sadaļas tips"
|
msgstr "Sadaļas tips"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Atlasīt..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Tālināt"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "പബ്ലിക് ആക്സസ് അനുവദിക്കുക"
|
msgstr "പബ്ലിക് ആക്സസ് അനുവദിക്കുക"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "ഇതിനകം ഒരു അക്കൗണ്ടുണ്ടോ? <0><1>ഇപ്പോൾ തന്നെ സൈൻ ഇൻ ചെയ്യൂ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "കാഴ്ച സെന്ററിലാക്കുക"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "സർട്ടിഫിക്കേഷനുകൾ"
|
msgstr "സർട്ടിഫിക്കേഷനുകൾ"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "ഭാഷ മാറ്റുക"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "ഭാഷ മാറ്റുക..."
|
msgstr "ഭാഷ മാറ്റുക..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "വൃത്തം"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "തിരഞ്ഞെടുപ്പ് ക്ലിയർ ചെയ്യുക"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "ഇംപോർട്ട് ചെയ്യാൻ ഒരു ഫയൽ തിരഞ്ഞെടുക്കാൻ ഇവിടെ ക്ലിക്ക് ചെയ്യുക"
|
msgstr "ഇംപോർട്ട് ചെയ്യാൻ ഒരു ഫയൽ തിരഞ്ഞെടുക്കാൻ ഇവിടെ ക്ലിക്ക് ചെയ്യുക"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "കോഡ് ബ്ലോക്ക്"
|
msgstr "കോഡ് ബ്ലോക്ക്"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "ഡോക്യുമെന്റേഷൻ"
|
msgstr "ഡോക്യുമെന്റേഷൻ"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "അക്കൗണ്ടില്ലേയോ? <0><1>ഇപ്പോൾ തന്നെ ഒന്ന് സൃഷ്ടിക്കൂ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "ടു‑ഫാക്ടർ ഓത്ന്റിക്കേഷൻ
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "ഇംഗ്ലീഷ്"
|
msgstr "ഇംഗ്ലീഷ്"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "നിങ്ങളുടെ അക്കൗണ്ടിന്റെ സുരക്ഷയെ കൂടുതൽ സംരക്ഷണ ലെയറുകൾ ഉപയോഗിച്ച് മെച്ചപ്പെടുത്തുക."
|
msgstr "നിങ്ങളുടെ അക്കൗണ്ടിന്റെ സുരക്ഷയെ കൂടുതൽ സംരക്ഷണ ലെയറുകൾ ഉപയോഗിച്ച് മെച്ചപ്പെടുത്തുക."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "പരസ്യങ്ങളില്ല, ട്രാക്കിംഗ് ഇല്ല"
|
msgstr "പരസ്യങ്ങളില്ല, ട്രാക്കിംഗ് ഇല്ല"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "ഒരൊന്നുമാത്രം ഫലങ്ങളൊന്നും ലഭ്യമല്ല."
|
msgstr "ഒരൊന്നുമാത്രം ഫലങ്ങളൊന്നും ലഭ്യമല്ല."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "റിഫ്രെഷ് ചെയ്യുക"
|
msgstr "റിഫ്രെഷ് ചെയ്യുക"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "നിങ്ങളുടെ പാസ്വേഡ് ഓർമ്മയുണ്ടോ? <0><1>ഇപ്പോൾ തന്നെ സൈൻ ഇൻ ചെയ്യൂ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "തിരയുക..."
|
msgstr "തിരയുക..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "തിരയുക..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "സെക്ഷൻ തരം"
|
msgstr "സെക്ഷൻ തരം"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "തിരഞ്ഞെടുക്കുക..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "സൂം ഔട്ട് ചെയ്യുക"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "സൂളു"
|
msgstr "സൂളു"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "सार्वजनिक अॅक्सेस परवानगी द्या"
|
msgstr "सार्वजनिक अॅक्सेस परवानगी द्या"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "आधीच खाते आहे का? <0><1>आता साइन इन करा <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "व्ह्यू केंद्रावर आणा"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "प्रमाणपत्रे"
|
msgstr "प्रमाणपत्रे"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "भाषा बदला"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "भाषा बदला..."
|
msgstr "भाषा बदला..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "गोलाकार"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "निवड साफ करा"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "इम्पोर्ट करण्यासाठी फाईल निवडण्यासाठी येथे क्लिक करा"
|
msgstr "इम्पोर्ट करण्यासाठी फाईल निवडण्यासाठी येथे क्लिक करा"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "कोड ब्लॉक"
|
msgstr "कोड ब्लॉक"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "दस्तऐवजीकरण"
|
msgstr "दस्तऐवजीकरण"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "खाते नाही का? <0><1>आत्ता साइन अप करा <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "दुहेरी घटक ओथेंटिकेशन सक्ष
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "इंग्रजी"
|
msgstr "इंग्रजी"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "तुमच्या खात्याची सुरक्षा अधिक मजबूत करण्यासाठी अतिरिक्त संरक्षण स्तर जोडा."
|
msgstr "तुमच्या खात्याची सुरक्षा अधिक मजबूत करण्यासाठी अतिरिक्त संरक्षण स्तर जोडा."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "जाहिरात नाही, ट्रॅकिंग नाही"
|
msgstr "जाहिरात नाही, ट्रॅकिंग नाही"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "कोणतेही परिणाम आढळले नाहीत."
|
msgstr "कोणतेही परिणाम आढळले नाहीत."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "ताजेतवाने करा"
|
msgstr "ताजेतवाने करा"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "पासवर्ड आठवला? <0><1>आता साइन इन करा <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "शोधा..."
|
msgstr "शोधा..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "शोधा..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "विभागाचा प्रकार"
|
msgstr "विभागाचा प्रकार"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "निवडा..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "बाहेर झूम करा"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "झुलू"
|
msgstr "झुलू"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Benarkan Akses Awam"
|
msgstr "Benarkan Akses Awam"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Sudah mempunyai akaun? <0><1>Log masuk sekarang <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Pusatkan paparan"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Pensijilan"
|
msgstr "Pensijilan"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Tukar bahasa"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Tukar bahasa kepada..."
|
msgstr "Tukar bahasa kepada..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Bulatan"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Kosongkan pilihan"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Klik di sini untuk memilih fail untuk diimport"
|
msgstr "Klik di sini untuk memilih fail untuk diimport"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Blok Kod"
|
msgstr "Blok Kod"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentasi"
|
msgstr "Dokumentasi"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Tidak mempunyai akaun? <0><1>Daftar sekarang <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Mengaktifkan pengesahan dua faktor..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Bahasa Inggeris"
|
msgstr "Bahasa Inggeris"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Tingkatkan keselamatan akaun anda dengan lapisan perlindungan tambahan."
|
msgstr "Tingkatkan keselamatan akaun anda dengan lapisan perlindungan tambahan."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Tiada Pengiklanan, Tiada Penjejakan"
|
msgstr "Tiada Pengiklanan, Tiada Penjejakan"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Tiada keputusan dijumpai."
|
msgstr "Tiada keputusan dijumpai."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Muat semula"
|
msgstr "Muat semula"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Masih ingat kata laluan anda? <0><1>Log masuk sekarang <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Cari..."
|
msgstr "Cari..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Cari..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Jenis Seksyen"
|
msgstr "Jenis Seksyen"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Pilih..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Zum keluar"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "सार्वजनिक पहुँच अनुमति दिनुहोस्"
|
msgstr "सार्वजनिक पहुँच अनुमति दिनुहोस्"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "पहिले नै खाता छ? <0><1>अहिले साइन इन गर्नुहोस् <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "दृश्य केन्द्रमा ल्याउनुहो
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "प्रमाणपत्रहरू"
|
msgstr "प्रमाणपत्रहरू"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "भाषा परिवर्तन गर्नुहोस्"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "भाषा यसमा परिवर्तन गर्नुहोस्..."
|
msgstr "भाषा यसमा परिवर्तन गर्नुहोस्..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "वृत्त"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "चयन खाली गर्नुहोस्"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "आयात गर्न फाइल छान्न यहाँ क्लिक गर्नुहोस्"
|
msgstr "आयात गर्न फाइल छान्न यहाँ क्लिक गर्नुहोस्"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "कोड ब्लक"
|
msgstr "कोड ब्लक"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "प्रलेखन (Documentation)"
|
msgstr "प्रलेखन (Documentation)"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "खाता छैन? <0><1>अहिले नै एउटा बनाउनुहोस् <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "दुई-कारक प्रमाणीकरण सक्रिय
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "अंग्रेजी"
|
msgstr "अंग्रेजी"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "थप सुरक्षा तहहरू सहित तपाईंको खाताको सुरक्षा बढाउनुहोस्।"
|
msgstr "थप सुरक्षा तहहरू सहित तपाईंको खाताको सुरक्षा बढाउनुहोस्।"
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "कुनै विज्ञापन छैन, कुनै ट्र्याकिङ छैन"
|
msgstr "कुनै विज्ञापन छैन, कुनै ट्र्याकिङ छैन"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "कुनै परिणाम फेला परेन।"
|
msgstr "कुनै परिणाम फेला परेन।"
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "रिफ्रेस गर्नुहोस्"
|
msgstr "रिफ्रेस गर्नुहोस्"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "पासवर्ड सम्झनुभयो? <0><1>अहिले साइन इन गर्नुहोस् <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "यसको लागि खोज्नुहोस्..."
|
msgstr "यसको लागि खोज्नुहोस्..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "खोज्नुहोस्..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "खण्ड प्रकार"
|
msgstr "खण्ड प्रकार"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "छान्नुहोस्..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "जूम आउट"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "जुलु"
|
msgstr "जुलु"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Openbare toegang toestaan"
|
msgstr "Openbare toegang toestaan"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Heeft u al een account? <0><1>Meld u nu aan <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Weergave centreren"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certificeringen"
|
msgstr "Certificeringen"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Taal wijzigen"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Taal wijzigen naar..."
|
msgstr "Taal wijzigen naar..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Cirkel"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr "Chatgeschiedenis verwijderen"
|
msgstr "Chatgeschiedenis verwijderen"
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Selectie wissen"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Klik hier om een bestand te selecteren om te importeren"
|
msgstr "Klik hier om een bestand te selecteren om te importeren"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Codeblok"
|
msgstr "Codeblok"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Documentatie"
|
msgstr "Documentatie"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Geen account? <0><1>Maak er nu een aan <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Tweestapsverificatie wordt ingeschakeld..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Engels"
|
msgstr "Engels"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Verhoog de beveiliging van uw account met extra beschermingslagen."
|
msgstr "Verhoog de beveiliging van uw account met extra beschermingslagen."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Geen advertenties, geen tracking"
|
msgstr "Geen advertenties, geen tracking"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Geen resultaten gevonden."
|
msgstr "Geen resultaten gevonden."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Vernieuwen"
|
msgstr "Vernieuwen"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Herinnert u zich uw wachtwoord? <0><1>Meld u nu aan <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Zoeken naar..."
|
msgstr "Zoeken naar..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Zoeken..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Sectietype"
|
msgstr "Sectietype"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Selecteren..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Uitzoomen"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Tillat offentlig tilgang"
|
msgstr "Tillat offentlig tilgang"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Har du allerede en konto? <0><1>Logg inn nå <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Sentrer visning"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Sertifiseringer"
|
msgstr "Sertifiseringer"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Endre språk"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Endre språk til..."
|
msgstr "Endre språk til..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Sirkel"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Fjern valg"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Klikk her for å velge en fil å importere"
|
msgstr "Klikk her for å velge en fil å importere"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Kodeblokk"
|
msgstr "Kodeblokk"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentasjon"
|
msgstr "Dokumentasjon"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Har du ikke en konto? <0><1>Opprett en nå <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Aktiverer tofaktorautentisering..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Engelsk"
|
msgstr "Engelsk"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Styrk sikkerheten til kontoen din med ekstra lag med beskyttelse."
|
msgstr "Styrk sikkerheten til kontoen din med ekstra lag med beskyttelse."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Ingen annonser, ingen sporing"
|
msgstr "Ingen annonser, ingen sporing"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Ingen resultater funnet."
|
msgstr "Ingen resultater funnet."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Oppdater"
|
msgstr "Oppdater"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Husker du passordet ditt? <0><1>Logg inn nå <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Søk etter..."
|
msgstr "Søk etter..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Søk..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Seksjonstype"
|
msgstr "Seksjonstype"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Velg..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Zoom ut"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "ସାର୍ବଜନିକ ଆକ୍ସେସ୍ ଅନୁମତି ଦିଅନ୍ତୁ"
|
msgstr "ସାର୍ବଜନିକ ଆକ୍ସେସ୍ ଅନୁମତି ଦିଅନ୍ତୁ"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "ପହିଲାରୁ ଗୋଟିଏ ଆକାଉଣ୍ଟ ଅଛି କି? <0><1>ଏବେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "ଭ୍ୟୁକୁ ମଧ୍ୟରେ ରଖନ୍ତୁ"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "ପ୍ରମାଣପତ୍ରଗୁଡିକ"
|
msgstr "ପ୍ରମାଣପତ୍ରଗୁଡିକ"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "ଭାଷା ପରିବର୍ତ୍ତନ କରନ୍ତୁ"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "ଭାଷାକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ..."
|
msgstr "ଭାଷାକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "ବୃତ୍ତ"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "ଚୟନ ସଫା କରନ୍ତୁ"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "ଆୟାତ କରିବା ପାଇଁ ଫାଇଲ୍ ଚୟନ କରିବାକୁ ଏଠାରେ କ୍ଲିକ୍ କରନ୍ତୁ"
|
msgstr "ଆୟାତ କରିବା ପାଇଁ ଫାଇଲ୍ ଚୟନ କରିବାକୁ ଏଠାରେ କ୍ଲିକ୍ କରନ୍ତୁ"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "କୋଡ୍ ବ୍ଲକ୍"
|
msgstr "କୋଡ୍ ବ୍ଲକ୍"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "ଦଳିଲପତ୍ର"
|
msgstr "ଦଳିଲପତ୍ର"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "ଆକାଉଣ୍ଟ ନଥିଲେ କି? <0><1>ଏବେ ଏକ ତିଆରି କରନ୍ତୁ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "ଦ୍ୱି-ଘଟକ ପରିଚୟ ପ୍ରମାଣିକରଣ
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "ଇଂରାଜୀ"
|
msgstr "ଇଂରାଜୀ"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "ଅତିରିକ୍ତ ସୁରକ୍ଷା ସ୍ତର ସହିତ ଆପଣଙ୍କ ଆକାଉଣ୍ଟର ସୁରକ୍ଷାକୁ ବଢାନ୍ତୁ।"
|
msgstr "ଅତିରିକ୍ତ ସୁରକ୍ଷା ସ୍ତର ସହିତ ଆପଣଙ୍କ ଆକାଉଣ୍ଟର ସୁରକ୍ଷାକୁ ବଢାନ୍ତୁ।"
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "ବିଜ୍ଞାପନ ନାହିଁ, ଟ୍ରାକିଂ ନାହିଁ"
|
msgstr "ବିଜ୍ଞାପନ ନାହିଁ, ଟ୍ରାକିଂ ନାହିଁ"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "କୌଣସି ଫଳାଫଳ ମିଳିଲା ନାହିଁ।"
|
msgstr "କୌଣସି ଫଳାଫଳ ମିଳିଲା ନାହିଁ।"
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "ରିଫ୍ରେଶ କରନ୍ତୁ"
|
msgstr "ରିଫ୍ରେଶ କରନ୍ତୁ"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "ପାସୱାର୍ଡ ମନେ ପକାଇଲେ କି? <0><1>ଏବେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "ଖୋଜନ୍ତୁ..."
|
msgstr "ଖୋଜନ୍ତୁ..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "ଖୋଜନ୍ତୁ..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "ବିଭାଗ ପ୍ରକାର"
|
msgstr "ବିଭାଗ ପ୍ରକାର"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "ଚୟନ କରନ୍ତୁ..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "ଜୁମ୍ ଆଉଟ୍ କରନ୍ତୁ"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "ଜୁଲୁ"
|
msgstr "ଜୁଲୁ"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Zezwól na publiczny dostęp"
|
msgstr "Zezwól na publiczny dostęp"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Masz już konto? <0><1>Zaloguj się teraz <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Wyśrodkuj widok"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certyfikaty"
|
msgstr "Certyfikaty"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Zmień język"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Zmień język na..."
|
msgstr "Zmień język na..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Koło"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Wyczyść wybór"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Kliknij tutaj, aby wybrać plik do importu"
|
msgstr "Kliknij tutaj, aby wybrać plik do importu"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Blok kodu"
|
msgstr "Blok kodu"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentacja"
|
msgstr "Dokumentacja"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Nie masz konta? <0><1>Utwórz je teraz <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Włączanie uwierzytelniania dwuskładnikowego..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Angielski"
|
msgstr "Angielski"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Zwiększ bezpieczeństwo swojego konta dzięki dodatkowym warstwom ochrony."
|
msgstr "Zwiększ bezpieczeństwo swojego konta dzięki dodatkowym warstwom ochrony."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Bez reklam, bez śledzenia"
|
msgstr "Bez reklam, bez śledzenia"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Brak wyników."
|
msgstr "Brak wyników."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Odśwież"
|
msgstr "Odśwież"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Pamiętasz hasło? <0><1>Zaloguj się teraz <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Szukaj CV..."
|
msgstr "Szukaj CV..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Szukaj..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Typ sekcji"
|
msgstr "Typ sekcji"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Wybierz..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Pomniejsz"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Permitir acesso público"
|
msgstr "Permitir acesso público"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Já tem uma conta? <0><1>Entre agora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Centralizar visualização"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certificações"
|
msgstr "Certificações"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Mudar idioma"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Mudar idioma para..."
|
msgstr "Mudar idioma para..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Círculo"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Limpar seleção"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Clique aqui para selecionar um arquivo para importar"
|
msgstr "Clique aqui para selecionar um arquivo para importar"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Bloco de código"
|
msgstr "Bloco de código"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Documentação"
|
msgstr "Documentação"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Não tem uma conta? <0><1>Crie uma agora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Ativando a autenticação de dois fatores..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Inglês"
|
msgstr "Inglês"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Aumente a segurança da sua conta com camadas adicionais de proteção."
|
msgstr "Aumente a segurança da sua conta com camadas adicionais de proteção."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Sem publicidade, sem rastreamento"
|
msgstr "Sem publicidade, sem rastreamento"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Nenhum resultado encontrado."
|
msgstr "Nenhum resultado encontrado."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Atualizar"
|
msgstr "Atualizar"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Lembrou da sua senha? <0><1>Entre agora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Pesquisar..."
|
msgstr "Pesquisar..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Pesquisar..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Tipo de seção"
|
msgstr "Tipo de seção"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Selecionar..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Diminuir zoom"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Permitir acesso público"
|
msgstr "Permitir acesso público"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Já tem uma conta? <0><1>Inicie sessão agora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Centrar vista"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certificações"
|
msgstr "Certificações"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Mudar idioma"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Mudar idioma para..."
|
msgstr "Mudar idioma para..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Círculo"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Limpar seleção"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Clique aqui para selecionar um ficheiro para importar"
|
msgstr "Clique aqui para selecionar um ficheiro para importar"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Bloco de código"
|
msgstr "Bloco de código"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Documentação"
|
msgstr "Documentação"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Não tem uma conta? <0><1>Crie uma agora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "A ativar a autenticação de dois factores..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Inglês"
|
msgstr "Inglês"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Reforce a segurança da sua conta com camadas adicionais de proteção."
|
msgstr "Reforce a segurança da sua conta com camadas adicionais de proteção."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Sem publicidade, sem rastreamento"
|
msgstr "Sem publicidade, sem rastreamento"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Nenhum resultado encontrado."
|
msgstr "Nenhum resultado encontrado."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Recarregar"
|
msgstr "Recarregar"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Lembra-se da sua senha? <0><1>Inicie sessão agora <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Procurar..."
|
msgstr "Procurar..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Pesquisar..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Tipo de secção"
|
msgstr "Tipo de secção"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Selecionar..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Afastar"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Permite acces public"
|
msgstr "Permite acces public"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Aveți deja un cont? <0><1>Autentificați-vă acum <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Centrează vizualizarea"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certificări"
|
msgstr "Certificări"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Schimbați limba"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Schimbați limba în..."
|
msgstr "Schimbați limba în..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Cerc"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Ștergeți selecția"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Faceți clic aici pentru a selecta un fișier de importat"
|
msgstr "Faceți clic aici pentru a selecta un fișier de importat"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Bloc de cod"
|
msgstr "Bloc de cod"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Documentație"
|
msgstr "Documentație"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Nu aveți un cont? <0><1>Creați unul acum <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Se activează autentificarea cu doi factori..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Engleză"
|
msgstr "Engleză"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Sporiți securitatea contului prin straturi suplimentare de protecție."
|
msgstr "Sporiți securitatea contului prin straturi suplimentare de protecție."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Fără reclame, fără urmărire"
|
msgstr "Fără reclame, fără urmărire"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Nu s-a găsit niciun rezultat."
|
msgstr "Nu s-a găsit niciun rezultat."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Reîncarcă"
|
msgstr "Reîncarcă"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Vă amintiți parola? <0><1>Autentificați-vă acum <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Căutați..."
|
msgstr "Căutați..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Căutare..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Tip secțiune"
|
msgstr "Tip secțiune"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Selectați..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Micșorează"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Разрешить публичный доступ"
|
msgstr "Разрешить публичный доступ"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Уже есть учетная запись? <0><1>Войдите сейчас <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Центрировать вид"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Сертификаты"
|
msgstr "Сертификаты"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Изменить язык"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Изменить язык на..."
|
msgstr "Изменить язык на..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Круг"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Очистить выбор"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Нажмите здесь, чтобы выбрать файл для импорта"
|
msgstr "Нажмите здесь, чтобы выбрать файл для импорта"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Блок кода"
|
msgstr "Блок кода"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Документация"
|
msgstr "Документация"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Нет учетной записи? <0><1>Создайте её сейчас <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Включение двухфакторной аутентификаци
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Английский"
|
msgstr "Английский"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Усильте безопасность своей учетной записи дополнительными уровнями защиты."
|
msgstr "Усильте безопасность своей учетной записи дополнительными уровнями защиты."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Без рекламы и отслеживания"
|
msgstr "Без рекламы и отслеживания"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Результатов не найдено."
|
msgstr "Результатов не найдено."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Обновить"
|
msgstr "Обновить"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Вспомнили пароль? <0><1>Войдите сейчас <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Поиск..."
|
msgstr "Поиск..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Поиск..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Тип раздела"
|
msgstr "Тип раздела"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Выберите..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Уменьшить"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Зулу"
|
msgstr "Зулу"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Povoliť verejný prístup"
|
msgstr "Povoliť verejný prístup"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Už máš účet? <0><1>Prihlás sa teraz <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Vycentrovať zobrazenie"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certifikácie"
|
msgstr "Certifikácie"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Zmeniť jazyk"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Zmeniť jazyk na..."
|
msgstr "Zmeniť jazyk na..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Kruh"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Zrušiť výber"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Kliknutím sem vyber súbor na import"
|
msgstr "Kliknutím sem vyber súbor na import"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Blok kódu"
|
msgstr "Blok kódu"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentácia"
|
msgstr "Dokumentácia"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Nemáš účet? <0><1>Vytvor si ho teraz <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Zapínam dvojfaktorové overenie..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Angličtina"
|
msgstr "Angličtina"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Zvýš bezpečnosť svojho účtu ďalšími vrstvami ochrany."
|
msgstr "Zvýš bezpečnosť svojho účtu ďalšími vrstvami ochrany."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Bez reklám, bez sledovania"
|
msgstr "Bez reklám, bez sledovania"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Nenašli sa žiadne výsledky."
|
msgstr "Nenašli sa žiadne výsledky."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Obnoviť"
|
msgstr "Obnoviť"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Spomínaš si na heslo? <0><1>Prihlás sa teraz <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Hľadať..."
|
msgstr "Hľadať..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Hľadať..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Typ sekcie"
|
msgstr "Typ sekcie"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Vybrať..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Oddialiť"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Lejo akses publik"
|
msgstr "Lejo akses publik"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Keni tashmë një llogari? <0><1>Hyni tani <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Qendro pamjen"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certifikime"
|
msgstr "Certifikime"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Ndrysho gjuhën"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Ndrysho gjuhën në..."
|
msgstr "Ndrysho gjuhën në..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Rreth"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Pastro përzgjedhjen"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Klikoni këtu për të zgjedhur një skedar për importim"
|
msgstr "Klikoni këtu për të zgjedhur një skedar për importim"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Bllok kodi"
|
msgstr "Bllok kodi"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentacioni"
|
msgstr "Dokumentacioni"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Nuk keni një llogari? <0><1>Krijoni një tani <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Po aktivizohet vërtetimi me dy faktorë..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Anglisht"
|
msgstr "Anglisht"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Forconi sigurinë e llogarisë suaj me shtresa shtesë mbrojtjeje."
|
msgstr "Forconi sigurinë e llogarisë suaj me shtresa shtesë mbrojtjeje."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Pa reklama, pa gjurmim"
|
msgstr "Pa reklama, pa gjurmim"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Nuk u gjetën rezultate."
|
msgstr "Nuk u gjetën rezultate."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Rifresko"
|
msgstr "Rifresko"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "E kujtuat fjalëkalimin? <0><1>Hyni tani <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Kërko për..."
|
msgstr "Kërko për..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Kërko..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Lloji i seksionit"
|
msgstr "Lloji i seksionit"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Zgjidh..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Zvogëlo"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Дозволи јавни приступ"
|
msgstr "Дозволи јавни приступ"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Већ имате налог? <0><1>Пријавите се сада <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Центрирај приказ"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Сертификације"
|
msgstr "Сертификације"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Промени језик"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Промени језик у..."
|
msgstr "Промени језик у..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Круг"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Обриши избор"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Кликните овде да изаберете датотеку за увоз"
|
msgstr "Кликните овде да изаберете датотеку за увоз"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Блок кода"
|
msgstr "Блок кода"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Документација"
|
msgstr "Документација"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Немате налог? <0><1>Креирајте га сада <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Омогућавање двофакторске аутентификац
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Енглески"
|
msgstr "Енглески"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Побољшајте безбедност свог налога додатним слојевима заштите."
|
msgstr "Побољшајте безбедност свог налога додатним слојевима заштите."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Без оглашавања, без праћења"
|
msgstr "Без оглашавања, без праћења"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Нема резултата."
|
msgstr "Нема резултата."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Освежи"
|
msgstr "Освежи"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Сећате се лозинке? <0><1>Пријавите се сада <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Претражи резимее..."
|
msgstr "Претражи резимее..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Претражи..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Тип одељка"
|
msgstr "Тип одељка"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Изаберите..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Умањи"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Зулу"
|
msgstr "Зулу"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Tillåt offentlig åtkomst"
|
msgstr "Tillåt offentlig åtkomst"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Har du redan ett konto? <0><1>Logga in nu <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Centrera vy"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Certifieringar"
|
msgstr "Certifieringar"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Ändra språk"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Ändra språk till..."
|
msgstr "Ändra språk till..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Cirkel"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Rensa markering"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Klicka här för att välja en fil att importera"
|
msgstr "Klicka här för att välja en fil att importera"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Kodblock"
|
msgstr "Kodblock"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dokumentation"
|
msgstr "Dokumentation"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Har du inget konto? <0><1>Skapa ett nu <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Aktiverar tvåfaktorsautentisering..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Engelska"
|
msgstr "Engelska"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Förbättra säkerheten för ditt konto med ytterligare skyddslager."
|
msgstr "Förbättra säkerheten för ditt konto med ytterligare skyddslager."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Ingen reklam, ingen spårning"
|
msgstr "Ingen reklam, ingen spårning"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Inga resultat hittades."
|
msgstr "Inga resultat hittades."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Uppdatera"
|
msgstr "Uppdatera"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Kommer du ihåg ditt lösenord? <0><1>Logga in nu <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Sök efter..."
|
msgstr "Sök efter..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Sök..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Avsnittstyp"
|
msgstr "Avsnittstyp"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Välj..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Zooma ut"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "பொது அணுகலை அனுமதிக்கவும்"
|
msgstr "பொது அணுகலை அனுமதிக்கவும்"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "ஏற்கனவே கணக்கு இருக்கிறதா? <0><1>உடனே உள்நுழைக <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "நடுப்பார்வை"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "சான்றிதழ்கள்"
|
msgstr "சான்றிதழ்கள்"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "மொழியை மாற்று"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "மொழியை மாற்ற..."
|
msgstr "மொழியை மாற்ற..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "வட்டம்"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "தேர்வை அழிக்கவும்"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "இறக்குமதி செய்ய ஒரு கோப்பை தேர்ந்தெடுக்க இங்கே கிளிக் செய்யவும்"
|
msgstr "இறக்குமதி செய்ய ஒரு கோப்பை தேர்ந்தெடுக்க இங்கே கிளிக் செய்யவும்"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "குறியீட்டு தொகுதி"
|
msgstr "குறியீட்டு தொகுதி"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "ஆவணங்கள்"
|
msgstr "ஆவணங்கள்"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "கணக்கு இல்லையா? <0><1>இப்போதே ஒன்றை உருவாக்கவும் <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "இரண்டு நிலை அங்கீகாரத்தை இ
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "ஆங்கிலம்"
|
msgstr "ஆங்கிலம்"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "உங்கள் கணக்கின் பாதுகாப்பை கூடுதல் பாதுகாப்பு அடுக்குகளால் மேம்படுத்துங்கள்."
|
msgstr "உங்கள் கணக்கின் பாதுகாப்பை கூடுதல் பாதுகாப்பு அடுக்குகளால் மேம்படுத்துங்கள்."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "விளம்பரம் இல்லை, கண்காணிப்பு இல்லை"
|
msgstr "விளம்பரம் இல்லை, கண்காணிப்பு இல்லை"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "எந்த முடிவுகளும் கிடைக்கவில்லை."
|
msgstr "எந்த முடிவுகளும் கிடைக்கவில்லை."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "மீண்டும் ஏற்று"
|
msgstr "மீண்டும் ஏற்று"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "உங்கள் கடவுச்சொல் நினைவில் இருக்கிறதா? <0><1>உடனே உள்நுழைக <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "தேடுங்கள்..."
|
msgstr "தேடுங்கள்..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "தேடல்..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "பகுதி வகை"
|
msgstr "பகுதி வகை"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "தேர்வு செய்க..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "சிறிதாக்கு"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "ஜூலு"
|
msgstr "ஜூலு"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "ప్రజా యాక్సెస్ని అనుమతించండి"
|
msgstr "ప్రజా యాక్సెస్ని అనుమతించండి"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "మీకు ఖాతా ఉందా? <0><1>ఇప్పుడే సైన్ ఇన్ చెయ్యండి <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "ప్రదర్శనను మధ్య భాగంగా ఉంచ
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "ప్రామாணపత్రాలు"
|
msgstr "ప్రామாணపత్రాలు"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "భాష మార్చండి"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "భాష మార్చండి..."
|
msgstr "భాష మార్చండి..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "వృత్తం"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "ఎంపికను క్లియర్ చేయండి"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "ఇంపోర్ట్ చేయడానికి ఫైల్ ను ఎంచుకోవడానికి ఇక్కడ క్లిక్ చేయండి"
|
msgstr "ఇంపోర్ట్ చేయడానికి ఫైల్ ను ఎంచుకోవడానికి ఇక్కడ క్లిక్ చేయండి"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "కోడ్ బ్లాక్"
|
msgstr "కోడ్ బ్లాక్"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "డాక్యుమెంటేషన్"
|
msgstr "డాక్యుమెంటేషన్"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "ఖాతా లేదా? <0><1>ఇప్పుడు ఖాతా సృష్టించండి <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "రెండు దశల ధృవీకరణను ప్రారం
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "ఆంగ్లం"
|
msgstr "ఆంగ్లం"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "మీ ఖాతా భద్రతను అదనపు పరిరక్షణతో మెరుగుపరచండి."
|
msgstr "మీ ఖాతా భద్రతను అదనపు పరిరక్షణతో మెరుగుపరచండి."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "ప్రకటనలు లేవు, ట్రాకింగ్ లేదు"
|
msgstr "ప్రకటనలు లేవు, ట్రాకింగ్ లేదు"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "ఏ ఫలితాలు లభించలేదు."
|
msgstr "ఏ ఫలితాలు లభించలేదు."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "రిఫ్రెష్ చేయండి"
|
msgstr "రిఫ్రెష్ చేయండి"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "మీకు పాస్వర్డ్ గుర్తుంది? <0><1>ఇప్పుడే సైన్ ఇన్ అవ్వండి <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "శోధించండి..."
|
msgstr "శోధించండి..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "శోధన..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "విభాగపు రకం"
|
msgstr "విభాగపు రకం"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "ఎంచుకోండి..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "జూమ్ అవుట్ చేయండి"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "జులు"
|
msgstr "జులు"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "อนุญาตให้เข้าถึงแบบสาธารณะ"
|
msgstr "อนุญาตให้เข้าถึงแบบสาธารณะ"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "มีบัญชีอยู่แล้ว? <0><1>เข้าสู่ระบบตอนนี้ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "ศูนย์กลางมุมมอง"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "ใบรับรอง"
|
msgstr "ใบรับรอง"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "เปลี่ยนภาษา"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "เปลี่ยนภาษาเป็น..."
|
msgstr "เปลี่ยนภาษาเป็น..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "วงกลม"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "ล้างการเลือก"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "คลิกที่นี่เพื่อเลือกไฟล์ที่จะนำเข้า"
|
msgstr "คลิกที่นี่เพื่อเลือกไฟล์ที่จะนำเข้า"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "บล็อกโค้ด"
|
msgstr "บล็อกโค้ด"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "เอกสารอ้างอิง"
|
msgstr "เอกสารอ้างอิง"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "ยังไม่มีบัญชีใช่ไหม? <0><1>สร้างบัญชีเลยตอนนี้ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "กำลังเปิดใช้งานการยืนยัน
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "ภาษาอังกฤษ"
|
msgstr "ภาษาอังกฤษ"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "เพิ่มความปลอดภัยให้กับบัญชีของคุณด้วยชั้นการป้องกันเพิ่มเติม"
|
msgstr "เพิ่มความปลอดภัยให้กับบัญชีของคุณด้วยชั้นการป้องกันเพิ่มเติม"
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "ไม่มีโฆษณา ไม่มีการติดตาม"
|
msgstr "ไม่มีโฆษณา ไม่มีการติดตาม"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "ไม่พบผลลัพธ์"
|
msgstr "ไม่พบผลลัพธ์"
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "รีเฟรช"
|
msgstr "รีเฟรช"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "จำรหัสผ่านของคุณได้หรือไม่? <0><1>ลงชื่อเข้าใช้ตอนนี้ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "ค้นหา..."
|
msgstr "ค้นหา..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "ค้นหา..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "ประเภทของเซกชั่น"
|
msgstr "ประเภทของเซกชั่น"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "เลือก..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "ซูมออก"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "ซูลู"
|
msgstr "ซูลู"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Herkese Açık Erişime İzin Ver"
|
msgstr "Herkese Açık Erişime İzin Ver"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Zaten bir hesabınız var mı? <0><1>Şimdi giriş yapın <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Görünümü ortala"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Sertifikalar"
|
msgstr "Sertifikalar"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Dili değiştir"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Dili şuna değiştir..."
|
msgstr "Dili şuna değiştir..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Daire"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Seçimi temizle"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "İçe aktarmak için bir dosya seçmek üzere buraya tıklayın"
|
msgstr "İçe aktarmak için bir dosya seçmek üzere buraya tıklayın"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Kod Bloğu"
|
msgstr "Kod Bloğu"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Dökümantasyon"
|
msgstr "Dökümantasyon"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Hesabınız yok mu? <0><1>Şimdi oluşturun <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "İki faktörlü kimlik doğrulama etkinleştiriliyor..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "İngilizce"
|
msgstr "İngilizce"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Hesabınızın güvenliğini ek koruma katmanlarıyla artırın."
|
msgstr "Hesabınızın güvenliğini ek koruma katmanlarıyla artırın."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Reklam Yok, Takip Yok"
|
msgstr "Reklam Yok, Takip Yok"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Hiçbir sonuç bulunamadı."
|
msgstr "Hiçbir sonuç bulunamadı."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Yenile"
|
msgstr "Yenile"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Şifrenizi hatırlıyor musunuz? <0><1>Şimdi giriş yapın <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Ara..."
|
msgstr "Ara..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Ara..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Bölüm Türü"
|
msgstr "Bölüm Türü"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Seç..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Uzaklaştır"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Дозволити Загальний Доступ"
|
msgstr "Дозволити Загальний Доступ"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Вже маєте профіль? <0><1>Увійдіть зараз <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Центрувати перегляд"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Сертифікати"
|
msgstr "Сертифікати"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Змінити мову"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Змінити мову на..."
|
msgstr "Змінити мову на..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Кругле"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Очистити вибір"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Натисніть тут, щоб вибрати файл для імпорту"
|
msgstr "Натисніть тут, щоб вибрати файл для імпорту"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Блок коду"
|
msgstr "Блок коду"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Документація"
|
msgstr "Документація"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Не маєте профілю? <0><1>Створіть його зараз <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Увімкнення двофакторної автентифікаці
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Англійська"
|
msgstr "Англійська"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Підвищте безпеку свого профілю додатковими рівнями захисту."
|
msgstr "Підвищте безпеку свого профілю додатковими рівнями захисту."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Без реклами, без відстеження"
|
msgstr "Без реклами, без відстеження"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Результатів не знайдено."
|
msgstr "Результатів не знайдено."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Оновити"
|
msgstr "Оновити"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Пам’ятаєте свій пароль? <0><1>Увійдіть зараз <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Пошук..."
|
msgstr "Пошук..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Пошук..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Тип секції"
|
msgstr "Тип секції"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Оберіть..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Зменшити"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Зулу"
|
msgstr "Зулу"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Ommaviy kirishga ruxsat berish"
|
msgstr "Ommaviy kirishga ruxsat berish"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Akkountingiz bormi? <0><1>Hozir kiring <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Markazga koʻrish"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Sertifikatlar"
|
msgstr "Sertifikatlar"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Tilni o'zgartirish"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Tilni oʻzgartirish..."
|
msgstr "Tilni oʻzgartirish..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Doira"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Tanlovni tozalash"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Import qilish uchun faylni tanlash uchun shu yerni bosing"
|
msgstr "Import qilish uchun faylni tanlash uchun shu yerni bosing"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Kod bloki"
|
msgstr "Kod bloki"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Hujjatlar"
|
msgstr "Hujjatlar"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Hisobingiz yo‘qmi? <0><1>Hozir yaratish <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Ikki bosqichli autentifikatsiya yoqilmoqda..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Inglizcha"
|
msgstr "Inglizcha"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Hisobingiz xavfsizligini qo‘shimcha himoya qatlamlari bilan oshiring."
|
msgstr "Hisobingiz xavfsizligini qo‘shimcha himoya qatlamlari bilan oshiring."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Reklamasiz, kuzatuvsiz"
|
msgstr "Reklamasiz, kuzatuvsiz"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Hech qanday natija topilmadi."
|
msgstr "Hech qanday natija topilmadi."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Yangilash"
|
msgstr "Yangilash"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Parolingiz esingizdami? <0><1>Hozir kiring <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Qidiruv..."
|
msgstr "Qidiruv..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Qidiruv..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Bo'lim turi"
|
msgstr "Bo'lim turi"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Tanlang..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Kichraytirish"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "Cho phép truy cập công khai"
|
msgstr "Cho phép truy cập công khai"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "Bạn đã có tài khoản? <0><1>Đăng nhập ngay <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "Căn giữa màn hình"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "Chứng chỉ"
|
msgstr "Chứng chỉ"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "Thay đổi ngôn ngữ"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "Đổi ngôn ngữ sang..."
|
msgstr "Đổi ngôn ngữ sang..."
|
||||||
@@ -552,14 +548,15 @@ msgstr "Vòng tròn"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "Xóa lựa chọn"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "Nhấn vào đây để chọn file cần nhập khẩu"
|
msgstr "Nhấn vào đây để chọn file cần nhập khẩu"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "Khối mã"
|
msgstr "Khối mã"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "Tài liệu"
|
msgstr "Tài liệu"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "Bạn chưa có tài khoản? <0><1>Tạo ngay bây giờ <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "Đang bật xác thực hai yếu tố..."
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Tiếng Anh"
|
msgstr "Tiếng Anh"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "Tăng cường bảo mật cho tài khoản của bạn với nhiều lớp bảo vệ bổ sung."
|
msgstr "Tăng cường bảo mật cho tài khoản của bạn với nhiều lớp bảo vệ bổ sung."
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "Không quảng cáo, không theo dõi"
|
msgstr "Không quảng cáo, không theo dõi"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "Không tìm thấy kết quả."
|
msgstr "Không tìm thấy kết quả."
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "Làm mới"
|
msgstr "Làm mới"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "Bạn nhớ mật khẩu? <0><1>Đăng nhập ngay <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "Tìm kiếm..."
|
msgstr "Tìm kiếm..."
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Tìm kiếm..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "Loại phần"
|
msgstr "Loại phần"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "Chọn..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "Thu nhỏ"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "Zulu"
|
msgstr "Zulu"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "允许公开访问"
|
msgstr "允许公开访问"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "已经有账号?<0><1>立即登录 <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "视图居中"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "证书"
|
msgstr "证书"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "更改语言"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "将语言更改为…"
|
msgstr "将语言更改为…"
|
||||||
@@ -552,14 +548,15 @@ msgstr "圆形"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "清除选择"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "点击此处选择要导入的文件"
|
msgstr "点击此处选择要导入的文件"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "代码块"
|
msgstr "代码块"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "文档"
|
msgstr "文档"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "没有账号?<0><1>立即创建 <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "正在使用双重身份验证保护…"
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "英语"
|
msgstr "英语"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "为你的账号增加更多保护层,提升安全性。"
|
msgstr "为你的账号增加更多保护层,提升安全性。"
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "无广告,无跟踪"
|
msgstr "无广告,无跟踪"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "没找到结果。"
|
msgstr "没找到结果。"
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "刷新"
|
msgstr "刷新"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "想起你的密码了?<0><1>立即登录 <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "搜索…"
|
msgstr "搜索…"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "搜索…"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "章节类型"
|
msgstr "章节类型"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "选择…"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "缩小"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "祖鲁语"
|
msgstr "祖鲁语"
|
||||||
|
|
||||||
|
|||||||
Generated
+17
-20
@@ -246,8 +246,8 @@ msgid "Allow Public Access"
|
|||||||
msgstr "允許公開存取"
|
msgstr "允許公開存取"
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr "已經有帳戶了嗎?<0><1>立即登入 <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Amharic"
|
msgid "Amharic"
|
||||||
@@ -508,10 +508,6 @@ msgstr "置中檢視"
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr "證照"
|
msgstr "證照"
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr "變更語言"
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr "變更語言為…"
|
msgstr "變更語言為…"
|
||||||
@@ -552,14 +548,15 @@ msgstr "圓形"
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr "清除選取"
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr "按這裡選擇要匯入的檔案"
|
msgstr "按這裡選擇要匯入的檔案"
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr "程式碼區塊"
|
msgstr "程式碼區塊"
|
||||||
@@ -896,8 +893,8 @@ msgid "Documentation"
|
|||||||
msgstr "文件"
|
msgstr "文件"
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr "沒有帳戶嗎?<0><1>立即建立 <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@@ -1014,6 +1011,10 @@ msgstr "正在啟用雙因子驗證…"
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "英文"
|
msgstr "英文"
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr "透過額外的保護層級強化您的帳戶安全。"
|
msgstr "透過額外的保護層級強化您的帳戶安全。"
|
||||||
@@ -1630,7 +1631,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr "無廣告、無追蹤"
|
msgstr "無廣告、無追蹤"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr "找不到相符的結果。"
|
msgstr "找不到相符的結果。"
|
||||||
|
|
||||||
@@ -1923,8 +1923,8 @@ msgid "Refresh"
|
|||||||
msgstr "重新整理"
|
msgstr "重新整理"
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr "想起密碼了嗎?<0><1>立即登入 <2/></1></0>"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
@@ -2055,9 +2055,8 @@ msgid "Search for..."
|
|||||||
msgstr "搜尋履歷…"
|
msgstr "搜尋履歷…"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "搜尋…"
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/auth/enable-two-factor.tsx
|
#: src/dialogs/auth/enable-two-factor.tsx
|
||||||
msgid "Secret copied to clipboard."
|
msgid "Secret copied to clipboard."
|
||||||
@@ -2068,9 +2067,8 @@ msgid "Section Type"
|
|||||||
msgstr "段落類型"
|
msgstr "段落類型"
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr "選取…"
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Self-Host with Docker"
|
msgid "Self-Host with Docker"
|
||||||
@@ -2902,4 +2900,3 @@ msgstr "縮小"
|
|||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
msgid "Zulu"
|
msgid "Zulu"
|
||||||
msgstr "祖魯語"
|
msgstr "祖魯語"
|
||||||
|
|
||||||
|
|||||||
Generated
+12
-14
@@ -241,7 +241,7 @@ msgid "Allow Public Access"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/auth/register.tsx
|
#: src/routes/auth/register.tsx
|
||||||
msgid "Already have an account? <0><1>Sign in now <2/></1></0>"
|
msgid "Already have an account? <0/>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/locale.ts
|
#: src/utils/locale.ts
|
||||||
@@ -503,10 +503,6 @@ msgstr ""
|
|||||||
msgid "Certifications"
|
msgid "Certifications"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/header.tsx
|
|
||||||
msgid "Change language"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/components/command-palette/pages/preferences/index.tsx
|
#: src/components/command-palette/pages/preferences/index.tsx
|
||||||
msgid "Change language to..."
|
msgid "Change language to..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -547,14 +543,15 @@ msgstr ""
|
|||||||
msgid "Clear chat history"
|
msgid "Clear chat history"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Clear selection"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/dialogs/resume/import.tsx
|
#: src/dialogs/resume/import.tsx
|
||||||
msgid "Click here to select a file to import"
|
msgid "Click here to select a file to import"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/ui/dialog.tsx
|
||||||
|
#: src/components/ui/sheet.tsx
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/input/rich-input.tsx
|
#: src/components/input/rich-input.tsx
|
||||||
msgid "Code Block"
|
msgid "Code Block"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -891,7 +888,7 @@ msgid "Documentation"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/auth/login.tsx
|
#: src/routes/auth/login.tsx
|
||||||
msgid "Don't have an account? <0><1>Create one now <2/></1></0>"
|
msgid "Don't have an account? <0/>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
#: src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
|
||||||
@@ -1009,6 +1006,10 @@ msgstr ""
|
|||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/utils/locale.ts
|
||||||
|
msgid "English (United Kingdom)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/_home/-sections/features.tsx
|
#: src/routes/_home/-sections/features.tsx
|
||||||
msgid "Enhance the security of your account with additional layers of protection."
|
msgid "Enhance the security of your account with additional layers of protection."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1625,7 +1626,6 @@ msgid "No Advertising, No Tracking"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1918,7 +1918,7 @@ msgid "Refresh"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/routes/auth/forgot-password.tsx
|
#: src/routes/auth/forgot-password.tsx
|
||||||
msgid "Remember your password? <0><1>Sign in now <2/></1></0>"
|
msgid "Remember your password? <0/>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs/resume/sections/experience.tsx
|
#: src/dialogs/resume/sections/experience.tsx
|
||||||
@@ -2050,7 +2050,6 @@ msgid "Search for..."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2063,7 +2062,6 @@ msgid "Section Type"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/components/ui/combobox.tsx
|
#: src/components/ui/combobox.tsx
|
||||||
#: src/components/ui/multiple-combobox.tsx
|
|
||||||
msgid "Select..."
|
msgid "Select..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
+63
-57
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "reactive-resume",
|
"name": "reactive-resume",
|
||||||
"description": "Reactive Resume is a free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume.",
|
"description": "Reactive Resume is a free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume.",
|
||||||
"version": "5.0.11",
|
"version": "5.0.12",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"packageManager": "pnpm@10.30.3+sha512.c961d1e0a2d8e354ecaa5166b822516668b7f44cb5bd95122d590dd81922f606f5473b6d23ec4a5be05e7fcd18e8488d47d978bbe981872f1145d06e9a740017",
|
"packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/amruthpillai/reactive-resume.git"
|
"url": "https://github.com/amruthpillai/reactive-resume.git"
|
||||||
@@ -22,61 +22,65 @@
|
|||||||
"db:push": "drizzle-kit push",
|
"db:push": "drizzle-kit push",
|
||||||
"db:studio": "drizzle-kit studio",
|
"db:studio": "drizzle-kit studio",
|
||||||
"dev": "vite dev",
|
"dev": "vite dev",
|
||||||
"preview": "vite preview",
|
|
||||||
"docs:dev": "cd docs && npx mint dev",
|
"docs:dev": "cd docs && npx mint dev",
|
||||||
"knip": "knip",
|
"knip": "knip",
|
||||||
"lingui:extract": "lingui extract --clean --overwrite",
|
"lingui:extract": "lingui extract --clean --overwrite",
|
||||||
"lint": "biome check --write",
|
"lint": "biome check --write",
|
||||||
|
"preview": "vite preview",
|
||||||
"start": "node .output/server/index.mjs",
|
"start": "node .output/server/index.mjs",
|
||||||
"typecheck": "tsc --noEmit"
|
"typecheck": "tsgo --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ai-sdk/anthropic": "^3.0.58",
|
"@ai-sdk/anthropic": "^3.0.58",
|
||||||
"@ai-sdk/google": "^3.0.43",
|
"@ai-sdk/google": "^3.0.43",
|
||||||
"@ai-sdk/openai": "^3.0.41",
|
"@ai-sdk/openai": "^3.0.41",
|
||||||
"@ai-sdk/react": "^3.0.118",
|
"@ai-sdk/react": "^3.0.118",
|
||||||
"@aws-sdk/client-s3": "^3.1003.0",
|
"@aws-sdk/client-s3": "^3.1011.0",
|
||||||
"@better-auth/api-key": "^1.5.4",
|
"@base-ui/react": "^1.3.0",
|
||||||
"@better-auth/drizzle-adapter": "^1.5.4",
|
"@better-auth/api-key": "^1.5.5",
|
||||||
|
"@better-auth/drizzle-adapter": "^1.5.5",
|
||||||
|
"@better-auth/infra": "^0.1.12",
|
||||||
"@dnd-kit/core": "^6.3.1",
|
"@dnd-kit/core": "^6.3.1",
|
||||||
"@dnd-kit/sortable": "^10.0.0",
|
"@dnd-kit/sortable": "^10.0.0",
|
||||||
"@dnd-kit/utilities": "^3.2.2",
|
"@dnd-kit/utilities": "^3.2.2",
|
||||||
"@fontsource-variable/ibm-plex-sans": "^5.2.8",
|
"@fontsource-variable/ibm-plex-sans": "^5.2.8",
|
||||||
"@hookform/resolvers": "^5.2.2",
|
"@hookform/resolvers": "^5.2.2",
|
||||||
"@lingui/core": "^5.9.2",
|
"@lingui/core": "^5.9.3",
|
||||||
"@lingui/react": "^5.9.2",
|
"@lingui/react": "^5.9.3",
|
||||||
"@modelcontextprotocol/sdk": "^1.27.1",
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
||||||
"@monaco-editor/react": "4.8.0-rc.3",
|
"@monaco-editor/react": "4.8.0-rc.3",
|
||||||
"@orpc/client": "^1.13.6",
|
"@orpc/client": "^1.13.7",
|
||||||
"@orpc/json-schema": "^1.13.6",
|
"@orpc/json-schema": "^1.13.7",
|
||||||
"@orpc/openapi": "^1.13.6",
|
"@orpc/openapi": "^1.13.7",
|
||||||
"@orpc/server": "^1.13.6",
|
"@orpc/server": "^1.13.7",
|
||||||
"@orpc/tanstack-query": "^1.13.6",
|
"@orpc/tanstack-query": "^1.13.7",
|
||||||
"@orpc/zod": "^1.13.6",
|
"@orpc/zod": "^1.13.7",
|
||||||
"@phosphor-icons/react": "^2.1.10",
|
"@phosphor-icons/react": "^2.1.10",
|
||||||
"@phosphor-icons/web": "^2.1.2",
|
"@phosphor-icons/web": "^2.1.2",
|
||||||
"@sindresorhus/slugify": "^3.0.0",
|
"@sindresorhus/slugify": "^3.0.0",
|
||||||
"@t3-oss/env-core": "^0.13.10",
|
"@t3-oss/env-core": "^0.13.10",
|
||||||
"@tanstack/react-query": "^5.90.21",
|
"@tanstack/react-query": "^5.90.21",
|
||||||
"@tanstack/react-router": "^1.166.2",
|
"@tanstack/react-router": "^1.167.4",
|
||||||
"@tanstack/react-router-ssr-query": "^1.166.2",
|
"@tanstack/react-router-ssr-query": "^1.166.9",
|
||||||
"@tanstack/react-start": "^1.166.2",
|
"@tanstack/react-start": "^1.166.16",
|
||||||
"@tanstack/zod-adapter": "^1.166.2",
|
"@tanstack/zod-adapter": "^1.166.9",
|
||||||
"@tiptap/extension-highlight": "^3.20.1",
|
"@tiptap/extension-highlight": "^3.20.4",
|
||||||
"@tiptap/extension-table": "^3.20.1",
|
"@tiptap/extension-table": "^3.20.4",
|
||||||
"@tiptap/extension-text-align": "^3.20.1",
|
"@tiptap/extension-text-align": "^3.20.4",
|
||||||
"@tiptap/pm": "^3.20.1",
|
"@tiptap/pm": "^3.20.4",
|
||||||
"@tiptap/react": "^3.20.1",
|
"@tiptap/react": "^3.20.4",
|
||||||
"@tiptap/starter-kit": "^3.20.1",
|
"@tiptap/starter-kit": "^3.20.4",
|
||||||
|
"@uiw/color-convert": "^2.9.6",
|
||||||
|
"@uiw/react-color-colorful": "^2.9.6",
|
||||||
"ai": "^6.0.116",
|
"ai": "^6.0.116",
|
||||||
"ai-sdk-ollama": "^3.8.0",
|
"ai-sdk-ollama": "^3.8.1",
|
||||||
"bcrypt": "^6.0.0",
|
"bcrypt": "^6.0.0",
|
||||||
"better-auth": "^1.5.4",
|
"better-auth": "^1.5.5",
|
||||||
"class-variance-authority": "^0.7.1",
|
"class-variance-authority": "^0.7.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk": "^1.1.1",
|
"cmdk": "^1.1.1",
|
||||||
"dompurify": "^3.3.2",
|
"dompurify": "^3.3.3",
|
||||||
"drizzle-orm": "1.0.0-beta.16-ea816b6",
|
"drizzle-orm": "1.0.0-beta.18-7eb39f0",
|
||||||
"drizzle-zod": "^0.8.3",
|
"drizzle-zod": "^0.8.3",
|
||||||
"es-toolkit": "^1.45.1",
|
"es-toolkit": "^1.45.1",
|
||||||
"fast-deep-equal": "^3.1.3",
|
"fast-deep-equal": "^3.1.3",
|
||||||
@@ -85,25 +89,25 @@
|
|||||||
"immer": "^11.1.4",
|
"immer": "^11.1.4",
|
||||||
"input-otp": "^1.4.2",
|
"input-otp": "^1.4.2",
|
||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
"jsonrepair": "^3.13.2",
|
"jsonrepair": "^3.13.3",
|
||||||
"mammoth": "^1.11.0",
|
"lucide-react": "^0.577.0",
|
||||||
"monaco-editor": "^0.55.1",
|
"monaco-editor": "^0.55.1",
|
||||||
"motion": "^12.35.0",
|
"motion": "^12.38.0",
|
||||||
"nodemailer": "^8.0.1",
|
"nodemailer": "^8.0.2",
|
||||||
"pdf-parse": "^2.4.5",
|
|
||||||
"pg": "^8.20.0",
|
"pg": "^8.20.0",
|
||||||
"puppeteer-core": "^24.38.0",
|
"puppeteer-core": "^24.39.1",
|
||||||
"qrcode.react": "^4.2.0",
|
"qrcode.react": "^4.2.0",
|
||||||
"radix-ui": "^1.4.3",
|
|
||||||
"react": "^19.2.4",
|
"react": "^19.2.4",
|
||||||
"react-dom": "^19.2.4",
|
"react-dom": "^19.2.4",
|
||||||
"react-hook-form": "^7.71.2",
|
"react-hook-form": "^7.71.2",
|
||||||
"react-hotkeys-hook": "^5.2.4",
|
"react-hotkeys-hook": "^5.2.4",
|
||||||
"react-resizable-panels": "^4.7.1",
|
"react-resizable-panels": "^4.7.3",
|
||||||
"react-window": "^2.2.7",
|
"react-window": "^2.2.7",
|
||||||
"react-zoom-pan-pinch": "^3.7.0",
|
"react-zoom-pan-pinch": "^3.7.0",
|
||||||
|
"shadcn": "^4.0.8",
|
||||||
"sharp": "^0.34.5",
|
"sharp": "^0.34.5",
|
||||||
"sonner": "^2.0.7",
|
"sonner": "^2.0.7",
|
||||||
|
"srvx": "^0.11.12",
|
||||||
"tailwind-merge": "^3.5.0",
|
"tailwind-merge": "^3.5.0",
|
||||||
"tailwindcss": "^4.2.1",
|
"tailwindcss": "^4.2.1",
|
||||||
"ts-pattern": "^5.9.0",
|
"ts-pattern": "^5.9.0",
|
||||||
@@ -114,53 +118,55 @@
|
|||||||
"workbox-window": "^7.4.0",
|
"workbox-window": "^7.4.0",
|
||||||
"zod": "^4.3.6",
|
"zod": "^4.3.6",
|
||||||
"zundo": "^2.3.0",
|
"zundo": "^2.3.0",
|
||||||
"zustand": "^5.0.11"
|
"zustand": "^5.0.12"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "^2.4.6",
|
"@babel/core": "^7.29.0",
|
||||||
"@lingui/babel-plugin-lingui-macro": "^5.9.2",
|
"@biomejs/biome": "^2.4.7",
|
||||||
"@lingui/cli": "^5.9.2",
|
"@lingui/babel-plugin-lingui-macro": "^5.9.3",
|
||||||
"@lingui/vite-plugin": "^5.9.2",
|
"@lingui/cli": "^5.9.3",
|
||||||
|
"@lingui/vite-plugin": "^5.9.3",
|
||||||
|
"@rolldown/plugin-babel": "^0.2.1",
|
||||||
"@tailwindcss/vite": "^4.2.1",
|
"@tailwindcss/vite": "^4.2.1",
|
||||||
"@types/bcrypt": "^6.0.0",
|
"@types/bcrypt": "^6.0.0",
|
||||||
"@types/js-cookie": "^3.0.6",
|
"@types/js-cookie": "^3.0.6",
|
||||||
"@types/node": "^25.3.5",
|
"@types/node": "^25.5.0",
|
||||||
"@types/nodemailer": "^7.0.11",
|
"@types/nodemailer": "^7.0.11",
|
||||||
"@types/pg": "^8.18.0",
|
"@types/pg": "^8.18.0",
|
||||||
"@types/react": "^19.2.14",
|
"@types/react": "^19.2.14",
|
||||||
"@types/react-dom": "^19.2.3",
|
"@types/react-dom": "^19.2.3",
|
||||||
"@vitejs/plugin-react": "^5.1.4",
|
"@typescript/native-preview": "7.0.0-dev.20260317.1",
|
||||||
|
"@vitejs/plugin-react": "^6.0.1",
|
||||||
"babel-plugin-macros": "^3.1.0",
|
"babel-plugin-macros": "^3.1.0",
|
||||||
"drizzle-kit": "1.0.0-beta.16-ea816b6",
|
"drizzle-kit": "1.0.0-beta.18-7eb39f0",
|
||||||
"knip": "^5.85.0",
|
"knip": "^5.87.0",
|
||||||
"nitro": "3.0.1-alpha.2",
|
"nitro": "3.0.260311-beta",
|
||||||
"node-addon-api": "^8.6.0",
|
"node-addon-api": "^8.6.0",
|
||||||
"node-gyp": "^12.2.0",
|
"node-gyp": "^12.2.0",
|
||||||
"npm-check-updates": "^19.6.3",
|
"npm-check-updates": "^19.6.5",
|
||||||
"tsx": "^4.21.0",
|
"tsx": "^4.21.0",
|
||||||
"typescript": "^5.9.3",
|
"vite": "^8.0.0",
|
||||||
"vite": "8.0.0-beta.16",
|
|
||||||
"vite-plugin-pwa": "^1.2.0"
|
"vite-plugin-pwa": "^1.2.0"
|
||||||
},
|
},
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"vite": "^8.0.0-beta.16",
|
|
||||||
"hono": "^4.11.10",
|
|
||||||
"minimatch": "^10.2.3",
|
|
||||||
"@isaacs/brace-expansion": "^5.0.1",
|
"@isaacs/brace-expansion": "^5.0.1",
|
||||||
|
"ajv": "^8.18.0",
|
||||||
"basic-ftp": "^5.2.0",
|
"basic-ftp": "^5.2.0",
|
||||||
|
"fast-xml-parser": "^5.3.8",
|
||||||
|
"hono": "^4.11.10",
|
||||||
"lodash": "^4.17.23",
|
"lodash": "^4.17.23",
|
||||||
"markdown-it": "^14.1.1",
|
"markdown-it": "^14.1.1",
|
||||||
"ajv": "^8.18.0",
|
"minimatch": "^10.2.3",
|
||||||
"qs": "^6.14.2",
|
"qs": "^6.14.2",
|
||||||
"serialize-javascript": "^7.0.4",
|
"serialize-javascript": "^7.0.4",
|
||||||
"fast-xml-parser": "^5.3.8"
|
"vite": "^8.0.0"
|
||||||
},
|
},
|
||||||
"onlyBuiltDependencies": [
|
"onlyBuiltDependencies": [
|
||||||
"bcrypt",
|
"bcrypt",
|
||||||
"esbuild",
|
"esbuild",
|
||||||
"sharp",
|
"msw",
|
||||||
"pdf-parse"
|
"sharp"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+3082
-3367
File diff suppressed because it is too large
Load Diff
@@ -305,11 +305,13 @@ export function AIChat() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Popover open={open} onOpenChange={handleOpenChange}>
|
<Popover open={open} onOpenChange={handleOpenChange}>
|
||||||
<PopoverTrigger asChild>
|
<PopoverTrigger
|
||||||
<Button size="icon" variant="ghost">
|
render={
|
||||||
<SparkleIcon />
|
<Button size="icon" variant="ghost">
|
||||||
</Button>
|
<SparkleIcon />
|
||||||
</PopoverTrigger>
|
</Button>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
<PopoverContent className="flex h-128 w-md flex-col gap-y-0 overflow-hidden p-0" side="top" align="center">
|
<PopoverContent className="flex h-128 w-md flex-col gap-y-0 overflow-hidden p-0" side="top" align="center">
|
||||||
{/* Header with clear button */}
|
{/* Header with clear button */}
|
||||||
|
|||||||
@@ -1,829 +1,41 @@
|
|||||||
import { EyedropperIcon } from "@phosphor-icons/react";
|
import { type ColorResult, hsvaToRgbaString, rgbaStringToHsva } from "@uiw/color-convert";
|
||||||
import { Slider as SliderPrimitive, Slot as SlotPrimitive } from "radix-ui";
|
import ReactColorColorful from "@uiw/react-color-colorful";
|
||||||
import * as React from "react";
|
import { useMemo } from "react";
|
||||||
import { VisuallyHiddenInput } from "@/components/input/visually-hidden-input";
|
import { useControlledState } from "@/hooks/use-controlled-state";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover";
|
||||||
import { Input } from "@/components/ui/input";
|
|
||||||
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
|
|
||||||
import {
|
|
||||||
type ColorValue,
|
|
||||||
type HSVColorValue,
|
|
||||||
hexToRgb,
|
|
||||||
hsvToRgb,
|
|
||||||
parseRgbString,
|
|
||||||
rgbToHsv,
|
|
||||||
rgbToString,
|
|
||||||
} from "@/utils/color";
|
|
||||||
import { useComposedRefs } from "@/utils/compose-refs";
|
|
||||||
import { cn } from "@/utils/style";
|
|
||||||
|
|
||||||
interface EyeDropper {
|
type ColorPickerProps = {
|
||||||
open: (options?: { signal?: AbortSignal }) => Promise<{ sRGBHex: string }>;
|
|
||||||
}
|
|
||||||
|
|
||||||
declare global {
|
|
||||||
interface Window {
|
|
||||||
EyeDropper?: {
|
|
||||||
new (): EyeDropper;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type Direction = "ltr" | "rtl";
|
|
||||||
|
|
||||||
const DirectionContext = React.createContext<Direction | undefined>(undefined);
|
|
||||||
|
|
||||||
function useDirection(dirProp?: Direction): Direction {
|
|
||||||
const contextDir = React.useContext(DirectionContext);
|
|
||||||
return dirProp ?? contextDir ?? "ltr";
|
|
||||||
}
|
|
||||||
|
|
||||||
function useLazyRef<T>(fn: () => T) {
|
|
||||||
const ref = React.useRef<T | null>(null);
|
|
||||||
|
|
||||||
if (ref.current === null) {
|
|
||||||
ref.current = fn();
|
|
||||||
}
|
|
||||||
|
|
||||||
return ref as React.RefObject<T>;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerStoreState {
|
|
||||||
color: ColorValue;
|
|
||||||
hsv: HSVColorValue;
|
|
||||||
open: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerStoreCallbacks {
|
|
||||||
onColorChange?: (colorString: string) => void;
|
|
||||||
onOpenChange?: (open: boolean) => void;
|
|
||||||
}
|
|
||||||
|
|
||||||
function colorValuesEqual(a: ColorValue, b: ColorValue): boolean {
|
|
||||||
return a.r === b.r && a.g === b.g && a.b === b.b && a.a === b.a;
|
|
||||||
}
|
|
||||||
|
|
||||||
function hsvValuesEqual(a: HSVColorValue, b: HSVColorValue): boolean {
|
|
||||||
return a.h === b.h && a.s === b.s && a.v === b.v && a.a === b.a;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerStore {
|
|
||||||
subscribe: (cb: () => void) => () => void;
|
|
||||||
getState: () => ColorPickerStoreState;
|
|
||||||
setColor: (value: ColorValue) => void;
|
|
||||||
setHsv: (value: HSVColorValue) => void;
|
|
||||||
setOpen: (value: boolean) => void;
|
|
||||||
syncColor: (value: ColorValue) => void;
|
|
||||||
notify: () => void;
|
|
||||||
}
|
|
||||||
|
|
||||||
function createColorPickerStore(
|
|
||||||
listenersRef: React.RefObject<Set<() => void>>,
|
|
||||||
stateRef: React.RefObject<ColorPickerStoreState>,
|
|
||||||
callbacks?: ColorPickerStoreCallbacks,
|
|
||||||
): ColorPickerStore {
|
|
||||||
const store: ColorPickerStore = {
|
|
||||||
subscribe: (cb) => {
|
|
||||||
if (listenersRef.current) {
|
|
||||||
listenersRef.current.add(cb);
|
|
||||||
return () => listenersRef.current?.delete(cb);
|
|
||||||
}
|
|
||||||
return () => {};
|
|
||||||
},
|
|
||||||
getState: () =>
|
|
||||||
stateRef.current || {
|
|
||||||
color: { r: 0, g: 0, b: 0, a: 1 },
|
|
||||||
hsv: { h: 0, s: 0, v: 0, a: 1 },
|
|
||||||
open: false,
|
|
||||||
},
|
|
||||||
setColor: (value: ColorValue) => {
|
|
||||||
if (!stateRef.current) return;
|
|
||||||
if (colorValuesEqual(stateRef.current.color, value)) return;
|
|
||||||
|
|
||||||
stateRef.current.color = value;
|
|
||||||
stateRef.current.hsv = rgbToHsv(value);
|
|
||||||
|
|
||||||
if (callbacks?.onColorChange) {
|
|
||||||
const colorString = rgbToString(value);
|
|
||||||
callbacks.onColorChange(colorString);
|
|
||||||
}
|
|
||||||
|
|
||||||
store.notify();
|
|
||||||
},
|
|
||||||
setHsv: (value: HSVColorValue) => {
|
|
||||||
if (!stateRef.current) return;
|
|
||||||
if (hsvValuesEqual(stateRef.current.hsv, value)) return;
|
|
||||||
|
|
||||||
stateRef.current.hsv = value;
|
|
||||||
stateRef.current.color = hsvToRgb(value);
|
|
||||||
|
|
||||||
if (callbacks?.onColorChange) {
|
|
||||||
const colorString = rgbToString(stateRef.current.color);
|
|
||||||
callbacks.onColorChange(colorString);
|
|
||||||
}
|
|
||||||
|
|
||||||
store.notify();
|
|
||||||
},
|
|
||||||
syncColor: (value: ColorValue) => {
|
|
||||||
if (!stateRef.current) return;
|
|
||||||
if (colorValuesEqual(stateRef.current.color, value)) return;
|
|
||||||
|
|
||||||
stateRef.current.color = value;
|
|
||||||
stateRef.current.hsv = rgbToHsv(value);
|
|
||||||
store.notify();
|
|
||||||
},
|
|
||||||
setOpen: (value: boolean) => {
|
|
||||||
if (!stateRef.current) return;
|
|
||||||
if (Object.is(stateRef.current.open, value)) return;
|
|
||||||
|
|
||||||
stateRef.current.open = value;
|
|
||||||
|
|
||||||
if (callbacks?.onOpenChange) {
|
|
||||||
callbacks.onOpenChange(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
store.notify();
|
|
||||||
},
|
|
||||||
notify: () => {
|
|
||||||
if (listenersRef.current) {
|
|
||||||
for (const cb of listenersRef.current) {
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
return store;
|
|
||||||
}
|
|
||||||
|
|
||||||
function useColorPickerStoreContext(consumerName: string) {
|
|
||||||
const context = React.useContext(ColorPickerStoreContext);
|
|
||||||
if (!context) {
|
|
||||||
throw new Error(`\`${consumerName}\` must be used within \`ColorPickerRoot\``);
|
|
||||||
}
|
|
||||||
return context;
|
|
||||||
}
|
|
||||||
|
|
||||||
function useColorPickerStore<U>(selector: (state: ColorPickerStoreState) => U): U {
|
|
||||||
const store = useColorPickerStoreContext("useColorPickerStoreSelector");
|
|
||||||
|
|
||||||
const getSnapshot = React.useCallback(() => selector(store.getState()), [store, selector]);
|
|
||||||
|
|
||||||
return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerContextValue {
|
|
||||||
dir: Direction;
|
|
||||||
disabled?: boolean;
|
|
||||||
readOnly?: boolean;
|
|
||||||
required?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
const ColorPickerStoreContext = React.createContext<ColorPickerStore | null>(null);
|
|
||||||
const ColorPickerContext = React.createContext<ColorPickerContextValue | null>(null);
|
|
||||||
|
|
||||||
function useColorPickerContext(consumerName: string) {
|
|
||||||
const context = React.useContext(ColorPickerContext);
|
|
||||||
if (!context) {
|
|
||||||
throw new Error(`\`${consumerName}\` must be used within \`ColorPickerRoot\``);
|
|
||||||
}
|
|
||||||
return context;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerRootProps
|
|
||||||
extends Omit<React.ComponentProps<"div">, "onValueChange">,
|
|
||||||
Pick<React.ComponentProps<typeof Popover>, "defaultOpen" | "open" | "onOpenChange" | "modal"> {
|
|
||||||
value?: string;
|
value?: string;
|
||||||
defaultValue?: string;
|
defaultValue?: string;
|
||||||
onValueChange?: (value: string) => void;
|
onChange?: (value: string) => void;
|
||||||
dir?: Direction;
|
|
||||||
name?: string;
|
|
||||||
asChild?: boolean;
|
|
||||||
disabled?: boolean;
|
|
||||||
readOnly?: boolean;
|
|
||||||
required?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ColorPickerRoot(props: ColorPickerRootProps) {
|
|
||||||
const {
|
|
||||||
value: valueProp,
|
|
||||||
defaultValue = "rgb(0, 0, 0)",
|
|
||||||
onValueChange,
|
|
||||||
defaultOpen,
|
|
||||||
open: openProp,
|
|
||||||
onOpenChange,
|
|
||||||
name,
|
|
||||||
disabled,
|
|
||||||
readOnly,
|
|
||||||
required,
|
|
||||||
...rootProps
|
|
||||||
} = props;
|
|
||||||
|
|
||||||
const initialColor = React.useMemo(() => {
|
|
||||||
const colorString = valueProp ?? defaultValue;
|
|
||||||
const parsed = parseRgbString(colorString);
|
|
||||||
const color = parsed ?? { r: 0, g: 0, b: 0, a: 1 };
|
|
||||||
|
|
||||||
return {
|
|
||||||
color,
|
|
||||||
hsv: rgbToHsv(color),
|
|
||||||
open: openProp ?? defaultOpen ?? false,
|
|
||||||
};
|
|
||||||
}, [valueProp, defaultValue, openProp, defaultOpen]);
|
|
||||||
|
|
||||||
const stateRef = useLazyRef(() => initialColor);
|
|
||||||
const listenersRef = useLazyRef(() => new Set<() => void>());
|
|
||||||
|
|
||||||
const storeCallbacks = React.useMemo<ColorPickerStoreCallbacks>(
|
|
||||||
() => ({
|
|
||||||
onColorChange: onValueChange,
|
|
||||||
onOpenChange: onOpenChange,
|
|
||||||
}),
|
|
||||||
[onValueChange, onOpenChange],
|
|
||||||
);
|
|
||||||
|
|
||||||
const store = React.useMemo(
|
|
||||||
() => createColorPickerStore(listenersRef, stateRef, storeCallbacks),
|
|
||||||
[listenersRef, stateRef, storeCallbacks],
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ColorPickerStoreContext.Provider value={store}>
|
|
||||||
<ColorPickerRootImpl
|
|
||||||
{...rootProps}
|
|
||||||
value={valueProp}
|
|
||||||
defaultOpen={defaultOpen}
|
|
||||||
open={openProp}
|
|
||||||
onOpenChange={onOpenChange}
|
|
||||||
name={name}
|
|
||||||
disabled={disabled}
|
|
||||||
readOnly={readOnly}
|
|
||||||
required={required}
|
|
||||||
/>
|
|
||||||
</ColorPickerStoreContext.Provider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerRootImplProps extends Omit<ColorPickerRootProps, "defaultValue" | "onValueChange"> {}
|
|
||||||
|
|
||||||
function ColorPickerRootImpl(props: ColorPickerRootImplProps) {
|
|
||||||
const {
|
|
||||||
value: valueProp,
|
|
||||||
dir: dirProp,
|
|
||||||
defaultOpen,
|
|
||||||
open: openProp,
|
|
||||||
onOpenChange,
|
|
||||||
name,
|
|
||||||
ref,
|
|
||||||
asChild,
|
|
||||||
disabled,
|
|
||||||
modal,
|
|
||||||
readOnly,
|
|
||||||
required,
|
|
||||||
...rootProps
|
|
||||||
} = props;
|
|
||||||
|
|
||||||
const store = useColorPickerStoreContext("ColorPickerRootImpl");
|
|
||||||
|
|
||||||
const dir = useDirection(dirProp);
|
|
||||||
|
|
||||||
const [formTrigger, setFormTrigger] = React.useState<HTMLDivElement | null>(null);
|
|
||||||
const composedRef = useComposedRefs(ref, (node) => setFormTrigger(node));
|
|
||||||
|
|
||||||
const isFormControl = formTrigger ? !!formTrigger.closest("form") : true;
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
|
||||||
if (valueProp !== undefined) {
|
|
||||||
const parsed = parseRgbString(valueProp);
|
|
||||||
if (parsed) {
|
|
||||||
const currentState = store.getState();
|
|
||||||
const color = { ...parsed, a: parsed.a ?? currentState.color.a };
|
|
||||||
store.syncColor(color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, [valueProp, store]);
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
|
||||||
if (openProp !== undefined) {
|
|
||||||
store.setOpen(openProp);
|
|
||||||
}
|
|
||||||
}, [openProp, store]);
|
|
||||||
|
|
||||||
const contextValue = React.useMemo<ColorPickerContextValue>(
|
|
||||||
() => ({
|
|
||||||
dir,
|
|
||||||
disabled,
|
|
||||||
readOnly,
|
|
||||||
required,
|
|
||||||
}),
|
|
||||||
[dir, disabled, readOnly, required],
|
|
||||||
);
|
|
||||||
|
|
||||||
const value = useColorPickerStore((state) => rgbToString(state.color));
|
|
||||||
|
|
||||||
const open = useColorPickerStore((state) => state.open);
|
|
||||||
|
|
||||||
const onPopoverOpenChange = React.useCallback(
|
|
||||||
(newOpen: boolean) => {
|
|
||||||
store.setOpen(newOpen);
|
|
||||||
onOpenChange?.(newOpen);
|
|
||||||
},
|
|
||||||
[store, onOpenChange],
|
|
||||||
);
|
|
||||||
|
|
||||||
const RootPrimitive = asChild ? SlotPrimitive.Slot : "div";
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ColorPickerContext.Provider value={contextValue}>
|
|
||||||
<Popover defaultOpen={defaultOpen} open={open} onOpenChange={onPopoverOpenChange} modal={modal}>
|
|
||||||
<RootPrimitive {...rootProps} ref={composedRef} />
|
|
||||||
{isFormControl && (
|
|
||||||
<VisuallyHiddenInput
|
|
||||||
type="hidden"
|
|
||||||
name={name}
|
|
||||||
value={value}
|
|
||||||
disabled={disabled}
|
|
||||||
readOnly={readOnly}
|
|
||||||
required={required}
|
|
||||||
control={formTrigger}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Popover>
|
|
||||||
</ColorPickerContext.Provider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerTriggerProps extends React.ComponentProps<typeof PopoverTrigger> {}
|
|
||||||
|
|
||||||
function ColorPickerTrigger(props: ColorPickerTriggerProps) {
|
|
||||||
const { asChild, ...triggerProps } = props;
|
|
||||||
const context = useColorPickerContext("ColorPickerTrigger");
|
|
||||||
|
|
||||||
const TriggerPrimitive = asChild ? SlotPrimitive.Slot : PopoverTrigger;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<PopoverTrigger asChild disabled={context.disabled}>
|
|
||||||
<TriggerPrimitive data-slot="color-picker-trigger" {...triggerProps} />
|
|
||||||
</PopoverTrigger>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerContentProps extends React.ComponentProps<typeof PopoverContent> {}
|
|
||||||
|
|
||||||
function ColorPickerContent(props: ColorPickerContentProps) {
|
|
||||||
const { asChild, className, children, ...popoverContentProps } = props;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<PopoverContent
|
|
||||||
data-slot="color-picker-content"
|
|
||||||
asChild={asChild}
|
|
||||||
{...popoverContentProps}
|
|
||||||
className={cn("flex w-[340px] flex-col gap-4 p-4", className)}
|
|
||||||
>
|
|
||||||
{children}
|
|
||||||
</PopoverContent>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerSwatchProps extends React.ComponentProps<"div"> {
|
|
||||||
asChild?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ColorPickerSwatch(props: ColorPickerSwatchProps) {
|
|
||||||
const { asChild, className, ...swatchProps } = props;
|
|
||||||
const context = useColorPickerContext("ColorPickerSwatch");
|
|
||||||
|
|
||||||
const color = useColorPickerStore((state) => state.color);
|
|
||||||
|
|
||||||
const backgroundStyle = React.useMemo(() => {
|
|
||||||
if (!color) {
|
|
||||||
return {
|
|
||||||
background:
|
|
||||||
"linear-gradient(to bottom right, transparent calc(50% - 1px), hsl(var(--destructive)) calc(50% - 1px) calc(50% + 1px), transparent calc(50% + 1px)) no-repeat",
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const colorString = `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`;
|
|
||||||
|
|
||||||
if (color.a < 1) {
|
|
||||||
return {
|
|
||||||
background: `linear-gradient(${colorString}, ${colorString}), repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 0% 50% / 8px 8px`,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
backgroundColor: colorString,
|
|
||||||
};
|
|
||||||
}, [color]);
|
|
||||||
|
|
||||||
const ariaLabel = !color ? "No color selected" : `Current color: ${rgbToString(color)}`;
|
|
||||||
|
|
||||||
const SwatchPrimitive = asChild ? SlotPrimitive.Slot : "div";
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="flex size-9 items-center justify-start">
|
|
||||||
<SwatchPrimitive
|
|
||||||
{...swatchProps}
|
|
||||||
role="img"
|
|
||||||
aria-label={ariaLabel}
|
|
||||||
data-slot="color-picker-swatch"
|
|
||||||
className={cn("box-border size-7 rounded-md border", context.disabled && "opacity-50", className)}
|
|
||||||
style={{
|
|
||||||
...backgroundStyle,
|
|
||||||
forcedColorAdjust: "none",
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerAreaProps extends React.ComponentProps<"div"> {
|
|
||||||
asChild?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ColorPickerArea(props: ColorPickerAreaProps) {
|
|
||||||
const { asChild, className, ref, ...areaProps } = props;
|
|
||||||
const context = useColorPickerContext("ColorPickerArea");
|
|
||||||
const store = useColorPickerStoreContext("ColorPickerArea");
|
|
||||||
|
|
||||||
const hsv = useColorPickerStore((state) => state.hsv);
|
|
||||||
|
|
||||||
const isDraggingRef = React.useRef(false);
|
|
||||||
const areaRef = React.useRef<HTMLDivElement>(null);
|
|
||||||
const composedRef = useComposedRefs(ref, areaRef);
|
|
||||||
|
|
||||||
const updateColorFromPosition = React.useCallback(
|
|
||||||
(clientX: number, clientY: number) => {
|
|
||||||
if (!areaRef.current) return;
|
|
||||||
|
|
||||||
const rect = areaRef.current.getBoundingClientRect();
|
|
||||||
const x = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));
|
|
||||||
const y = Math.max(0, Math.min(1, 1 - (clientY - rect.top) / rect.height));
|
|
||||||
|
|
||||||
const newHsv: HSVColorValue = {
|
|
||||||
h: hsv?.h ?? 0,
|
|
||||||
s: Math.round(x * 100),
|
|
||||||
v: Math.round(y * 100),
|
|
||||||
a: hsv?.a ?? 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
store.setHsv(newHsv);
|
|
||||||
},
|
|
||||||
[hsv, store],
|
|
||||||
);
|
|
||||||
|
|
||||||
const onPointerDown = React.useCallback(
|
|
||||||
(event: React.PointerEvent) => {
|
|
||||||
if (context.disabled) return;
|
|
||||||
|
|
||||||
isDraggingRef.current = true;
|
|
||||||
areaRef.current?.setPointerCapture(event.pointerId);
|
|
||||||
updateColorFromPosition(event.clientX, event.clientY);
|
|
||||||
},
|
|
||||||
[context.disabled, updateColorFromPosition],
|
|
||||||
);
|
|
||||||
|
|
||||||
const onPointerMove = React.useCallback(
|
|
||||||
(event: React.PointerEvent) => {
|
|
||||||
if (isDraggingRef.current) {
|
|
||||||
updateColorFromPosition(event.clientX, event.clientY);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
[updateColorFromPosition],
|
|
||||||
);
|
|
||||||
|
|
||||||
const onPointerUp = React.useCallback((event: React.PointerEvent) => {
|
|
||||||
isDraggingRef.current = false;
|
|
||||||
areaRef.current?.releasePointerCapture(event.pointerId);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const hue = hsv?.h ?? 0;
|
|
||||||
const backgroundHue = hsvToRgb({ h: hue, s: 100, v: 100, a: 1 });
|
|
||||||
|
|
||||||
const AreaPrimitive = asChild ? SlotPrimitive.Slot : "div";
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AreaPrimitive
|
|
||||||
data-slot="color-picker-area"
|
|
||||||
{...areaProps}
|
|
||||||
className={cn(
|
|
||||||
"relative h-40 w-full cursor-crosshair touch-none rounded-md border",
|
|
||||||
context.disabled && "pointer-events-none opacity-50",
|
|
||||||
className,
|
|
||||||
)}
|
|
||||||
ref={composedRef}
|
|
||||||
onPointerDown={onPointerDown}
|
|
||||||
onPointerMove={onPointerMove}
|
|
||||||
onPointerUp={onPointerUp}
|
|
||||||
>
|
|
||||||
<div className="absolute inset-0 overflow-hidden rounded-md">
|
|
||||||
<div
|
|
||||||
className="absolute inset-0"
|
|
||||||
style={{
|
|
||||||
backgroundColor: `rgb(${backgroundHue.r}, ${backgroundHue.g}, ${backgroundHue.b})`,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
className="absolute inset-0"
|
|
||||||
style={{
|
|
||||||
background: "linear-gradient(to right, #fff, transparent)",
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
className="absolute inset-0"
|
|
||||||
style={{
|
|
||||||
background: "linear-gradient(to bottom, transparent, #000)",
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
className="absolute size-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white"
|
|
||||||
style={{
|
|
||||||
left: `${hsv?.s ?? 0}%`,
|
|
||||||
top: `${100 - (hsv?.v ?? 0)}%`,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</AreaPrimitive>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerHueSliderProps extends React.ComponentProps<typeof SliderPrimitive.Root> {}
|
|
||||||
|
|
||||||
function ColorPickerHueSlider(props: ColorPickerHueSliderProps) {
|
|
||||||
const { className, ...sliderProps } = props;
|
|
||||||
const context = useColorPickerContext("ColorPickerHueSlider");
|
|
||||||
const store = useColorPickerStoreContext("ColorPickerHueSlider");
|
|
||||||
|
|
||||||
const hsv = useColorPickerStore((state) => state.hsv);
|
|
||||||
|
|
||||||
const onValueChange = React.useCallback(
|
|
||||||
(values: number[]) => {
|
|
||||||
const newHsv: HSVColorValue = {
|
|
||||||
h: values[0] ?? 0,
|
|
||||||
s: hsv?.s ?? 0,
|
|
||||||
v: hsv?.v ?? 0,
|
|
||||||
a: hsv?.a ?? 1,
|
|
||||||
};
|
|
||||||
store.setHsv(newHsv);
|
|
||||||
},
|
|
||||||
[hsv, store],
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<SliderPrimitive.Root
|
|
||||||
data-slot="color-picker-hue-slider"
|
|
||||||
{...sliderProps}
|
|
||||||
max={360}
|
|
||||||
step={1}
|
|
||||||
className={cn("relative flex w-full touch-none select-none items-center", className)}
|
|
||||||
value={[hsv?.h ?? 0]}
|
|
||||||
onValueChange={onValueChange}
|
|
||||||
disabled={context.disabled}
|
|
||||||
>
|
|
||||||
<SliderPrimitive.Track className="relative h-3 w-full grow overflow-hidden rounded-full bg-[linear-gradient(to_right,#ff0000_0%,#ffff00_16.66%,#00ff00_33.33%,#00ffff_50%,#0000ff_66.66%,#ff00ff_83.33%,#ff0000_100%)]">
|
|
||||||
<SliderPrimitive.Range className="absolute h-full" />
|
|
||||||
</SliderPrimitive.Track>
|
|
||||||
<SliderPrimitive.Thumb className="block size-4 rounded-full border border-primary/50 bg-background transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50" />
|
|
||||||
</SliderPrimitive.Root>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type ColorPickerEyeDropperProps = React.ComponentProps<typeof Button>;
|
|
||||||
|
|
||||||
function ColorPickerEyeDropper(props: ColorPickerEyeDropperProps) {
|
|
||||||
const { children, size, ...buttonProps } = props;
|
|
||||||
const context = useColorPickerContext("ColorPickerEyeDropper");
|
|
||||||
const store = useColorPickerStoreContext("ColorPickerEyeDropper");
|
|
||||||
|
|
||||||
const color = useColorPickerStore((state) => state.color);
|
|
||||||
|
|
||||||
const onEyeDropper = React.useCallback(async () => {
|
|
||||||
if (!window.EyeDropper) return;
|
|
||||||
|
|
||||||
try {
|
|
||||||
const eyeDropper = new window.EyeDropper();
|
|
||||||
const result = await eyeDropper.open();
|
|
||||||
|
|
||||||
if (result.sRGBHex) {
|
|
||||||
const currentAlpha = color?.a ?? 1;
|
|
||||||
const newColor = hexToRgb(result.sRGBHex, currentAlpha);
|
|
||||||
store.setColor(newColor);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.warn("EyeDropper error:", error);
|
|
||||||
}
|
|
||||||
}, [color, store]);
|
|
||||||
|
|
||||||
const hasEyeDropper = typeof window !== "undefined" && !!window.EyeDropper;
|
|
||||||
|
|
||||||
if (!hasEyeDropper) return null;
|
|
||||||
|
|
||||||
const buttonSize = size ?? (children ? "default" : "icon");
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Button
|
|
||||||
data-slot="color-picker-eye-dropper"
|
|
||||||
{...buttonProps}
|
|
||||||
variant="outline"
|
|
||||||
size={buttonSize}
|
|
||||||
onClick={onEyeDropper}
|
|
||||||
disabled={context.disabled}
|
|
||||||
>
|
|
||||||
{children ?? <EyedropperIcon />}
|
|
||||||
</Button>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerAlphaSliderProps extends React.ComponentProps<typeof SliderPrimitive.Root> {}
|
|
||||||
|
|
||||||
function ColorPickerAlphaSlider(props: ColorPickerAlphaSliderProps) {
|
|
||||||
const { className, ...sliderProps } = props;
|
|
||||||
const context = useColorPickerContext("ColorPickerAlphaSlider");
|
|
||||||
const store = useColorPickerStoreContext("ColorPickerAlphaSlider");
|
|
||||||
|
|
||||||
const color = useColorPickerStore((state) => state.color);
|
|
||||||
|
|
||||||
const onValueChange = React.useCallback(
|
|
||||||
(values: number[]) => {
|
|
||||||
const alpha = (values[0] ?? 0) / 100;
|
|
||||||
const newColor = { ...color, a: alpha };
|
|
||||||
store.setColor(newColor);
|
|
||||||
},
|
|
||||||
[color, store],
|
|
||||||
);
|
|
||||||
|
|
||||||
const gradientColor = `rgb(${color?.r ?? 0}, ${color?.g ?? 0}, ${color?.b ?? 0})`;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<SliderPrimitive.Root
|
|
||||||
data-slot="color-picker-alpha-slider"
|
|
||||||
{...sliderProps}
|
|
||||||
max={100}
|
|
||||||
step={1}
|
|
||||||
disabled={context.disabled}
|
|
||||||
className={cn("relative flex w-full touch-none select-none items-center", className)}
|
|
||||||
value={[Math.round((color?.a ?? 1) * 100)]}
|
|
||||||
onValueChange={onValueChange}
|
|
||||||
>
|
|
||||||
<SliderPrimitive.Track
|
|
||||||
className="relative h-3 w-full grow overflow-hidden rounded-full"
|
|
||||||
style={{
|
|
||||||
background:
|
|
||||||
"linear-gradient(45deg, #ccc 25%, transparent 25%), linear-gradient(-45deg, #ccc 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #ccc 75%), linear-gradient(-45deg, transparent 75%, #ccc 75%)",
|
|
||||||
backgroundSize: "8px 8px",
|
|
||||||
backgroundPosition: "0 0, 0 4px, 4px -4px, -4px 0px",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
className="absolute inset-0 rounded-full"
|
|
||||||
style={{
|
|
||||||
background: `linear-gradient(to right, transparent, ${gradientColor})`,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<SliderPrimitive.Range className="absolute h-full" />
|
|
||||||
</SliderPrimitive.Track>
|
|
||||||
<SliderPrimitive.Thumb className="block size-4 rounded-full border border-primary/50 bg-background transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50" />
|
|
||||||
</SliderPrimitive.Root>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ColorPickerInputProps extends Omit<React.ComponentProps<typeof Input>, "value" | "onChange"> {
|
|
||||||
withoutAlpha?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ColorPickerInput(props: ColorPickerInputProps) {
|
|
||||||
const context = useColorPickerContext("ColorPickerInput");
|
|
||||||
const store = useColorPickerStoreContext("ColorPickerInput");
|
|
||||||
|
|
||||||
const color = useColorPickerStore((state) => state.color);
|
|
||||||
|
|
||||||
const onChannelChange = React.useCallback(
|
|
||||||
(channel: "r" | "g" | "b" | "a", max: number, isAlpha = false) =>
|
|
||||||
(event: React.ChangeEvent<HTMLInputElement>) => {
|
|
||||||
const value = Number.parseInt(event.target.value, 10);
|
|
||||||
if (!Number.isNaN(value) && value >= 0 && value <= max) {
|
|
||||||
const newValue = isAlpha ? value / 100 : value;
|
|
||||||
const newColor = { ...color, [channel]: newValue };
|
|
||||||
store.setColor(newColor);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
[color, store],
|
|
||||||
);
|
|
||||||
|
|
||||||
const rValue = Math.round(color?.r ?? 0);
|
|
||||||
const gValue = Math.round(color?.g ?? 0);
|
|
||||||
const bValue = Math.round(color?.b ?? 0);
|
|
||||||
const alphaValue = Math.round((color?.a ?? 1) * 100);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div data-slot="color-picker-input-wrapper" className="flex items-center gap-2">
|
|
||||||
<span>R</span>
|
|
||||||
<Input
|
|
||||||
type="number"
|
|
||||||
aria-label="Red color component (0-255)"
|
|
||||||
placeholder="0"
|
|
||||||
inputMode="numeric"
|
|
||||||
pattern="[0-9]*"
|
|
||||||
min="0"
|
|
||||||
max="255"
|
|
||||||
className="flex-1 shrink-0"
|
|
||||||
value={rValue}
|
|
||||||
onChange={onChannelChange("r", 255)}
|
|
||||||
disabled={context.disabled}
|
|
||||||
/>
|
|
||||||
<span>G</span>
|
|
||||||
<Input
|
|
||||||
type="number"
|
|
||||||
aria-label="Green color component (0-255)"
|
|
||||||
placeholder="0"
|
|
||||||
inputMode="numeric"
|
|
||||||
pattern="[0-9]*"
|
|
||||||
min="0"
|
|
||||||
max="255"
|
|
||||||
className="flex-1 shrink-0"
|
|
||||||
value={gValue}
|
|
||||||
onChange={onChannelChange("g", 255)}
|
|
||||||
disabled={context.disabled}
|
|
||||||
/>
|
|
||||||
<span>B</span>
|
|
||||||
<Input
|
|
||||||
type="number"
|
|
||||||
aria-label="Blue color component (0-255)"
|
|
||||||
placeholder="0"
|
|
||||||
inputMode="numeric"
|
|
||||||
pattern="[0-9]*"
|
|
||||||
min="0"
|
|
||||||
max="255"
|
|
||||||
className="flex-1 shrink-0"
|
|
||||||
value={bValue}
|
|
||||||
onChange={onChannelChange("b", 255)}
|
|
||||||
disabled={context.disabled}
|
|
||||||
/>
|
|
||||||
{!props.withoutAlpha && (
|
|
||||||
<>
|
|
||||||
<span>A</span>
|
|
||||||
<Input
|
|
||||||
type="number"
|
|
||||||
aria-label="Alpha transparency percentage"
|
|
||||||
placeholder="100"
|
|
||||||
inputMode="numeric"
|
|
||||||
pattern="[0-9]*"
|
|
||||||
min="0"
|
|
||||||
max="100"
|
|
||||||
className="flex-1 shrink-0"
|
|
||||||
value={alphaValue}
|
|
||||||
onChange={onChannelChange("a", 100, true)}
|
|
||||||
disabled={context.disabled}
|
|
||||||
/>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type ColorPickerProps = Omit<React.ComponentProps<typeof ColorPickerRoot>, never>;
|
|
||||||
|
|
||||||
const ColorPicker = (props: ColorPickerProps) => {
|
|
||||||
return (
|
|
||||||
<ColorPickerRoot {...props}>
|
|
||||||
<ColorPickerTrigger asChild>
|
|
||||||
<ColorPickerSwatch />
|
|
||||||
</ColorPickerTrigger>
|
|
||||||
<ColorPickerContent>
|
|
||||||
<ColorPickerArea />
|
|
||||||
<div className="flex items-center gap-4">
|
|
||||||
<ColorPickerEyeDropper />
|
|
||||||
<div className="flex flex-1 flex-col gap-4">
|
|
||||||
<ColorPickerHueSlider />
|
|
||||||
<ColorPickerAlphaSlider />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<ColorPickerInput />
|
|
||||||
</ColorPickerContent>
|
|
||||||
</ColorPickerRoot>
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export {
|
export function ColorPicker({ value, defaultValue, onChange }: ColorPickerProps) {
|
||||||
ColorPicker,
|
const [currentValue, setCurrentValue] = useControlledState<string>({
|
||||||
//
|
value,
|
||||||
ColorPickerRoot,
|
defaultValue,
|
||||||
ColorPickerTrigger,
|
onChange,
|
||||||
ColorPickerContent,
|
});
|
||||||
ColorPickerArea,
|
|
||||||
ColorPickerHueSlider,
|
const color = useMemo(() => rgbaStringToHsva(currentValue), [currentValue]);
|
||||||
ColorPickerAlphaSlider,
|
|
||||||
ColorPickerSwatch,
|
function onColorChange(color: ColorResult) {
|
||||||
ColorPickerEyeDropper,
|
const rgbaString = hsvaToRgbaString(color.hsva);
|
||||||
ColorPickerInput,
|
setCurrentValue(rgbaString);
|
||||||
//
|
}
|
||||||
ColorPickerRoot as Root,
|
|
||||||
ColorPickerTrigger as Trigger,
|
return (
|
||||||
ColorPickerContent as Content,
|
<Popover>
|
||||||
ColorPickerArea as Area,
|
<PopoverTrigger>
|
||||||
ColorPickerHueSlider as HueSlider,
|
<div
|
||||||
ColorPickerAlphaSlider as AlphaSlider,
|
className="size-6 shrink-0 cursor-pointer rounded-full border border-foreground transition-opacity hover:opacity-60"
|
||||||
ColorPickerSwatch as Swatch,
|
style={{ backgroundColor: currentValue }}
|
||||||
ColorPickerEyeDropper as EyeDropper,
|
/>
|
||||||
ColorPickerInput as Input,
|
</PopoverTrigger>
|
||||||
};
|
|
||||||
|
<PopoverContent className="max-w-fit rounded-xl p-2">
|
||||||
|
<ReactColorColorful color={color} onChange={onColorChange} />
|
||||||
|
</PopoverContent>
|
||||||
|
</Popover>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -14,14 +14,18 @@ export function GithubStarsButton() {
|
|||||||
: t`Star us on GitHub (opens in new tab)`;
|
: t`Star us on GitHub (opens in new tab)`;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Button asChild variant="outline">
|
<Button
|
||||||
<a target="_blank" href="https://github.com/amruthpillai/reactive-resume" aria-label={ariaLabel} rel="noopener">
|
variant="outline"
|
||||||
<GithubLogoIcon aria-hidden="true" />
|
nativeButton={false}
|
||||||
{starCount != null ? (
|
render={
|
||||||
<CountUp to={starCount} duration={0.5} separator="," className="font-bold" aria-hidden="true" />
|
<a target="_blank" href="https://github.com/amruthpillai/reactive-resume" aria-label={ariaLabel} rel="noopener">
|
||||||
) : null}
|
<GithubLogoIcon aria-hidden="true" />
|
||||||
<StarIcon aria-hidden="true" />
|
{starCount != null ? (
|
||||||
</a>
|
<CountUp to={starCount} duration={0.5} separator="," className="font-bold" aria-hidden="true" />
|
||||||
</Button>
|
) : null}
|
||||||
|
<StarIcon aria-hidden="true" />
|
||||||
|
</a>
|
||||||
|
}
|
||||||
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,11 +91,13 @@ export function IconPicker({ value, onChange, popoverProps, ...props }: IconPick
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Popover {...popoverProps}>
|
<Popover {...popoverProps}>
|
||||||
<PopoverTrigger asChild>
|
<PopoverTrigger
|
||||||
<Button size="icon" variant="outline" {...props}>
|
render={
|
||||||
<i className={cn("ph size-4 text-base", `ph-${value}`)} />
|
<Button size="icon" variant="outline" {...props}>
|
||||||
</Button>
|
<i className={cn("ph size-4 text-base", `ph-${value}`)} />
|
||||||
</PopoverTrigger>
|
</Button>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
<PopoverContent align="start" className="h-[326px] w-[290px] gap-0 p-0">
|
<PopoverContent align="start" className="h-[326px] w-[290px] gap-0 p-0">
|
||||||
<IconSearchInput value={search} onChange={setSearch} />
|
<IconSearchInput value={search} onChange={setSearch} />
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ import {
|
|||||||
useEditorState,
|
useEditorState,
|
||||||
} from "@tiptap/react";
|
} from "@tiptap/react";
|
||||||
import StarterKit from "@tiptap/starter-kit";
|
import StarterKit from "@tiptap/starter-kit";
|
||||||
import { VisuallyHidden } from "radix-ui";
|
|
||||||
import { useMemo, useState } from "react";
|
import { useMemo, useState } from "react";
|
||||||
import { toast } from "sonner";
|
import { toast } from "sonner";
|
||||||
import { match } from "ts-pattern";
|
import { match } from "ts-pattern";
|
||||||
@@ -170,10 +169,10 @@ export function RichInput({ value, onChange, style, className, editorClassName,
|
|||||||
|
|
||||||
<Dialog open={isFullscreen} onOpenChange={setIsFullscreen}>
|
<Dialog open={isFullscreen} onOpenChange={setIsFullscreen}>
|
||||||
<DialogContent className="flex h-[95svh] max-h-none! w-[95svw] max-w-none! flex-col p-4 sm:max-w-none! 2xl:max-w-none!">
|
<DialogContent className="flex h-[95svh] max-h-none! w-[95svw] max-w-none! flex-col p-4 sm:max-w-none! 2xl:max-w-none!">
|
||||||
<VisuallyHidden.Root>
|
<div className="sr-only">
|
||||||
<DialogTitle>Fullscreen Editor</DialogTitle>
|
<DialogTitle>Fullscreen Editor</DialogTitle>
|
||||||
<DialogDescription>Edit content in fullscreen mode</DialogDescription>
|
<DialogDescription>Edit content in fullscreen mode</DialogDescription>
|
||||||
</VisuallyHidden.Root>
|
</div>
|
||||||
{editorElement}
|
{editorElement}
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
@@ -420,21 +419,24 @@ function EditorToolbar({ editor, isFullscreen }: { editor: Editor; isFullscreen:
|
|||||||
<div className="mx-1 h-5 w-px bg-border" />
|
<div className="mx-1 h-5 w-px bg-border" />
|
||||||
|
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger
|
||||||
<Button size={isFullscreen ? "lg" : "sm"} tabIndex={-1} variant="ghost" className="rounded-none">
|
render={
|
||||||
{match(state)
|
<Button size={isFullscreen ? "lg" : "sm"} tabIndex={-1} variant="ghost" className="rounded-none">
|
||||||
.with({ isParagraph: true }, () => <ParagraphIcon className="size-3.5" />)
|
{match(state)
|
||||||
.with({ isHeading1: true }, () => <TextHOneIcon className="size-3.5" />)
|
.with({ isParagraph: true }, () => <ParagraphIcon className="size-3.5" />)
|
||||||
.with({ isHeading2: true }, () => <TextHTwoIcon className="size-3.5" />)
|
.with({ isHeading1: true }, () => <TextHOneIcon className="size-3.5" />)
|
||||||
.with({ isHeading3: true }, () => <TextHThreeIcon className="size-3.5" />)
|
.with({ isHeading2: true }, () => <TextHTwoIcon className="size-3.5" />)
|
||||||
.with({ isHeading4: true }, () => <TextHFourIcon className="size-3.5" />)
|
.with({ isHeading3: true }, () => <TextHThreeIcon className="size-3.5" />)
|
||||||
.with({ isHeading5: true }, () => <TextHFiveIcon className="size-3.5" />)
|
.with({ isHeading4: true }, () => <TextHFourIcon className="size-3.5" />)
|
||||||
.with({ isHeading6: true }, () => <TextHSixIcon className="size-3.5" />)
|
.with({ isHeading5: true }, () => <TextHFiveIcon className="size-3.5" />)
|
||||||
.otherwise(() => (
|
.with({ isHeading6: true }, () => <TextHSixIcon className="size-3.5" />)
|
||||||
<ParagraphIcon className="size-3.5" />
|
.otherwise(() => (
|
||||||
))}
|
<ParagraphIcon className="size-3.5" />
|
||||||
</Button>
|
))}
|
||||||
</DropdownMenuTrigger>
|
</Button>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
<DropdownMenuContent>
|
<DropdownMenuContent>
|
||||||
<DropdownMenuCheckboxItem
|
<DropdownMenuCheckboxItem
|
||||||
disabled={!state.canParagraph}
|
disabled={!state.canParagraph}
|
||||||
@@ -490,18 +492,21 @@ function EditorToolbar({ editor, isFullscreen }: { editor: Editor; isFullscreen:
|
|||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
|
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger
|
||||||
<Button size={isFullscreen ? "lg" : "sm"} tabIndex={-1} variant="ghost" className="rounded-none">
|
render={
|
||||||
{match(state)
|
<Button size={isFullscreen ? "lg" : "sm"} tabIndex={-1} variant="ghost" className="rounded-none">
|
||||||
.with({ isLeftAlign: true }, () => <TextAlignLeftIcon className="size-3.5" />)
|
{match(state)
|
||||||
.with({ isCenterAlign: true }, () => <TextAlignCenterIcon className="size-3.5" />)
|
.with({ isLeftAlign: true }, () => <TextAlignLeftIcon className="size-3.5" />)
|
||||||
.with({ isRightAlign: true }, () => <TextAlignRightIcon className="size-3.5" />)
|
.with({ isCenterAlign: true }, () => <TextAlignCenterIcon className="size-3.5" />)
|
||||||
.with({ isJustifyAlign: true }, () => <TextAlignJustifyIcon className="size-3.5" />)
|
.with({ isRightAlign: true }, () => <TextAlignRightIcon className="size-3.5" />)
|
||||||
.otherwise(() => (
|
.with({ isJustifyAlign: true }, () => <TextAlignJustifyIcon className="size-3.5" />)
|
||||||
<TextAlignLeftIcon className="size-3.5" />
|
.otherwise(() => (
|
||||||
))}
|
<TextAlignLeftIcon className="size-3.5" />
|
||||||
</Button>
|
))}
|
||||||
</DropdownMenuTrigger>
|
</Button>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
<DropdownMenuContent>
|
<DropdownMenuContent>
|
||||||
<DropdownMenuCheckboxItem
|
<DropdownMenuCheckboxItem
|
||||||
disabled={!state.canLeftAlign}
|
disabled={!state.canLeftAlign}
|
||||||
@@ -631,52 +636,54 @@ function EditorToolbar({ editor, isFullscreen }: { editor: Editor; isFullscreen:
|
|||||||
</Toggle>
|
</Toggle>
|
||||||
|
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger
|
||||||
<Button
|
render={
|
||||||
size={isFullscreen ? "lg" : "sm"}
|
<Button
|
||||||
tabIndex={-1}
|
size={isFullscreen ? "lg" : "sm"}
|
||||||
variant="ghost"
|
tabIndex={-1}
|
||||||
className="rounded-none"
|
variant="ghost"
|
||||||
title={t`Table`}
|
className="rounded-none"
|
||||||
>
|
title={t`Table`}
|
||||||
<TableIcon className="size-3.5" />
|
>
|
||||||
</Button>
|
<TableIcon className="size-3.5" />
|
||||||
</DropdownMenuTrigger>
|
</Button>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
<DropdownMenuContent>
|
<DropdownMenuContent>
|
||||||
<DropdownMenuItem disabled={!state.canInsertTable} onSelect={state.insertTable}>
|
<DropdownMenuItem disabled={!state.canInsertTable} onClick={state.insertTable}>
|
||||||
<PlusIcon />
|
<PlusIcon />
|
||||||
<Trans>Insert Table</Trans>
|
<Trans>Insert Table</Trans>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuSeparator />
|
<DropdownMenuSeparator />
|
||||||
<DropdownMenuItem disabled={!state.canAddColumnBefore} onSelect={state.addColumnBefore}>
|
<DropdownMenuItem disabled={!state.canAddColumnBefore} onClick={state.addColumnBefore}>
|
||||||
<ColumnsPlusLeftIcon />
|
<ColumnsPlusLeftIcon />
|
||||||
<Trans>Add Column Before</Trans>
|
<Trans>Add Column Before</Trans>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuItem disabled={!state.canAddColumnAfter} onSelect={state.addColumnAfter}>
|
<DropdownMenuItem disabled={!state.canAddColumnAfter} onClick={state.addColumnAfter}>
|
||||||
<ColumnsPlusRightIcon />
|
<ColumnsPlusRightIcon />
|
||||||
<Trans>Add Column After</Trans>
|
<Trans>Add Column After</Trans>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuSeparator />
|
<DropdownMenuSeparator />
|
||||||
<DropdownMenuItem disabled={!state.canAddRowBefore} onSelect={state.addRowBefore}>
|
<DropdownMenuItem disabled={!state.canAddRowBefore} onClick={state.addRowBefore}>
|
||||||
<RowsPlusTopIcon />
|
<RowsPlusTopIcon />
|
||||||
<Trans>Add Row Before</Trans>
|
<Trans>Add Row Before</Trans>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuItem disabled={!state.canAddRowAfter} onSelect={state.addRowAfter}>
|
<DropdownMenuItem disabled={!state.canAddRowAfter} onClick={state.addRowAfter}>
|
||||||
<RowsPlusBottomIcon />
|
<RowsPlusBottomIcon />
|
||||||
<Trans>Add Row After</Trans>
|
<Trans>Add Row After</Trans>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuSeparator />
|
<DropdownMenuSeparator />
|
||||||
<DropdownMenuItem disabled={!state.canDeleteColumn} onSelect={state.deleteColumn}>
|
<DropdownMenuItem disabled={!state.canDeleteColumn} onClick={state.deleteColumn}>
|
||||||
<TrashSimpleIcon />
|
<TrashSimpleIcon />
|
||||||
<Trans>Delete Column</Trans>
|
<Trans>Delete Column</Trans>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuItem disabled={!state.canDeleteRow} onSelect={state.deleteRow}>
|
<DropdownMenuItem disabled={!state.canDeleteRow} onClick={state.deleteRow}>
|
||||||
<TrashSimpleIcon />
|
<TrashSimpleIcon />
|
||||||
<Trans>Delete Row</Trans>
|
<Trans>Delete Row</Trans>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuSeparator />
|
<DropdownMenuSeparator />
|
||||||
<DropdownMenuItem variant="destructive" disabled={!state.canDeleteTable} onSelect={state.deleteTable}>
|
<DropdownMenuItem variant="destructive" disabled={!state.canDeleteTable} onClick={state.deleteTable}>
|
||||||
<TrashSimpleIcon />
|
<TrashSimpleIcon />
|
||||||
<Trans>Delete Table</Trans>
|
<Trans>Delete Table</Trans>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
|
|||||||
@@ -63,11 +63,13 @@ export function URLInput({ value, onChange, hideLabelButton, ...props }: Props)
|
|||||||
{!hideLabelButton && (
|
{!hideLabelButton && (
|
||||||
<InputGroupAddon align="inline-end">
|
<InputGroupAddon align="inline-end">
|
||||||
<Popover>
|
<Popover>
|
||||||
<PopoverTrigger asChild>
|
<PopoverTrigger
|
||||||
<InputGroupButton size="icon-sm" title={t`Add a label to the URL`}>
|
render={
|
||||||
<TagIcon />
|
<InputGroupButton size="icon-sm" title={t`Add a label to the URL`}>
|
||||||
</InputGroupButton>
|
<TagIcon />
|
||||||
</PopoverTrigger>
|
</InputGroupButton>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
<PopoverContent className="pt-3">
|
<PopoverContent className="pt-3">
|
||||||
<div className="grid gap-2" onClick={(e) => e.stopPropagation()}>
|
<div className="grid gap-2" onClick={(e) => e.stopPropagation()}>
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ export function VisuallyHiddenInput<T = InputValue>(props: VisuallyHiddenInputPr
|
|||||||
});
|
});
|
||||||
|
|
||||||
resizeObserver.observe(control, { box: "border-box" });
|
resizeObserver.observe(control, { box: "border-box" });
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
resizeObserver.disconnect();
|
resizeObserver.disconnect();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ export function NotFoundScreen({ routeId }: NotFoundRouteProps) {
|
|||||||
<AlertDescription>{routeId}</AlertDescription>
|
<AlertDescription>{routeId}</AlertDescription>
|
||||||
</Alert>
|
</Alert>
|
||||||
|
|
||||||
<Button asChild>
|
<Button>
|
||||||
<Link to="..">
|
<Link to="..">
|
||||||
<ArrowLeftIcon />
|
<ArrowLeftIcon />
|
||||||
<Trans>Go Back</Trans>
|
<Trans>Go Back</Trans>
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ import { useMemo } from "react";
|
|||||||
import { match } from "ts-pattern";
|
import { match } from "ts-pattern";
|
||||||
import type z from "zod";
|
import type z from "zod";
|
||||||
import { levelDesignSchema } from "@/schema/resume/data";
|
import { levelDesignSchema } from "@/schema/resume/data";
|
||||||
import { Combobox, type ComboboxProps } from "../ui/combobox";
|
import { Combobox, type SingleComboboxProps } from "../ui/combobox";
|
||||||
|
|
||||||
type LevelType = z.infer<typeof levelDesignSchema>["type"];
|
type LevelType = z.infer<typeof levelDesignSchema>["type"];
|
||||||
|
|
||||||
type LevelTypeComboboxProps = Omit<ComboboxProps, "options">;
|
type LevelTypeComboboxProps = Omit<SingleComboboxProps, "options">;
|
||||||
|
|
||||||
export const getLevelTypeName = (type: LevelType) => {
|
export const getLevelTypeName = (type: LevelType) => {
|
||||||
return match(type)
|
return match(type)
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { i18n } from "@lingui/core";
|
import { i18n } from "@lingui/core";
|
||||||
import { useLingui } from "@lingui/react";
|
import { useLingui } from "@lingui/react";
|
||||||
import { isLocale, type Locale, loadLocale, localeMap, setLocaleServerFn } from "@/utils/locale";
|
import { isLocale, type Locale, loadLocale, localeMap, setLocaleServerFn } from "@/utils/locale";
|
||||||
import { Combobox, type ComboboxProps } from "../ui/combobox";
|
import { Combobox, type SingleComboboxProps } from "../ui/combobox";
|
||||||
|
|
||||||
type Props = Omit<ComboboxProps, "options" | "value" | "onValueChange">;
|
type Props = Omit<SingleComboboxProps, "options" | "value" | "onValueChange">;
|
||||||
|
|
||||||
export const getLocaleOptions = () => {
|
export const getLocaleOptions = () => {
|
||||||
return Object.entries(localeMap).map(([value, label]) => ({
|
return Object.entries(localeMap).map(([value, label]) => ({
|
||||||
@@ -22,5 +22,13 @@ export function LocaleCombobox(props: Props) {
|
|||||||
window.location.reload();
|
window.location.reload();
|
||||||
};
|
};
|
||||||
|
|
||||||
return <Combobox options={getLocaleOptions()} defaultValue={i18n.locale} onValueChange={onLocaleChange} {...props} />;
|
return (
|
||||||
|
<Combobox
|
||||||
|
showClear={false}
|
||||||
|
defaultValue={i18n.locale}
|
||||||
|
options={getLocaleOptions()}
|
||||||
|
onValueChange={onLocaleChange}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,145 +0,0 @@
|
|||||||
import { AnimatePresence, type HTMLMotionProps, motion } from "motion/react";
|
|
||||||
import { Accordion as AccordionPrimitive } from "radix-ui";
|
|
||||||
import * as React from "react";
|
|
||||||
import { useControlledState } from "@/hooks/use-controlled-state";
|
|
||||||
import { getStrictContext } from "@/utils/get-strict-context";
|
|
||||||
|
|
||||||
type AccordionContextType = {
|
|
||||||
value: string | string[] | undefined;
|
|
||||||
setValue: (value: string | string[] | undefined) => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
type AccordionItemContextType = {
|
|
||||||
value: string;
|
|
||||||
isOpen: boolean;
|
|
||||||
setIsOpen: (open: boolean) => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
const [AccordionProvider, useAccordion] = getStrictContext<AccordionContextType>("AccordionContext");
|
|
||||||
|
|
||||||
const [AccordionItemProvider, useAccordionItem] = getStrictContext<AccordionItemContextType>("AccordionItemContext");
|
|
||||||
|
|
||||||
type AccordionProps = React.ComponentProps<typeof AccordionPrimitive.Root>;
|
|
||||||
|
|
||||||
function Accordion(props: AccordionProps) {
|
|
||||||
const [value, setValue] = useControlledState<string | string[] | undefined>({
|
|
||||||
value: props?.value,
|
|
||||||
defaultValue: props?.defaultValue,
|
|
||||||
onChange: props?.onValueChange as (value: string | string[] | undefined) => void,
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AccordionProvider value={{ value, setValue }}>
|
|
||||||
<AccordionPrimitive.Root data-slot="accordion" {...props} onValueChange={setValue} />
|
|
||||||
</AccordionProvider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type AccordionItemProps = React.ComponentProps<typeof AccordionPrimitive.Item>;
|
|
||||||
|
|
||||||
function AccordionItem(props: AccordionItemProps) {
|
|
||||||
const { value } = useAccordion();
|
|
||||||
const [isOpen, setIsOpen] = React.useState(value?.includes(props?.value) ?? false);
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
|
||||||
setIsOpen(value?.includes(props?.value) ?? false);
|
|
||||||
}, [value, props?.value]);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AccordionItemProvider value={{ isOpen, setIsOpen, value: props.value }}>
|
|
||||||
<AccordionPrimitive.Item data-slot="accordion-item" {...props} />
|
|
||||||
</AccordionItemProvider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type AccordionHeaderProps = React.ComponentProps<typeof AccordionPrimitive.Header>;
|
|
||||||
|
|
||||||
function AccordionHeader(props: AccordionHeaderProps) {
|
|
||||||
return <AccordionPrimitive.Header data-slot="accordion-header" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type AccordionTriggerProps = React.ComponentProps<typeof AccordionPrimitive.Trigger>;
|
|
||||||
|
|
||||||
function AccordionTrigger(props: AccordionTriggerProps) {
|
|
||||||
return <AccordionPrimitive.Trigger data-slot="accordion-trigger" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type AccordionContentProps = Omit<React.ComponentProps<typeof AccordionPrimitive.Content>, "asChild" | "forceMount"> &
|
|
||||||
HTMLMotionProps<"div"> & {
|
|
||||||
keepRendered?: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
function AccordionContent({
|
|
||||||
keepRendered = false,
|
|
||||||
transition = { duration: 0.35, ease: "easeInOut" },
|
|
||||||
...props
|
|
||||||
}: AccordionContentProps) {
|
|
||||||
const { isOpen } = useAccordionItem();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AnimatePresence>
|
|
||||||
{keepRendered ? (
|
|
||||||
<AccordionPrimitive.Content asChild forceMount>
|
|
||||||
<motion.div
|
|
||||||
key="accordion-content"
|
|
||||||
data-slot="accordion-content"
|
|
||||||
initial={{ height: 0, opacity: 0, "--mask-stop": "0%", y: 20 }}
|
|
||||||
animate={
|
|
||||||
isOpen
|
|
||||||
? { height: "auto", opacity: 1, "--mask-stop": "100%", y: 0 }
|
|
||||||
: { height: 0, opacity: 0, "--mask-stop": "0%", y: 20 }
|
|
||||||
}
|
|
||||||
transition={transition}
|
|
||||||
style={{
|
|
||||||
maskImage: "linear-gradient(black var(--mask-stop), transparent var(--mask-stop))",
|
|
||||||
WebkitMaskImage: "linear-gradient(black var(--mask-stop), transparent var(--mask-stop))",
|
|
||||||
overflow: "hidden",
|
|
||||||
}}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</AccordionPrimitive.Content>
|
|
||||||
) : (
|
|
||||||
isOpen && (
|
|
||||||
<AccordionPrimitive.Content asChild forceMount>
|
|
||||||
<motion.div
|
|
||||||
key="accordion-content"
|
|
||||||
data-slot="accordion-content"
|
|
||||||
initial={{ height: 0, opacity: 0, "--mask-stop": "0%", y: 20 }}
|
|
||||||
animate={{
|
|
||||||
height: "auto",
|
|
||||||
opacity: 1,
|
|
||||||
"--mask-stop": "100%",
|
|
||||||
y: 0,
|
|
||||||
}}
|
|
||||||
exit={{ height: 0, opacity: 0, "--mask-stop": "0%", y: 20 }}
|
|
||||||
transition={transition}
|
|
||||||
style={{
|
|
||||||
maskImage: "linear-gradient(black var(--mask-stop), transparent var(--mask-stop))",
|
|
||||||
WebkitMaskImage: "linear-gradient(black var(--mask-stop), transparent var(--mask-stop))",
|
|
||||||
overflow: "hidden",
|
|
||||||
}}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</AccordionPrimitive.Content>
|
|
||||||
)
|
|
||||||
)}
|
|
||||||
</AnimatePresence>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export {
|
|
||||||
Accordion,
|
|
||||||
AccordionItem,
|
|
||||||
AccordionHeader,
|
|
||||||
AccordionTrigger,
|
|
||||||
AccordionContent,
|
|
||||||
useAccordion,
|
|
||||||
useAccordionItem,
|
|
||||||
type AccordionProps,
|
|
||||||
type AccordionItemProps,
|
|
||||||
type AccordionHeaderProps,
|
|
||||||
type AccordionTriggerProps,
|
|
||||||
type AccordionContentProps,
|
|
||||||
type AccordionContextType,
|
|
||||||
type AccordionItemContextType,
|
|
||||||
};
|
|
||||||
@@ -1,186 +0,0 @@
|
|||||||
import { AnimatePresence, type HTMLMotionProps, motion } from "motion/react";
|
|
||||||
import { AlertDialog as AlertDialogPrimitive } from "radix-ui";
|
|
||||||
import type * as React from "react";
|
|
||||||
import { useControlledState } from "@/hooks/use-controlled-state";
|
|
||||||
import { getStrictContext } from "@/utils/get-strict-context";
|
|
||||||
|
|
||||||
type AlertDialogContextType = {
|
|
||||||
isOpen: boolean;
|
|
||||||
setIsOpen: AlertDialogProps["onOpenChange"];
|
|
||||||
};
|
|
||||||
|
|
||||||
const [AlertDialogProvider, useAlertDialog] = getStrictContext<AlertDialogContextType>("AlertDialogContext");
|
|
||||||
|
|
||||||
type AlertDialogProps = React.ComponentProps<typeof AlertDialogPrimitive.Root>;
|
|
||||||
|
|
||||||
function AlertDialog(props: AlertDialogProps) {
|
|
||||||
const [isOpen, setIsOpen] = useControlledState({
|
|
||||||
value: props?.open,
|
|
||||||
defaultValue: props?.defaultOpen,
|
|
||||||
onChange: props?.onOpenChange,
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AlertDialogProvider value={{ isOpen, setIsOpen }}>
|
|
||||||
<AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} onOpenChange={setIsOpen} />
|
|
||||||
</AlertDialogProvider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogTriggerProps = React.ComponentProps<typeof AlertDialogPrimitive.Trigger>;
|
|
||||||
|
|
||||||
function AlertDialogTrigger(props: AlertDialogTriggerProps) {
|
|
||||||
return <AlertDialogPrimitive.Trigger data-slot="alert-dialog-trigger" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogPortalProps = Omit<React.ComponentProps<typeof AlertDialogPrimitive.Portal>, "forceMount">;
|
|
||||||
|
|
||||||
function AlertDialogPortal(props: AlertDialogPortalProps) {
|
|
||||||
const { isOpen } = useAlertDialog();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AnimatePresence>
|
|
||||||
{isOpen && <AlertDialogPrimitive.Portal data-slot="alert-dialog-portal" forceMount {...props} />}
|
|
||||||
</AnimatePresence>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogOverlayProps = Omit<
|
|
||||||
React.ComponentProps<typeof AlertDialogPrimitive.Overlay>,
|
|
||||||
"forceMount" | "asChild"
|
|
||||||
> &
|
|
||||||
HTMLMotionProps<"div">;
|
|
||||||
|
|
||||||
function AlertDialogOverlay({ transition = { duration: 0.2, ease: "easeInOut" }, ...props }: AlertDialogOverlayProps) {
|
|
||||||
return (
|
|
||||||
<AlertDialogPrimitive.Overlay data-slot="alert-dialog-overlay" asChild forceMount>
|
|
||||||
<motion.div
|
|
||||||
key="alert-dialog-overlay"
|
|
||||||
initial={{ opacity: 0, filter: "blur(4px)" }}
|
|
||||||
animate={{ opacity: 1, filter: "blur(0px)" }}
|
|
||||||
exit={{ opacity: 0, filter: "blur(4px)" }}
|
|
||||||
transition={transition}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</AlertDialogPrimitive.Overlay>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogFlipDirection = "top" | "bottom" | "left" | "right";
|
|
||||||
|
|
||||||
type AlertDialogContentProps = Omit<
|
|
||||||
React.ComponentProps<typeof AlertDialogPrimitive.Content>,
|
|
||||||
"forceMount" | "asChild"
|
|
||||||
> &
|
|
||||||
HTMLMotionProps<"div"> & {
|
|
||||||
from?: AlertDialogFlipDirection;
|
|
||||||
};
|
|
||||||
|
|
||||||
function AlertDialogContent({
|
|
||||||
from = "top",
|
|
||||||
onOpenAutoFocus,
|
|
||||||
onCloseAutoFocus,
|
|
||||||
onEscapeKeyDown,
|
|
||||||
transition = { type: "spring", stiffness: 250, damping: 25 },
|
|
||||||
...props
|
|
||||||
}: AlertDialogContentProps) {
|
|
||||||
const initialRotation = from === "bottom" || from === "left" ? "20deg" : "-20deg";
|
|
||||||
const isVertical = from === "top" || from === "bottom";
|
|
||||||
const rotateAxis = isVertical ? "rotateX" : "rotateY";
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AlertDialogPrimitive.Content
|
|
||||||
asChild
|
|
||||||
forceMount
|
|
||||||
onOpenAutoFocus={onOpenAutoFocus}
|
|
||||||
onCloseAutoFocus={onCloseAutoFocus}
|
|
||||||
onEscapeKeyDown={onEscapeKeyDown}
|
|
||||||
>
|
|
||||||
<motion.div
|
|
||||||
key="alert-dialog-content"
|
|
||||||
data-slot="alert-dialog-content"
|
|
||||||
transition={transition}
|
|
||||||
initial={{
|
|
||||||
opacity: 0,
|
|
||||||
filter: "blur(4px)",
|
|
||||||
transform: `perspective(500px) ${rotateAxis}(${initialRotation}) scale(0.8)`,
|
|
||||||
}}
|
|
||||||
animate={{
|
|
||||||
opacity: 1,
|
|
||||||
filter: "blur(0px)",
|
|
||||||
transform: `perspective(500px) ${rotateAxis}(0deg) scale(1)`,
|
|
||||||
}}
|
|
||||||
exit={{
|
|
||||||
opacity: 0,
|
|
||||||
filter: "blur(4px)",
|
|
||||||
transform: `perspective(500px) ${rotateAxis}(${initialRotation}) scale(0.8)`,
|
|
||||||
}}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</AlertDialogPrimitive.Content>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogCancelProps = React.ComponentProps<typeof AlertDialogPrimitive.Cancel>;
|
|
||||||
|
|
||||||
function AlertDialogCancel(props: AlertDialogCancelProps) {
|
|
||||||
return <AlertDialogPrimitive.Cancel data-slot="alert-dialog-cancel" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogActionProps = React.ComponentProps<typeof AlertDialogPrimitive.Action>;
|
|
||||||
|
|
||||||
function AlertDialogAction(props: AlertDialogActionProps) {
|
|
||||||
return <AlertDialogPrimitive.Action data-slot="alert-dialog-action" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogHeaderProps = React.ComponentProps<"div">;
|
|
||||||
|
|
||||||
function AlertDialogHeader(props: AlertDialogHeaderProps) {
|
|
||||||
return <div data-slot="alert-dialog-header" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogFooterProps = React.ComponentProps<"div">;
|
|
||||||
|
|
||||||
function AlertDialogFooter(props: AlertDialogFooterProps) {
|
|
||||||
return <div data-slot="alert-dialog-footer" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogTitleProps = React.ComponentProps<typeof AlertDialogPrimitive.Title>;
|
|
||||||
|
|
||||||
function AlertDialogTitle(props: AlertDialogTitleProps) {
|
|
||||||
return <AlertDialogPrimitive.Title data-slot="alert-dialog-title" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogDescriptionProps = React.ComponentProps<typeof AlertDialogPrimitive.Description>;
|
|
||||||
|
|
||||||
function AlertDialogDescription(props: AlertDialogDescriptionProps) {
|
|
||||||
return <AlertDialogPrimitive.Description data-slot="alert-dialog-description" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
export {
|
|
||||||
AlertDialog,
|
|
||||||
AlertDialogPortal,
|
|
||||||
AlertDialogOverlay,
|
|
||||||
AlertDialogCancel,
|
|
||||||
AlertDialogAction,
|
|
||||||
AlertDialogTrigger,
|
|
||||||
AlertDialogContent,
|
|
||||||
AlertDialogHeader,
|
|
||||||
AlertDialogFooter,
|
|
||||||
AlertDialogTitle,
|
|
||||||
AlertDialogDescription,
|
|
||||||
useAlertDialog,
|
|
||||||
type AlertDialogProps,
|
|
||||||
type AlertDialogTriggerProps,
|
|
||||||
type AlertDialogPortalProps,
|
|
||||||
type AlertDialogCancelProps,
|
|
||||||
type AlertDialogActionProps,
|
|
||||||
type AlertDialogOverlayProps,
|
|
||||||
type AlertDialogContentProps,
|
|
||||||
type AlertDialogHeaderProps,
|
|
||||||
type AlertDialogFooterProps,
|
|
||||||
type AlertDialogTitleProps,
|
|
||||||
type AlertDialogDescriptionProps,
|
|
||||||
type AlertDialogContextType,
|
|
||||||
type AlertDialogFlipDirection,
|
|
||||||
};
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
import { type HTMLMotionProps, motion } from "motion/react";
|
|
||||||
import { Slot, type WithAsChild } from "@/components/primitives/slot";
|
|
||||||
|
|
||||||
type ButtonProps = WithAsChild<
|
|
||||||
Omit<HTMLMotionProps<"button">, "children"> & {
|
|
||||||
hoverScale?: number;
|
|
||||||
tapScale?: number;
|
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: unknown type
|
|
||||||
children?: any;
|
|
||||||
}
|
|
||||||
>;
|
|
||||||
|
|
||||||
function Button({ hoverScale = 1.0, tapScale = 0.95, asChild = false, ...props }: ButtonProps) {
|
|
||||||
const Component = asChild ? Slot : motion.button;
|
|
||||||
|
|
||||||
return <Component whileTap={{ scale: tapScale }} whileHover={{ scale: hoverScale }} {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
export { Button, type ButtonProps };
|
|
||||||
@@ -1,176 +0,0 @@
|
|||||||
import { AnimatePresence, type HTMLMotionProps, motion } from "motion/react";
|
|
||||||
import { Dialog as DialogPrimitive } from "radix-ui";
|
|
||||||
import type * as React from "react";
|
|
||||||
import { useControlledState } from "@/hooks/use-controlled-state";
|
|
||||||
import { getStrictContext } from "@/utils/get-strict-context";
|
|
||||||
|
|
||||||
type DialogContextType = {
|
|
||||||
isOpen: boolean;
|
|
||||||
setIsOpen: DialogProps["onOpenChange"];
|
|
||||||
};
|
|
||||||
|
|
||||||
const [DialogProvider, useDialog] = getStrictContext<DialogContextType>("DialogContext");
|
|
||||||
|
|
||||||
type DialogProps = React.ComponentProps<typeof DialogPrimitive.Root>;
|
|
||||||
|
|
||||||
function Dialog(props: DialogProps) {
|
|
||||||
const [isOpen, setIsOpen] = useControlledState({
|
|
||||||
value: props?.open,
|
|
||||||
defaultValue: props?.defaultOpen,
|
|
||||||
onChange: props?.onOpenChange,
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
|
||||||
<DialogProvider value={{ isOpen, setIsOpen }}>
|
|
||||||
<DialogPrimitive.Root data-slot="dialog" {...props} onOpenChange={setIsOpen} />
|
|
||||||
</DialogProvider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DialogTriggerProps = React.ComponentProps<typeof DialogPrimitive.Trigger>;
|
|
||||||
|
|
||||||
function DialogTrigger(props: DialogTriggerProps) {
|
|
||||||
return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DialogPortalProps = Omit<React.ComponentProps<typeof DialogPrimitive.Portal>, "forceMount">;
|
|
||||||
|
|
||||||
function DialogPortal(props: DialogPortalProps) {
|
|
||||||
const { isOpen } = useDialog();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AnimatePresence>
|
|
||||||
{isOpen && <DialogPrimitive.Portal data-slot="dialog-portal" forceMount {...props} />}
|
|
||||||
</AnimatePresence>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DialogOverlayProps = Omit<React.ComponentProps<typeof DialogPrimitive.Overlay>, "forceMount" | "asChild"> &
|
|
||||||
HTMLMotionProps<"div">;
|
|
||||||
|
|
||||||
function DialogOverlay({ transition = { duration: 0.2, ease: "easeInOut" }, ...props }: DialogOverlayProps) {
|
|
||||||
return (
|
|
||||||
<DialogPrimitive.Overlay data-slot="dialog-overlay" asChild forceMount>
|
|
||||||
<motion.div
|
|
||||||
key="dialog-overlay"
|
|
||||||
initial={{ opacity: 0, filter: "blur(4px)" }}
|
|
||||||
animate={{ opacity: 1, filter: "blur(0px)" }}
|
|
||||||
exit={{ opacity: 0, filter: "blur(4px)" }}
|
|
||||||
transition={transition}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</DialogPrimitive.Overlay>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DialogFlipDirection = "top" | "bottom" | "left" | "right";
|
|
||||||
|
|
||||||
type DialogContentProps = Omit<React.ComponentProps<typeof DialogPrimitive.Content>, "forceMount" | "asChild"> &
|
|
||||||
HTMLMotionProps<"div"> & {
|
|
||||||
from?: DialogFlipDirection;
|
|
||||||
};
|
|
||||||
|
|
||||||
function DialogContent({
|
|
||||||
from = "top",
|
|
||||||
onOpenAutoFocus,
|
|
||||||
onCloseAutoFocus,
|
|
||||||
onEscapeKeyDown,
|
|
||||||
onPointerDownOutside,
|
|
||||||
onInteractOutside,
|
|
||||||
transition = { type: "spring", stiffness: 250, damping: 25 },
|
|
||||||
...props
|
|
||||||
}: DialogContentProps) {
|
|
||||||
const initialRotation = from === "bottom" || from === "left" ? "20deg" : "-20deg";
|
|
||||||
const isVertical = from === "top" || from === "bottom";
|
|
||||||
const rotateAxis = isVertical ? "rotateX" : "rotateY";
|
|
||||||
|
|
||||||
return (
|
|
||||||
<DialogPrimitive.Content
|
|
||||||
asChild
|
|
||||||
forceMount
|
|
||||||
onOpenAutoFocus={onOpenAutoFocus}
|
|
||||||
onCloseAutoFocus={onCloseAutoFocus}
|
|
||||||
onEscapeKeyDown={onEscapeKeyDown}
|
|
||||||
onPointerDownOutside={onPointerDownOutside}
|
|
||||||
onInteractOutside={onInteractOutside}
|
|
||||||
>
|
|
||||||
<motion.div
|
|
||||||
key="dialog-content"
|
|
||||||
data-slot="dialog-content"
|
|
||||||
transition={transition}
|
|
||||||
initial={{
|
|
||||||
opacity: 0,
|
|
||||||
filter: "blur(4px)",
|
|
||||||
transform: `perspective(500px) ${rotateAxis}(${initialRotation}) scale(0.8)`,
|
|
||||||
}}
|
|
||||||
animate={{
|
|
||||||
opacity: 1,
|
|
||||||
filter: "blur(0px)",
|
|
||||||
transform: `perspective(500px) ${rotateAxis}(0deg) scale(1)`,
|
|
||||||
}}
|
|
||||||
exit={{
|
|
||||||
opacity: 0,
|
|
||||||
filter: "blur(4px)",
|
|
||||||
transform: `perspective(500px) ${rotateAxis}(${initialRotation}) scale(0.8)`,
|
|
||||||
}}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</DialogPrimitive.Content>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DialogCloseProps = React.ComponentProps<typeof DialogPrimitive.Close>;
|
|
||||||
|
|
||||||
function DialogClose(props: DialogCloseProps) {
|
|
||||||
return <DialogPrimitive.Close data-slot="dialog-close" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DialogHeaderProps = React.ComponentProps<"div">;
|
|
||||||
|
|
||||||
function DialogHeader(props: DialogHeaderProps) {
|
|
||||||
return <div data-slot="dialog-header" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DialogFooterProps = React.ComponentProps<"div">;
|
|
||||||
|
|
||||||
function DialogFooter(props: DialogFooterProps) {
|
|
||||||
return <div data-slot="dialog-footer" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DialogTitleProps = React.ComponentProps<typeof DialogPrimitive.Title>;
|
|
||||||
|
|
||||||
function DialogTitle(props: DialogTitleProps) {
|
|
||||||
return <DialogPrimitive.Title data-slot="dialog-title" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DialogDescriptionProps = React.ComponentProps<typeof DialogPrimitive.Description>;
|
|
||||||
|
|
||||||
function DialogDescription(props: DialogDescriptionProps) {
|
|
||||||
return <DialogPrimitive.Description data-slot="dialog-description" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
export {
|
|
||||||
Dialog,
|
|
||||||
DialogPortal,
|
|
||||||
DialogOverlay,
|
|
||||||
DialogClose,
|
|
||||||
DialogTrigger,
|
|
||||||
DialogContent,
|
|
||||||
DialogHeader,
|
|
||||||
DialogFooter,
|
|
||||||
DialogTitle,
|
|
||||||
DialogDescription,
|
|
||||||
useDialog,
|
|
||||||
type DialogProps,
|
|
||||||
type DialogTriggerProps,
|
|
||||||
type DialogPortalProps,
|
|
||||||
type DialogCloseProps,
|
|
||||||
type DialogOverlayProps,
|
|
||||||
type DialogContentProps,
|
|
||||||
type DialogHeaderProps,
|
|
||||||
type DialogFooterProps,
|
|
||||||
type DialogTitleProps,
|
|
||||||
type DialogDescriptionProps,
|
|
||||||
type DialogContextType,
|
|
||||||
type DialogFlipDirection,
|
|
||||||
};
|
|
||||||
@@ -1,348 +0,0 @@
|
|||||||
import { AnimatePresence, type HTMLMotionProps, motion } from "motion/react";
|
|
||||||
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
|
|
||||||
import type * as React from "react";
|
|
||||||
import { useControlledState } from "@/hooks/use-controlled-state";
|
|
||||||
import { getStrictContext } from "@/utils/get-strict-context";
|
|
||||||
|
|
||||||
type DropdownMenuContextType = {
|
|
||||||
isOpen: boolean;
|
|
||||||
setIsOpen: (o: boolean) => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
type DropdownMenuSubContextType = {
|
|
||||||
isOpen: boolean;
|
|
||||||
setIsOpen: (o: boolean) => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
const [DropdownMenuProvider, useDropdownMenu] = getStrictContext<DropdownMenuContextType>("DropdownMenuContext");
|
|
||||||
|
|
||||||
const [DropdownMenuSubProvider, useDropdownMenuSub] =
|
|
||||||
getStrictContext<DropdownMenuSubContextType>("DropdownMenuSubContext");
|
|
||||||
|
|
||||||
type DropdownMenuProps = React.ComponentProps<typeof DropdownMenuPrimitive.Root>;
|
|
||||||
|
|
||||||
function DropdownMenu(props: DropdownMenuProps) {
|
|
||||||
const [isOpen, setIsOpen] = useControlledState({
|
|
||||||
value: props?.open,
|
|
||||||
defaultValue: props?.defaultOpen,
|
|
||||||
onChange: props?.onOpenChange,
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
|
||||||
<DropdownMenuProvider value={{ isOpen, setIsOpen }}>
|
|
||||||
<DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} onOpenChange={setIsOpen} />
|
|
||||||
</DropdownMenuProvider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuTriggerProps = React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>;
|
|
||||||
|
|
||||||
function DropdownMenuTrigger(props: DropdownMenuTriggerProps) {
|
|
||||||
return <DropdownMenuPrimitive.Trigger data-slot="dropdown-menu-trigger" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuPortalProps = React.ComponentProps<typeof DropdownMenuPrimitive.Portal>;
|
|
||||||
|
|
||||||
function DropdownMenuPortal(props: DropdownMenuPortalProps) {
|
|
||||||
return <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuGroupProps = React.ComponentProps<typeof DropdownMenuPrimitive.Group>;
|
|
||||||
|
|
||||||
function DropdownMenuGroup(props: DropdownMenuGroupProps) {
|
|
||||||
return <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuSubProps = React.ComponentProps<typeof DropdownMenuPrimitive.Sub>;
|
|
||||||
|
|
||||||
function DropdownMenuSub(props: DropdownMenuSubProps) {
|
|
||||||
const [isOpen, setIsOpen] = useControlledState({
|
|
||||||
value: props?.open,
|
|
||||||
defaultValue: props?.defaultOpen,
|
|
||||||
onChange: props?.onOpenChange,
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
|
||||||
<DropdownMenuSubProvider value={{ isOpen, setIsOpen }}>
|
|
||||||
<DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} onOpenChange={setIsOpen} />
|
|
||||||
</DropdownMenuSubProvider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuRadioGroupProps = React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>;
|
|
||||||
|
|
||||||
function DropdownMenuRadioGroup(props: DropdownMenuRadioGroupProps) {
|
|
||||||
return <DropdownMenuPrimitive.RadioGroup data-slot="dropdown-menu-radio-group" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuSubTriggerProps = Omit<React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger>, "asChild"> &
|
|
||||||
HTMLMotionProps<"div">;
|
|
||||||
|
|
||||||
function DropdownMenuSubTrigger({ disabled, textValue, ...props }: DropdownMenuSubTriggerProps) {
|
|
||||||
return (
|
|
||||||
<DropdownMenuPrimitive.SubTrigger disabled={disabled} textValue={textValue} asChild>
|
|
||||||
<motion.div data-slot="dropdown-menu-sub-trigger" data-disabled={disabled} {...props} />
|
|
||||||
</DropdownMenuPrimitive.SubTrigger>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuSubContentProps = Omit<
|
|
||||||
React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>,
|
|
||||||
"forceMount" | "asChild"
|
|
||||||
> &
|
|
||||||
Omit<React.ComponentProps<typeof DropdownMenuPrimitive.Portal>, "forceMount"> &
|
|
||||||
HTMLMotionProps<"div">;
|
|
||||||
|
|
||||||
function DropdownMenuSubContent({
|
|
||||||
loop,
|
|
||||||
onEscapeKeyDown,
|
|
||||||
onPointerDownOutside,
|
|
||||||
onFocusOutside,
|
|
||||||
onInteractOutside,
|
|
||||||
sideOffset,
|
|
||||||
alignOffset,
|
|
||||||
avoidCollisions,
|
|
||||||
collisionBoundary,
|
|
||||||
collisionPadding,
|
|
||||||
arrowPadding,
|
|
||||||
sticky,
|
|
||||||
hideWhenDetached,
|
|
||||||
transition = { duration: 0.2 },
|
|
||||||
style,
|
|
||||||
container,
|
|
||||||
...props
|
|
||||||
}: DropdownMenuSubContentProps) {
|
|
||||||
const { isOpen } = useDropdownMenuSub();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AnimatePresence>
|
|
||||||
{isOpen && (
|
|
||||||
<DropdownMenuPortal forceMount container={container}>
|
|
||||||
<DropdownMenuPrimitive.SubContent
|
|
||||||
asChild
|
|
||||||
forceMount
|
|
||||||
loop={loop}
|
|
||||||
onEscapeKeyDown={onEscapeKeyDown}
|
|
||||||
onPointerDownOutside={onPointerDownOutside}
|
|
||||||
onFocusOutside={onFocusOutside}
|
|
||||||
onInteractOutside={onInteractOutside}
|
|
||||||
sideOffset={sideOffset}
|
|
||||||
alignOffset={alignOffset}
|
|
||||||
avoidCollisions={avoidCollisions}
|
|
||||||
collisionBoundary={collisionBoundary}
|
|
||||||
collisionPadding={collisionPadding}
|
|
||||||
arrowPadding={arrowPadding}
|
|
||||||
sticky={sticky}
|
|
||||||
hideWhenDetached={hideWhenDetached}
|
|
||||||
>
|
|
||||||
<motion.div
|
|
||||||
key="dropdown-menu-sub-content"
|
|
||||||
data-slot="dropdown-menu-sub-content"
|
|
||||||
initial={{ opacity: 0, scale: 0.95 }}
|
|
||||||
animate={{ opacity: 1, scale: 1 }}
|
|
||||||
exit={{ opacity: 0, scale: 0.95 }}
|
|
||||||
transition={transition}
|
|
||||||
style={{ willChange: "opacity, transform", ...style }}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</DropdownMenuPrimitive.SubContent>
|
|
||||||
</DropdownMenuPortal>
|
|
||||||
)}
|
|
||||||
</AnimatePresence>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuContentProps = Omit<
|
|
||||||
React.ComponentProps<typeof DropdownMenuPrimitive.Content>,
|
|
||||||
"forceMount" | "asChild"
|
|
||||||
> &
|
|
||||||
Omit<React.ComponentProps<typeof DropdownMenuPrimitive.Portal>, "forceMount"> &
|
|
||||||
HTMLMotionProps<"div">;
|
|
||||||
|
|
||||||
function DropdownMenuContent({
|
|
||||||
loop,
|
|
||||||
onCloseAutoFocus,
|
|
||||||
onEscapeKeyDown,
|
|
||||||
onPointerDownOutside,
|
|
||||||
onFocusOutside,
|
|
||||||
onInteractOutside,
|
|
||||||
side,
|
|
||||||
sideOffset,
|
|
||||||
align,
|
|
||||||
alignOffset,
|
|
||||||
avoidCollisions,
|
|
||||||
collisionBoundary,
|
|
||||||
collisionPadding,
|
|
||||||
arrowPadding,
|
|
||||||
sticky,
|
|
||||||
hideWhenDetached,
|
|
||||||
transition = { duration: 0.2 },
|
|
||||||
style,
|
|
||||||
container,
|
|
||||||
...props
|
|
||||||
}: DropdownMenuContentProps) {
|
|
||||||
const { isOpen } = useDropdownMenu();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AnimatePresence>
|
|
||||||
{isOpen && (
|
|
||||||
<DropdownMenuPortal forceMount container={container}>
|
|
||||||
<DropdownMenuPrimitive.Content
|
|
||||||
asChild
|
|
||||||
loop={loop}
|
|
||||||
onCloseAutoFocus={onCloseAutoFocus}
|
|
||||||
onEscapeKeyDown={onEscapeKeyDown}
|
|
||||||
onPointerDownOutside={onPointerDownOutside}
|
|
||||||
onFocusOutside={onFocusOutside}
|
|
||||||
onInteractOutside={onInteractOutside}
|
|
||||||
side={side}
|
|
||||||
sideOffset={sideOffset}
|
|
||||||
align={align}
|
|
||||||
alignOffset={alignOffset}
|
|
||||||
avoidCollisions={avoidCollisions}
|
|
||||||
collisionBoundary={collisionBoundary}
|
|
||||||
collisionPadding={collisionPadding}
|
|
||||||
arrowPadding={arrowPadding}
|
|
||||||
sticky={sticky}
|
|
||||||
hideWhenDetached={hideWhenDetached}
|
|
||||||
>
|
|
||||||
<motion.div
|
|
||||||
key="dropdown-menu-content"
|
|
||||||
data-slot="dropdown-menu-content"
|
|
||||||
initial={{ opacity: 0, scale: 0.95 }}
|
|
||||||
animate={{ opacity: 1, scale: 1 }}
|
|
||||||
exit={{ opacity: 0, scale: 0.95 }}
|
|
||||||
transition={transition}
|
|
||||||
style={{ willChange: "opacity, transform", ...style }}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</DropdownMenuPrimitive.Content>
|
|
||||||
</DropdownMenuPortal>
|
|
||||||
)}
|
|
||||||
</AnimatePresence>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuItemProps = Omit<React.ComponentProps<typeof DropdownMenuPrimitive.Item>, "asChild"> &
|
|
||||||
HTMLMotionProps<"div">;
|
|
||||||
|
|
||||||
function DropdownMenuItem({ disabled, onSelect, textValue, ...props }: DropdownMenuItemProps) {
|
|
||||||
return (
|
|
||||||
<DropdownMenuPrimitive.Item disabled={disabled} onSelect={onSelect} textValue={textValue} asChild>
|
|
||||||
<motion.div data-slot="dropdown-menu-item" data-disabled={disabled} {...props} />
|
|
||||||
</DropdownMenuPrimitive.Item>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuCheckboxItemProps = Omit<React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>, "asChild"> &
|
|
||||||
HTMLMotionProps<"div">;
|
|
||||||
|
|
||||||
function DropdownMenuCheckboxItem({
|
|
||||||
checked,
|
|
||||||
onCheckedChange,
|
|
||||||
disabled,
|
|
||||||
onSelect,
|
|
||||||
textValue,
|
|
||||||
...props
|
|
||||||
}: DropdownMenuCheckboxItemProps) {
|
|
||||||
return (
|
|
||||||
<DropdownMenuPrimitive.CheckboxItem
|
|
||||||
checked={checked}
|
|
||||||
onCheckedChange={onCheckedChange}
|
|
||||||
disabled={disabled}
|
|
||||||
onSelect={onSelect}
|
|
||||||
textValue={textValue}
|
|
||||||
asChild
|
|
||||||
>
|
|
||||||
<motion.div data-slot="dropdown-menu-checkbox-item" data-disabled={disabled} {...props} />
|
|
||||||
</DropdownMenuPrimitive.CheckboxItem>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuRadioItemProps = Omit<React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>, "asChild"> &
|
|
||||||
HTMLMotionProps<"div">;
|
|
||||||
|
|
||||||
function DropdownMenuRadioItem({ value, disabled, onSelect, textValue, ...props }: DropdownMenuRadioItemProps) {
|
|
||||||
return (
|
|
||||||
<DropdownMenuPrimitive.RadioItem
|
|
||||||
value={value}
|
|
||||||
disabled={disabled}
|
|
||||||
onSelect={onSelect}
|
|
||||||
textValue={textValue}
|
|
||||||
asChild
|
|
||||||
>
|
|
||||||
<motion.div data-slot="dropdown-menu-radio-item" data-disabled={disabled} {...props} />
|
|
||||||
</DropdownMenuPrimitive.RadioItem>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuLabelProps = React.ComponentProps<typeof DropdownMenuPrimitive.Label>;
|
|
||||||
|
|
||||||
function DropdownMenuLabel(props: DropdownMenuLabelProps) {
|
|
||||||
return <DropdownMenuPrimitive.Label data-slot="dropdown-menu-label" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuSeparatorProps = React.ComponentProps<typeof DropdownMenuPrimitive.Separator>;
|
|
||||||
|
|
||||||
function DropdownMenuSeparator(props: DropdownMenuSeparatorProps) {
|
|
||||||
return <DropdownMenuPrimitive.Separator data-slot="dropdown-menu-separator" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuShortcutProps = React.ComponentProps<"span">;
|
|
||||||
|
|
||||||
function DropdownMenuShortcut(props: DropdownMenuShortcutProps) {
|
|
||||||
return <span data-slot="dropdown-menu-shortcut" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuItemIndicatorProps = Omit<
|
|
||||||
React.ComponentProps<typeof DropdownMenuPrimitive.ItemIndicator>,
|
|
||||||
"asChild"
|
|
||||||
> &
|
|
||||||
HTMLMotionProps<"div">;
|
|
||||||
|
|
||||||
function DropdownMenuItemIndicator(props: DropdownMenuItemIndicatorProps) {
|
|
||||||
return (
|
|
||||||
<DropdownMenuPrimitive.ItemIndicator data-slot="dropdown-menu-item-indicator" asChild>
|
|
||||||
<motion.div {...props} />
|
|
||||||
</DropdownMenuPrimitive.ItemIndicator>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export {
|
|
||||||
DropdownMenu,
|
|
||||||
DropdownMenuTrigger,
|
|
||||||
DropdownMenuContent,
|
|
||||||
DropdownMenuItem,
|
|
||||||
DropdownMenuItemIndicator,
|
|
||||||
DropdownMenuCheckboxItem,
|
|
||||||
DropdownMenuRadioItem,
|
|
||||||
DropdownMenuLabel,
|
|
||||||
DropdownMenuSeparator,
|
|
||||||
DropdownMenuShortcut,
|
|
||||||
DropdownMenuGroup,
|
|
||||||
DropdownMenuPortal,
|
|
||||||
DropdownMenuSub,
|
|
||||||
DropdownMenuSubContent,
|
|
||||||
DropdownMenuSubTrigger,
|
|
||||||
DropdownMenuRadioGroup,
|
|
||||||
useDropdownMenu,
|
|
||||||
useDropdownMenuSub,
|
|
||||||
type DropdownMenuProps,
|
|
||||||
type DropdownMenuTriggerProps,
|
|
||||||
type DropdownMenuContentProps,
|
|
||||||
type DropdownMenuItemProps,
|
|
||||||
type DropdownMenuItemIndicatorProps,
|
|
||||||
type DropdownMenuCheckboxItemProps,
|
|
||||||
type DropdownMenuRadioItemProps,
|
|
||||||
type DropdownMenuLabelProps,
|
|
||||||
type DropdownMenuSeparatorProps,
|
|
||||||
type DropdownMenuShortcutProps,
|
|
||||||
type DropdownMenuGroupProps,
|
|
||||||
type DropdownMenuPortalProps,
|
|
||||||
type DropdownMenuSubProps,
|
|
||||||
type DropdownMenuSubContentProps,
|
|
||||||
type DropdownMenuSubTriggerProps,
|
|
||||||
type DropdownMenuRadioGroupProps,
|
|
||||||
type DropdownMenuContextType,
|
|
||||||
type DropdownMenuSubContextType,
|
|
||||||
};
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
import { type HTMLMotionProps, isMotionComponent, motion } from "motion/react";
|
|
||||||
import * as React from "react";
|
|
||||||
import { cn } from "@/utils/style";
|
|
||||||
|
|
||||||
type AnyProps = Record<string, unknown>;
|
|
||||||
|
|
||||||
type DOMMotionProps<T extends HTMLElement = HTMLElement> = Omit<HTMLMotionProps<keyof HTMLElementTagNameMap>, "ref"> & {
|
|
||||||
ref?: React.Ref<T>;
|
|
||||||
};
|
|
||||||
|
|
||||||
type WithAsChild<Base extends object> =
|
|
||||||
| (Base & { asChild: true; children: React.ReactElement })
|
|
||||||
| (Base & { asChild?: false | undefined });
|
|
||||||
|
|
||||||
type SlotProps<T extends HTMLElement = HTMLElement> = {
|
|
||||||
children?: React.ReactElement;
|
|
||||||
} & DOMMotionProps<T>;
|
|
||||||
|
|
||||||
function mergeRefs<T>(...refs: (React.Ref<T> | undefined)[]): React.RefCallback<T> {
|
|
||||||
return (node) => {
|
|
||||||
refs.forEach((ref) => {
|
|
||||||
if (!ref) return;
|
|
||||||
if (typeof ref === "function") {
|
|
||||||
ref(node);
|
|
||||||
} else {
|
|
||||||
(ref as React.RefObject<T | null>).current = node;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function mergeProps<T extends HTMLElement>(childProps: AnyProps, slotProps: DOMMotionProps<T>): AnyProps {
|
|
||||||
const merged: AnyProps = { ...childProps, ...slotProps };
|
|
||||||
|
|
||||||
if (childProps.className || slotProps.className) {
|
|
||||||
merged.className = cn(childProps.className as string, slotProps.className as string);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (childProps.style || slotProps.style) {
|
|
||||||
merged.style = {
|
|
||||||
...(childProps.style as React.CSSProperties),
|
|
||||||
...(slotProps.style as React.CSSProperties),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return merged;
|
|
||||||
}
|
|
||||||
|
|
||||||
function Slot<T extends HTMLElement = HTMLElement>({ children, ref, ...props }: SlotProps<T>) {
|
|
||||||
const isAlreadyMotion =
|
|
||||||
children && typeof children.type === "object" && children.type !== null && isMotionComponent(children.type);
|
|
||||||
|
|
||||||
const Base = React.useMemo(
|
|
||||||
() => (isAlreadyMotion ? (children.type as React.ElementType) : motion.create(children?.type as React.ElementType)),
|
|
||||||
[isAlreadyMotion, children],
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!React.isValidElement(children)) return null;
|
|
||||||
|
|
||||||
const { ref: childRef, ...childProps } = children.props as AnyProps;
|
|
||||||
|
|
||||||
const mergedProps = mergeProps(childProps, props);
|
|
||||||
|
|
||||||
return <Base {...mergedProps} ref={mergeRefs(childRef as React.Ref<T>, ref)} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
export { Slot, type SlotProps, type WithAsChild, type DOMMotionProps, type AnyProps };
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
import { type HTMLMotionProps, motion, type TargetAndTransition, type VariantLabels } from "motion/react";
|
|
||||||
import { Switch as SwitchPrimitives } from "radix-ui";
|
|
||||||
import * as React from "react";
|
|
||||||
import { useControlledState } from "@/hooks/use-controlled-state";
|
|
||||||
import { getStrictContext } from "@/utils/get-strict-context";
|
|
||||||
|
|
||||||
type SwitchContextType = {
|
|
||||||
isChecked: boolean;
|
|
||||||
setIsChecked: (isChecked: boolean) => void;
|
|
||||||
isPressed: boolean;
|
|
||||||
setIsPressed: (isPressed: boolean) => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
const [SwitchProvider, useSwitch] = getStrictContext<SwitchContextType>("SwitchContext");
|
|
||||||
|
|
||||||
type SwitchProps = Omit<React.ComponentProps<typeof SwitchPrimitives.Root>, "asChild"> & HTMLMotionProps<"button">;
|
|
||||||
|
|
||||||
function Switch(props: SwitchProps) {
|
|
||||||
const [isPressed, setIsPressed] = React.useState(false);
|
|
||||||
const { checked, defaultChecked, onCheckedChange, ...restProps } = props;
|
|
||||||
|
|
||||||
const [isChecked, setIsChecked] = useControlledState({
|
|
||||||
value: checked,
|
|
||||||
defaultValue: defaultChecked,
|
|
||||||
onChange: onCheckedChange,
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
|
||||||
<SwitchProvider value={{ isChecked, setIsChecked, isPressed, setIsPressed }}>
|
|
||||||
<SwitchPrimitives.Root
|
|
||||||
{...restProps}
|
|
||||||
asChild
|
|
||||||
checked={isChecked}
|
|
||||||
defaultChecked={defaultChecked}
|
|
||||||
onCheckedChange={setIsChecked}
|
|
||||||
>
|
|
||||||
<motion.button
|
|
||||||
{...restProps}
|
|
||||||
whileTap="tap"
|
|
||||||
initial={false}
|
|
||||||
data-slot="switch"
|
|
||||||
onTap={() => setIsPressed(false)}
|
|
||||||
onTapStart={() => setIsPressed(true)}
|
|
||||||
onTapCancel={() => setIsPressed(false)}
|
|
||||||
/>
|
|
||||||
</SwitchPrimitives.Root>
|
|
||||||
</SwitchProvider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type SwitchThumbProps = Omit<React.ComponentProps<typeof SwitchPrimitives.Thumb>, "asChild"> &
|
|
||||||
HTMLMotionProps<"div"> & {
|
|
||||||
pressedAnimation?: TargetAndTransition | VariantLabels | boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
function SwitchThumb({
|
|
||||||
pressedAnimation,
|
|
||||||
transition = { type: "spring", stiffness: 300, damping: 25 },
|
|
||||||
...props
|
|
||||||
}: SwitchThumbProps) {
|
|
||||||
const { isPressed } = useSwitch();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<SwitchPrimitives.Thumb asChild>
|
|
||||||
<motion.div
|
|
||||||
layout
|
|
||||||
whileTap="tab"
|
|
||||||
data-slot="switch-thumb"
|
|
||||||
transition={transition}
|
|
||||||
animate={isPressed ? pressedAnimation : undefined}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</SwitchPrimitives.Thumb>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type SwitchIconPosition = "left" | "right" | "thumb";
|
|
||||||
|
|
||||||
type SwitchIconProps = HTMLMotionProps<"div"> & {
|
|
||||||
position: SwitchIconPosition;
|
|
||||||
};
|
|
||||||
|
|
||||||
function SwitchIcon({ position, transition = { type: "spring", bounce: 0 }, ...props }: SwitchIconProps) {
|
|
||||||
const { isChecked } = useSwitch();
|
|
||||||
|
|
||||||
const isAnimated = React.useMemo(() => {
|
|
||||||
if (position === "right") return !isChecked;
|
|
||||||
if (position === "left") return isChecked;
|
|
||||||
if (position === "thumb") return true;
|
|
||||||
return false;
|
|
||||||
}, [position, isChecked]);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<motion.div
|
|
||||||
data-slot={`switch-${position}-icon`}
|
|
||||||
animate={isAnimated ? { scale: 1, opacity: 1 } : { scale: 0, opacity: 0 }}
|
|
||||||
transition={transition}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export {
|
|
||||||
Switch,
|
|
||||||
SwitchThumb,
|
|
||||||
SwitchIcon,
|
|
||||||
useSwitch,
|
|
||||||
type SwitchProps,
|
|
||||||
type SwitchThumbProps,
|
|
||||||
type SwitchIconProps,
|
|
||||||
type SwitchIconPosition,
|
|
||||||
type SwitchContextType,
|
|
||||||
};
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import { useLingui } from "@lingui/react";
|
import { useLingui } from "@lingui/react";
|
||||||
import { useRouter } from "@tanstack/react-router";
|
import { useRouter } from "@tanstack/react-router";
|
||||||
import { isTheme, setThemeServerFn, themeMap } from "@/utils/theme";
|
import { isTheme, setThemeServerFn, themeMap } from "@/utils/theme";
|
||||||
import { Combobox, type ComboboxProps } from "../ui/combobox";
|
import { Combobox, type SingleComboboxProps } from "../ui/combobox";
|
||||||
import { useTheme } from "./provider";
|
import { useTheme } from "./provider";
|
||||||
|
|
||||||
type Props = Omit<ComboboxProps, "options" | "value" | "onValueChange">;
|
type Props = Omit<SingleComboboxProps, "options" | "value" | "onValueChange">;
|
||||||
|
|
||||||
export function ThemeCombobox(props: Props) {
|
export function ThemeCombobox(props: Props) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -24,5 +24,5 @@ export function ThemeCombobox(props: Props) {
|
|||||||
router.invalidate();
|
router.invalidate();
|
||||||
};
|
};
|
||||||
|
|
||||||
return <Combobox options={options} defaultValue={theme} onValueChange={onThemeChange} {...props} />;
|
return <Combobox {...props} showClear={false} options={options} defaultValue={theme} onValueChange={onThemeChange} />;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { useMemo } from "react";
|
import { useMemo } from "react";
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
import { Combobox, type ComboboxProps } from "../ui/combobox";
|
import { Combobox, type MultiComboboxProps, type SingleComboboxProps } from "../ui/combobox";
|
||||||
import { MultipleCombobox, type MultipleComboboxProps } from "../ui/multiple-combobox";
|
|
||||||
import { FontDisplay } from "./font-display";
|
import { FontDisplay } from "./font-display";
|
||||||
import type { LocalFont, WebFont } from "./types";
|
import type { LocalFont, WebFont } from "./types";
|
||||||
import webFontListJSON from "./webfontlist.json";
|
import webFontListJSON from "./webfontlist.json";
|
||||||
@@ -61,7 +60,7 @@ export function getNextWeights(fontFamily: string): Weight[] | null {
|
|||||||
return weights.length > 0 ? weights : null;
|
return weights.length > 0 ? weights : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
type FontFamilyComboboxProps = Omit<ComboboxProps, "options">;
|
type FontFamilyComboboxProps = Omit<SingleComboboxProps, "options">;
|
||||||
|
|
||||||
export function FontFamilyCombobox({ className, ...props }: FontFamilyComboboxProps) {
|
export function FontFamilyCombobox({ className, ...props }: FontFamilyComboboxProps) {
|
||||||
const options = useMemo(() => {
|
const options = useMemo(() => {
|
||||||
@@ -72,10 +71,10 @@ export function FontFamilyCombobox({ className, ...props }: FontFamilyComboboxPr
|
|||||||
}));
|
}));
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return <Combobox options={options} className={cn("w-full", className)} {...props} />;
|
return <Combobox {...props} options={options} className={cn("w-full", className)} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
type FontWeightComboboxProps = Omit<MultipleComboboxProps, "options"> & { fontFamily: string };
|
type FontWeightComboboxProps = Omit<MultiComboboxProps, "options" | "multiple"> & { fontFamily: string };
|
||||||
|
|
||||||
export function FontWeightCombobox({ fontFamily, ...props }: FontWeightComboboxProps) {
|
export function FontWeightCombobox({ fontFamily, ...props }: FontWeightComboboxProps) {
|
||||||
const options = useMemo(() => {
|
const options = useMemo(() => {
|
||||||
@@ -100,5 +99,5 @@ export function FontWeightCombobox({ fontFamily, ...props }: FontWeightComboboxP
|
|||||||
}));
|
}));
|
||||||
}, [fontFamily]);
|
}, [fontFamily]);
|
||||||
|
|
||||||
return <MultipleCombobox options={options} {...props} />;
|
return <Combobox {...props} multiple options={options} />;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,63 +1,52 @@
|
|||||||
import {
|
import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion";
|
||||||
AccordionContent as AccordionContentPrimitive,
|
import { CaretUpIcon } from "@phosphor-icons/react";
|
||||||
type AccordionContentProps as AccordionContentPrimitiveProps,
|
|
||||||
AccordionHeader as AccordionHeaderPrimitive,
|
|
||||||
AccordionItem as AccordionItemPrimitive,
|
|
||||||
type AccordionItemProps as AccordionItemPrimitiveProps,
|
|
||||||
Accordion as AccordionPrimitive,
|
|
||||||
type AccordionProps as AccordionPrimitiveProps,
|
|
||||||
AccordionTrigger as AccordionTriggerPrimitive,
|
|
||||||
type AccordionTriggerProps as AccordionTriggerPrimitiveProps,
|
|
||||||
} from "@/components/primitives/accordion";
|
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
type AccordionProps = AccordionPrimitiveProps;
|
function Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {
|
||||||
|
return <AccordionPrimitive.Root data-slot="accordion" className={cn("flex w-full flex-col", className)} {...props} />;
|
||||||
function Accordion(props: AccordionProps) {
|
|
||||||
return <AccordionPrimitive {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type AccordionItemProps = AccordionItemPrimitiveProps;
|
function AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {
|
||||||
|
|
||||||
function AccordionItem({ className, ...props }: AccordionItemProps) {
|
|
||||||
return <AccordionItemPrimitive className={cn(className)} {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type AccordionTriggerProps = AccordionTriggerPrimitiveProps;
|
|
||||||
|
|
||||||
function AccordionTrigger({ className, children, ...props }: AccordionTriggerProps) {
|
|
||||||
return (
|
return (
|
||||||
<AccordionHeaderPrimitive className="flex">
|
<AccordionPrimitive.Item data-slot="accordion-item" className={cn("not-last:border-b", className)} {...props} />
|
||||||
<AccordionTriggerPrimitive
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function AccordionTrigger({ className, children, ...props }: AccordionPrimitive.Trigger.Props) {
|
||||||
|
return (
|
||||||
|
<AccordionPrimitive.Header className="flex">
|
||||||
|
<AccordionPrimitive.Trigger
|
||||||
|
data-slot="accordion-trigger"
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-start font-medium text-sm outline-none transition-all hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=closed]>svg]:rotate-0 [&[data-state=open]>svg]:rotate-90 [&[data-state=open]>svg]:transition-transform",
|
"group/accordion-trigger relative flex flex-1 items-start justify-between rounded-md border border-transparent py-4 text-left font-medium text-sm outline-none transition-all hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</AccordionTriggerPrimitive>
|
<CaretUpIcon data-slot="accordion-trigger-icon" className="pointer-events-none shrink-0" />
|
||||||
</AccordionHeaderPrimitive>
|
</AccordionPrimitive.Trigger>
|
||||||
|
</AccordionPrimitive.Header>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type AccordionContentProps = AccordionContentPrimitiveProps;
|
function AccordionContent({ className, children, ...props }: AccordionPrimitive.Panel.Props) {
|
||||||
|
|
||||||
function AccordionContent({ className, children, ...props }: AccordionContentProps) {
|
|
||||||
return (
|
return (
|
||||||
<AccordionContentPrimitive {...props}>
|
<AccordionPrimitive.Panel
|
||||||
<div className={cn("pt-0 pb-4 text-sm", className)}>{children}</div>
|
data-slot="accordion-content"
|
||||||
</AccordionContentPrimitive>
|
className="overflow-hidden text-sm data-closed:animate-accordion-up data-open:animate-accordion-down"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className={cn(
|
||||||
|
"h-(--accordion-panel-height) pt-0 pb-4 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
</AccordionPrimitive.Panel>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
|
||||||
Accordion,
|
|
||||||
AccordionItem,
|
|
||||||
AccordionTrigger,
|
|
||||||
AccordionContent,
|
|
||||||
type AccordionProps,
|
|
||||||
type AccordionItemProps,
|
|
||||||
type AccordionTriggerProps,
|
|
||||||
type AccordionContentProps,
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -1,124 +1,155 @@
|
|||||||
import {
|
import { AlertDialog as AlertDialogPrimitive } from "@base-ui/react/alert-dialog";
|
||||||
AlertDialogAction as AlertDialogActionPrimitive,
|
import type * as React from "react";
|
||||||
type AlertDialogActionProps as AlertDialogActionPrimitiveProps,
|
import { Button } from "@/components/ui/button";
|
||||||
AlertDialogCancel as AlertDialogCancelPrimitive,
|
|
||||||
type AlertDialogCancelProps as AlertDialogCancelPrimitiveProps,
|
|
||||||
AlertDialogContent as AlertDialogContentPrimitive,
|
|
||||||
type AlertDialogContentProps as AlertDialogContentPrimitiveProps,
|
|
||||||
AlertDialogDescription as AlertDialogDescriptionPrimitive,
|
|
||||||
type AlertDialogDescriptionProps as AlertDialogDescriptionPrimitiveProps,
|
|
||||||
AlertDialogFooter as AlertDialogFooterPrimitive,
|
|
||||||
type AlertDialogFooterProps as AlertDialogFooterPrimitiveProps,
|
|
||||||
AlertDialogHeader as AlertDialogHeaderPrimitive,
|
|
||||||
type AlertDialogHeaderProps as AlertDialogHeaderPrimitiveProps,
|
|
||||||
AlertDialogOverlay as AlertDialogOverlayPrimitive,
|
|
||||||
type AlertDialogOverlayProps as AlertDialogOverlayPrimitiveProps,
|
|
||||||
AlertDialogPortal as AlertDialogPortalPrimitive,
|
|
||||||
AlertDialog as AlertDialogPrimitive,
|
|
||||||
type AlertDialogProps as AlertDialogPrimitiveProps,
|
|
||||||
AlertDialogTitle as AlertDialogTitlePrimitive,
|
|
||||||
type AlertDialogTitleProps as AlertDialogTitlePrimitiveProps,
|
|
||||||
AlertDialogTrigger as AlertDialogTriggerPrimitive,
|
|
||||||
type AlertDialogTriggerProps as AlertDialogTriggerPrimitiveProps,
|
|
||||||
} from "@/components/primitives/alert-dialog";
|
|
||||||
import { buttonVariants } from "@/components/ui/button";
|
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
type AlertDialogProps = AlertDialogPrimitiveProps;
|
function AlertDialog({ ...props }: AlertDialogPrimitive.Root.Props) {
|
||||||
|
return <AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} />;
|
||||||
function AlertDialog(props: AlertDialogProps) {
|
|
||||||
return <AlertDialogPrimitive {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type AlertDialogTriggerProps = AlertDialogTriggerPrimitiveProps;
|
function AlertDialogTrigger({ ...props }: AlertDialogPrimitive.Trigger.Props) {
|
||||||
|
return <AlertDialogPrimitive.Trigger data-slot="alert-dialog-trigger" {...props} />;
|
||||||
function AlertDialogTrigger(props: AlertDialogTriggerProps) {
|
|
||||||
return <AlertDialogTriggerPrimitive {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type AlertDialogOverlayProps = AlertDialogOverlayPrimitiveProps;
|
function AlertDialogPortal({ ...props }: AlertDialogPrimitive.Portal.Props) {
|
||||||
|
return <AlertDialogPrimitive.Portal data-slot="alert-dialog-portal" {...props} />;
|
||||||
function AlertDialogOverlay({ className, ...props }: AlertDialogOverlayProps) {
|
|
||||||
return <AlertDialogOverlayPrimitive className={cn("fixed inset-0 z-50 bg-black/50", className)} {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type AlertDialogContentProps = AlertDialogContentPrimitiveProps;
|
function AlertDialogOverlay({ className, ...props }: AlertDialogPrimitive.Backdrop.Props) {
|
||||||
|
|
||||||
function AlertDialogContent({ className, ...props }: AlertDialogContentProps) {
|
|
||||||
return (
|
return (
|
||||||
<AlertDialogPortalPrimitive>
|
<AlertDialogPrimitive.Backdrop
|
||||||
<AlertDialogOverlay />
|
data-slot="alert-dialog-overlay"
|
||||||
<AlertDialogContentPrimitive
|
className={cn(
|
||||||
className={cn(
|
"data-open:fade-in-0 data-closed:fade-out-0 fixed inset-0 isolate z-50 bg-black/10 duration-100 data-closed:animate-out data-open:animate-in supports-backdrop-filter:backdrop-blur-xs",
|
||||||
"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg sm:max-w-lg",
|
className,
|
||||||
className,
|
)}
|
||||||
)}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</AlertDialogPortalPrimitive>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogHeaderProps = AlertDialogHeaderPrimitiveProps;
|
|
||||||
|
|
||||||
function AlertDialogHeader({ className, ...props }: AlertDialogHeaderProps) {
|
|
||||||
return (
|
|
||||||
<AlertDialogHeaderPrimitive className={cn("flex flex-col gap-2 text-center sm:text-start", className)} {...props} />
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertDialogFooterProps = AlertDialogFooterPrimitiveProps;
|
|
||||||
|
|
||||||
function AlertDialogFooter({ className, ...props }: AlertDialogFooterProps) {
|
|
||||||
return (
|
|
||||||
<AlertDialogFooterPrimitive
|
|
||||||
className={cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className)}
|
|
||||||
{...props}
|
{...props}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type AlertDialogTitleProps = AlertDialogTitlePrimitiveProps;
|
function AlertDialogContent({
|
||||||
|
className,
|
||||||
function AlertDialogTitle({ className, ...props }: AlertDialogTitleProps) {
|
size = "default",
|
||||||
return <AlertDialogTitlePrimitive className={cn("font-semibold text-lg", className)} {...props} />;
|
...props
|
||||||
|
}: AlertDialogPrimitive.Popup.Props & {
|
||||||
|
size?: "default" | "sm";
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<AlertDialogPortal>
|
||||||
|
<AlertDialogOverlay />
|
||||||
|
<AlertDialogPrimitive.Popup
|
||||||
|
data-slot="alert-dialog-content"
|
||||||
|
data-size={size}
|
||||||
|
className={cn(
|
||||||
|
"group/alert-dialog-content data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-6 rounded-xl bg-background p-6 outline-none ring-1 ring-foreground/10 duration-100 data-[size=default]:max-w-2xl data-[size=sm]:max-w-sm data-closed:animate-out data-open:animate-in data-[size=default]:sm:max-w-lg",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
</AlertDialogPortal>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type AlertDialogDescriptionProps = AlertDialogDescriptionPrimitiveProps;
|
function AlertDialogHeader({ className, ...props }: React.ComponentProps<"div">) {
|
||||||
|
return (
|
||||||
function AlertDialogDescription({ className, ...props }: AlertDialogDescriptionProps) {
|
<div
|
||||||
return <AlertDialogDescriptionPrimitive className={cn("text-muted-foreground text-sm", className)} {...props} />;
|
data-slot="alert-dialog-header"
|
||||||
|
className={cn(
|
||||||
|
"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type AlertDialogActionProps = AlertDialogActionPrimitiveProps;
|
function AlertDialogFooter({ className, ...props }: React.ComponentProps<"div">) {
|
||||||
|
return (
|
||||||
function AlertDialogAction({ className, ...props }: AlertDialogActionPrimitiveProps) {
|
<div
|
||||||
return <AlertDialogActionPrimitive className={cn(buttonVariants(), className)} {...props} />;
|
data-slot="alert-dialog-footer"
|
||||||
|
className={cn(
|
||||||
|
"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type AlertDialogCancelProps = AlertDialogCancelPrimitiveProps;
|
function AlertDialogMedia({ className, ...props }: React.ComponentProps<"div">) {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
data-slot="alert-dialog-media"
|
||||||
|
className={cn(
|
||||||
|
"mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function AlertDialogCancel({ className, ...props }: AlertDialogCancelPrimitiveProps) {
|
function AlertDialogTitle({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {
|
||||||
return <AlertDialogCancelPrimitive className={cn(buttonVariants({ variant: "outline" }), className)} {...props} />;
|
return (
|
||||||
|
<AlertDialogPrimitive.Title
|
||||||
|
data-slot="alert-dialog-title"
|
||||||
|
className={cn(
|
||||||
|
"font-medium text-lg sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function AlertDialogDescription({
|
||||||
|
className,
|
||||||
|
...props
|
||||||
|
}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {
|
||||||
|
return (
|
||||||
|
<AlertDialogPrimitive.Description
|
||||||
|
data-slot="alert-dialog-description"
|
||||||
|
className={cn(
|
||||||
|
"text-balance text-muted-foreground text-sm md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function AlertDialogAction({ className, ...props }: React.ComponentProps<typeof Button>) {
|
||||||
|
return <Button data-slot="alert-dialog-action" className={cn(className)} {...props} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
function AlertDialogCancel({
|
||||||
|
className,
|
||||||
|
variant = "outline",
|
||||||
|
size = "default",
|
||||||
|
...props
|
||||||
|
}: AlertDialogPrimitive.Close.Props & Pick<React.ComponentProps<typeof Button>, "variant" | "size">) {
|
||||||
|
return (
|
||||||
|
<AlertDialogPrimitive.Close
|
||||||
|
data-slot="alert-dialog-cancel"
|
||||||
|
className={cn(className)}
|
||||||
|
render={<Button variant={variant} size={size} />}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
AlertDialog,
|
AlertDialog,
|
||||||
AlertDialogTrigger,
|
|
||||||
AlertDialogContent,
|
|
||||||
AlertDialogHeader,
|
|
||||||
AlertDialogFooter,
|
|
||||||
AlertDialogTitle,
|
|
||||||
AlertDialogDescription,
|
|
||||||
AlertDialogAction,
|
AlertDialogAction,
|
||||||
AlertDialogCancel,
|
AlertDialogCancel,
|
||||||
type AlertDialogProps,
|
AlertDialogContent,
|
||||||
type AlertDialogTriggerProps,
|
AlertDialogDescription,
|
||||||
type AlertDialogContentProps,
|
AlertDialogFooter,
|
||||||
type AlertDialogHeaderProps,
|
AlertDialogHeader,
|
||||||
type AlertDialogFooterProps,
|
AlertDialogMedia,
|
||||||
type AlertDialogTitleProps,
|
AlertDialogOverlay,
|
||||||
type AlertDialogDescriptionProps,
|
AlertDialogPortal,
|
||||||
type AlertDialogActionProps,
|
AlertDialogTitle,
|
||||||
type AlertDialogCancelProps,
|
AlertDialogTrigger,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -52,4 +52,4 @@ function AlertAction({ className, ...props }: React.ComponentProps<"div">) {
|
|||||||
return <div data-slot="alert-action" className={cn("absolute inset-e-3 top-2.5", className)} {...props} />;
|
return <div data-slot="alert-action" className={cn("absolute inset-e-3 top-2.5", className)} {...props} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
export { Alert, AlertTitle, AlertDescription, AlertAction };
|
export { Alert, AlertAction, AlertDescription, AlertTitle };
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Avatar as AvatarPrimitive } from "radix-ui";
|
import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
|
||||||
import type * as React from "react";
|
import type * as React from "react";
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
@@ -6,7 +6,7 @@ function Avatar({
|
|||||||
className,
|
className,
|
||||||
size = "default",
|
size = "default",
|
||||||
...props
|
...props
|
||||||
}: React.ComponentProps<typeof AvatarPrimitive.Root> & {
|
}: AvatarPrimitive.Root.Props & {
|
||||||
size?: "default" | "sm" | "lg";
|
size?: "default" | "sm" | "lg";
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
@@ -22,7 +22,7 @@ function Avatar({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function AvatarImage({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Image>) {
|
function AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props) {
|
||||||
return (
|
return (
|
||||||
<AvatarPrimitive.Image
|
<AvatarPrimitive.Image
|
||||||
data-slot="avatar-image"
|
data-slot="avatar-image"
|
||||||
@@ -32,7 +32,7 @@ function AvatarImage({ className, ...props }: React.ComponentProps<typeof Avatar
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function AvatarFallback({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
|
function AvatarFallback({ className, ...props }: AvatarPrimitive.Fallback.Props) {
|
||||||
return (
|
return (
|
||||||
<AvatarPrimitive.Fallback
|
<AvatarPrimitive.Fallback
|
||||||
data-slot="avatar-fallback"
|
data-slot="avatar-fallback"
|
||||||
@@ -87,4 +87,4 @@ function AvatarGroupCount({ className, ...props }: React.ComponentProps<"div">)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { Avatar, AvatarImage, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarBadge };
|
export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage };
|
||||||
|
|||||||
+11
-10
@@ -1,6 +1,6 @@
|
|||||||
|
import { mergeProps } from "@base-ui/react/merge-props";
|
||||||
|
import { useRender } from "@base-ui/react/use-render";
|
||||||
import { cva, type VariantProps } from "class-variance-authority";
|
import { cva, type VariantProps } from "class-variance-authority";
|
||||||
import { Slot } from "radix-ui";
|
|
||||||
import type * as React from "react";
|
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
const badgeVariants = cva(
|
const badgeVariants = cva(
|
||||||
@@ -26,14 +26,15 @@ const badgeVariants = cva(
|
|||||||
function Badge({
|
function Badge({
|
||||||
className,
|
className,
|
||||||
variant = "default",
|
variant = "default",
|
||||||
asChild = false,
|
render,
|
||||||
...props
|
...props
|
||||||
}: React.ComponentProps<"span"> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
|
}: useRender.ComponentProps<"span"> & VariantProps<typeof badgeVariants>) {
|
||||||
const Comp = asChild ? Slot.Root : "span";
|
return useRender({
|
||||||
|
render,
|
||||||
return (
|
defaultTagName: "span",
|
||||||
<Comp data-slot="badge" data-variant={variant} className={cn(badgeVariants({ variant }), className)} {...props} />
|
state: { slot: "badge", variant },
|
||||||
);
|
props: mergeProps<"span">({ className: cn(badgeVariants({ variant }), className) }, props),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export { Badge };
|
export { Badge, badgeVariants };
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
|
import { mergeProps } from "@base-ui/react/merge-props";
|
||||||
|
import { useRender } from "@base-ui/react/use-render";
|
||||||
import { cva, type VariantProps } from "class-variance-authority";
|
import { cva, type VariantProps } from "class-variance-authority";
|
||||||
import { Slot } from "radix-ui";
|
|
||||||
import { Separator } from "@/components/ui/separator";
|
import { Separator } from "@/components/ui/separator";
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
@@ -9,9 +10,9 @@ const buttonGroupVariants = cva(
|
|||||||
variants: {
|
variants: {
|
||||||
orientation: {
|
orientation: {
|
||||||
horizontal:
|
horizontal:
|
||||||
"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-s-0 [&>*:not(:last-child)]:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-md!",
|
"*:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-md! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0",
|
||||||
vertical:
|
vertical:
|
||||||
"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-md!",
|
"flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-md! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
defaultVariants: {
|
defaultVariants: {
|
||||||
@@ -36,24 +37,21 @@ function ButtonGroup({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ButtonGroupText({
|
function ButtonGroupText({ className, render, ...props }: useRender.ComponentProps<"div">) {
|
||||||
className,
|
return useRender({
|
||||||
asChild = false,
|
render,
|
||||||
...props
|
defaultTagName: "div",
|
||||||
}: React.ComponentProps<"div"> & {
|
state: { slot: "button-group-text" },
|
||||||
asChild?: boolean;
|
props: mergeProps<"div">(
|
||||||
}) {
|
{
|
||||||
const Comp = asChild ? Slot.Root : "div";
|
className: cn(
|
||||||
|
"flex items-center gap-2 rounded-md border bg-muted px-2.5 font-medium text-sm shadow-xs [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none",
|
||||||
return (
|
className,
|
||||||
<Comp
|
),
|
||||||
className={cn(
|
},
|
||||||
"flex items-center gap-2 rounded-md border bg-muted px-2.5 font-medium text-sm shadow-xs [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none",
|
props,
|
||||||
className,
|
),
|
||||||
)}
|
});
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function ButtonGroupSeparator({
|
function ButtonGroupSeparator({
|
||||||
@@ -66,7 +64,7 @@ function ButtonGroupSeparator({
|
|||||||
data-slot="button-group-separator"
|
data-slot="button-group-separator"
|
||||||
orientation={orientation}
|
orientation={orientation}
|
||||||
className={cn(
|
className={cn(
|
||||||
"relative self-stretch bg-input data-[orientation=horizontal]:mx-px data-[orientation=vertical]:my-px data-[orientation=vertical]:h-auto data-[orientation=horizontal]:w-auto",
|
"relative self-stretch bg-input data-horizontal:mx-px data-vertical:my-px data-vertical:h-auto data-horizontal:w-auto",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
@@ -74,4 +72,4 @@ function ButtonGroupSeparator({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { ButtonGroup, ButtonGroupSeparator, ButtonGroupText };
|
export { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants };
|
||||||
|
|||||||
@@ -1,28 +1,31 @@
|
|||||||
|
import { Button as ButtonPrimitive } from "@base-ui/react/button";
|
||||||
import { cva, type VariantProps } from "class-variance-authority";
|
import { cva, type VariantProps } from "class-variance-authority";
|
||||||
import { Button as ButtonPrimitive, type ButtonProps as ButtonPrimitiveProps } from "@/components/primitives/button";
|
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
const buttonVariants = cva(
|
const buttonVariants = cva(
|
||||||
"inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium text-sm outline-none transition-[box-shadow,color,background-color,border-color,outline-color,text-decoration-color,fill,stroke] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
"group/button inline-flex shrink-0 cursor-pointer select-none items-center justify-center whitespace-nowrap rounded-md border border-transparent bg-clip-padding font-medium text-sm outline-none transition-all focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||||
{
|
{
|
||||||
variants: {
|
variants: {
|
||||||
variant: {
|
variant: {
|
||||||
default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
|
default: "bg-primary text-primary-foreground hover:bg-primary/80",
|
||||||
accent: "bg-accent text-accent-foreground shadow-xs hover:bg-accent/90",
|
outline: "border-border bg-background shadow-xs hover:bg-muted hover:text-foreground",
|
||||||
|
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
||||||
|
ghost: "hover:bg-muted hover:text-foreground",
|
||||||
destructive:
|
destructive:
|
||||||
"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
|
"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
|
||||||
outline: "border bg-background shadow-xs hover:bg-secondary/40 hover:text-secondary-foreground",
|
|
||||||
secondary: "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
|
|
||||||
ghost: "hover:bg-secondary/40 hover:text-secondary-foreground",
|
|
||||||
link: "text-primary underline-offset-4 hover:underline",
|
link: "text-primary underline-offset-4 hover:underline",
|
||||||
},
|
},
|
||||||
size: {
|
size: {
|
||||||
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
default:
|
||||||
sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
|
"h-9 gap-1.5 in-data-[slot=button-group]:rounded-md px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
||||||
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
xs: "h-6 gap-1 in-data-[slot=button-group]:rounded-md rounded-[min(var(--radius-md),8px)] px-2 text-xs has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
|
||||||
|
sm: "h-8 gap-1 in-data-[slot=button-group]:rounded-md rounded-[min(var(--radius-md),10px)] px-2.5 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",
|
||||||
|
lg: "h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
|
||||||
icon: "size-9",
|
icon: "size-9",
|
||||||
"icon-sm": "size-8 rounded-md",
|
"icon-xs":
|
||||||
"icon-lg": "size-10 rounded-md",
|
"size-6 in-data-[slot=button-group]:rounded-md rounded-[min(var(--radius-md),8px)] [&_svg:not([class*='size-'])]:size-3",
|
||||||
|
"icon-sm": "size-8 in-data-[slot=button-group]:rounded-md rounded-[min(var(--radius-md),10px)]",
|
||||||
|
"icon-lg": "size-10",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
defaultVariants: {
|
defaultVariants: {
|
||||||
@@ -32,10 +35,10 @@ const buttonVariants = cva(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
type ButtonProps = ButtonPrimitiveProps & VariantProps<typeof buttonVariants>;
|
type ButtonProps = ButtonPrimitive.Props & VariantProps<typeof buttonVariants>;
|
||||||
|
|
||||||
function Button({ className, variant, size, type = "button", ...props }: ButtonProps) {
|
function Button({ className, variant = "default", size = "default", ...props }: ButtonProps) {
|
||||||
return <ButtonPrimitive type={type} className={cn(buttonVariants({ variant, size, className }))} {...props} />;
|
return <ButtonPrimitive data-slot="button" className={cn(buttonVariants({ variant, size, className }))} {...props} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
export { Button, buttonVariants, type ButtonProps };
|
export { Button, type ButtonProps, buttonVariants };
|
||||||
|
|||||||
+416
-125
@@ -1,12 +1,252 @@
|
|||||||
|
import { Combobox as ComboboxPrimitive, type ComboboxTriggerState, type UseRenderRenderProp } from "@base-ui/react";
|
||||||
import { t } from "@lingui/core/macro";
|
import { t } from "@lingui/core/macro";
|
||||||
import { CaretUpDownIcon, CheckIcon } from "@phosphor-icons/react";
|
import { CaretDownIcon, CheckIcon, XIcon } from "@phosphor-icons/react";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "@/components/ui/command";
|
import { Input } from "@/components/ui/input";
|
||||||
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
|
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "@/components/ui/input-group";
|
||||||
import { useControlledState } from "@/hooks/use-controlled-state";
|
import { useControlledState } from "@/hooks/use-controlled-state";
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
|
const ComboboxRoot = ComboboxPrimitive.Root;
|
||||||
|
|
||||||
|
function ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {
|
||||||
|
return <ComboboxPrimitive.Value data-slot="combobox-value" {...props} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxTrigger({ className, children, ...props }: ComboboxPrimitive.Trigger.Props) {
|
||||||
|
return (
|
||||||
|
<ComboboxPrimitive.Trigger
|
||||||
|
data-slot="combobox-trigger"
|
||||||
|
className={cn("shrink-0 [&_svg:not([class*='size-'])]:size-4", className)}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
<CaretDownIcon className="pointer-events-none size-4 text-muted-foreground" />
|
||||||
|
</ComboboxPrimitive.Trigger>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) {
|
||||||
|
return (
|
||||||
|
<ComboboxPrimitive.Clear
|
||||||
|
data-slot="combobox-clear"
|
||||||
|
className={cn(className)}
|
||||||
|
{...props}
|
||||||
|
render={
|
||||||
|
<InputGroupButton variant="ghost" size="icon-xs">
|
||||||
|
<XIcon className="pointer-events-none" />
|
||||||
|
</InputGroupButton>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxInput({
|
||||||
|
className,
|
||||||
|
children,
|
||||||
|
disabled = false,
|
||||||
|
showTrigger = true,
|
||||||
|
showClear = false,
|
||||||
|
...props
|
||||||
|
}: ComboboxPrimitive.Input.Props & {
|
||||||
|
showTrigger?: boolean;
|
||||||
|
showClear?: boolean;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<InputGroup className={cn("w-auto", className)}>
|
||||||
|
<ComboboxPrimitive.Input render={<InputGroupInput disabled={disabled} />} {...props} />
|
||||||
|
<InputGroupAddon align="inline-end">
|
||||||
|
{showTrigger && (
|
||||||
|
<InputGroupButton
|
||||||
|
size="icon-xs"
|
||||||
|
variant="ghost"
|
||||||
|
render={<ComboboxTrigger />}
|
||||||
|
data-slot="input-group-button"
|
||||||
|
className="group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent"
|
||||||
|
disabled={disabled}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
{showClear && <ComboboxClear disabled={disabled} />}
|
||||||
|
</InputGroupAddon>
|
||||||
|
{children}
|
||||||
|
</InputGroup>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxContent({
|
||||||
|
className,
|
||||||
|
side = "bottom",
|
||||||
|
sideOffset = 6,
|
||||||
|
align = "start",
|
||||||
|
alignOffset = 0,
|
||||||
|
anchor,
|
||||||
|
...props
|
||||||
|
}: ComboboxPrimitive.Popup.Props &
|
||||||
|
Pick<ComboboxPrimitive.Positioner.Props, "side" | "align" | "sideOffset" | "alignOffset" | "anchor">) {
|
||||||
|
return (
|
||||||
|
<ComboboxPrimitive.Portal>
|
||||||
|
<ComboboxPrimitive.Positioner
|
||||||
|
side={side}
|
||||||
|
sideOffset={sideOffset}
|
||||||
|
align={align}
|
||||||
|
alignOffset={alignOffset}
|
||||||
|
anchor={anchor}
|
||||||
|
className="isolate z-50"
|
||||||
|
>
|
||||||
|
<ComboboxPrimitive.Popup
|
||||||
|
data-slot="combobox-content"
|
||||||
|
data-chips={!!anchor}
|
||||||
|
className={cn(
|
||||||
|
"data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 group/combobox-content relative max-h-(--available-height) w-(--anchor-width) min-w-60 max-w-(--available-width) origin-(--transform-origin) overflow-hidden rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-closed:animate-out data-open:animate-in *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
</ComboboxPrimitive.Positioner>
|
||||||
|
</ComboboxPrimitive.Portal>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {
|
||||||
|
return (
|
||||||
|
<ComboboxPrimitive.List
|
||||||
|
data-slot="combobox-list"
|
||||||
|
className={cn(
|
||||||
|
"no-scrollbar max-h-80 scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxItem({ className, children, ...props }: ComboboxPrimitive.Item.Props) {
|
||||||
|
return (
|
||||||
|
<ComboboxPrimitive.Item
|
||||||
|
data-slot="combobox-item"
|
||||||
|
className={cn(
|
||||||
|
"relative flex w-full cursor-default select-none items-center gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-50 not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
<ComboboxPrimitive.ItemIndicator
|
||||||
|
render={
|
||||||
|
<span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center">
|
||||||
|
<CheckIcon className="pointer-events-none" />
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</ComboboxPrimitive.Item>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) {
|
||||||
|
return <ComboboxPrimitive.Group data-slot="combobox-group" className={cn(className)} {...props} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxLabel({ className, ...props }: ComboboxPrimitive.GroupLabel.Props) {
|
||||||
|
return (
|
||||||
|
<ComboboxPrimitive.GroupLabel
|
||||||
|
data-slot="combobox-label"
|
||||||
|
className={cn("px-2 py-1.5 text-muted-foreground text-xs", className)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) {
|
||||||
|
return <ComboboxPrimitive.Collection data-slot="combobox-collection" {...props} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) {
|
||||||
|
return (
|
||||||
|
<ComboboxPrimitive.Empty
|
||||||
|
data-slot="combobox-empty"
|
||||||
|
className={cn(
|
||||||
|
"hidden w-full justify-center py-2 text-center text-muted-foreground text-sm group-data-empty/combobox-content:flex",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxSeparator({ className, ...props }: ComboboxPrimitive.Separator.Props) {
|
||||||
|
return (
|
||||||
|
<ComboboxPrimitive.Separator
|
||||||
|
data-slot="combobox-separator"
|
||||||
|
className={cn("-mx-1 my-1 h-px bg-border", className)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxChips({
|
||||||
|
className,
|
||||||
|
...props
|
||||||
|
}: React.ComponentPropsWithRef<typeof ComboboxPrimitive.Chips> & ComboboxPrimitive.Chips.Props) {
|
||||||
|
return (
|
||||||
|
<ComboboxPrimitive.Chips
|
||||||
|
data-slot="combobox-chips"
|
||||||
|
className={cn(
|
||||||
|
"flex min-h-8 flex-wrap items-center gap-1 rounded-md border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 has-aria-invalid:border-destructive has-data-[slot=combobox-chip]:px-2 has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxChip({
|
||||||
|
className,
|
||||||
|
children,
|
||||||
|
showRemove = true,
|
||||||
|
...props
|
||||||
|
}: ComboboxPrimitive.Chip.Props & {
|
||||||
|
showRemove?: boolean;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<ComboboxPrimitive.Chip
|
||||||
|
data-slot="combobox-chip"
|
||||||
|
className={cn(
|
||||||
|
"flex h-6 w-fit items-center justify-center gap-1 whitespace-nowrap rounded-md bg-muted px-1.5 font-medium text-foreground text-xs has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-data-[slot=combobox-chip-remove]:pr-0 has-disabled:opacity-50",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
{showRemove && (
|
||||||
|
<ComboboxPrimitive.ChipRemove
|
||||||
|
className="-ml-1 opacity-50 hover:opacity-100"
|
||||||
|
data-slot="combobox-chip-remove"
|
||||||
|
render={
|
||||||
|
<Button variant="ghost" size="icon-xs">
|
||||||
|
<XIcon className="pointer-events-none" />
|
||||||
|
</Button>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</ComboboxPrimitive.Chip>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ComboboxChipsInput({ className, ...props }: ComboboxPrimitive.Input.Props) {
|
||||||
|
return (
|
||||||
|
<ComboboxPrimitive.Input
|
||||||
|
data-slot="combobox-chip-input"
|
||||||
|
className={cn("min-w-16 flex-1 outline-none", className)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function useComboboxAnchor() {
|
||||||
|
return React.useRef<HTMLDivElement | null>(null);
|
||||||
|
}
|
||||||
|
|
||||||
type ComboboxOption<TValue extends string | number = string> = {
|
type ComboboxOption<TValue extends string | number = string> = {
|
||||||
value: TValue;
|
value: TValue;
|
||||||
label: React.ReactNode;
|
label: React.ReactNode;
|
||||||
@@ -14,149 +254,200 @@ type ComboboxOption<TValue extends string | number = string> = {
|
|||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
type ComboboxProps<TValue extends string | number = string> = Omit<
|
type SingleComboboxProps<TValue extends string | number = string> = {
|
||||||
React.ComponentProps<typeof PopoverContent>,
|
options: ComboboxOption<TValue>[];
|
||||||
"value" | "defaultValue" | "children"
|
|
||||||
> & {
|
|
||||||
disabled?: boolean;
|
|
||||||
clearable?: boolean;
|
|
||||||
options: ReadonlyArray<ComboboxOption<TValue>>;
|
|
||||||
value?: TValue | null;
|
value?: TValue | null;
|
||||||
defaultValue?: TValue | null;
|
defaultValue?: TValue | null;
|
||||||
placeholder?: React.ReactNode;
|
onValueChange?: (value: TValue | null) => void;
|
||||||
|
multiple?: false;
|
||||||
|
disabled?: boolean;
|
||||||
|
showClear?: boolean;
|
||||||
|
placeholder?: string;
|
||||||
searchPlaceholder?: string;
|
searchPlaceholder?: string;
|
||||||
emptyMessage?: React.ReactNode;
|
emptyMessage?: React.ReactNode;
|
||||||
buttonProps?: Omit<React.ComponentProps<typeof Button>, "children"> & {
|
className?: string;
|
||||||
children?: (value: TValue | null, option: ComboboxOption<TValue> | null) => React.ReactNode;
|
id?: string;
|
||||||
};
|
name?: string;
|
||||||
onValueChange?: (value: TValue | null, option: ComboboxOption<TValue> | null) => void;
|
render?: UseRenderRenderProp<ComboboxTriggerState>;
|
||||||
};
|
};
|
||||||
|
|
||||||
function Combobox<TValue extends string | number = string>({
|
type MultiComboboxProps<TValue extends string | number = string> = {
|
||||||
disabled = false,
|
options: ComboboxOption<TValue>[];
|
||||||
clearable = true,
|
value?: TValue[] | null;
|
||||||
options,
|
defaultValue?: TValue[] | null;
|
||||||
value,
|
onValueChange?: (value: TValue[] | null) => void;
|
||||||
defaultValue = null,
|
multiple: true;
|
||||||
placeholder = t`Select...`,
|
disabled?: boolean;
|
||||||
searchPlaceholder = t`Search...`,
|
showClear?: boolean;
|
||||||
emptyMessage = t`No results found.`,
|
placeholder?: string;
|
||||||
className,
|
searchPlaceholder?: string;
|
||||||
buttonProps,
|
emptyMessage?: React.ReactNode;
|
||||||
onValueChange,
|
className?: string;
|
||||||
...props
|
id?: string;
|
||||||
}: ComboboxProps<TValue>) {
|
name?: string;
|
||||||
const { className: buttonClassName, children: buttonChildren, ...buttonRestProps } = buttonProps ?? {};
|
render?: UseRenderRenderProp<ComboboxTriggerState>;
|
||||||
const [open, setOpen] = React.useState(false);
|
};
|
||||||
|
|
||||||
const [selectedValue, setSelectedValue] = useControlledState<TValue | null>({
|
type ComboboxProps<TValue extends string | number = string> = SingleComboboxProps<TValue> | MultiComboboxProps<TValue>;
|
||||||
value,
|
|
||||||
defaultValue,
|
|
||||||
onChange: (next) => onValueChange?.(next, options.find((o) => o.value === next) ?? null),
|
|
||||||
});
|
|
||||||
|
|
||||||
const selectedOption = React.useMemo(() => {
|
function Combobox<TValue extends string | number = string>(props: ComboboxProps<TValue>) {
|
||||||
return options.find((option) => option.value === selectedValue) ?? null;
|
const {
|
||||||
}, [options, selectedValue]);
|
options,
|
||||||
|
multiple = false,
|
||||||
|
disabled = false,
|
||||||
|
showClear = false,
|
||||||
|
placeholder,
|
||||||
|
searchPlaceholder,
|
||||||
|
emptyMessage,
|
||||||
|
className,
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
render,
|
||||||
|
} = props;
|
||||||
|
|
||||||
const selectedLabel = selectedOption?.label;
|
const { contains } = ComboboxPrimitive.useFilter();
|
||||||
|
|
||||||
const onSelect = React.useCallback(
|
const optionMap = React.useMemo(() => new Map(options.map((opt) => [String(opt.value), opt])), [options]);
|
||||||
(current: string) => {
|
|
||||||
const next = (current as unknown as TValue) ?? null;
|
|
||||||
|
|
||||||
if (!clearable && selectedValue === next) {
|
const findOption = React.useCallback(
|
||||||
setOpen(false);
|
(v: TValue | TValue[] | null | undefined) => {
|
||||||
return;
|
if (multiple) {
|
||||||
|
if (!v || !Array.isArray(v)) return [];
|
||||||
|
return (v as TValue[])
|
||||||
|
.map((item) => optionMap.get(String(item)) ?? null)
|
||||||
|
.filter(Boolean) as ComboboxOption<TValue>[];
|
||||||
|
} else {
|
||||||
|
if (v == null) return null;
|
||||||
|
return optionMap.get(String(v)) ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const toggled = selectedValue === next ? null : next;
|
|
||||||
setSelectedValue(toggled);
|
|
||||||
setOpen(false);
|
|
||||||
},
|
},
|
||||||
[clearable, selectedValue, setSelectedValue],
|
[optionMap, multiple],
|
||||||
);
|
);
|
||||||
|
|
||||||
// Prevent opening popover and handling interaction if disabled
|
type OptionValue = ComboboxOption<TValue>[] | ComboboxOption<TValue> | null;
|
||||||
const handleOpenChange = React.useCallback(
|
|
||||||
(nextOpen: boolean) => {
|
const rawValueKey = props.value !== undefined ? JSON.stringify(props.value) : undefined;
|
||||||
if (disabled) return;
|
const resolvedValue = React.useMemo(
|
||||||
setOpen(nextOpen);
|
() => (props.value !== undefined ? (findOption(props.value) as OptionValue) : undefined),
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps -- stable key avoids new-reference loops
|
||||||
|
[rawValueKey, optionMap],
|
||||||
|
);
|
||||||
|
|
||||||
|
const rawDefaultKey = props.defaultValue !== undefined ? JSON.stringify(props.defaultValue) : undefined;
|
||||||
|
const resolvedDefaultValue = React.useMemo(
|
||||||
|
() => (props.defaultValue !== undefined ? (findOption(props.defaultValue) as OptionValue) : undefined),
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps -- only needed on mount / options change
|
||||||
|
[rawDefaultKey, optionMap],
|
||||||
|
);
|
||||||
|
|
||||||
|
const handleExternalChange = React.useCallback(
|
||||||
|
(option: ComboboxOption<TValue>[] | ComboboxOption<TValue> | null) => {
|
||||||
|
if (multiple) {
|
||||||
|
const arrOpt = Array.isArray(option) ? option : option ? [option] : [];
|
||||||
|
(props as MultiComboboxProps<TValue>).onValueChange?.(arrOpt.length > 0 ? arrOpt.map((opt) => opt.value) : []);
|
||||||
|
} else {
|
||||||
|
const value = option && !Array.isArray(option) ? (option as ComboboxOption<TValue>).value : null;
|
||||||
|
const cb = props.onValueChange as ((value: TValue | null) => void) | undefined;
|
||||||
|
cb?.(value ?? null);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
[disabled],
|
[props, multiple],
|
||||||
|
);
|
||||||
|
|
||||||
|
const [selectedValue, setSelectedValue] = useControlledState({
|
||||||
|
value: resolvedValue,
|
||||||
|
defaultValue: resolvedDefaultValue,
|
||||||
|
onChange: handleExternalChange,
|
||||||
|
});
|
||||||
|
|
||||||
|
const itemToStringLabel = React.useCallback(
|
||||||
|
(item: ComboboxOption<TValue>) => (typeof item.label === "string" ? item.label : String(item.value)),
|
||||||
|
[],
|
||||||
|
);
|
||||||
|
|
||||||
|
const isItemEqualToValue = React.useCallback(
|
||||||
|
(a: ComboboxOption<TValue>, b: ComboboxOption<TValue>) => String(a.value) === String(b.value),
|
||||||
|
[],
|
||||||
|
);
|
||||||
|
|
||||||
|
const filter = React.useCallback(
|
||||||
|
(item: ComboboxOption<TValue>, query: string) => {
|
||||||
|
const labelStr = typeof item.label === "string" ? item.label : String(item.value);
|
||||||
|
if (contains(labelStr, query)) return true;
|
||||||
|
return item.keywords?.some((kw) => contains(kw, query)) ?? false;
|
||||||
|
},
|
||||||
|
[contains],
|
||||||
|
);
|
||||||
|
|
||||||
|
const listContent = (item: ComboboxOption<TValue>) => (
|
||||||
|
<ComboboxItem key={String(item.value)} value={item} disabled={item.disabled}>
|
||||||
|
{item.label}
|
||||||
|
</ComboboxItem>
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Popover open={open} onOpenChange={handleOpenChange}>
|
<ComboboxRoot
|
||||||
<PopoverTrigger asChild>
|
name={name}
|
||||||
<Button
|
items={options}
|
||||||
role="combobox"
|
filter={filter}
|
||||||
variant="outline"
|
disabled={disabled}
|
||||||
aria-expanded={open}
|
value={selectedValue as ComboboxOption<TValue>[] & ComboboxOption<TValue>}
|
||||||
disabled={disabled}
|
onValueChange={setSelectedValue as (value: ComboboxOption<TValue>[] | ComboboxOption<TValue> | null) => void}
|
||||||
aria-disabled={disabled}
|
itemToStringLabel={itemToStringLabel}
|
||||||
tapScale={1}
|
isItemEqualToValue={isItemEqualToValue}
|
||||||
className={cn(
|
{...(multiple ? { multiple: true } : {})}
|
||||||
"font-normal active:scale-100",
|
>
|
||||||
typeof buttonChildren === "function" ? "" : "justify-between",
|
<ComboboxTrigger
|
||||||
disabled && "pointer-events-none opacity-60",
|
id={id}
|
||||||
buttonClassName,
|
disabled={disabled}
|
||||||
)}
|
render={
|
||||||
{...buttonRestProps}
|
render ?? (
|
||||||
>
|
<Button
|
||||||
{typeof buttonChildren === "function" ? (
|
variant="outline"
|
||||||
buttonChildren(selectedValue, selectedOption)
|
className={cn("justify-start text-left font-normal hover:bg-muted/20", className)}
|
||||||
) : (
|
/>
|
||||||
<>
|
)
|
||||||
{selectedLabel ?? placeholder}
|
}
|
||||||
<CaretUpDownIcon className="ms-2 shrink-0 opacity-50" />
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</Button>
|
|
||||||
</PopoverTrigger>
|
|
||||||
|
|
||||||
<PopoverContent
|
|
||||||
align="start"
|
|
||||||
aria-disabled={disabled}
|
|
||||||
tabIndex={disabled ? -1 : undefined}
|
|
||||||
className={cn("min-w-[200px] p-0", className, disabled && "pointer-events-none select-none opacity-60")}
|
|
||||||
{...props}
|
|
||||||
>
|
>
|
||||||
<Command>
|
<span className="min-w-0 flex-1 truncate text-left">
|
||||||
<CommandInput placeholder={searchPlaceholder} disabled={disabled} />
|
<ComboboxValue placeholder={placeholder ?? t`Select...`} />
|
||||||
<CommandList>
|
</span>
|
||||||
<CommandEmpty>{emptyMessage}</CommandEmpty>
|
|
||||||
<CommandGroup>
|
|
||||||
{options.map((option) => {
|
|
||||||
const isSelected = selectedValue === option.value;
|
|
||||||
const isDisabled = option.disabled ?? disabled;
|
|
||||||
|
|
||||||
return (
|
{showClear && <ComboboxClear disabled={disabled} />}
|
||||||
<CommandItem
|
</ComboboxTrigger>
|
||||||
key={String(option.value)}
|
|
||||||
value={String(option.value)}
|
<ComboboxContent>
|
||||||
keywords={option.keywords}
|
<ComboboxPrimitive.Input
|
||||||
disabled={isDisabled}
|
placeholder={searchPlaceholder ?? placeholder ?? t`Search...`}
|
||||||
onSelect={isDisabled ? undefined : onSelect}
|
render={<Input disabled={disabled} className="rounded-b-none focus-visible:ring-0" />}
|
||||||
aria-disabled={isDisabled}
|
/>
|
||||||
className={cn(isDisabled && "pointer-events-none opacity-60")}
|
<ComboboxEmpty>{emptyMessage ?? t`No results found.`}</ComboboxEmpty>
|
||||||
>
|
<ComboboxList>{listContent}</ComboboxList>
|
||||||
<CheckIcon
|
</ComboboxContent>
|
||||||
aria-hidden
|
</ComboboxRoot>
|
||||||
className={cn("size-4 shrink-0 transition-opacity", isSelected ? "opacity-100" : "opacity-0")}
|
|
||||||
/>
|
|
||||||
<span className={cn("truncate", isDisabled && "opacity-60")}>{option.label}</span>
|
|
||||||
</CommandItem>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</CommandGroup>
|
|
||||||
</CommandList>
|
|
||||||
</Command>
|
|
||||||
</PopoverContent>
|
|
||||||
</Popover>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export type { ComboboxOption, ComboboxProps };
|
export {
|
||||||
|
Combobox,
|
||||||
export { Combobox };
|
ComboboxChip,
|
||||||
|
ComboboxChips,
|
||||||
|
ComboboxChipsInput,
|
||||||
|
ComboboxCollection,
|
||||||
|
ComboboxContent,
|
||||||
|
ComboboxEmpty,
|
||||||
|
ComboboxGroup,
|
||||||
|
ComboboxInput,
|
||||||
|
ComboboxItem,
|
||||||
|
ComboboxLabel,
|
||||||
|
ComboboxList,
|
||||||
|
type ComboboxOption,
|
||||||
|
type ComboboxProps,
|
||||||
|
ComboboxRoot,
|
||||||
|
ComboboxSeparator,
|
||||||
|
ComboboxTrigger,
|
||||||
|
ComboboxValue,
|
||||||
|
type MultiComboboxProps,
|
||||||
|
type SingleComboboxProps,
|
||||||
|
useComboboxAnchor,
|
||||||
|
};
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ function Command({ className, ...props }: React.ComponentProps<typeof CommandPri
|
|||||||
<CommandPrimitive
|
<CommandPrimitive
|
||||||
data-slot="command"
|
data-slot="command"
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex size-full flex-col gap-y-1 overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground",
|
"flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
@@ -23,11 +23,14 @@ function CommandDialog({
|
|||||||
description = "Search for a command to run...",
|
description = "Search for a command to run...",
|
||||||
children,
|
children,
|
||||||
className,
|
className,
|
||||||
|
showClose = false,
|
||||||
...props
|
...props
|
||||||
}: React.ComponentProps<typeof Dialog> & {
|
}: Omit<React.ComponentProps<typeof Dialog>, "children"> & {
|
||||||
title?: string;
|
title?: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
className?: string;
|
className?: string;
|
||||||
|
showClose?: boolean;
|
||||||
|
children: React.ReactNode;
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<Dialog {...props}>
|
<Dialog {...props}>
|
||||||
@@ -35,7 +38,12 @@ function CommandDialog({
|
|||||||
<DialogTitle>{title}</DialogTitle>
|
<DialogTitle>{title}</DialogTitle>
|
||||||
<DialogDescription>{description}</DialogDescription>
|
<DialogDescription>{description}</DialogDescription>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
<DialogContent className={cn("overflow-hidden rounded-xl! p-0", className)}>{children}</DialogContent>
|
<DialogContent
|
||||||
|
className={cn("top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0", className)}
|
||||||
|
showClose={showClose}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</DialogContent>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -43,7 +51,7 @@ function CommandDialog({
|
|||||||
function CommandInput({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>) {
|
function CommandInput({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>) {
|
||||||
return (
|
return (
|
||||||
<div data-slot="command-input-wrapper" className="p-1 pb-0">
|
<div data-slot="command-input-wrapper" className="p-1 pb-0">
|
||||||
<InputGroup className="h-8! rounded-lg! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:ps-2!">
|
<InputGroup className="h-8! rounded-lg! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!">
|
||||||
<CommandPrimitive.Input
|
<CommandPrimitive.Input
|
||||||
data-slot="command-input"
|
data-slot="command-input"
|
||||||
className={cn("w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className)}
|
className={cn("w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className)}
|
||||||
@@ -132,11 +140,11 @@ function CommandShortcut({ className, ...props }: React.ComponentProps<"span">)
|
|||||||
export {
|
export {
|
||||||
Command,
|
Command,
|
||||||
CommandDialog,
|
CommandDialog,
|
||||||
CommandInput,
|
|
||||||
CommandList,
|
|
||||||
CommandEmpty,
|
CommandEmpty,
|
||||||
CommandGroup,
|
CommandGroup,
|
||||||
|
CommandInput,
|
||||||
CommandItem,
|
CommandItem,
|
||||||
CommandShortcut,
|
CommandList,
|
||||||
CommandSeparator,
|
CommandSeparator,
|
||||||
|
CommandShortcut,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
|
import { ContextMenu as ContextMenuPrimitive } from "@base-ui/react/context-menu";
|
||||||
import { CaretRightIcon, CheckIcon } from "@phosphor-icons/react";
|
import { CaretRightIcon, CheckIcon } from "@phosphor-icons/react";
|
||||||
import { ContextMenu as ContextMenuPrimitive } from "radix-ui";
|
|
||||||
import type * as React from "react";
|
import type * as React from "react";
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
function ContextMenu({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {
|
function ContextMenu({ ...props }: ContextMenuPrimitive.Root.Props) {
|
||||||
return <ContextMenuPrimitive.Root data-slot="context-menu" {...props} />;
|
return <ContextMenuPrimitive.Root data-slot="context-menu" {...props} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
function ContextMenuTrigger({ className, ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {
|
function ContextMenuPortal({ ...props }: ContextMenuPrimitive.Portal.Props) {
|
||||||
|
return <ContextMenuPrimitive.Portal data-slot="context-menu-portal" {...props} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ContextMenuTrigger({ className, ...props }: ContextMenuPrimitive.Trigger.Props) {
|
||||||
return (
|
return (
|
||||||
<ContextMenuPrimitive.Trigger
|
<ContextMenuPrimitive.Trigger
|
||||||
data-slot="context-menu-trigger"
|
data-slot="context-menu-trigger"
|
||||||
@@ -17,39 +21,55 @@ function ContextMenuTrigger({ className, ...props }: React.ComponentProps<typeof
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ContextMenuGroup({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {
|
function ContextMenuContent({
|
||||||
|
className,
|
||||||
|
align = "start",
|
||||||
|
alignOffset = 4,
|
||||||
|
side = "right",
|
||||||
|
sideOffset = 0,
|
||||||
|
...props
|
||||||
|
}: ContextMenuPrimitive.Popup.Props &
|
||||||
|
Pick<ContextMenuPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">) {
|
||||||
|
return (
|
||||||
|
<ContextMenuPrimitive.Portal>
|
||||||
|
<ContextMenuPrimitive.Positioner
|
||||||
|
className="isolate z-50 outline-none"
|
||||||
|
align={align}
|
||||||
|
alignOffset={alignOffset}
|
||||||
|
side={side}
|
||||||
|
sideOffset={sideOffset}
|
||||||
|
>
|
||||||
|
<ContextMenuPrimitive.Popup
|
||||||
|
data-slot="context-menu-content"
|
||||||
|
className={cn(
|
||||||
|
"data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 z-50 max-h-(--available-height) min-w-36 origin-(--transform-origin) overflow-y-auto overflow-x-hidden rounded-md bg-popover p-1 text-popover-foreground shadow-md outline-none ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-open:animate-in",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
</ContextMenuPrimitive.Positioner>
|
||||||
|
</ContextMenuPrimitive.Portal>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ContextMenuGroup({ ...props }: ContextMenuPrimitive.Group.Props) {
|
||||||
return <ContextMenuPrimitive.Group data-slot="context-menu-group" {...props} />;
|
return <ContextMenuPrimitive.Group data-slot="context-menu-group" {...props} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
function ContextMenuPortal({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {
|
function ContextMenuLabel({
|
||||||
return <ContextMenuPrimitive.Portal data-slot="context-menu-portal" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ContextMenuSub({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {
|
|
||||||
return <ContextMenuPrimitive.Sub data-slot="context-menu-sub" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ContextMenuRadioGroup({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {
|
|
||||||
return <ContextMenuPrimitive.RadioGroup data-slot="context-menu-radio-group" {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ContextMenuContent({
|
|
||||||
className,
|
className,
|
||||||
|
inset,
|
||||||
...props
|
...props
|
||||||
}: React.ComponentProps<typeof ContextMenuPrimitive.Content> & {
|
}: ContextMenuPrimitive.GroupLabel.Props & {
|
||||||
side?: "top" | "right" | "bottom" | "left";
|
inset?: boolean;
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<ContextMenuPrimitive.Portal>
|
<ContextMenuPrimitive.GroupLabel
|
||||||
<ContextMenuPrimitive.Content
|
data-slot="context-menu-label"
|
||||||
data-slot="context-menu-content"
|
data-inset={inset}
|
||||||
className={cn(
|
className={cn("px-2 py-1.5 font-medium text-muted-foreground text-xs data-inset:pl-8", className)}
|
||||||
"data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-end-2 data-[side=right]:slide-in-from-start-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-context-menu-content-available-height) min-w-36 origin-(--radix-context-menu-content-transform-origin) overflow-y-auto overflow-x-hidden rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-open:animate-in",
|
{...props}
|
||||||
className,
|
/>
|
||||||
)}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</ContextMenuPrimitive.Portal>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,7 +78,7 @@ function ContextMenuItem({
|
|||||||
inset,
|
inset,
|
||||||
variant = "default",
|
variant = "default",
|
||||||
...props
|
...props
|
||||||
}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {
|
}: ContextMenuPrimitive.Item.Props & {
|
||||||
inset?: boolean;
|
inset?: boolean;
|
||||||
variant?: "default" | "destructive";
|
variant?: "default" | "destructive";
|
||||||
}) {
|
}) {
|
||||||
@@ -68,7 +88,7 @@ function ContextMenuItem({
|
|||||||
data-inset={inset}
|
data-inset={inset}
|
||||||
data-variant={variant}
|
data-variant={variant}
|
||||||
className={cn(
|
className={cn(
|
||||||
"group/context-menu-item relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-inset:ps-8 data-[variant=destructive]:text-destructive data-disabled:opacity-50 data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0 focus:*:[svg]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive",
|
"group/context-menu-item relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-8 data-[variant=destructive]:text-destructive data-disabled:opacity-50 data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0 focus:*:[svg]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
@@ -76,111 +96,101 @@ function ContextMenuItem({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ContextMenuSub({ ...props }: ContextMenuPrimitive.SubmenuRoot.Props) {
|
||||||
|
return <ContextMenuPrimitive.SubmenuRoot data-slot="context-menu-sub" {...props} />;
|
||||||
|
}
|
||||||
|
|
||||||
function ContextMenuSubTrigger({
|
function ContextMenuSubTrigger({
|
||||||
className,
|
className,
|
||||||
inset,
|
inset,
|
||||||
children,
|
children,
|
||||||
...props
|
...props
|
||||||
}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {
|
}: ContextMenuPrimitive.SubmenuTrigger.Props & {
|
||||||
inset?: boolean;
|
inset?: boolean;
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<ContextMenuPrimitive.SubTrigger
|
<ContextMenuPrimitive.SubmenuTrigger
|
||||||
data-slot="context-menu-sub-trigger"
|
data-slot="context-menu-sub-trigger"
|
||||||
data-inset={inset}
|
data-inset={inset}
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-inset:ps-8 data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-inset:pl-8 data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
<CaretRightIcon className="ml-auto" />
|
<CaretRightIcon className="ml-auto" />
|
||||||
</ContextMenuPrimitive.SubTrigger>
|
</ContextMenuPrimitive.SubmenuTrigger>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ContextMenuSubContent({ className, ...props }: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {
|
function ContextMenuSubContent({ ...props }: React.ComponentProps<typeof ContextMenuContent>) {
|
||||||
return (
|
return <ContextMenuContent data-slot="context-menu-sub-content" className="shadow-lg" side="right" {...props} />;
|
||||||
<ContextMenuPrimitive.SubContent
|
|
||||||
data-slot="context-menu-sub-content"
|
|
||||||
className={cn(
|
|
||||||
"data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-end-2 data-[side=right]:slide-in-from-start-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg duration-100 data-closed:animate-out data-open:animate-in",
|
|
||||||
className,
|
|
||||||
)}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function ContextMenuCheckboxItem({
|
function ContextMenuCheckboxItem({
|
||||||
className,
|
className,
|
||||||
children,
|
children,
|
||||||
checked,
|
checked,
|
||||||
|
inset,
|
||||||
...props
|
...props
|
||||||
}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {
|
}: ContextMenuPrimitive.CheckboxItem.Props & {
|
||||||
|
inset?: boolean;
|
||||||
|
}) {
|
||||||
return (
|
return (
|
||||||
<ContextMenuPrimitive.CheckboxItem
|
<ContextMenuPrimitive.CheckboxItem
|
||||||
data-slot="context-menu-checkbox-item"
|
data-slot="context-menu-checkbox-item"
|
||||||
|
data-inset={inset}
|
||||||
className={cn(
|
className={cn(
|
||||||
"relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 ps-2 pe-8 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
"relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-8 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
checked={checked}
|
checked={checked}
|
||||||
{...props}
|
{...props}
|
||||||
>
|
>
|
||||||
<span className="pointer-events-none absolute inset-e-2">
|
<span className="pointer-events-none absolute right-2">
|
||||||
<ContextMenuPrimitive.ItemIndicator>
|
<ContextMenuPrimitive.CheckboxItemIndicator>
|
||||||
<CheckIcon />
|
<CheckIcon />
|
||||||
</ContextMenuPrimitive.ItemIndicator>
|
</ContextMenuPrimitive.CheckboxItemIndicator>
|
||||||
</span>
|
</span>
|
||||||
{children}
|
{children}
|
||||||
</ContextMenuPrimitive.CheckboxItem>
|
</ContextMenuPrimitive.CheckboxItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ContextMenuRadioGroup({ ...props }: ContextMenuPrimitive.RadioGroup.Props) {
|
||||||
|
return <ContextMenuPrimitive.RadioGroup data-slot="context-menu-radio-group" {...props} />;
|
||||||
|
}
|
||||||
|
|
||||||
function ContextMenuRadioItem({
|
function ContextMenuRadioItem({
|
||||||
className,
|
className,
|
||||||
children,
|
children,
|
||||||
|
inset,
|
||||||
...props
|
...props
|
||||||
}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {
|
}: ContextMenuPrimitive.RadioItem.Props & {
|
||||||
|
inset?: boolean;
|
||||||
|
}) {
|
||||||
return (
|
return (
|
||||||
<ContextMenuPrimitive.RadioItem
|
<ContextMenuPrimitive.RadioItem
|
||||||
data-slot="context-menu-radio-item"
|
data-slot="context-menu-radio-item"
|
||||||
|
data-inset={inset}
|
||||||
className={cn(
|
className={cn(
|
||||||
"relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 ps-2 pe-8 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
"relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-8 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
>
|
>
|
||||||
<span className="pointer-events-none absolute inset-e-2">
|
<span className="pointer-events-none absolute right-2">
|
||||||
<ContextMenuPrimitive.ItemIndicator>
|
<ContextMenuPrimitive.RadioItemIndicator>
|
||||||
<CheckIcon />
|
<CheckIcon />
|
||||||
</ContextMenuPrimitive.ItemIndicator>
|
</ContextMenuPrimitive.RadioItemIndicator>
|
||||||
</span>
|
</span>
|
||||||
{children}
|
{children}
|
||||||
</ContextMenuPrimitive.RadioItem>
|
</ContextMenuPrimitive.RadioItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ContextMenuLabel({
|
function ContextMenuSeparator({ className, ...props }: ContextMenuPrimitive.Separator.Props) {
|
||||||
className,
|
|
||||||
inset,
|
|
||||||
...props
|
|
||||||
}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {
|
|
||||||
inset?: boolean;
|
|
||||||
}) {
|
|
||||||
return (
|
|
||||||
<ContextMenuPrimitive.Label
|
|
||||||
data-slot="context-menu-label"
|
|
||||||
data-inset={inset}
|
|
||||||
className={cn("px-2 py-1.5 font-medium text-muted-foreground text-xs data-inset:ps-8", className)}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function ContextMenuSeparator({ className, ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {
|
|
||||||
return (
|
return (
|
||||||
<ContextMenuPrimitive.Separator
|
<ContextMenuPrimitive.Separator
|
||||||
data-slot="context-menu-separator"
|
data-slot="context-menu-separator"
|
||||||
@@ -205,18 +215,18 @@ function ContextMenuShortcut({ className, ...props }: React.ComponentProps<"span
|
|||||||
|
|
||||||
export {
|
export {
|
||||||
ContextMenu,
|
ContextMenu,
|
||||||
ContextMenuTrigger,
|
|
||||||
ContextMenuContent,
|
|
||||||
ContextMenuItem,
|
|
||||||
ContextMenuCheckboxItem,
|
ContextMenuCheckboxItem,
|
||||||
ContextMenuRadioItem,
|
ContextMenuContent,
|
||||||
|
ContextMenuGroup,
|
||||||
|
ContextMenuItem,
|
||||||
ContextMenuLabel,
|
ContextMenuLabel,
|
||||||
|
ContextMenuPortal,
|
||||||
|
ContextMenuRadioGroup,
|
||||||
|
ContextMenuRadioItem,
|
||||||
ContextMenuSeparator,
|
ContextMenuSeparator,
|
||||||
ContextMenuShortcut,
|
ContextMenuShortcut,
|
||||||
ContextMenuGroup,
|
|
||||||
ContextMenuPortal,
|
|
||||||
ContextMenuSub,
|
ContextMenuSub,
|
||||||
ContextMenuSubContent,
|
ContextMenuSubContent,
|
||||||
ContextMenuSubTrigger,
|
ContextMenuSubTrigger,
|
||||||
ContextMenuRadioGroup,
|
ContextMenuTrigger,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,115 +1,119 @@
|
|||||||
import {
|
import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
|
||||||
DialogClose as DialogClosePrimitive,
|
import { Trans } from "@lingui/react/macro";
|
||||||
type DialogCloseProps as DialogClosePrimitiveProps,
|
import { XIcon } from "@phosphor-icons/react";
|
||||||
DialogContent as DialogContentPrimitive,
|
import type * as React from "react";
|
||||||
type DialogContentProps as DialogContentPrimitiveProps,
|
import { Button } from "@/components/ui/button";
|
||||||
DialogDescription as DialogDescriptionPrimitive,
|
|
||||||
type DialogDescriptionProps as DialogDescriptionPrimitiveProps,
|
|
||||||
DialogFooter as DialogFooterPrimitive,
|
|
||||||
type DialogFooterProps as DialogFooterPrimitiveProps,
|
|
||||||
DialogHeader as DialogHeaderPrimitive,
|
|
||||||
type DialogHeaderProps as DialogHeaderPrimitiveProps,
|
|
||||||
DialogOverlay as DialogOverlayPrimitive,
|
|
||||||
type DialogOverlayProps as DialogOverlayPrimitiveProps,
|
|
||||||
DialogPortal as DialogPortalPrimitive,
|
|
||||||
Dialog as DialogPrimitive,
|
|
||||||
type DialogProps as DialogPrimitiveProps,
|
|
||||||
DialogTitle as DialogTitlePrimitive,
|
|
||||||
type DialogTitleProps as DialogTitlePrimitiveProps,
|
|
||||||
DialogTrigger as DialogTriggerPrimitive,
|
|
||||||
type DialogTriggerProps as DialogTriggerPrimitiveProps,
|
|
||||||
} from "@/components/primitives/dialog";
|
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
type DialogProps = DialogPrimitiveProps;
|
function Dialog({ ...props }: DialogPrimitive.Root.Props) {
|
||||||
|
return <DialogPrimitive.Root data-slot="dialog" {...props} />;
|
||||||
function Dialog(props: DialogProps) {
|
|
||||||
return <DialogPrimitive {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DialogTriggerProps = DialogTriggerPrimitiveProps;
|
function DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {
|
||||||
|
return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />;
|
||||||
function DialogTrigger(props: DialogTriggerProps) {
|
|
||||||
return <DialogTriggerPrimitive {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DialogCloseProps = DialogClosePrimitiveProps;
|
function DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {
|
||||||
|
return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />;
|
||||||
function DialogClose(props: DialogCloseProps) {
|
|
||||||
return <DialogClosePrimitive {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DialogOverlayProps = DialogOverlayPrimitiveProps;
|
function DialogClose({ ...props }: DialogPrimitive.Close.Props) {
|
||||||
|
return <DialogPrimitive.Close data-slot="dialog-close" {...props} />;
|
||||||
function DialogOverlay({ className, ...props }: DialogOverlayProps) {
|
|
||||||
return <DialogOverlayPrimitive className={cn("fixed inset-0 z-50 bg-black/50", className)} {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DialogContentProps = DialogContentPrimitiveProps;
|
function DialogOverlay({ className, ...props }: DialogPrimitive.Backdrop.Props) {
|
||||||
|
|
||||||
function DialogContent({ className, children, ...props }: DialogContentProps) {
|
|
||||||
return (
|
return (
|
||||||
<DialogPortalPrimitive>
|
<DialogPrimitive.Backdrop
|
||||||
<DialogOverlay />
|
data-slot="dialog-overlay"
|
||||||
<DialogContentPrimitive
|
className={cn(
|
||||||
className={cn(
|
"data-open:fade-in-0 data-closed:fade-out-0 fixed inset-0 isolate z-50 bg-black/10 duration-100 data-closed:animate-out data-open:animate-in supports-backdrop-filter:backdrop-blur-xs",
|
||||||
"fixed top-[50%] left-[50%] z-50 grid max-h-[calc(100%-2rem)] w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 overflow-y-auto rounded-lg border bg-background p-6 shadow-lg sm:max-w-2xl 2xl:max-w-4xl",
|
className,
|
||||||
className,
|
)}
|
||||||
)}
|
|
||||||
{...props}
|
|
||||||
>
|
|
||||||
{children}
|
|
||||||
</DialogContentPrimitive>
|
|
||||||
</DialogPortalPrimitive>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DialogHeaderProps = DialogHeaderPrimitiveProps;
|
|
||||||
|
|
||||||
function DialogHeader({ className, ...props }: DialogHeaderProps) {
|
|
||||||
return (
|
|
||||||
<DialogHeaderPrimitive className={cn("flex flex-col gap-2 text-center sm:text-start", className)} {...props} />
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DialogFooterProps = DialogFooterPrimitiveProps;
|
|
||||||
|
|
||||||
function DialogFooter({ className, ...props }: DialogFooterProps) {
|
|
||||||
return (
|
|
||||||
<DialogFooterPrimitive
|
|
||||||
className={cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className)}
|
|
||||||
{...props}
|
{...props}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type DialogTitleProps = DialogTitlePrimitiveProps;
|
function DialogContent({
|
||||||
|
className,
|
||||||
function DialogTitle({ className, ...props }: DialogTitleProps) {
|
children,
|
||||||
return <DialogTitlePrimitive className={cn("font-semibold text-lg leading-none", className)} {...props} />;
|
showClose = false,
|
||||||
|
...props
|
||||||
|
}: DialogPrimitive.Popup.Props & {
|
||||||
|
showClose?: boolean;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<DialogPortal>
|
||||||
|
<DialogOverlay />
|
||||||
|
<DialogPrimitive.Popup
|
||||||
|
data-slot="dialog-content"
|
||||||
|
className={cn(
|
||||||
|
"data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-6 rounded-xl bg-background p-6 text-sm outline-none ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-open:animate-in sm:max-w-2xl",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
{showClose && (
|
||||||
|
<DialogPrimitive.Close
|
||||||
|
data-slot="dialog-close"
|
||||||
|
render={<Button variant="ghost" className="absolute top-4 right-4" size="icon-sm" />}
|
||||||
|
>
|
||||||
|
<XIcon />
|
||||||
|
<span className="sr-only">
|
||||||
|
<Trans>Close</Trans>
|
||||||
|
</span>
|
||||||
|
</DialogPrimitive.Close>
|
||||||
|
)}
|
||||||
|
</DialogPrimitive.Popup>
|
||||||
|
</DialogPortal>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type DialogDescriptionProps = DialogDescriptionPrimitiveProps;
|
function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
|
||||||
|
return <div data-slot="dialog-header" className={cn("flex flex-col gap-2", className)} {...props} />;
|
||||||
|
}
|
||||||
|
|
||||||
function DialogDescription({ className, ...props }: DialogDescriptionProps) {
|
function DialogFooter({ className, children, ...props }: React.ComponentProps<"div">) {
|
||||||
return <DialogDescriptionPrimitive className={cn("text-muted-foreground text-sm", className)} {...props} />;
|
return (
|
||||||
|
<div
|
||||||
|
data-slot="dialog-footer"
|
||||||
|
className={cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className)}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {
|
||||||
|
return (
|
||||||
|
<DialogPrimitive.Title data-slot="dialog-title" className={cn("font-medium leading-none", className)} {...props} />
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function DialogDescription({ className, ...props }: DialogPrimitive.Description.Props) {
|
||||||
|
return (
|
||||||
|
<DialogPrimitive.Description
|
||||||
|
data-slot="dialog-description"
|
||||||
|
className={cn(
|
||||||
|
"text-muted-foreground text-sm *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Dialog,
|
Dialog,
|
||||||
DialogTrigger,
|
|
||||||
DialogClose,
|
DialogClose,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogHeader,
|
|
||||||
DialogFooter,
|
|
||||||
DialogTitle,
|
|
||||||
DialogDescription,
|
DialogDescription,
|
||||||
type DialogProps,
|
DialogFooter,
|
||||||
type DialogTriggerProps,
|
DialogHeader,
|
||||||
type DialogCloseProps,
|
DialogOverlay,
|
||||||
type DialogContentProps,
|
DialogPortal,
|
||||||
type DialogHeaderProps,
|
DialogTitle,
|
||||||
type DialogFooterProps,
|
DialogTrigger,
|
||||||
type DialogTitleProps,
|
|
||||||
type DialogDescriptionProps,
|
|
||||||
};
|
};
|
||||||
|
|||||||
+172
-168
@@ -1,86 +1,87 @@
|
|||||||
import { CaretRightIcon, CheckIcon, CircleIcon } from "@phosphor-icons/react";
|
import { Menu as MenuPrimitive } from "@base-ui/react/menu";
|
||||||
import {
|
import { CaretRightIcon, CheckIcon } from "@phosphor-icons/react";
|
||||||
DropdownMenuCheckboxItem as DropdownMenuCheckboxItemPrimitive,
|
import type * as React from "react";
|
||||||
type DropdownMenuCheckboxItemProps as DropdownMenuCheckboxItemPrimitiveProps,
|
|
||||||
DropdownMenuContent as DropdownMenuContentPrimitive,
|
|
||||||
type DropdownMenuContentProps as DropdownMenuContentPrimitiveProps,
|
|
||||||
DropdownMenuGroup as DropdownMenuGroupPrimitive,
|
|
||||||
type DropdownMenuGroupProps as DropdownMenuGroupPrimitiveProps,
|
|
||||||
DropdownMenuItemIndicator as DropdownMenuItemIndicatorPrimitive,
|
|
||||||
DropdownMenuItem as DropdownMenuItemPrimitive,
|
|
||||||
type DropdownMenuItemProps as DropdownMenuItemPrimitiveProps,
|
|
||||||
DropdownMenuLabel as DropdownMenuLabelPrimitive,
|
|
||||||
type DropdownMenuLabelProps as DropdownMenuLabelPrimitiveProps,
|
|
||||||
DropdownMenu as DropdownMenuPrimitive,
|
|
||||||
type DropdownMenuProps as DropdownMenuPrimitiveProps,
|
|
||||||
DropdownMenuRadioGroup as DropdownMenuRadioGroupPrimitive,
|
|
||||||
type DropdownMenuRadioGroupProps as DropdownMenuRadioGroupPrimitiveProps,
|
|
||||||
DropdownMenuRadioItem as DropdownMenuRadioItemPrimitive,
|
|
||||||
type DropdownMenuRadioItemProps as DropdownMenuRadioItemPrimitiveProps,
|
|
||||||
DropdownMenuSeparator as DropdownMenuSeparatorPrimitive,
|
|
||||||
type DropdownMenuSeparatorProps as DropdownMenuSeparatorPrimitiveProps,
|
|
||||||
DropdownMenuShortcut as DropdownMenuShortcutPrimitive,
|
|
||||||
type DropdownMenuShortcutProps as DropdownMenuShortcutPrimitiveProps,
|
|
||||||
DropdownMenuSubContent as DropdownMenuSubContentPrimitive,
|
|
||||||
type DropdownMenuSubContentProps as DropdownMenuSubContentPrimitiveProps,
|
|
||||||
DropdownMenuSub as DropdownMenuSubPrimitive,
|
|
||||||
type DropdownMenuSubProps as DropdownMenuSubPrimitiveProps,
|
|
||||||
DropdownMenuSubTrigger as DropdownMenuSubTriggerPrimitive,
|
|
||||||
type DropdownMenuSubTriggerProps as DropdownMenuSubTriggerPrimitiveProps,
|
|
||||||
DropdownMenuTrigger as DropdownMenuTriggerPrimitive,
|
|
||||||
type DropdownMenuTriggerProps as DropdownMenuTriggerPrimitiveProps,
|
|
||||||
} from "@/components/primitives/dropdown-menu";
|
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
type DropdownMenuProps = DropdownMenuPrimitiveProps;
|
function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {
|
||||||
|
return <MenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
|
||||||
function DropdownMenu(props: DropdownMenuProps) {
|
|
||||||
return <DropdownMenuPrimitive {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DropdownMenuTriggerProps = DropdownMenuTriggerPrimitiveProps;
|
function DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {
|
||||||
|
return <MenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />;
|
||||||
function DropdownMenuTrigger(props: DropdownMenuTriggerProps) {
|
|
||||||
return <DropdownMenuTriggerPrimitive {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DropdownMenuContentProps = DropdownMenuContentPrimitiveProps;
|
function DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {
|
||||||
|
return <MenuPrimitive.Trigger data-slot="dropdown-menu-trigger" {...props} />;
|
||||||
|
}
|
||||||
|
|
||||||
function DropdownMenuContent({ sideOffset = 4, className, children, ...props }: DropdownMenuContentProps) {
|
function DropdownMenuContent({
|
||||||
|
align = "start",
|
||||||
|
alignOffset = 0,
|
||||||
|
side = "bottom",
|
||||||
|
sideOffset = 4,
|
||||||
|
className,
|
||||||
|
...props
|
||||||
|
}: MenuPrimitive.Popup.Props & Pick<MenuPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">) {
|
||||||
return (
|
return (
|
||||||
<DropdownMenuContentPrimitive
|
<MenuPrimitive.Portal>
|
||||||
sideOffset={sideOffset}
|
<MenuPrimitive.Positioner
|
||||||
className={cn(
|
className="isolate z-50 outline-none"
|
||||||
"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md outline-none",
|
align={align}
|
||||||
className,
|
alignOffset={alignOffset}
|
||||||
)}
|
side={side}
|
||||||
{...props}
|
sideOffset={sideOffset}
|
||||||
>
|
>
|
||||||
{children}
|
<MenuPrimitive.Popup
|
||||||
</DropdownMenuContentPrimitive>
|
data-slot="dropdown-menu-content"
|
||||||
|
className={cn(
|
||||||
|
"data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-y-auto overflow-x-hidden rounded-md bg-popover p-1 text-popover-foreground shadow-md outline-none ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-open:animate-in data-closed:overflow-hidden",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
</MenuPrimitive.Positioner>
|
||||||
|
</MenuPrimitive.Portal>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type DropdownMenuGroupProps = DropdownMenuGroupPrimitiveProps;
|
function DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {
|
||||||
|
return <MenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />;
|
||||||
function DropdownMenuGroup({ ...props }: DropdownMenuGroupProps) {
|
|
||||||
return <DropdownMenuGroupPrimitive {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DropdownMenuItemProps = DropdownMenuItemPrimitiveProps & {
|
function DropdownMenuLabel({
|
||||||
|
className,
|
||||||
|
inset,
|
||||||
|
...props
|
||||||
|
}: MenuPrimitive.GroupLabel.Props & {
|
||||||
|
inset?: boolean;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<MenuPrimitive.GroupLabel
|
||||||
|
data-slot="dropdown-menu-label"
|
||||||
|
data-inset={inset}
|
||||||
|
className={cn("px-2 py-1.5 font-medium text-muted-foreground text-xs data-inset:pl-8", className)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function DropdownMenuItem({
|
||||||
|
className,
|
||||||
|
inset,
|
||||||
|
variant = "default",
|
||||||
|
...props
|
||||||
|
}: MenuPrimitive.Item.Props & {
|
||||||
inset?: boolean;
|
inset?: boolean;
|
||||||
variant?: "default" | "destructive";
|
variant?: "default" | "destructive";
|
||||||
};
|
}) {
|
||||||
|
|
||||||
function DropdownMenuItem({ className, inset, variant = "default", disabled, ...props }: DropdownMenuItemProps) {
|
|
||||||
return (
|
return (
|
||||||
<DropdownMenuItemPrimitive
|
<MenuPrimitive.Item
|
||||||
disabled={disabled}
|
data-slot="dropdown-menu-item"
|
||||||
data-inset={inset}
|
data-inset={inset}
|
||||||
data-variant={variant}
|
data-variant={variant}
|
||||||
className={cn(
|
className={cn(
|
||||||
"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden data-[disabled=true]:pointer-events-none data-inset:ps-8 data-[variant=destructive]:text-destructive data-[disabled=true]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[variant=destructive]:*:[svg]:text-destructive!",
|
"group/dropdown-menu-item relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-8 data-[variant=destructive]:text-destructive data-disabled:opacity-50 data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[variant=destructive]:*:[svg]:text-destructive",
|
||||||
"data-[variant=destructive]:data-highlighted:bg-destructive/10 data-[variant=destructive]:data-highlighted:text-destructive data-highlighted:bg-accent data-highlighted:text-accent-foreground dark:data-[variant=destructive]:data-highlighted:bg-destructive/20",
|
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
@@ -88,126 +89,142 @@ function DropdownMenuItem({ className, inset, variant = "default", disabled, ...
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type DropdownMenuCheckboxItemProps = DropdownMenuCheckboxItemPrimitiveProps;
|
function DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {
|
||||||
|
return <MenuPrimitive.SubmenuRoot data-slot="dropdown-menu-sub" {...props} />;
|
||||||
|
}
|
||||||
|
|
||||||
function DropdownMenuCheckboxItem({ className, children, checked, disabled, ...props }: DropdownMenuCheckboxItemProps) {
|
function DropdownMenuSubTrigger({
|
||||||
|
className,
|
||||||
|
inset,
|
||||||
|
children,
|
||||||
|
...props
|
||||||
|
}: MenuPrimitive.SubmenuTrigger.Props & {
|
||||||
|
inset?: boolean;
|
||||||
|
}) {
|
||||||
return (
|
return (
|
||||||
<DropdownMenuCheckboxItemPrimitive
|
<MenuPrimitive.SubmenuTrigger
|
||||||
disabled={disabled}
|
data-slot="dropdown-menu-sub-trigger"
|
||||||
|
data-inset={inset}
|
||||||
className={cn(
|
className={cn(
|
||||||
"relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 ps-8 pe-2 text-sm outline-hidden data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
"flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-open:bg-accent data-popup-open:bg-accent data-inset:pl-8 data-open:text-accent-foreground data-popup-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||||
"data-highlighted:bg-accent data-highlighted:text-accent-foreground",
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
<CaretRightIcon className="ml-auto" />
|
||||||
|
</MenuPrimitive.SubmenuTrigger>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function DropdownMenuSubContent({
|
||||||
|
align = "start",
|
||||||
|
alignOffset = -3,
|
||||||
|
side = "right",
|
||||||
|
sideOffset = 0,
|
||||||
|
className,
|
||||||
|
...props
|
||||||
|
}: React.ComponentProps<typeof DropdownMenuContent>) {
|
||||||
|
return (
|
||||||
|
<DropdownMenuContent
|
||||||
|
data-slot="dropdown-menu-sub-content"
|
||||||
|
className={cn(
|
||||||
|
"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 w-auto min-w-[96px] rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-open:animate-in",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
align={align}
|
||||||
|
alignOffset={alignOffset}
|
||||||
|
side={side}
|
||||||
|
sideOffset={sideOffset}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function DropdownMenuCheckboxItem({
|
||||||
|
className,
|
||||||
|
children,
|
||||||
|
checked,
|
||||||
|
inset,
|
||||||
|
...props
|
||||||
|
}: MenuPrimitive.CheckboxItem.Props & {
|
||||||
|
inset?: boolean;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<MenuPrimitive.CheckboxItem
|
||||||
|
data-slot="dropdown-menu-checkbox-item"
|
||||||
|
data-inset={inset}
|
||||||
|
className={cn(
|
||||||
|
"relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-8 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
checked={checked}
|
checked={checked}
|
||||||
{...props}
|
{...props}
|
||||||
>
|
>
|
||||||
<span className="pointer-events-none absolute inset-s-2 flex size-3.5 items-center justify-center">
|
<span
|
||||||
<DropdownMenuItemIndicatorPrimitive initial={{ opacity: 0, scale: 0.5 }} animate={{ opacity: 1, scale: 1 }}>
|
className="pointer-events-none absolute right-2 flex items-center justify-center"
|
||||||
<CheckIcon className="size-4" />
|
data-slot="dropdown-menu-checkbox-item-indicator"
|
||||||
</DropdownMenuItemIndicatorPrimitive>
|
>
|
||||||
|
<MenuPrimitive.CheckboxItemIndicator>
|
||||||
|
<CheckIcon />
|
||||||
|
</MenuPrimitive.CheckboxItemIndicator>
|
||||||
</span>
|
</span>
|
||||||
{children}
|
{children}
|
||||||
</DropdownMenuCheckboxItemPrimitive>
|
</MenuPrimitive.CheckboxItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type DropdownMenuRadioGroupProps = DropdownMenuRadioGroupPrimitiveProps;
|
function DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {
|
||||||
|
return <MenuPrimitive.RadioGroup data-slot="dropdown-menu-radio-group" {...props} />;
|
||||||
function DropdownMenuRadioGroup(props: DropdownMenuRadioGroupProps) {
|
|
||||||
return <DropdownMenuRadioGroupPrimitive {...props} />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DropdownMenuRadioItemProps = DropdownMenuRadioItemPrimitiveProps;
|
function DropdownMenuRadioItem({
|
||||||
|
className,
|
||||||
function DropdownMenuRadioItem({ className, children, disabled, ...props }: DropdownMenuRadioItemProps) {
|
children,
|
||||||
|
inset,
|
||||||
|
...props
|
||||||
|
}: MenuPrimitive.RadioItem.Props & {
|
||||||
|
inset?: boolean;
|
||||||
|
}) {
|
||||||
return (
|
return (
|
||||||
<DropdownMenuRadioItemPrimitive
|
<MenuPrimitive.RadioItem
|
||||||
disabled={disabled}
|
data-slot="dropdown-menu-radio-item"
|
||||||
|
data-inset={inset}
|
||||||
className={cn(
|
className={cn(
|
||||||
"relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 ps-8 pe-2 text-sm outline-hidden data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
"relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-8 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||||
"data-highlighted:bg-accent data-highlighted:text-accent-foreground",
|
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
>
|
>
|
||||||
<span className="pointer-events-none absolute inset-s-2 flex size-3.5 items-center justify-center">
|
<span
|
||||||
<DropdownMenuItemIndicatorPrimitive layoutId="dropdown-menu-item-indicator-radio">
|
className="pointer-events-none absolute right-2 flex items-center justify-center"
|
||||||
<CircleIcon className="size-2 fill-current" />
|
data-slot="dropdown-menu-radio-item-indicator"
|
||||||
</DropdownMenuItemIndicatorPrimitive>
|
>
|
||||||
|
<MenuPrimitive.RadioItemIndicator>
|
||||||
|
<CheckIcon />
|
||||||
|
</MenuPrimitive.RadioItemIndicator>
|
||||||
</span>
|
</span>
|
||||||
{children}
|
{children}
|
||||||
</DropdownMenuRadioItemPrimitive>
|
</MenuPrimitive.RadioItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type DropdownMenuLabelProps = DropdownMenuLabelPrimitiveProps & {
|
function DropdownMenuSeparator({ className, ...props }: MenuPrimitive.Separator.Props) {
|
||||||
inset?: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
function DropdownMenuLabel({ className, inset, ...props }: DropdownMenuLabelProps) {
|
|
||||||
return (
|
return (
|
||||||
<DropdownMenuLabelPrimitive
|
<MenuPrimitive.Separator
|
||||||
data-inset={inset}
|
data-slot="dropdown-menu-separator"
|
||||||
className={cn("px-2 py-1.5 font-medium text-sm data-inset:ps-8", className)}
|
className={cn("-mx-1 my-1 h-px bg-border", className)}
|
||||||
{...props}
|
{...props}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type DropdownMenuSeparatorProps = DropdownMenuSeparatorPrimitiveProps;
|
function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<"span">) {
|
||||||
|
|
||||||
function DropdownMenuSeparator({ className, ...props }: DropdownMenuSeparatorProps) {
|
|
||||||
return <DropdownMenuSeparatorPrimitive className={cn("-mx-1 my-1 h-px bg-border", className)} {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuShortcutProps = DropdownMenuShortcutPrimitiveProps;
|
|
||||||
|
|
||||||
function DropdownMenuShortcut({ className, ...props }: DropdownMenuShortcutProps) {
|
|
||||||
return (
|
return (
|
||||||
<DropdownMenuShortcutPrimitive
|
<span
|
||||||
className={cn("ml-auto text-muted-foreground text-xs tracking-widest", className)}
|
data-slot="dropdown-menu-shortcut"
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuSubProps = DropdownMenuSubPrimitiveProps;
|
|
||||||
|
|
||||||
function DropdownMenuSub(props: DropdownMenuSubProps) {
|
|
||||||
return <DropdownMenuSubPrimitive {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuSubTriggerProps = DropdownMenuSubTriggerPrimitiveProps & {
|
|
||||||
inset?: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
function DropdownMenuSubTrigger({ disabled, className, inset, children, ...props }: DropdownMenuSubTriggerProps) {
|
|
||||||
return (
|
|
||||||
<DropdownMenuSubTriggerPrimitive
|
|
||||||
disabled={disabled}
|
|
||||||
data-inset={inset}
|
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden data-inset:ps-8 data-[state=open]:text-accent-foreground",
|
"ml-auto text-muted-foreground text-xs tracking-widest group-focus/dropdown-menu-item:text-accent-foreground",
|
||||||
"data-[state=open]:**:data-[slot=chevron]:rotate-90 **:data-[slot=chevron]:transition-transform **:data-[slot=chevron]:duration-300 **:data-[slot=chevron]:ease-in-out",
|
|
||||||
"data-highlighted:bg-accent data-highlighted:text-accent-foreground",
|
|
||||||
className,
|
|
||||||
)}
|
|
||||||
{...props}
|
|
||||||
>
|
|
||||||
{children}
|
|
||||||
<CaretRightIcon data-slot="chevron" className="ml-auto size-4" />
|
|
||||||
</DropdownMenuSubTriggerPrimitive>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
type DropdownMenuSubContentProps = DropdownMenuSubContentPrimitiveProps;
|
|
||||||
|
|
||||||
function DropdownMenuSubContent({ className, ...props }: DropdownMenuSubContentProps) {
|
|
||||||
return (
|
|
||||||
<DropdownMenuSubContentPrimitive
|
|
||||||
className={cn(
|
|
||||||
"z-50 min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg outline-none",
|
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
@@ -217,31 +234,18 @@ function DropdownMenuSubContent({ className, ...props }: DropdownMenuSubContentP
|
|||||||
|
|
||||||
export {
|
export {
|
||||||
DropdownMenu,
|
DropdownMenu,
|
||||||
DropdownMenuTrigger,
|
DropdownMenuCheckboxItem,
|
||||||
DropdownMenuContent,
|
DropdownMenuContent,
|
||||||
DropdownMenuGroup,
|
DropdownMenuGroup,
|
||||||
DropdownMenuItem,
|
DropdownMenuItem,
|
||||||
DropdownMenuCheckboxItem,
|
DropdownMenuLabel,
|
||||||
|
DropdownMenuPortal,
|
||||||
DropdownMenuRadioGroup,
|
DropdownMenuRadioGroup,
|
||||||
DropdownMenuRadioItem,
|
DropdownMenuRadioItem,
|
||||||
DropdownMenuLabel,
|
|
||||||
DropdownMenuSeparator,
|
DropdownMenuSeparator,
|
||||||
DropdownMenuShortcut,
|
DropdownMenuShortcut,
|
||||||
DropdownMenuSub,
|
DropdownMenuSub,
|
||||||
DropdownMenuSubTrigger,
|
|
||||||
DropdownMenuSubContent,
|
DropdownMenuSubContent,
|
||||||
type DropdownMenuProps,
|
DropdownMenuSubTrigger,
|
||||||
type DropdownMenuTriggerProps,
|
DropdownMenuTrigger,
|
||||||
type DropdownMenuContentProps,
|
|
||||||
type DropdownMenuGroupProps,
|
|
||||||
type DropdownMenuItemProps,
|
|
||||||
type DropdownMenuCheckboxItemProps,
|
|
||||||
type DropdownMenuRadioGroupProps,
|
|
||||||
type DropdownMenuRadioItemProps,
|
|
||||||
type DropdownMenuLabelProps,
|
|
||||||
type DropdownMenuSeparatorProps,
|
|
||||||
type DropdownMenuShortcutProps,
|
|
||||||
type DropdownMenuSubProps,
|
|
||||||
type DropdownMenuSubTriggerProps,
|
|
||||||
type DropdownMenuSubContentProps,
|
|
||||||
};
|
};
|
||||||
|
|||||||
+16
-14
@@ -1,6 +1,5 @@
|
|||||||
|
import { useRender } from "@base-ui/react";
|
||||||
import { isPlainObject } from "es-toolkit";
|
import { isPlainObject } from "es-toolkit";
|
||||||
import type { Label as LabelPrimitive } from "radix-ui";
|
|
||||||
import { Slot as SlotPrimitive } from "radix-ui";
|
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import {
|
import {
|
||||||
Controller,
|
Controller,
|
||||||
@@ -76,7 +75,7 @@ function FormItem({ className, ...props }: React.ComponentProps<"div">) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {
|
function FormLabel({ className, ...props }: React.ComponentProps<typeof Label>) {
|
||||||
const { error, formItemId } = useFormField();
|
const { error, formItemId } = useFormField();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -90,18 +89,21 @@ function FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPri
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function FormControl({ ...props }: React.ComponentProps<typeof SlotPrimitive.Slot>) {
|
function FormControl(props: useRender.ComponentProps<"div">) {
|
||||||
const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
|
const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
|
||||||
|
|
||||||
return (
|
return useRender({
|
||||||
<SlotPrimitive.Slot
|
...props,
|
||||||
data-slot="form-control"
|
defaultTagName: "div",
|
||||||
id={formItemId}
|
state: { slot: "form-control" },
|
||||||
aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}
|
props: {
|
||||||
aria-invalid={!!error}
|
id: formItemId,
|
||||||
{...props}
|
"data-slot": "form-control",
|
||||||
/>
|
"aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
|
||||||
);
|
"aria-invalid": !!error,
|
||||||
|
...props,
|
||||||
|
},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function FormDescription({ className, ...props }: React.ComponentProps<"p">) {
|
function FormDescription({ className, ...props }: React.ComponentProps<"p">) {
|
||||||
@@ -152,4 +154,4 @@ function FormMessage({ className, ...props }: React.ComponentProps<"p">) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };
|
export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage };
|
||||||
|
|||||||
@@ -1,35 +1,43 @@
|
|||||||
import { HoverCard as HoverCardPrimitive } from "radix-ui";
|
import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card";
|
||||||
import type * as React from "react";
|
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
function HoverCard({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Root>) {
|
function HoverCard({ ...props }: PreviewCardPrimitive.Root.Props) {
|
||||||
return <HoverCardPrimitive.Root data-slot="hover-card" {...props} />;
|
return <PreviewCardPrimitive.Root data-slot="hover-card" {...props} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
function HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {
|
function HoverCardTrigger({ ...props }: PreviewCardPrimitive.Trigger.Props) {
|
||||||
return <HoverCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} />;
|
return <PreviewCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
function HoverCardContent({
|
function HoverCardContent({
|
||||||
className,
|
className,
|
||||||
align = "center",
|
side = "bottom",
|
||||||
sideOffset = 4,
|
sideOffset = 4,
|
||||||
|
align = "center",
|
||||||
|
alignOffset = 4,
|
||||||
...props
|
...props
|
||||||
}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {
|
}: PreviewCardPrimitive.Popup.Props &
|
||||||
|
Pick<PreviewCardPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">) {
|
||||||
return (
|
return (
|
||||||
<HoverCardPrimitive.Portal data-slot="hover-card-portal">
|
<PreviewCardPrimitive.Portal data-slot="hover-card-portal">
|
||||||
<HoverCardPrimitive.Content
|
<PreviewCardPrimitive.Positioner
|
||||||
data-slot="hover-card-content"
|
|
||||||
align={align}
|
align={align}
|
||||||
|
alignOffset={alignOffset}
|
||||||
|
side={side}
|
||||||
sideOffset={sideOffset}
|
sideOffset={sideOffset}
|
||||||
className={cn(
|
className="isolate z-50"
|
||||||
"data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-end-2 data-[side=right]:slide-in-from-start-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-lg bg-popover p-4 text-popover-foreground text-sm shadow-md outline-hidden ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-open:animate-in",
|
>
|
||||||
className,
|
<PreviewCardPrimitive.Popup
|
||||||
)}
|
data-slot="hover-card-content"
|
||||||
{...props}
|
className={cn(
|
||||||
/>
|
"data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 z-50 w-64 origin-(--transform-origin) rounded-lg bg-popover p-4 text-popover-foreground text-sm shadow-md outline-hidden ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-open:animate-in",
|
||||||
</HoverCardPrimitive.Portal>
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
</PreviewCardPrimitive.Positioner>
|
||||||
|
</PreviewCardPrimitive.Portal>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { HoverCard, HoverCardTrigger, HoverCardContent };
|
export { HoverCard, HoverCardContent, HoverCardTrigger };
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ function InputGroup({ className, ...props }: React.ComponentProps<"div">) {
|
|||||||
data-slot="input-group"
|
data-slot="input-group"
|
||||||
role="group"
|
role="group"
|
||||||
className={cn(
|
className={cn(
|
||||||
"group/input-group relative flex h-9 w-full min-w-0 items-center rounded-md border border-input shadow-xs outline-none transition-[color,box-shadow] in-data-[slot=combobox-content]:focus-within:border-ring has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-start]]:h-auto has-[>textarea]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:flex-col has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-[3px] has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=inline-start]]:[&>input]:ps-1.5 has-[>[data-align=inline-end]]:[&>input]:pe-1.5 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3",
|
"group/input-group relative flex h-9 w-full min-w-0 items-center rounded-md border border-input shadow-xs outline-none transition-[color,box-shadow] in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-start]]:h-auto has-[>textarea]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:flex-col has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-start]]:[&>input]:pl-1.5",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
@@ -24,8 +24,8 @@ const inputGroupAddonVariants = cva(
|
|||||||
{
|
{
|
||||||
variants: {
|
variants: {
|
||||||
align: {
|
align: {
|
||||||
"inline-start": "order-first ps-2 has-[>button]:-ms-1 has-[>kbd]:ms-[-0.15rem]",
|
"inline-start": "order-first pl-2 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem]",
|
||||||
"inline-end": "order-last pe-2 has-[>button]:-me-1 has-[>kbd]:me-[-0.15rem]",
|
"inline-end": "order-last pr-2 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem]",
|
||||||
"block-start":
|
"block-start":
|
||||||
"order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
|
"order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
|
||||||
"block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2",
|
"block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2",
|
||||||
@@ -73,21 +73,25 @@ const inputGroupButtonVariants = cva("flex items-center gap-2 text-sm shadow-non
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
type InputGroupButtonProps = Omit<React.ComponentProps<typeof Button>, "size" | "type"> &
|
||||||
|
VariantProps<typeof inputGroupButtonVariants> & {
|
||||||
|
type?: "button" | "submit" | "reset";
|
||||||
|
};
|
||||||
|
|
||||||
function InputGroupButton({
|
function InputGroupButton({
|
||||||
className,
|
className,
|
||||||
type = "button",
|
type = "button",
|
||||||
variant = "ghost",
|
variant = "ghost",
|
||||||
size = "xs",
|
size = "xs",
|
||||||
...props
|
...props
|
||||||
}: Omit<React.ComponentProps<typeof Button>, "size"> & VariantProps<typeof inputGroupButtonVariants>) {
|
}: InputGroupButtonProps) {
|
||||||
return (
|
return (
|
||||||
<Button
|
<Button
|
||||||
{...props}
|
|
||||||
type={type}
|
type={type}
|
||||||
asChild={false}
|
|
||||||
data-size={size}
|
data-size={size}
|
||||||
variant={variant}
|
variant={variant}
|
||||||
className={cn(inputGroupButtonVariants({ size }), className)}
|
className={cn(inputGroupButtonVariants({ size }), className)}
|
||||||
|
{...props}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -109,7 +113,7 @@ function InputGroupInput({ className, ...props }: React.ComponentProps<"input">)
|
|||||||
<Input
|
<Input
|
||||||
data-slot="input-group-control"
|
data-slot="input-group-control"
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex-1 rounded-none border-0 bg-transparent shadow-none hover:bg-secondary/40 focus-visible:bg-secondary/40 aria-invalid:ring-0",
|
"flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
@@ -122,7 +126,7 @@ function InputGroupTextarea({ className, ...props }: React.ComponentProps<"texta
|
|||||||
<Textarea
|
<Textarea
|
||||||
data-slot="input-group-control"
|
data-slot="input-group-control"
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none aria-invalid:ring-0 dark:bg-transparent",
|
"flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
@@ -130,4 +134,4 @@ function InputGroupTextarea({ className, ...props }: React.ComponentProps<"texta
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea };
|
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea };
|
||||||
|
|||||||
@@ -77,4 +77,4 @@ function InputOTPSeparator({ ...props }: React.ComponentProps<"div">) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };
|
export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
|
import { Input as InputPrimitive } from "@base-ui/react/input";
|
||||||
import type * as React from "react";
|
import type * as React from "react";
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
function Input({ className, type, ...props }: React.ComponentProps<"input">) {
|
function Input({ className, type, ...props }: React.ComponentProps<"input">) {
|
||||||
return (
|
return (
|
||||||
<input
|
<InputPrimitive
|
||||||
type={type}
|
type={type}
|
||||||
data-slot="input"
|
data-slot="input"
|
||||||
className={cn(
|
className={cn(
|
||||||
"h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-2.5 py-1 shadow-xs outline-none transition-[color,box-shadow] file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium file:text-foreground placeholder:text-muted-foreground hover:bg-secondary/40 focus-visible:border-ring focus-visible:bg-secondary/40 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
|
"h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-2.5 py-1 text-sm shadow-xs outline-none transition-[color,box-shadow] file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium file:text-foreground file:text-sm placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import { Label as LabelPrimitive } from "radix-ui";
|
|
||||||
import type * as React from "react";
|
import type * as React from "react";
|
||||||
import { cn } from "@/utils/style";
|
import { cn } from "@/utils/style";
|
||||||
|
|
||||||
function Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {
|
function Label({ className, ...props }: React.ComponentProps<"label">) {
|
||||||
return (
|
return (
|
||||||
<LabelPrimitive.Root
|
<label
|
||||||
data-slot="label"
|
data-slot="label"
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex select-none items-center gap-2 font-medium text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50",
|
"flex select-none items-center gap-2 font-medium text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50",
|
||||||
|
|||||||
@@ -1,216 +0,0 @@
|
|||||||
import { t } from "@lingui/core/macro";
|
|
||||||
import { CaretUpDownIcon, CheckIcon } from "@phosphor-icons/react";
|
|
||||||
import * as React from "react";
|
|
||||||
import { Button } from "@/components/ui/button";
|
|
||||||
import {
|
|
||||||
Command,
|
|
||||||
CommandEmpty,
|
|
||||||
CommandGroup,
|
|
||||||
CommandInput,
|
|
||||||
CommandItem,
|
|
||||||
CommandList,
|
|
||||||
CommandSeparator,
|
|
||||||
} from "@/components/ui/command";
|
|
||||||
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
|
|
||||||
import { useControlledState } from "@/hooks/use-controlled-state";
|
|
||||||
import { cn } from "@/utils/style";
|
|
||||||
|
|
||||||
type MultipleComboboxOption<TValue extends string | number = string> = {
|
|
||||||
value: TValue;
|
|
||||||
label: React.ReactNode;
|
|
||||||
keywords?: string[];
|
|
||||||
disabled?: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
type BasePopoverProps = Omit<React.ComponentProps<typeof PopoverContent>, "value" | "defaultValue" | "children">;
|
|
||||||
|
|
||||||
type MultipleComboboxProps<TValue extends string | number = string> = BasePopoverProps & {
|
|
||||||
options: MultipleComboboxOption<TValue>[];
|
|
||||||
value?: TValue[];
|
|
||||||
defaultValue?: TValue[];
|
|
||||||
placeholder?: React.ReactNode;
|
|
||||||
searchPlaceholder?: string;
|
|
||||||
emptyMessage?: React.ReactNode;
|
|
||||||
clearLabel?: React.ReactNode;
|
|
||||||
buttonProps?: Omit<React.ComponentProps<typeof Button>, "children"> & {
|
|
||||||
children?: (values: TValue[], options: MultipleComboboxOption<TValue>[]) => React.ReactNode;
|
|
||||||
};
|
|
||||||
onValueChange?: (values: TValue[], options: MultipleComboboxOption<TValue>[]) => void;
|
|
||||||
onOpenChange?: (open: boolean) => void;
|
|
||||||
disableClear?: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
const CLEAR_COMMAND_VALUE = "__command-clear-multi-select-combobox";
|
|
||||||
|
|
||||||
function MultipleCombobox<TValue extends string | number = string>({
|
|
||||||
options,
|
|
||||||
value,
|
|
||||||
defaultValue,
|
|
||||||
placeholder = t`Select...`,
|
|
||||||
searchPlaceholder = t`Search...`,
|
|
||||||
emptyMessage = t`No results found.`,
|
|
||||||
clearLabel = t`Clear selection`,
|
|
||||||
className,
|
|
||||||
buttonProps,
|
|
||||||
onValueChange,
|
|
||||||
onOpenChange,
|
|
||||||
disableClear = false,
|
|
||||||
...popoverProps
|
|
||||||
}: MultipleComboboxProps<TValue>) {
|
|
||||||
const [open, setOpen] = React.useState(false);
|
|
||||||
|
|
||||||
const { children: buttonChildren, className: buttonClassName, ...buttonRest } = buttonProps ?? {};
|
|
||||||
|
|
||||||
const resolvedDefaultValue = React.useMemo<TValue[]>(() => (defaultValue ? [...defaultValue] : []), [defaultValue]);
|
|
||||||
|
|
||||||
const optionsByStringValue = React.useMemo(() => {
|
|
||||||
return new Map(options.map((option) => [String(option.value), option]));
|
|
||||||
}, [options]);
|
|
||||||
|
|
||||||
const [selectedValues, setSelectedValues] = useControlledState<TValue[]>({
|
|
||||||
value,
|
|
||||||
defaultValue: resolvedDefaultValue,
|
|
||||||
onChange: (next) =>
|
|
||||||
onValueChange?.(
|
|
||||||
next,
|
|
||||||
next
|
|
||||||
.map((item) => options.find((option) => option.value === item))
|
|
||||||
.filter((option): option is MultipleComboboxOption<TValue> => Boolean(option)),
|
|
||||||
),
|
|
||||||
});
|
|
||||||
|
|
||||||
const selectionSet = React.useMemo(() => new Set(selectedValues), [selectedValues]);
|
|
||||||
|
|
||||||
const selectedOptions = React.useMemo(
|
|
||||||
() => options.filter((option) => selectionSet.has(option.value)),
|
|
||||||
[options, selectionSet],
|
|
||||||
);
|
|
||||||
|
|
||||||
const selectionCount = selectedOptions.length;
|
|
||||||
const canClear = !disableClear && selectionCount > 0;
|
|
||||||
|
|
||||||
const toggleOption = React.useCallback(
|
|
||||||
(option: MultipleComboboxOption<TValue>) => {
|
|
||||||
if (option.disabled) return;
|
|
||||||
|
|
||||||
const isSelected = selectionSet.has(option.value);
|
|
||||||
const nextValues = isSelected
|
|
||||||
? selectedValues.filter((selected) => selected !== option.value)
|
|
||||||
: [...selectedValues, option.value];
|
|
||||||
|
|
||||||
setSelectedValues(nextValues);
|
|
||||||
},
|
|
||||||
[selectionSet, selectedValues, setSelectedValues],
|
|
||||||
);
|
|
||||||
|
|
||||||
const handleSelect = React.useCallback(
|
|
||||||
(current: string) => {
|
|
||||||
if (current === CLEAR_COMMAND_VALUE) {
|
|
||||||
setSelectedValues([]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const option = optionsByStringValue.get(current);
|
|
||||||
if (!option) return;
|
|
||||||
toggleOption(option);
|
|
||||||
},
|
|
||||||
[optionsByStringValue, toggleOption, setSelectedValues],
|
|
||||||
);
|
|
||||||
|
|
||||||
const handleOpenChange = React.useCallback(
|
|
||||||
(nextOpen: boolean) => {
|
|
||||||
setOpen(nextOpen);
|
|
||||||
onOpenChange?.(nextOpen);
|
|
||||||
},
|
|
||||||
[onOpenChange],
|
|
||||||
);
|
|
||||||
|
|
||||||
const buttonContent =
|
|
||||||
typeof buttonChildren === "function" ? (
|
|
||||||
buttonChildren(selectedValues, selectedOptions)
|
|
||||||
) : (
|
|
||||||
<>
|
|
||||||
<span className="truncate">{selectionCount > 0 ? `${selectionCount} selected` : placeholder}</span>
|
|
||||||
<CaretUpDownIcon aria-hidden className="ms-2 shrink-0 opacity-50" />
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Popover open={open} onOpenChange={handleOpenChange}>
|
|
||||||
<PopoverTrigger asChild>
|
|
||||||
<Button
|
|
||||||
role="combobox"
|
|
||||||
variant="outline"
|
|
||||||
aria-expanded={open}
|
|
||||||
aria-label="Multi-select Combobox"
|
|
||||||
className={cn("justify-between gap-2 font-normal active:scale-100", buttonClassName)}
|
|
||||||
{...buttonRest}
|
|
||||||
>
|
|
||||||
{buttonContent}
|
|
||||||
</Button>
|
|
||||||
</PopoverTrigger>
|
|
||||||
|
|
||||||
<PopoverContent
|
|
||||||
align="start"
|
|
||||||
role="listbox"
|
|
||||||
className={cn("w-[260px] p-0", className)}
|
|
||||||
aria-multiselectable="true"
|
|
||||||
{...popoverProps}
|
|
||||||
>
|
|
||||||
<Command>
|
|
||||||
<CommandInput placeholder={searchPlaceholder} />
|
|
||||||
<CommandList>
|
|
||||||
<CommandEmpty>{emptyMessage}</CommandEmpty>
|
|
||||||
|
|
||||||
<CommandGroup>
|
|
||||||
{options.map((option) => {
|
|
||||||
const stringValue = String(option.value);
|
|
||||||
const isSelected = selectionSet.has(option.value);
|
|
||||||
const isDisabled = option.disabled ?? false;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<CommandItem
|
|
||||||
key={stringValue}
|
|
||||||
value={stringValue}
|
|
||||||
keywords={option.keywords}
|
|
||||||
onSelect={handleSelect}
|
|
||||||
disabled={isDisabled}
|
|
||||||
data-selected={isSelected ? "" : undefined}
|
|
||||||
aria-selected={isSelected}
|
|
||||||
>
|
|
||||||
<CheckIcon
|
|
||||||
aria-hidden
|
|
||||||
className={cn("size-4 shrink-0 transition-opacity", isSelected ? "opacity-100" : "opacity-0")}
|
|
||||||
/>
|
|
||||||
<span className={cn("truncate", isDisabled && "opacity-60")}>{option.label}</span>
|
|
||||||
</CommandItem>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</CommandGroup>
|
|
||||||
|
|
||||||
{canClear ? (
|
|
||||||
<>
|
|
||||||
<CommandSeparator />
|
|
||||||
<CommandGroup>
|
|
||||||
<CommandItem
|
|
||||||
value={CLEAR_COMMAND_VALUE}
|
|
||||||
onSelect={handleSelect}
|
|
||||||
keywords={[]}
|
|
||||||
data-selected={undefined}
|
|
||||||
aria-selected="false"
|
|
||||||
>
|
|
||||||
{clearLabel}
|
|
||||||
</CommandItem>
|
|
||||||
</CommandGroup>
|
|
||||||
</>
|
|
||||||
) : null}
|
|
||||||
</CommandList>
|
|
||||||
</Command>
|
|
||||||
</PopoverContent>
|
|
||||||
</Popover>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export type { MultipleComboboxOption, MultipleComboboxProps };
|
|
||||||
|
|
||||||
export { MultipleCombobox };
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user