const { useEffect } = React; const defaultSite = { settings: {}, sections: {}, services: [], reviews: [], gallery: [], }; const BRAND_NAME = "Малярка.Pro"; const BRAND_LOGO = "/static/assets/malyarka-pro-logo.svg"; const YANDEX_MAP_POINT = "37.761450,44.698994"; const YANDEX_MAP_URL = "https://yandex.ru/map-widget/v1/?ll=37.761450%2C44.698994&pt=37.761450%2C44.698994%2Cpm2rdm&z=18"; function isEnabled(sections, key) { return Boolean(sections && sections[key]); } function Reveal({ as: Tag = "section", children, ...props }) { return ( {children} ); } function IndustrialStrip() { const items = [ "Кузовной цех", "Покраска", "Геометрия", "Новороссийск", "Оценка по фото", "До/после", "Кузовной цех", "Покраска", "Геометрия", "Новороссийск", "Оценка по фото", "До/после", ]; return ( ); } function Header({ sections }) { return (
{BRAND_NAME}
); } function Hero({ settings }) { const specs = [settings.hero_fact_1, settings.hero_fact_2, settings.hero_fact_3].filter(Boolean); return (

{settings.hero_eyebrow}

{settings.hero_title}

{settings.hero_subtitle}

Позвонить Написать в MAX
{specs.map((fact, index) => (
{String(index + 1).padStart(2, "0")}
{fact}
))}
Автомобиль в зоне кузовного ремонта
Собственная покрасочная камера
); } function KineticRail() { return ( ); } function SectionHeading({ eyebrow, title }) { return (

{eyebrow}

{title}

); } function Services({ services }) { return (
{services.map((service) => (

{service.title}

{service.summary}

))}
); } function PhotoEvaluation({ settings }) { return (

Быстрый первый шаг

Бесплатная оценка по фото в MAX

Отправьте несколько фото повреждения. Точная оценка дается после осмотра.

Без формы на сайте

Напишите в MAX

{settings.max_contact}

); } function BeforeAfter({ gallery }) { return (
{gallery.length ? ( gallery.map((pair) => ( До ремонта После ремонта

{pair.caption}

)) ) : ( Заглушка фото до ремонта

До ремонта

Фото для замены.

Заглушка фото после ремонта

После ремонта

Фото для замены.

)}
); } function Trust({ reviews }) { return (

Собственная камера покраски

Покрасочные работы выполняются в подготовленной зоне.

{reviews.map((review) => (

{review.reviewer_label}

{review.text}

))} {!reviews.length && (

Реальные отзывы

Пока нет реальных отзывов: место зарезервировано.

)}
); } function Contact({ settings }) { return (

Связаться

Позвоните или напишите в MAX

Телефон {settings.phone}
MAX {settings.max_contact}
Адрес {settings.address}
Открыть в Яндекс.Картах
); } function Footer() { return ( ); } function useRevealAnimation() { useEffect(() => { const revealTargets = document.querySelectorAll("[data-reveal]"); const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)"); if (!revealTargets.length) { return undefined; } revealTargets.forEach((target) => target.classList.add("reveal")); if (reduceMotion.matches || !("IntersectionObserver" in window)) { revealTargets.forEach((target) => target.classList.add("is-visible")); return undefined; } revealTargets.forEach((target, index) => { window.setTimeout(() => { target.classList.add("is-visible"); }, 120 + index * 45); }); const revealObserver = new IntersectionObserver( (entries, observer) => { entries.forEach((entry) => { if (!entry.isIntersecting) { return; } entry.target.classList.add("is-visible"); observer.unobserve(entry.target); }); }, { rootMargin: "0px 0px -12% 0px", threshold: 0.12 }, ); revealTargets.forEach((target) => revealObserver.observe(target)); return () => revealObserver.disconnect(); }, []); } function PublicApp() { const site = window.__PUBLIC_SITE__ || defaultSite; const settings = site.settings || defaultSite.settings; const sections = site.sections || defaultSite.sections; const services = site.services || defaultSite.services; const reviews = site.reviews || defaultSite.reviews; const gallery = site.gallery || defaultSite.gallery; useRevealAnimation(); return (
{isEnabled(sections, "services") && } {isEnabled(sections, "photo_evaluation") && } {isEnabled(sections, "before_after") && } {isEnabled(sections, "trust") && } {isEnabled(sections, "contact") && }