feat(project-editor): reusable image-field (thumbnail+replace+remove), branding OG image+gallery

- shared app-image-field component: thumbnail preview, replace, remove, opens media-picker
- branding: add socialImageUrl + galleryUrls fields, wire to new image-field
- footer: logo + payment icon fields use image-field (drop manual media-picker plumbing)
- i18n: common.remove, adminCategories.replaceImage, builder.socialImage/gallery keys (en/ru/hy)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-07-17 15:22:45 +04:00
parent feda0f685f
commit b183410888
12 changed files with 175 additions and 71 deletions

View File

@@ -427,6 +427,9 @@ export const ru: Translations = {
logo: 'Логотип',
smallLogo: 'Малый логотип',
favicon: 'Favicon',
socialImage: 'Изображение для соцсетей',
gallery: 'Галерея',
addGalleryImage: 'Добавить изображение',
marketplaceTitle: 'Заголовок маркетплейса',
primaryColor: 'Основной цвет',
secondaryColor: 'Вторичный цвет',
@@ -572,6 +575,8 @@ export const ru: Translations = {
logoDesc: 'URL полного логотипа, отображается в шапке на десктопе.',
smallLogoDesc: 'URL компактного логотипа для ограниченного пространства (например, мобильная шапка).',
faviconDesc: 'URL иконки вкладки браузера. Должен быть небольшим квадратным изображением.',
socialImageDesc: 'Изображение по умолчанию при публикации маркетплейса в соцсетях (Open Graph).',
galleryDesc: 'Дополнительные брендовые изображения для будущего использования в витрине.',
marketplaceTitleDesc: 'Заголовок страницы для поисковых систем и вкладок браузера.',
primaryColorDesc: 'Основной цвет бренда для главных кнопок и акцентов. Должен быть корректным hex-цветом.',
secondaryColorDesc: 'Дополнительный цвет бренда для второстепенных элементов. Должен быть корректным hex-цветом.',
@@ -765,6 +770,7 @@ export const ru: Translations = {
common: {
retry: 'Попробовать снова',
loading: 'Загрузка...',
remove: 'Удалить',
},
location: {
allRegions: 'Все регионы',
@@ -918,6 +924,7 @@ export const ru: Translations = {
},
adminCategories: {
chooseImage: 'Выбрать изображение',
replaceImage: 'Заменить изображение',
},
adminProducts: {
emptyTitle: 'Товары не найдены',