From e62286effabc175fb4bcfd6fff2a514efb0d8e7f Mon Sep 17 00:00:00 2001 From: "nabijonovdavronbek619@gmail.com" Date: Mon, 2 Mar 2026 20:14:15 +0500 Subject: [PATCH] sertifiacte page updated --- app/[locale]/about/noteFlans/page.tsx | 155 ------------ app/[locale]/about/notePP/page.tsx | 198 ++++++--------- app/[locale]/about/noteTrailer/page.tsx | 147 ----------- app/[locale]/about/sertificate/page.tsx | 233 +++++------------- components/layout/navbar.tsx | 6 +- .../about/aboutDetail/sertificateCard.tsx | 61 +++++ lib/demoData.ts | 42 ++++ messages/en.json | 6 +- messages/ru.json | 6 +- messages/uz.json | 6 +- 10 files changed, 253 insertions(+), 607 deletions(-) delete mode 100644 app/[locale]/about/noteFlans/page.tsx delete mode 100644 app/[locale]/about/noteTrailer/page.tsx create mode 100644 components/pages/about/aboutDetail/sertificateCard.tsx diff --git a/app/[locale]/about/noteFlans/page.tsx b/app/[locale]/about/noteFlans/page.tsx deleted file mode 100644 index 1adde5c..0000000 --- a/app/[locale]/about/noteFlans/page.tsx +++ /dev/null @@ -1,155 +0,0 @@ -"use client"; - -import Image from "next/image"; -import { motion } from "framer-motion"; -import { FileText, ChevronRight } from "lucide-react"; -import { useTranslations } from "next-intl"; -import { Statistics } from "@/components/pages/home"; - -const ease = [0.22, 1, 0.36, 1] as [number, number, number, number]; - -export default function NoteFlansPage() { - const t = useTranslations(); - - return ( - <> - -
- {/* ── Hero ── */} -
- {t("about.noteFlansPage.hero.title")} - - {/* Layered overlays */} -
-
- - {/* Grain texture */} -
- - {/* Content anchored bottom-left */} -
- - {t("about.noteFlansPage.hero.eyebrow")} - - - - {t("about.noteFlansPage.hero.titleLine1")} -
- - {t("about.noteFlansPage.hero.titleLine2")} - -
- - - {t("about.noteFlansPage.hero.description")} - - - {/* Animated underline */} - -
-
- - {/* ── Content section ── */} -
- {/* Section label */} - - {t("about.noteFlansPage.section.label")} - - - {/* Two-column layout: description left, details right */} -
- {/* Left: main description */} - -
- {t("about.noteFlansPage.section.cta")} - -
-
- - {/* Right: feature list */} - - {(t.raw("about.noteFlansPage.section.features") as string[]).map( - (feature: string, i: number) => ( -
  • -
    - -
    - - {feature} - -
  • - ), - )} -
    -
    -
    - - {/* ── Bottom strip ── */} - -

    - {t("about.noteFlansPage.footer.label")} -

    -
    - -
    - - ); -} diff --git a/app/[locale]/about/notePP/page.tsx b/app/[locale]/about/notePP/page.tsx index 64f21ff..df095b8 100644 --- a/app/[locale]/about/notePP/page.tsx +++ b/app/[locale]/about/notePP/page.tsx @@ -2,145 +2,101 @@ import Image from "next/image"; import { motion } from "framer-motion"; -import { FileText, ChevronRight } from "lucide-react"; import { useTranslations } from "next-intl"; -import { Statistics } from "@/components/pages/home"; const ease = [0.22, 1, 0.36, 1] as [number, number, number, number]; export default function NotePPPage() { const t = useTranslations(); + const guides = [ + { + image: "/images/about/pp.avif", + title: t("about.notePPPage.hero.title"), + description: t("about.notePPPage.hero.description"), + eyebrow: t("about.notePPPage.hero.eyebrow"), + titleLine1: t("about.notePPPage.hero.titleLine1"), + titleLine2: t("about.notePPPage.hero.titleLine2"), + }, + { + image: "/images/about/pp.avif", + title: t("about.noteTrailerPage.hero.title"), + description: t("about.noteTrailerPage.hero.description"), + eyebrow: t("about.noteTrailerPage.hero.eyebrow"), + titleLine1: t("about.noteTrailerPage.hero.titleLine1"), + titleLine2: t("about.noteTrailerPage.hero.titleLine2"), + }, + ]; + return ( <> - -
    +
    {/* Hero Section */} -
    - {t("about.notePPPage.hero.title")} - -
    -
    - -
    - -
    - + {guides.map((guide, index) => ( +
    - {t("about.notePPPage.hero.eyebrow")} - + {t("about.notePPPage.hero.title")} - - {t("about.notePPPage.hero.titleLine1")} -
    - - {t("about.notePPPage.hero.titleLine2")} - -
    +
    +
    - - {t("about.notePPPage.hero.description")} - +
    - -
    -
    +
    + + {guide.eyebrow} + - {/* Content Section */} -
    - - {t("about.notePPPage.section.label")} - + + {guide.titleLine1} +
    + {guide.titleLine2} +
    -
    - -
    - {t("about.notePPPage.section.cta")} - + {guide.description} + + +
    -
    - - - {(t.raw("about.notePPPage.section.features") as string[]).map( - (feature: string, i: number) => ( -
  • -
    - -
    - - {feature} - -
  • - ), - )} -
    -
    -
    - - {/* Bottom strip */} - -

    - {t("about.notePPPage.footer.label")} -

    -
    - +
    + ))} +
    ); diff --git a/app/[locale]/about/noteTrailer/page.tsx b/app/[locale]/about/noteTrailer/page.tsx deleted file mode 100644 index 9baaa86..0000000 --- a/app/[locale]/about/noteTrailer/page.tsx +++ /dev/null @@ -1,147 +0,0 @@ -"use client"; - -import Image from "next/image"; -import { motion } from "framer-motion"; -import { FileText, ChevronRight } from "lucide-react"; -import { useTranslations } from "next-intl"; -import { Statistics } from "@/components/pages/home"; - -const ease = [0.22, 1, 0.36, 1] as [number, number, number, number]; - -export default function NoteTrailerPage() { - const t = useTranslations(); - - return ( - <> - -
    - {/* Hero Section */} -
    - {t("about.noteTrailerPage.hero.title")} - -
    -
    - -
    - -
    - - {t("about.noteTrailerPage.hero.eyebrow")} - - - - {t("about.noteTrailerPage.hero.titleLine1")} -
    - - {t("about.noteTrailerPage.hero.titleLine2")} - -
    - - - {t("about.noteTrailerPage.hero.description")} - - - -
    -
    - - {/* Content Section */} -
    - - {t("about.noteTrailerPage.section.label")} - - -
    - -
    - {t("about.noteTrailerPage.section.cta")} - -
    -
    - - - {( - t.raw("about.noteTrailerPage.section.features") as string[] - ).map((feature: string, i: number) => ( -
  • -
    - -
    - - {feature} - -
  • - ))} -
    -
    -
    - - {/* Bottom stripa */} - -

    - {t("about.noteTrailerPage.footer.label")} -

    -
    - -
    - - ); -} diff --git a/app/[locale]/about/sertificate/page.tsx b/app/[locale]/about/sertificate/page.tsx index fca38d7..b4c92ae 100644 --- a/app/[locale]/about/sertificate/page.tsx +++ b/app/[locale]/about/sertificate/page.tsx @@ -1,182 +1,79 @@ -"use client"; - -import Image from "next/image"; +"use client" +import { CertCard } from "@/components/pages/about/aboutDetail/sertificateCard"; +import { certs } from "@/lib/demoData"; import { motion } from "framer-motion"; -import Link from "next/link"; -import { Download, ExternalLink, Award } from "lucide-react"; +import { Award } from "lucide-react"; import { useTranslations } from "next-intl"; -import { Statistics } from "@/components/pages/home"; export default function SertificatePage() { const t = useTranslations(); - const certs = [ - { - id: 1, - src: "/images/about/sertificate.webp", - title: "Sertifikat 1", - desc: "lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", - year: "2024", - }, - ]; return ( - <> - -
    - {/* ── Hero ── */} -
    - - {t("about.certificatePage.hero.label")} - +
    + {/* ── Hero ── */} +
    + + {t("about.certificatePage.hero.label")} + - - {t("about.certificatePage.hero.title1")}{" "} - - {t("about.certificatePage.hero.title2")} - - + + {t("about.certificatePage.hero.title1")}{" "} + + {t("about.certificatePage.hero.title2")} + + - - {t("about.certificatePage.hero.description")} - + + {t("about.certificatePage.hero.description")} + - {/* Divider */} - -
    + +
    - {/* ── Horizontal scroll track ── */} -
    - {/* Section header */} -
    -
    - - - {certs.length} {t("about.certificatePage.count.suffix")} - -
    -
    + {/* ── Count strip ── */} + + + + {certs.length} + +

    + {t("about.certificatePage.count.description")} +

    +
    - {/* ── Count strip ── */} - - - {certs.length} - -

    - {t("about.certificatePage.count.description")} -

    -
    - - {/* Scrollable row */} -
    - {certs.map((c, i) => ( - - {/* ── Left: certificate image ── */} -
    - {c.title} -
    - - {/* ── Right: info + actions ── */} -
    - {/* Label + title + desc */} -
    -
    - -

    - {t("about.certificatePage.card.badge")} -

    -
    - -

    - {c.title} -

    - -

    - {c.desc} -

    -
    - - {/* Actions */} -
    - - - {t("about.certificatePage.card.view")} - - - - - {t("about.certificatePage.card.download")} - -
    -
    -
    - ))} - - {/* End spacer */} -
    -
    -
    -
    - + {/* ── Cards ── */} +
    + {certs.map((c, i) => ( + + ))} +
    +
    ); } diff --git a/components/layout/navbar.tsx b/components/layout/navbar.tsx index f922687..79e766f 100644 --- a/components/layout/navbar.tsx +++ b/components/layout/navbar.tsx @@ -24,8 +24,6 @@ export function Navbar() { { name: t("about.subPages.baza"), value: "baza" }, { name: t("about.subPages.certificate"), value: "sertificate" }, { name: t("about.subPages.notePP"), value: "notePP" }, - { name: t("about.subPages.noteTrailer"), value: "noteTrailer" }, - { name: t("about.subPages.noteFlans"), value: "noteFlans" }, ]; useEffect(() => { @@ -85,7 +83,7 @@ export function Navbar() { {t("navbar.home")} - + {tabs.map((tab) => ( - + + {/* Right: meta + actions */} +
    +
    + {/* Badge row */} +
    +
    + + + {t("about.certificatePage.card.badge")} + +
    + + {c.category} + +
    + + {/* Title */} +

    + {c.title} +

    +
    +
    + + {/* ── Divider ── */} +
    + + {/* Collapsible document list */} +
    +
      + {c.documents.map((doc, di) => ( +
    • + +

      {doc}

      +
    • + ))} +
    +
    + + ); +} diff --git a/lib/demoData.ts b/lib/demoData.ts index d7a662f..7191536 100644 --- a/lib/demoData.ts +++ b/lib/demoData.ts @@ -1,3 +1,45 @@ +export const certs = [ + { + id: 1, + src: "/images/about/sertificate.webp", + title: "Пожаростойкие армированные трубы SLT BLOCKFIRE PP-R-GF", + year: "2024", + category: "PP-R-GF", + documents: [ + "СТО 22.21.29-015-17207509-2022 (версия 2) — согласован МЧС России в качестве нормативного документа по пожарной безопасности.", + "СТО 22.21.29-021-17207509-2024 «Автоматическая противопожарная защита многоярусных стеллажных конструкций» — согласован МЧС России №ГУ-исх-66586 от 05.07.2024.", + "Протоколы испытаний по ГОСТ Р 58832 ИЛ НИЦ ПТ и СП ФГБУ ВНИИПО МЧС России № 2249/2.1-2022 от 03.03.2022, №2683/2.1-2023 от 06.10.2023.", + "Свидетельство о государственной регистрации № RU.77.01.34.013.E.001631.07.20 от 07.07.2020.", + ], + }, + { + id: 2, + src: "/images/about/sertificate.webp", + title: "Пожаростойкие однослойные трубы SLT BLOCKFIRE PP-R", + year: "2023", + category: "PP-R", + documents: [ + "СТО 22.21.29-015-17207509-2022 (версия 2) — согласован МЧС России в качестве нормативного документа по пожарной безопасности.", + "СТО 22.21.29-021-17207509-2024 «Автоматическая противопожарная защита многоярусных стеллажных конструкций» — согласован МЧС России №ГУ-исх-66586 от 05.07.2024.", + "Протоколы испытаний ИЛ НИЦ ПТ и СП ФГБУ ВНИИПО МЧС России № 2249/2.1-2022 от 03.03.2022, №2683/2.1-2023 от 06.10.2023.", + "Свидетельство о государственной регистрации № RU.77.01.34.008.E.001638.07.20 от 08.07.2020.", + ], + }, + { + id: 3, + src: "/images/about/sertificate.webp", + title: "Пожаростойкие фитинги SLT BLOCKFIRE PP-R", + year: "2023", + category: "Фитинги", + documents: [ + "СТО 22.21.29-015-17207509-2022 (версия 2) — согласован МЧС России в качестве нормативного документа по пожарной безопасности.", + "СТО 22.21.29-021-17207509-2024 «Автоматическая противопожарная защита многоярусных стеллажных конструкций» — согласован МЧС России №ГУ-исх-66586 от 05.07.2024.", + "Протоколы испытаний по ГОСТ Р 58832 ИЛ НИЦ ПТ и СП ФГБУ ВНИИПО МЧС России № 2249/2.1-2022 от 03.03.2022, №2683/2.1-2023 от 06.10.2023.", + "Свидетельство о государственной регистрации № RU.77.01.34.013.E.001630.07.20 от 07.07.2020.", + ], + }, +]; + export const DATA = [ { name: "P-0834405", diff --git a/messages/en.json b/messages/en.json index 7ad0917..692e5c2 100644 --- a/messages/en.json +++ b/messages/en.json @@ -123,10 +123,8 @@ }, "subPages": { "baza": "Regulatory base", - "certificate": "SLT BLOCKFIRE Certificates", - "notePP": "Installation guide for PP pipes and fittings", - "noteTrailer": "Installation guide for welded saddles", - "noteFlans": "Installation guide for PP flanges" + "certificate": "Certificates", + "notePP": "Guides" }, "normativBaza": { "hero": { diff --git a/messages/ru.json b/messages/ru.json index fd21d8b..298cfec 100644 --- a/messages/ru.json +++ b/messages/ru.json @@ -123,10 +123,8 @@ }, "subPages": { "baza": "Нормативная база", - "certificate": "Сертификаты SLT BLOCKFIRE", - "notePP": "Инструкция по монтажу ПП труб и фитингов", - "noteTrailer": "Инструкция по монтажу вварных сёдел", - "noteFlans": "Инструкция по монтажу фланцев из ПП" + "certificate": "Сертификаты", + "notePP": "Руководства" }, "normativBaza": { "hero": { diff --git a/messages/uz.json b/messages/uz.json index 88bda9a..0e80778 100644 --- a/messages/uz.json +++ b/messages/uz.json @@ -123,10 +123,8 @@ }, "subPages": { "baza": "Normativ baza", - "certificate": "SLT BLOCKFIRE sertifikatlari", - "notePP": "PP trubalar va fitinglar o‘rnatish bo‘yicha qo‘llanmasi", - "noteTrailer": "Qo‘shma tirkamalar o‘rnatish bo‘yicha qo‘llanma", - "noteFlans": "PP flanslar o‘rnatish bo‘yicha qo‘llanma" + "certificate": "Sertifikatlar", + "notePP": "Qo'llanmalar" }, "normativBaza": { "hero": {