// Картинки из макета Figma, привязанные к данным API по slug/path. // Где в макете картинки нет, страницы берут фото из базы (перенесено со старого сайта). import svcKids from '../assets/figma/svc-detskaya-klinika.webp'; import svcGyn from '../assets/figma/svc-ginekologiya.webp'; import svcOft from '../assets/figma/svc-oftalmologiya.webp'; import svcPlastic from '../assets/figma/svc-plasticheskaya-khirurgiya.webp'; import svcPain from '../assets/figma/svc-bol.webp'; import svcMammo from '../assets/figma/svc-mammologiya.webp'; import svcOnko from '../assets/figma/svc-onkologiya.webp'; import svcProkto from '../assets/figma/svc-proktologiya.webp'; import svcUro from '../assets/figma/svc-urologiya.webp'; import svcSurgery from '../assets/figma/svc-khirurgiya.webp'; import svcEndo from '../assets/figma/svc-endokrinologiya.webp'; import ckGirl from '../assets/figma/ck-zdorovaya-devochka.webp'; import ckWoman from '../assets/figma/ck-zhenskoe-zdorove.webp'; import ckPregnancy from '../assets/figma/ck-beremennost.webp'; import ckCervix from '../assets/figma/ck-rak-sheyki.webp'; import ckPressure from '../assets/figma/ck-davlenie.webp'; import ckParents from '../assets/figma/ck-roditeli.webp'; import ckYear from '../assets/figma/ck-mne-god.webp'; import ckKindergarten from '../assets/figma/ck-v-sad.webp'; import ckSchool from '../assets/figma/ck-pervoklashka.webp'; import ckTeen from '../assets/figma/ck-podrostok.webp'; import ckMini from '../assets/figma/ck-mini.webp'; import ckGut from '../assets/figma/ck-zhkt.webp'; import icoFemale from '../assets/figma/ico-female.png'; import icoCheckup from '../assets/figma/ico-health-checkup.png'; import icoPregnant from '../assets/figma/ico-pregnant.png'; import icoRibbon from '../assets/figma/ico-cancer-ribbon.png'; import icoTonometer from '../assets/figma/ico-tonometer.png'; import icoFamily from '../assets/figma/ico-family.png'; import icoBaby from '../assets/figma/ico-baby.png'; import icoPlayground from '../assets/figma/ico-playground.png'; import icoSchool from '../assets/figma/ico-school.png'; import icoTeen from '../assets/figma/ico-teenager.png'; import icoStethoscope from '../assets/figma/ico-stethoscope.png'; import icoStomach from '../assets/figma/ico-stomach.png'; import promoSport from '../assets/figma/promo-sportsmen.webp'; import promoGut from '../assets/figma/promo-zhkt.webp'; import promoTeen from '../assets/figma/promo-podrostok.webp'; import promoKindergarten from '../assets/figma/promo-sad.webp'; import promoBaby from '../assets/figma/promo-rodilsya.webp'; import checkupHeroGirl from '../assets/figma/checkup-hero-girl.webp'; // Вырезанные фигуры для шапки чек-апа (прозрачный фон, 540 px по высоте шапки), 14.10.2026 import cutCervix from '../assets/checkups/hero-profilaktika-raka-sheyki-matki.webp'; import cutPostpartum from '../assets/checkups/hero-poslerodovoy-chek-ap-cherez-mesyats.webp'; import cutPlanning from '../assets/checkups/hero-planirovannie-beremennosti.webp'; import cutWoman40 from '../assets/checkups/hero-zdorovaya-zhenshchina-40.webp'; import cutWomanHealth from '../assets/checkups/hero-proverit-svoe-zhenskoe-zdorove.webp'; import cutTrimester1 from '../assets/checkups/hero-vedenie-beremennosti-1-trimestr.webp'; import cutTrimester2 from '../assets/checkups/hero-vedenie-beremennosti-2-trim.webp'; import cutTrimester3 from '../assets/checkups/hero-vedenie-beremennosti-3-trim.webp'; import cutParents from '../assets/checkups/hero-zdorovye-roditeli.webp'; import cutPressure from '../assets/checkups/hero-davlenie-v-poryadke.webp'; // Направления: фото для плитки и специальность, врачей которой показываем на странице услуги // (связей врач ↔ услуга в базе почти нет, поэтому подбираем по специальности). export const DIRECTION_MEDIA = { 'detskaya-klinika': { image: svcKids, specialty: 'detskie-vrachi' }, ginekologiya: { image: svcGyn, specialty: 'ginekologi' }, oko: { image: svcOft, specialty: 'oftalmologi' }, estetic: { image: svcPlastic, specialty: 'plasticheskie-khirurgi' }, osteo: { image: svcPain, specialty: 'nevrologi' }, mammologiya: { image: svcMammo, specialty: 'mammologi' }, onkologiya: { image: svcOnko, specialty: 'onkologi' }, proktologiya: { image: svcProkto, specialty: 'proktologi' }, urologiya: { image: svcUro, specialty: 'urologi' }, khirurgiya: { image: svcSurgery, specialty: 'khirurgi' }, endokrinologiya: { image: svcEndo, specialty: 'endokrinologi' }, }; // Отдельные услуги, для которых в макете нарисован свой герой. export const SERVICE_IMAGES = { 'detskaya-klinika/priem-pediatra': svcKids, }; export function directionOf(path) { return String(path || '').split('/')[0]; } // Фото, загруженное через админку (/media/uploads/…), главнее картинки макета — как у чек-апов. // Старые картинки, перенесённые из Битрикса (/media/iblock/…), макет не перебивают. const isUploaded = (src) => typeof src === 'string' && src.includes('/media/uploads/'); export function directionImage(service) { if (isUploaded(service.image)) return service.image; return ( DIRECTION_MEDIA[service.path]?.image || service.image || service.children?.find((c) => c.image)?.image || '' ); } const CHECKUP_MEDIA = { 'zdorovaya-devoch-a': { photo: ckGirl, icon: icoFemale, hero: checkupHeroGirl }, 'proverit-svoe-zhenskoe-zdorove-': { photo: ckWoman, icon: icoCheckup, cutout: cutWomanHealth }, 'planirovannie-beremennosti': { photo: ckPregnancy, icon: icoPregnant, cutout: cutPlanning }, 'profilaktika-raka-sheyki-matki': { photo: ckCervix, icon: icoRibbon, cutout: cutCervix, cutoutCenter: true }, // серо-синий фон шапки (#7886a9) — давление и родители 'davlenie-v-poryadke': { photo: ckPressure, icon: icoTonometer, cutout: cutPressure, heroBg: '#7886a9' }, 'zdorovye-roditeli': { photo: ckParents, icon: icoFamily, cutout: cutParents, heroBg: '#7886a9' }, 'mne-god': { photo: ckYear, icon: icoBaby }, 'chek-ap-ya-v-sad': { photo: ckKindergarten, icon: icoPlayground }, pervoklashka: { photo: ckSchool, icon: icoSchool }, 'chek-ap-ya-podrostok': { photo: ckTeen, icon: icoTeen }, detskiy: { photo: ckMini, icon: icoStethoscope }, 'zdorovyy-zhkt': { photo: ckGut, icon: icoStomach }, // программ ниже в макете нет — берём близкие по смыслу фото макета 'vedenie-beremennosti-1-trimestr': { photo: ckPregnancy, icon: icoPregnant, cutout: cutTrimester1 }, 'vedenie-beremennosti-2-trim': { photo: ckPregnancy, icon: icoPregnant, cutout: cutTrimester2 }, 'vedenie-beremennosti-3-trim': { photo: ckPregnancy, icon: icoPregnant, cutout: cutTrimester3 }, 'poslerodovoy-chek-ap-cherez-mesyats': { photo: ckWoman, icon: icoFemale, cutout: cutPostpartum }, 'zdorovaya-zhenshchina-40': { photo: ckWoman, icon: icoFemale, cutout: cutWoman40 }, 'chek-ap-ya-rodilsya': { photo: ckYear, icon: icoBaby }, }; export function checkupMedia(checkup) { const m = CHECKUP_MEDIA[checkup.slug] || {}; return { // фото из админки главнее: заменили картинку программы — она сразу видна на сайте photo: checkup.image || m.photo || '', icon: m.icon || (checkup.audience === 'kids' ? icoBaby : icoCheckup), // крупный кадр наверху страницы — только отдельный большой снимок: фото карточки // (360×270) в блоке 364×485 было бы размытым hero: m.hero || '', // вырезанная фигура на фоне шапки, как в макете: справа на всю высоту, без рамки cutout: m.cutout || '', // свой цвет фона шапки, если в макете он не коралловый heroBg: m.heroBg || '', // главное в кадре по центру — при нехватке места фигура обрезается с двух сторон, а не только слева cutoutCenter: Boolean(m.cutoutCenter), }; } const PROMO_MEDIA = { 'ya-sportsmen-sale': promoSport, 'zdorovyy-zhkt-sale': promoGut, 'ya-podrostok-sale': promoTeen, 'ya-v-sad-sale': promoKindergarten, 'ya-rodilsya-sale': promoBaby, }; export function promoImage(promo) { return PROMO_MEDIA[promo.slug] || promo.image || ''; }