add maps to contact page catalog_page added , email addres updated , remove page drop down

This commit is contained in:
nabijonovdavronbek619@gmail.com
2026-02-06 23:03:46 +05:00
parent 873bbb82a9
commit 66bf104cb7
13 changed files with 134 additions and 123 deletions

View File

@@ -0,0 +1,13 @@
import Catalog from "@/components/pages/home/blog/catalog";
import { ProductBanner } from "@/components/pages/products";
export default function Page() {
return (
<div className="bg-[#1e1d1c] pb-30">
<ProductBanner />
<div className="max-w-300 mx-auto w-full pt-20">
<Catalog />
</div>
</div>
);
}

View File

@@ -182,12 +182,14 @@ export function Footer() {
href="mailto:support@fireforce.com"
className="hover:text-[#fa1d1d]"
>
support@fireforce.com
info@ignum-tech.com
</a>
</li>
<li className="flex items-start gap-3">
<MapPin className="mt-1 h-5 w-5 shrink-0 text-white" />
<span>Jl. Dr. Ir Soekarno No. 99x Tabanan - Bali</span>
<span>
{t("footer.address")}
</span>
</li>
</ul>
</div>

View File

@@ -42,7 +42,7 @@ export function Navbar() {
<Link href={`/${locale}/home`} className="hover:cursor-pointer">
<div className="flex items-center gap-2">
<div className=" flex items-center justify-center">
<NavbarLogo/>
<Image src={'/images/IGNUM/PNG/1.@6x.png'} alt="logo image" width={80} height={80} />
</div>
</div>
</Link>
@@ -62,53 +62,21 @@ export function Navbar() {
{t("navbar.about")}
</Link>
{/* Pages Dropdown */}
<div className="relative group h-full">
<button
className="font-unbounded uppercase text-white text-sm h-full font-semibold hover:text-red-500
transition-colors flex items-center gap-1"
>
{t("navbar.pages")}
<ChevronDown
size={16}
className="transition-transform group-hover:rotate-180"
/>
</button>
{/* Dropdown Menu */}
<div
className="absolute top-full left-0 w-40 bg-white rounded-b-md shadow-lg
font-semibold opacity-0 invisible group-hover:opacity-100
group-hover:visible transition-all duration-300
transform translate-y-2 group-hover:translate-y-0
pointer-events-none group-hover:pointer-events-auto overflow-hidden"
>
<Link
href={`/${locale}/faq`}
className="font-unbounded uppercase block px-4 py-2 text-black text-sm hover:bg-red-600
hover:text-white transition-colors"
className="font-unbounded uppercase text-white text-sm h-full flex items-center font-semibold hover:cursor-pointer hover:text-red-500 transition"
>
{t("navbar.faq")}
</Link>
<Link
href={`/${locale}/services`}
className="font-unbounded uppercase block px-4 py-2 text-black text-sm hover:bg-red-600
hover:text-white transition-colors"
className="font-unbounded uppercase text-white text-sm h-full flex items-center font-semibold hover:cursor-pointer hover:text-red-500 transition"
>
{t("navbar.services")}
</Link>
{/* <Link
href={`/${locale}/blog`}
className="font-unbounded uppercase block px-4 py-2 text-black text-sm hover:bg-red-600
hover:text-white transition-colors rounded-b-md"
>
Blog
</Link> */}
</div>
</div>
<Link
href={`/${locale}/products`}
href={`/${locale}/catalog_page`}
className="font-unbounded uppercase text-white text-sm h-full flex items-center font-semibold hover:cursor-pointer hover:text-red-500 transition"
>
{t("navbar.products")}
@@ -210,39 +178,23 @@ export function Navbar() {
</Link>
{/* Mobile Pages Dropdown */}
<div>
<button
onClick={() => setIsDropdownOpen(!isDropdownOpen)}
className="font-unbounded uppercase text-white text-base font-semibold hover:text-red-500 transition flex items-center gap-1 py-2 w-full"
>
{t("navbar.pages")}
<ChevronDown
size={16}
className={`transition-transform ${isDropdownOpen ? "rotate-180" : ""}`}
/>
</button>
{isDropdownOpen && (
<div className="ml-4 mt-2 flex flex-col gap-2">
<Link
href={`/${locale}/faq`}
className="font-unbounded uppercase text-white/80 text-sm hover:text-red-500 transition py-2"
className="font-unbounded uppercase text-white text-base font-semibold hover:text-red-500 transition py-2"
onClick={() => setIsMobileMenuOpen(false)}
>
{t("navbar.faq")}
</Link>
<Link
href={`/${locale}/services`}
className="font-unbounded uppercase text-white/80 text-sm hover:text-red-500 transition py-2"
className="font-unbounded uppercase text-white text-base font-semibold hover:text-red-500 transition py-2"
onClick={() => setIsMobileMenuOpen(false)}
>
{t("navbar.services")}
</Link>
</div>
)}
</div>
<Link
href={`/${locale}/products`}
href={`/${locale}/catalog_page`}
className="font-unbounded uppercase text-white text-base font-semibold hover:text-red-500 transition py-2"
onClick={() => setIsMobileMenuOpen(false)}
>

View File

@@ -6,12 +6,7 @@ export default function ContactHeader() {
const t = useTranslations();
return (
<div className="mb-8 text-center">
<div className="mb-4 flex items-center justify-center gap-2">
<DotAnimatsiya />
<span className="font-almarai text-sm font-semibold tracking-wider text-white">
{t("contact.banner.title")}
</span>
</div>
<h2
className="uppercase font-unbounded bg-linear-to-br from-white via-white to-black
text-transparent bg-clip-text text-4xl font-bold tracking-wide md:text-5xl"

View File

@@ -3,13 +3,15 @@ import { Mail, MapPin, Phone } from "lucide-react";
import ContactHeader from "./contactHeader";
import Form from "./form";
import { useTranslations } from "next-intl";
import Maps from "./maps";
import DotAnimatsiya from "@/components/dot/DotAnimatsiya";
export function Contact() {
const t = useTranslations();
const contactInfo = [
{
icon: Mail,
title:t("contact.form.email"),
title: t("contact.form.email"),
detail: t("contact.form.emailAddress"),
},
{
@@ -46,7 +48,17 @@ export function Contact() {
</div>
{/* Content */}
<div className="relative z-10 mx-auto max-w-4xl px-4 sm:px-6 lg:px-8">
<div className="relative z-10 ">
<div className="flex items-center justify-center w-full">
<div className="mb-4 flex items-center justify-center gap-2">
<DotAnimatsiya />
<span className="font-almarai text-sm font-semibold tracking-wider text-white">
{t("contact.banner.title")}
</span>
</div>
</div>
<Maps />
<div className="relative z-10 mx-auto max-w-4xl px-4 sm:px-6 lg:px-8 space-y-5">
<ContactHeader />
<Form />
@@ -64,11 +76,14 @@ export function Contact() {
<h3 className="font-almarai text-sm font-bold tracking-wider text-white">
{info.title}
</h3>
<p className="font-almarai mt-1 text-sm text-gray-400">{info.detail}</p>
<p className="font-almarai mt-1 text-sm text-gray-400">
{info.detail}
</p>
</div>
))}
</div>
</div>
</div>
</section>
);
}

View File

@@ -0,0 +1,31 @@
export default function Maps() {
return (
<section className="w-full px-4 py-10">
<div className="mx-auto max-w-7xl grid grid-cols-1 md:grid-cols-2 gap-10">
{/* Yandex Map */}
<div className="h-[300px] sm:h-[400px] md:h-[500px] rounded-2xl overflow-hidden shadow-lg border hover:shadow-xl transition">
<iframe
src="https://yandex.uz/map-widget/v1/?ll=69.288118%2C41.323186&mode=search&oid=56350803620&ol=biz&z=16.97"
className="w-full h-full"
frameBorder="0"
allowFullScreen
loading="lazy"
/>
</div>
{/* Google Map */}
<div className="h-[300px] sm:h-[400px] md:h-[500px] rounded-2xl overflow-hidden shadow-lg border hover:shadow-xl transition">
<iframe
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2996.342450769356!2d69.28561627695484!3d41.323166199974985!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x38aef56f76215ce7%3A0xfd64c6a930fb1bbb!2sIGNUM!5e0!3m2!1sru!2s!4v1770203090924"
className="w-full h-full"
allowFullScreen
loading="lazy"
referrerPolicy="no-referrer-when-downgrade"
/>
</div>
</div>
</section>
);
}

View File

@@ -59,10 +59,10 @@ export function Banner() {
{/* Left side - Firefighters Image */}
<div className="flex items-end justify-center ">
<img
src="/images/homeBanner.png"
src="/images/homeBanner3.png"
alt="Firefighters"
loading="lazy"
className="lg:w-150 w-100 lg:h-150 max-[300px]:w-[80vw] object-cover object-right rounded-xl drop-shadow-2xl"
className="lg:w-150 w-100 lg:h-150 max-[300px]:w-[80vw] object-contain object-right rounded-xl drop-shadow-2xl"
/>
</div>

View File

@@ -3,7 +3,7 @@
"banner": {
"title1": "Welcome to Ignum",
"title2": "FIRE PROTECTION GUARDIAN",
"description": "We are seen as a beacon of hope, a figure that brings calm amidst chaos and light in the darkest of moments.",
"description": "We provide professional services for the installation of fire safety systems and the sale of certified protective equipment.",
"cta": "Get Started"
},
"statistics": {
@@ -139,9 +139,9 @@
"privacy": "You agree to our friendly privacy policy",
"send": "SEND MESSAGE",
"email": "EMAIL",
"emailAddress": "support@ignum.com",
"emailAddress": "info@ignum-tech.com",
"location": "Our Location",
"address": "Jl. Dr. Ir. Soekarno No. 99x Tabanan Bali",
"address": "Toshkent shahri , Yunusabod tumani , Niyozbek yo'li 3 tor ko'chasi , 39 uy",
"phone": "Phone"
}
},
@@ -208,7 +208,7 @@
"emergency": "Emergency Call!"
},
"footer": {
"description": "We are seen as a beacon of hope, a figure that brings calm amidst chaos and light in the darkest of moments.",
"description": "We provide professional services for the installation of fire safety systems and the sale of certified protective equipment.",
"quickLinks": {
"title": "QUICK LINKS",
"home": "Home",
@@ -221,7 +221,8 @@
"title": "SUPPORT",
"contact": "Contact",
"help": "Help"
}
},
"address":"Tashkent city, Yunusabad district, 3rd dead-end of Niyozbek Yoli street, house 39"
},
"rasmlar": "Images",
"fotogalereya": "Photo Gallery",

View File

@@ -3,7 +3,7 @@
"banner": {
"title1": "Добро пожаловать в Ignum",
"title2": "Защита от Пожара",
"description": "Мы воспринимаемся как луч надежды, фигура, которая приносит спокойствие среди хаоса и свет в самые темные моменты.",
"description": "Мы предоставляем профессиональные услуги по установке систем пожарной безопасности и продаже сертифицированных средств защиты.",
"cta": "Начать"
},
"statistics": {
@@ -139,9 +139,9 @@
"privacy": "Вы соглашаетесь с нашей дружественной политикой конфиденциальности",
"send": "ОТПРАВИТЬ СООБЩЕНИЕ",
"email": "ЭЛЕКТРОННАЯ ПОЧТА",
"emailAddress": "support@ignum.com",
"emailAddress": "info@ignum-tech.com",
"location": "Наше Местоположение",
"address": "Jl. Dr. Ir. Soekarno No. 99x Tabanan Bali",
"address": "Toshkent shahri , Yunusabod tumani , Niyozbek yo'li 3 tor ko'chasi , 39 uy",
"phone": "Телефон"
}
},
@@ -208,7 +208,7 @@
"emergency": "Экстренный Вызов!"
},
"footer": {
"description": "Мы воспринимаемся как луч надежды, фигура, которая приносит спокойствие среди хаоса и свет в самые темные моменты.",
"description": "Мы предоставляем профессиональные услуги по установке систем пожарной безопасности и продаже сертифицированных средств защиты.",
"quickLinks": {
"title": "БЫСТРЫЕ ССЫЛКИ",
"home": "Главная",
@@ -221,7 +221,8 @@
"title": "ПОДДЕРЖКА",
"contact": "Контакты",
"help": "Помощь"
}
},
"address":"г. Ташкент, Юнусабадский район, 3-й тупик улицы Ниязбек йўли, дом 39"
},
"rasmlar": "Изображения",
"fotogalereya": "Фотогалерея",

View File

@@ -139,9 +139,9 @@
"privacy": "Bizning maxfiylik siyosatimizga rozilik bildirasiz",
"send": "XABAR YUBORISH",
"email": "ELEKTRON POCHTA",
"emailAddress": "support@ignum.com",
"emailAddress": "info@ignum-tech.com",
"location": "Bizning Manzilimiz",
"address": "Jl. Dr. Ir. Soekarno No. 99x Tabanan Bali",
"address": "Toshkent shahri , Yunusabod tumani , Niyozbek yo'li 3 tor ko'chasi , 39 uy",
"phone": "Telefon"
}
},
@@ -208,7 +208,7 @@
"emergency": "Favqulodda Qo'ng'iroq!"
},
"footer": {
"description": "Biz umid nuri, tartibsizlik davrida tinchlik va eng qiyin vaziyatlarda ishonchli himoya manbai sifatida ko'rilamiz.",
"description": "Biz yongin xavfsizligi tizimlarini ornatish va sertifikatlangan himoya vositalari savdosi boyicha professional xizmatlar korsatamiz.",
"quickLinks": {
"title": "TEZKOR HAVOLALAR",
"home": "Asosiy",
@@ -221,7 +221,8 @@
"title": "YORDAM",
"contact": "Aloqa",
"help": "Yordam"
}
},
"address": "Toshkent shahri , Yunusabod tumani , Niyozbek yo'li 3 tor ko'chasi , 39 uy"
},
"rasmlar": "Rasmlar",
"fotogalereya": "Fotogalereya",
@@ -229,8 +230,8 @@
"contactSubTitle": "Xodimlarimiz siz bilan bog'lanishadi",
"enterPhone": "Telefon raqamingiz kiriting",
"send": "Yuborish",
"error":"Xatolik!",
"succes":"Yuborildi!",
"error": "Xatolik!",
"succes": "Yuborildi!",
"priceModal": {
"title": "Narxni bilish",
"product": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 763 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB