From de9db5c7ed94d72e864a65b5509e117a21a4e22a Mon Sep 17 00:00:00 2001 From: jaaaaavier Date: Tue, 23 Dec 2025 10:04:32 +0100 Subject: [PATCH] feat: add new features --- src/assets/lang/de/pricing.json | 12 +++++++++++- src/assets/lang/en/pricing.json | 16 +++++++++++++--- src/assets/lang/es/pricing.json | 14 ++++++++++++-- src/assets/lang/fr/pricing.json | 14 ++++++++++++-- src/assets/lang/it/pricing.json | 14 ++++++++++++-- src/assets/lang/ru/pricing.json | 14 ++++++++++++-- src/assets/lang/zh-tw/pricing.json | 12 +++++++++++- src/assets/lang/zh/pricing.json | 12 +++++++++++- src/components/pricing/ComparisonTable.tsx | 18 ++++++++++-------- 9 files changed, 104 insertions(+), 22 deletions(-) diff --git a/src/assets/lang/de/pricing.json b/src/assets/lang/de/pricing.json index b077c10a2..3948a71a5 100644 --- a/src/assets/lang/de/pricing.json +++ b/src/assets/lang/de/pricing.json @@ -338,10 +338,20 @@ { "name": "Kommt bald", "features": [ + { + "id": "upload_empty_files", + "name": "Leere Dateien hochladen", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, + { + "id": "trash_limits", + "name": "Papierkorb-Limits", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, { "id": "file_versioning", "name": "Dateiversionierung", - "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + "avalability": { "Essential": false, "Premium": true, "Ultimate": true } }, { "id": "mail", diff --git a/src/assets/lang/en/pricing.json b/src/assets/lang/en/pricing.json index e36cd76e5..fb71e1c07 100644 --- a/src/assets/lang/en/pricing.json +++ b/src/assets/lang/en/pricing.json @@ -194,8 +194,8 @@ }, { "id": "Dark_Web_Monitor", - "name": "File Versioning", - "avalability": { "Essential": false, "Premium": false, "Ultimate": true } + "name": "Dark Web Monitor", + "avalability": { "Essential": false, "Premium": true, "Ultimate": true } }, { "id": "cli_webdav_support", @@ -213,10 +213,20 @@ { "name": "Comming soon", "features": [ + { + "id": "upload_empty_files", + "name": "Upload empty files", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, + { + "id": "trash_limits", + "name": "Trash limits", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, { "id": "file_versioning", "name": "File Versioning", - "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + "avalability": { "Essential": false, "Premium": true, "Ultimate": true } }, { "id": "mail", diff --git a/src/assets/lang/es/pricing.json b/src/assets/lang/es/pricing.json index 2cbfb99dc..212e5f8f2 100644 --- a/src/assets/lang/es/pricing.json +++ b/src/assets/lang/es/pricing.json @@ -339,10 +339,20 @@ "name": "Próximamente", "features": [ { - "id": "file_versioning", - "name": "Control de versiones ", + "id": "upload_empty_files", + "name": "Subir archivos vacíos", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, + { + "id": "trash_limits", + "name": "Límites de la papelera", "avalability": { "Essential": true, "Premium": true, "Ultimate": true } }, + { + "id": "file_versioning", + "name": "Control de versiones", + "avalability": { "Essential": false, "Premium": true, "Ultimate": true } + }, { "id": "mail", "name": "Mail", diff --git a/src/assets/lang/fr/pricing.json b/src/assets/lang/fr/pricing.json index 056ba8926..a2fca2820 100644 --- a/src/assets/lang/fr/pricing.json +++ b/src/assets/lang/fr/pricing.json @@ -339,10 +339,20 @@ "name": "Bientôt disponible", "features": [ { - "id": "file_versioning", - "name": "Gestion des versions de fichiers", + "id": "upload_empty_files", + "name": "Télécharger des fichiers vides", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, + { + "id": "trash_limits", + "name": "Limites de la corbeille", "avalability": { "Essential": true, "Premium": true, "Ultimate": true } }, + { + "id": "file_versioning", + "name": "Versionnage de fichiers", + "avalability": { "Essential": false, "Premium": true, "Ultimate": true } + }, { "id": "mail", "name": "Mail", diff --git a/src/assets/lang/it/pricing.json b/src/assets/lang/it/pricing.json index 615f28a73..d068ff2e7 100644 --- a/src/assets/lang/it/pricing.json +++ b/src/assets/lang/it/pricing.json @@ -339,10 +339,20 @@ "name": "Prossimamente", "features": [ { - "id": "file_versioning", - "name": "Versionamento dei file", + "id": "upload_empty_files", + "name": "Carica file vuoti", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, + { + "id": "trash_limits", + "name": "Limiti del cestino", "avalability": { "Essential": true, "Premium": true, "Ultimate": true } }, + { + "id": "file_versioning", + "name": "Versionamento file", + "avalability": { "Essential": false, "Premium": true, "Ultimate": true } + }, { "id": "mail", "name": "Mail", diff --git a/src/assets/lang/ru/pricing.json b/src/assets/lang/ru/pricing.json index e66569194..32b7fcbca 100644 --- a/src/assets/lang/ru/pricing.json +++ b/src/assets/lang/ru/pricing.json @@ -339,10 +339,20 @@ "name": "Скоро", "features": [ { - "id": "file_versioning", - "name": "Управление версиями файлов", + "id": "upload_empty_files", + "name": "Загрузка пустых файлов", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, + { + "id": "trash_limits", + "name": "Лимиты корзины", "avalability": { "Essential": true, "Premium": true, "Ultimate": true } }, + { + "id": "file_versioning", + "name": "Версионность файлов", + "avalability": { "Essential": false, "Premium": true, "Ultimate": true } + }, { "id": "mail", "name": "Mail", diff --git a/src/assets/lang/zh-tw/pricing.json b/src/assets/lang/zh-tw/pricing.json index 6eafe9572..0a335e1af 100644 --- a/src/assets/lang/zh-tw/pricing.json +++ b/src/assets/lang/zh-tw/pricing.json @@ -338,10 +338,20 @@ { "name": "即將推出", "features": [ + { + "id": "upload_empty_files", + "name": "上傳空檔案", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, + { + "id": "trash_limits", + "name": "回收筒限制", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, { "id": "file_versioning", "name": "檔案版本控制", - "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + "avalability": { "Essential": false, "Premium": true, "Ultimate": true } }, { "id": "mail", diff --git a/src/assets/lang/zh/pricing.json b/src/assets/lang/zh/pricing.json index 7b60fc51a..36a0c5f5f 100644 --- a/src/assets/lang/zh/pricing.json +++ b/src/assets/lang/zh/pricing.json @@ -338,10 +338,20 @@ { "name": "即将推出", "features": [ + { + "id": "upload_empty_files", + "name": "上传空文件", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, + { + "id": "trash_limits", + "name": "回收站限制", + "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + }, { "id": "file_versioning", "name": "文件版本控制", - "avalability": { "Essential": true, "Premium": true, "Ultimate": true } + "avalability": { "Essential": false, "Premium": true, "Ultimate": true } }, { "id": "mail", diff --git a/src/components/pricing/ComparisonTable.tsx b/src/components/pricing/ComparisonTable.tsx index 4069c1583..49eb2166d 100644 --- a/src/components/pricing/ComparisonTable.tsx +++ b/src/components/pricing/ComparisonTable.tsx @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { PricingText } from '@/assets/types/pricing'; import { CheckCircle, XCircle } from '@phosphor-icons/react'; import { Interval, ProductsDataProps } from '@/services/stripe.service'; @@ -86,14 +88,14 @@ export default function ComparisonTableSection({ return category.features.every((feature: any) => Object.values(feature.avalability).filter(Boolean).length === 1); }; - const isLastColumn = (index: number) => index === textContent.plans.length - 1; + const isRecommendedPlan = (index: number) => index === textContent.plans.length - 2; const isSecondToLastColumn = (index: number) => index === textContent.plans.length - 2; const isLastCategory = (index: number) => index === textContent.categories.length - 1; const isLastFeature = (categoryFeatures: any[], featureIndex: number) => featureIndex === categoryFeatures.length - 1; const getHeaderStyles = (planIndex: number) => { return `items-start p-6 text-start ${ - isLastColumn(planIndex) + isRecommendedPlan(planIndex) ? 'flex rounded-t-2xl ring-[1px] ring-neutral-25 bg-neutral-17' : 'bg-neutral-16 ring-[1px] ring-neutral-25' }`; @@ -101,15 +103,15 @@ export default function ComparisonTableSection({ const getButtonStyles = (planIndex: number) => { return `${ - isLastColumn(planIndex) + isRecommendedPlan(planIndex) ? 'bg-primary text-white hover:bg-primary-dark' : 'border-primary bg-transparent text-primary hover:bg-gray-1' } flex h-[48px] w-[270px] items-center justify-center rounded-md border-[1.5px] lg:w-[340px]`; }; - const getCategoryRowStyles = (planIndex: number, categoryIndex: number) => { + const getCategoryRowStyles = (planIndex: number) => { return `h-[72px] ${ - isLastColumn(planIndex) + isRecommendedPlan(planIndex) ? `border-[1px] border-neutral-25 bg-neutral-17 shadow-lg` : 'border-y-[1px] border-neutral-25 p-6 text-xl font-medium text-gray-95' }`; @@ -118,7 +120,7 @@ export default function ComparisonTableSection({ const getSpecialFeatureStyles = (planIndex: number, categoryIndex: number) => { let baseStyles = 'px-6 py-4'; - if (isLastColumn(planIndex)) { + if (isRecommendedPlan(planIndex)) { baseStyles += ' bg-neutral-17 outline outline-1 outline-neutral-25'; if (isLastCategory(categoryIndex)) { baseStyles += 'outline outline-1 outline-neutral-25 rounded-br-16'; @@ -133,7 +135,7 @@ export default function ComparisonTableSection({ const getRegularFeatureStyles = (planIndex: number, categoryIndex: number, category: any, featureIndex: number) => { let baseStyles = 'px-6 py-4'; - if (isLastColumn(planIndex)) { + if (isRecommendedPlan(planIndex)) { baseStyles += 'ring-[1px] ring-neutral-25 bg-neutral-17 shadow-lg outline outline-1 outline-neutral-25'; if (isLastCategory(categoryIndex) && isLastFeature(category.features, featureIndex)) { baseStyles += ' rounded-b-16 outline outline-1 outline-neutral-25'; @@ -256,7 +258,7 @@ export default function ComparisonTableSection({ <> {textContent.plans.map((plan, planIndex) => ( - + {planIndex === 0 ? category.name : undefined} ))}