Add a reusable website link generator and polish static image cards.

Editors can pick product, store, blog, portfolio, or video category links, and image cards expose compact info/link actions without dumping URLs in the footer.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-17 00:30:01 +03:30
co-authored by Cursor
parent b9024ad77a
commit e0e68de30f
15 changed files with 1164 additions and 77 deletions
+40
View File
@@ -558,6 +558,8 @@ const en = {
'categories.tooltip.technical': 'Technical data form',
'categories.tooltip.options': 'Category options',
'categories.tooltip.remove': 'Remove category',
'categories.tooltip.expand': 'Expand',
'categories.tooltip.collapse': 'Collapse',
'categories.modal.parent': 'Parent Category',
'categories.modal.nameFa': 'Name (FA)',
'categories.modal.nameEn': 'Name (EN)',
@@ -1330,6 +1332,22 @@ const en = {
'website.sliders.modal.linkOptional': 'Link URL (optional)',
'website.sliders.modal.addSlide': 'Add slide',
'website.linkGenerator.generate': 'Generate',
'website.linkGenerator.title': 'Generate link',
'website.linkGenerator.subtitle': 'Pick a content type, then a category. The link is inserted into the field.',
'website.linkGenerator.type': 'Type',
'website.linkGenerator.category': 'Category',
'website.linkGenerator.pickCategory': 'Search categories...',
'website.linkGenerator.insert': 'Insert link',
'website.linkGenerator.loading': 'Loading categories...',
'website.linkGenerator.empty': 'No categories for this type yet.',
'website.linkGenerator.errorLoad': 'Unable to load categories.',
'website.linkGenerator.types.product': 'Product',
'website.linkGenerator.types.storeItem': 'Store item',
'website.linkGenerator.types.blog': 'Blog',
'website.linkGenerator.types.portfolio': 'Portfolio',
'website.linkGenerator.types.video': 'Video',
'website.staticImages.subtitle':
'Websites load these by key from GET /tenants/{domain}/website/static-images',
'website.staticImages.loading': 'Loading static images...',
@@ -1355,6 +1373,8 @@ const en = {
'Delete slot {label}? The website placeholder will have no image until you add one again.',
'website.staticImages.addImage': 'Add image',
'website.staticImages.replaceImage': 'Replace image',
'website.staticImages.editImage': 'Edit image',
'website.staticImages.imageInfo': 'Image details',
'website.staticImages.removeImage': 'Remove image',
'website.staticImages.removeImageTitle': 'Remove image',
'website.staticImages.removeImageMessage': 'Remove this image from the slot?',
@@ -2472,6 +2492,8 @@ const fa: Record<MessageKey, string> = {
'categories.tooltip.technical': 'فرم اطلاعات فنی',
'categories.tooltip.options': 'گزینه‌های دسته‌بندی',
'categories.tooltip.remove': 'حذف دسته‌بندی',
'categories.tooltip.expand': 'باز کردن',
'categories.tooltip.collapse': 'بستن',
'categories.modal.parent': 'دسته والد',
'categories.modal.nameFa': 'نام (فارسی)',
'categories.modal.nameEn': 'نام (انگلیسی)',
@@ -3245,6 +3267,22 @@ const fa: Record<MessageKey, string> = {
'website.sliders.modal.linkOptional': 'آدرس لینک (اختیاری)',
'website.sliders.modal.addSlide': 'افزودن اسلاید',
'website.linkGenerator.generate': 'ساخت لینک',
'website.linkGenerator.title': 'ساخت لینک',
'website.linkGenerator.subtitle': 'نوع محتوا را انتخاب کنید، سپس یک دسته‌بندی. لینک در فیلد درج می‌شود.',
'website.linkGenerator.type': 'نوع',
'website.linkGenerator.category': 'دسته‌بندی',
'website.linkGenerator.pickCategory': 'جستجوی دسته‌بندی‌ها...',
'website.linkGenerator.insert': 'درج لینک',
'website.linkGenerator.loading': 'در حال بارگذاری دسته‌بندی‌ها...',
'website.linkGenerator.empty': 'هنوز دسته‌بندی‌ای برای این نوع نیست.',
'website.linkGenerator.errorLoad': 'بارگذاری دسته‌بندی‌ها ممکن نشد.',
'website.linkGenerator.types.product': 'محصول',
'website.linkGenerator.types.storeItem': 'آیتم فروشگاه',
'website.linkGenerator.types.blog': 'بلاگ',
'website.linkGenerator.types.portfolio': 'نمونه کار',
'website.linkGenerator.types.video': 'ویدیو',
'website.staticImages.subtitle':
'وب‌سایت‌ها این تصاویر را با کلید از GET /tenants/{domain}/website/static-images می‌خوانند',
'website.staticImages.loading': 'در حال بارگذاری تصاویر ثابت...',
@@ -3270,6 +3308,8 @@ const fa: Record<MessageKey, string> = {
'اسلات {label} حذف شود؟ تا وقتی تصویر جدیدی نگذارید، جای‌نگهدار وب‌سایت خالی می‌ماند.',
'website.staticImages.addImage': 'افزودن تصویر',
'website.staticImages.replaceImage': 'جایگزینی تصویر',
'website.staticImages.editImage': 'ویرایش تصویر',
'website.staticImages.imageInfo': 'جزئیات تصویر',
'website.staticImages.removeImage': 'حذف تصویر',
'website.staticImages.removeImageTitle': 'حذف تصویر',
'website.staticImages.removeImageMessage': 'این تصویر از اسلات حذف شود؟',