Merge version_2_1781603480213 into main #1

Merged
bender merged 1 commits from version_2_1781603480213 into main 2026-06-16 09:53:24 +00:00
9 changed files with 377 additions and 198 deletions

View File

@@ -1,209 +1,35 @@
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import HeroBillboardBrand from '@/components/sections/hero/HeroBillboardBrand';
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
import { Droplets, Gauge, Wind } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
// AUTO-GENERATED shell by per-section-migrate.
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
// files directly. Non-block content (wrappers, non-inlinable sections) is
// preserved inline; extracted section blocks become <XSection/> refs.
export default function HomePage() {
import React from 'react';
import HeroSection from './HomePage/sections/Hero';
import CurrentSection from './HomePage/sections/Current';
import WeekSection from './HomePage/sections/Week';
import MonthSection from './HomePage/sections/Month';
import MetricsSection from './HomePage/sections/Metrics';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
import AlertsSection from './HomePage/sections/Alerts';export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardBrand
brand="Погода в городе Шу"
description="Точные данные о температуре, влажности и давлении. Актуальная информация для жителей Жамбылской области."
primaryButton={{
text: "Подробнее",
href: "#details",
}}
secondaryButton={{
text: "Контакты",
href: "#contact",
}}
imageSrc="http://img.b2bpic.net/free-photo/beautiful-snow-covered-mountains-landscape-kashmir-state-india_1232-4811.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="current" data-section="current">
<SectionErrorBoundary name="current">
<AboutFeaturesSplit
tag="Текущие данные"
title="Погода сейчас"
description="Температура воздуха: +25°C. Ощущается как +24°C. Ветер слабый, видимость отличная."
items={[
{
icon: Droplets,
title: "Влажность",
description: "45%",
},
{
icon: Wind,
title: "Ветер",
description: "3 м/с, С-З",
},
{
icon: Gauge,
title: "Давление",
description: "758 мм рт. ст.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/3d-render-night-weather-icons-crescent-stars_107791-17714.jpg"
/>
</SectionErrorBoundary>
</div>
<CurrentSection />
<div id="week" data-section="week">
<SectionErrorBoundary name="week">
<FeaturesDetailedCards
tag="Прогноз"
title="Погода на неделю"
description="Ежедневный прогноз для города Шу"
items={[
{
title: "Пн 12.05",
description: "+26°C / +15°C, Ясно",
tags: [
"Солнечно",
],
imageSrc: "http://img.b2bpic.net/free-vector/20-spring-blue-color-icon-presentation_1142-26447.jpg",
},
{
title: "Вт 13.05",
description: "+24°C / +14°C, Переменная облачность",
tags: [
"Облачно",
],
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-landscape_8327-194.jpg",
},
{
title: "Ср 14.05",
description: "+22°C / +13°C, Небольшой дождь",
tags: [
"Дождь",
],
imageSrc: "http://img.b2bpic.net/free-photo/blue-cloud-icon-technology-graphic_53876-14840.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<WeekSection />
<div id="month" data-section="month">
<SectionErrorBoundary name="month">
<FeaturesImageBento
tag="Долгосрочный прогноз"
title="Погода на месяц"
description="Обзор температурных тенденций на май 2025 года в городе Шу."
items={[
{
title: "Неделя 1",
description: "Средняя +22°C",
imageSrc: "http://img.b2bpic.net/free-photo/simple-3d-white-fluffy-clouds-pink-background_107791-15661.jpg",
},
{
title: "Неделя 2",
description: "Средняя +24°C",
imageSrc: "http://img.b2bpic.net/free-vector/icons-set-about-weather_1057-2501.jpg",
},
{
title: "Неделя 3",
description: "Средняя +26°C",
imageSrc: "http://img.b2bpic.net/free-vector/weather-icon-collection_1084-33.jpg",
},
{
title: "Неделя 4",
description: "Средняя +28°C",
imageSrc: "http://img.b2bpic.net/free-photo/render-weather-icons-sun-clouds-fog-snow_107791-17456.jpg",
},
{
title: "Экстремумы",
description: "Макс +32°C",
imageSrc: "http://img.b2bpic.net/free-photo/white-soft-clouds-sky-overcast-weather-icons_107791-17376.jpg",
},
{
title: "Влажность",
description: "Средняя 40%",
imageSrc: "http://img.b2bpic.net/free-photo/digital-thermometer-isolated-white_23-2152013358.jpg",
},
{
title: "Осадки",
description: "Минимум в мае",
imageSrc: "http://img.b2bpic.net/free-photo/man-with-sign-prevent-flu_1134-666.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MonthSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsSimpleCards
tag="Климат"
title="Статистика региона"
description="Климатические показатели Шу"
metrics={[
{
value: "350",
description: "Солнечных дней в году",
},
{
value: "45%",
description: "Средняя влажность",
},
{
value: "250мм",
description: "Средние осадки",
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<AlertsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Помощь"
title="Часто задаваемые вопросы"
description="Как читать наш прогноз погоды"
items={[
{
question: "Откуда данные?",
answer: "Мы берем данные из надежных метеорологических станций.",
},
{
question: "Как часто обновляется прогноз?",
answer: "Прогноз обновляется каждые 3 часа.",
},
{
question: "Есть ли оповещения?",
answer: "Да, подпишитесь на уведомления о резких переменах погоды.",
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Связь"
text="Нужна более детальная информация или прогноз для бизнеса?"
primaryButton={{
text: "Написать нам",
href: "#",
}}
secondaryButton={{
text: "Поддержка",
href: "#",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,88 @@
import { motion } from "motion/react";
import TextAnimation from "@/components/ui/TextAnimation";
import ScrollReveal from "@/components/ui/ScrollReveal";
import Tag from "@/components/ui/Tag";
import Card from "@/components/ui/Card";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import { AlertTriangle, CloudRain, CloudFog } from "lucide-react";
export default function AlertsSection() {
const alerts = [
{
title: "Штормовое предупреждение: Усиление ветра",
description: "Ожидается порывистый ветер до 20-25 м/с. Рекомендуется избегать нахождения под деревьями и шаткими конструкциями.",
imageSrc: "https://images.unsplash.com/photo-1527482797697-8795b05a13fe?auto=format&fit=crop&q=80&w=800",
tags: ["Шторм", "Сегодня"],
icon: AlertTriangle
},
{
title: "Отчет сообщества: Сильный ливень в центре",
description: "Пользователи сообщают о сильном ливне и подтоплении некоторых улиц в центральной части города. Планируйте маршрут заранее.",
imageSrc: "https://images.unsplash.com/photo-1515694346937-94d85e41e6f0?auto=format&fit=crop&q=80&w=800",
tags: ["Осадки", "Отчет жителей"],
icon: CloudRain
},
{
title: "Предупреждение о тумане на трассе",
description: "Видимость на трассе Шу - Тараз снижена до 50 метров из-за густого тумана. Будьте осторожны за рулем.",
imageSrc: "https://images.unsplash.com/photo-1485236715568-ddc5ee6ca227?auto=format&fit=crop&q=80&w=800",
tags: ["Туман", "Трасса"],
icon: CloudFog
}
];
return (
<section data-webild-section="alerts" id="alerts" className="relative w-full py-24 bg-background">
<div className="w-content-width mx-auto px-6">
<div className="flex flex-col items-center text-center mb-16">
<ScrollReveal variant="fade">
<Tag text="Оповещения" className="mb-4" />
</ScrollReveal>
<TextAnimation
text="Штормовые предупреждения и отчеты"
variant="fade-blur"
tag="h2"
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
gradientText={false}
/>
<ScrollReveal variant="fade" delay={0.2}>
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
Оперативная информация о суровых погодных условиях и сообщения от жителей города Шу для вашей безопасности.
</p>
</ScrollReveal>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
{alerts.map((alert, index) => (
<ScrollReveal variant="fade" key={index} delay={0.1 * index} className="h-full">
<Card className="h-full flex flex-col overflow-hidden group">
<div className="relative h-48 overflow-hidden">
<ImageOrVideo
imageSrc={alert.imageSrc}
className="w-full h-full object-cover transition-transform duration-500 group-hover:scale-105"
/>
<div className="absolute top-4 left-4 flex flex-wrap gap-2">
{alert.tags.map((tag, i) => (
<span key={i} className="px-2 py-1 text-xs font-medium bg-background/80 backdrop-blur-sm text-foreground rounded-theme">
{tag}
</span>
))}
</div>
</div>
<div className="p-6 flex flex-col flex-grow">
<div className="flex items-center gap-3 mb-4">
<div className="p-2 bg-primary-cta/10 rounded-theme text-primary-cta">
<alert.icon className="w-5 h-5" />
</div>
<h3 className="text-xl font-semibold text-foreground line-clamp-2">{alert.title}</h3>
</div>
<p className="text-muted-foreground flex-grow">{alert.description}</p>
</div>
</Card>
</ScrollReveal>
))}
</div>
</div>
</section>
);
}

View File

@@ -0,0 +1,27 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "contact" section.
import React from 'react';
import ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ContactSection(): React.JSX.Element {
return (
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Связь"
text="Нужна более детальная информация или прогноз для бизнеса?"
primaryButton={{
text: "Написать нам",
href: "#",
}}
secondaryButton={{
text: "Поддержка",
href: "#",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,39 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "current" section.
import React from 'react';
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
import { Droplets, Gauge, Wind } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function CurrentSection(): React.JSX.Element {
return (
<div id="current" data-section="current">
<SectionErrorBoundary name="current">
<AboutFeaturesSplit
tag="Текущие данные"
title="Погода сейчас"
description="Температура воздуха: +25°C. Ощущается как +24°C. Ветер слабый, видимость отличная."
items={[
{
icon: Droplets,
title: "Влажность",
description: "45%",
},
{
icon: Wind,
title: "Ветер",
description: "3 м/с, С-З",
},
{
icon: Gauge,
title: "Давление",
description: "758 мм рт. ст.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/3d-render-night-weather-icons-crescent-stars_107791-17714.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,34 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "faq" section.
import React from 'react';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Помощь"
title="Часто задаваемые вопросы"
description="Как читать наш прогноз погоды"
items={[
{
question: "Откуда данные?",
answer: "Мы берем данные из надежных метеорологических станций.",
},
{
question: "Как часто обновляется прогноз?",
answer: "Прогноз обновляется каждые 3 часа.",
},
{
question: "Есть ли оповещения?",
answer: "Да, подпишитесь на уведомления о резких переменах погоды.",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,28 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "hero" section.
import React from 'react';
import HeroBillboardBrand from '@/components/sections/hero/HeroBillboardBrand';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardBrand
brand="Погода в городе Шу"
description="Точные данные о температуре, влажности и давлении. Актуальная информация для жителей Жамбылской области."
primaryButton={{
text: "Подробнее",
href: "#details",
}}
secondaryButton={{
text: "Контакты",
href: "#contact",
}}
imageSrc="http://img.b2bpic.net/free-photo/beautiful-snow-covered-mountains-landscape-kashmir-state-india_1232-4811.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,34 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "metrics" section.
import React from 'react';
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsSimpleCards
tag="Климат"
title="Статистика региона"
description="Климатические показатели Шу"
metrics={[
{
value: "350",
description: "Солнечных дней в году",
},
{
value: "45%",
description: "Средняя влажность",
},
{
value: "250мм",
description: "Средние осадки",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,57 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "month" section.
import React from 'react';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MonthSection(): React.JSX.Element {
return (
<div id="month" data-section="month">
<SectionErrorBoundary name="month">
<FeaturesImageBento
tag="Долгосрочный прогноз"
title="Погода на месяц"
description="Обзор температурных тенденций на май 2025 года в городе Шу."
items={[
{
title: "Неделя 1",
description: "Средняя +22°C",
imageSrc: "http://img.b2bpic.net/free-photo/simple-3d-white-fluffy-clouds-pink-background_107791-15661.jpg",
},
{
title: "Неделя 2",
description: "Средняя +24°C",
imageSrc: "http://img.b2bpic.net/free-vector/icons-set-about-weather_1057-2501.jpg",
},
{
title: "Неделя 3",
description: "Средняя +26°C",
imageSrc: "http://img.b2bpic.net/free-vector/weather-icon-collection_1084-33.jpg",
},
{
title: "Неделя 4",
description: "Средняя +28°C",
imageSrc: "http://img.b2bpic.net/free-photo/render-weather-icons-sun-clouds-fog-snow_107791-17456.jpg",
},
{
title: "Экстремумы",
description: "Макс +32°C",
imageSrc: "http://img.b2bpic.net/free-photo/white-soft-clouds-sky-overcast-weather-icons_107791-17376.jpg",
},
{
title: "Влажность",
description: "Средняя 40%",
imageSrc: "http://img.b2bpic.net/free-photo/digital-thermometer-isolated-white_23-2152013358.jpg",
},
{
title: "Осадки",
description: "Минимум в мае",
imageSrc: "http://img.b2bpic.net/free-photo/man-with-sign-prevent-flu_1134-666.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,46 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "week" section.
import React from 'react';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function WeekSection(): React.JSX.Element {
return (
<div id="week" data-section="week">
<SectionErrorBoundary name="week">
<FeaturesDetailedCards
tag="Прогноз"
title="Погода на неделю"
description="Ежедневный прогноз для города Шу"
items={[
{
title: "Пн 12.05",
description: "+26°C / +15°C, Ясно",
tags: [
"Солнечно",
],
imageSrc: "http://img.b2bpic.net/free-vector/20-spring-blue-color-icon-presentation_1142-26447.jpg",
},
{
title: "Вт 13.05",
description: "+24°C / +14°C, Переменная облачность",
tags: [
"Облачно",
],
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-landscape_8327-194.jpg",
},
{
title: "Ср 14.05",
description: "+22°C / +13°C, Небольшой дождь",
tags: [
"Дождь",
],
imageSrc: "http://img.b2bpic.net/free-photo/blue-cloud-icon-technology-graphic_53876-14840.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}