new car added and added some new features to header location icon and again added show case section
@@ -2,7 +2,31 @@
|
|||||||
|
|
||||||
import InnerProductcard from "@/components/cards/innerProductcard";
|
import InnerProductcard from "@/components/cards/innerProductcard";
|
||||||
import Title from "@/components/lib_components/title";
|
import Title from "@/components/lib_components/title";
|
||||||
import { avtogreyderlar, avtokran, avtominora, buldozerlar, cement_trucks, dizel, dumb_trucks, eks_yuklagichlar, forkliftlar, gazels, gildirakli_eks, katkalar, kompressorlar, mini_eks, minora, old_yuklagichlar, paletli_eks, paletli_kranlar, teleskop_yuklagichlar, trailers } from "@/data";
|
import {
|
||||||
|
asfalt,
|
||||||
|
assenizator,
|
||||||
|
avtogreyderlar,
|
||||||
|
avtokran,
|
||||||
|
avtominora,
|
||||||
|
betonNasoslar,
|
||||||
|
buldozerlar,
|
||||||
|
cement_trucks,
|
||||||
|
dumb_trucks,
|
||||||
|
eks_yuklagichlar,
|
||||||
|
evakuatorDemo,
|
||||||
|
forkliftlar,
|
||||||
|
gildirakli_eks,
|
||||||
|
katkalar,
|
||||||
|
manipulyator,
|
||||||
|
mini_eks,
|
||||||
|
minora,
|
||||||
|
old_yuklagichlar,
|
||||||
|
paletli_eks,
|
||||||
|
shalandaTraller,
|
||||||
|
teleskop_yuklagichlar,
|
||||||
|
trailers,
|
||||||
|
vodovoz,
|
||||||
|
} from "@/data";
|
||||||
import { useParams } from "next/navigation";
|
import { useParams } from "next/navigation";
|
||||||
|
|
||||||
export default function CartType() {
|
export default function CartType() {
|
||||||
@@ -14,106 +38,143 @@ export default function CartType() {
|
|||||||
|
|
||||||
{/* car type groups */}
|
{/* car type groups */}
|
||||||
<div className="mt-10 grid lg:grid-cols-3 sm:grid-cols-2 grid-cols-1 gap-5 max-w-[1200px] w-full mx-auto">
|
<div className="mt-10 grid lg:grid-cols-3 sm:grid-cols-2 grid-cols-1 gap-5 max-w-[1200px] w-full mx-auto">
|
||||||
|
|
||||||
{/* Avtosementavoz */}
|
{/* Avtosementavoz */}
|
||||||
{carType === "cement-truck" && cement_trucks.map((item)=>{
|
{carType === "cement-truck" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
cement_trucks.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* Samasvallar */}
|
{/* Samasvallar */}
|
||||||
{carType === "dumb-truck" && dumb_trucks.map((item)=>{
|
{carType === "dumb-truck" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
dumb_trucks.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* Traylerlar */}
|
{/* Traylerlar */}
|
||||||
{carType === "trailers" && trailers.map((item)=>{
|
{carType === "trailers" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
trailers.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
{/* Gazellar */}
|
|
||||||
{carType === "gazels" && gazels.map((item)=>{
|
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
|
||||||
})}
|
|
||||||
|
|
||||||
{/* Avtominora */}
|
{/* Avtominora */}
|
||||||
{carType === "avtotowers" && avtominora.map((item)=>{
|
{carType === "avtotowers" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
avtominora.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* Avtokran */}
|
{/* Avtokran */}
|
||||||
{carType === "avtocranes" && avtokran.map((item)=>{
|
{carType === "avtocranes" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
avtokran.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* Minora kranlar */}
|
{/* Minora kranlar */}
|
||||||
{carType === "tower-cranes" && minora.map((item)=>{
|
{carType === "tower-cranes" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
minora.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
{/* Dizel ko'targichlar */}
|
|
||||||
{carType === "lifters" && dizel.map((item)=>{
|
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
|
||||||
})}
|
|
||||||
|
|
||||||
{/* Paletli kranlar */}
|
|
||||||
{carType === "crawler-cranes" && paletli_kranlar.map((item)=>{
|
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
|
||||||
})}
|
|
||||||
|
|
||||||
{/* old yuklagichlar */}
|
{/* old yuklagichlar */}
|
||||||
{carType === "front-loaders" && old_yuklagichlar.map((item)=>{
|
{carType === "front-loaders" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
old_yuklagichlar.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* Teleskopik yuklagichlar */}
|
{/* Teleskopik yuklagichlar */}
|
||||||
{carType === "tele-loaders" && teleskop_yuklagichlar.map((item)=>{
|
{carType === "tele-loaders" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
teleskop_yuklagichlar.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* forkliftlar */}
|
{/* forkliftlar */}
|
||||||
{carType === "forklift-trucks" && forkliftlar.map((item)=>{
|
{carType === "forklift-trucks" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
forkliftlar.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* Paletli ekskavatorlar */}
|
{/* Paletli ekskavatorlar */}
|
||||||
{carType === "crawler-excavators" && paletli_eks.map((item)=>{
|
{carType === "crawler-excavators" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
paletli_eks.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* G'ildirakli ekskavatorlar */}
|
{/* G'ildirakli ekskavatorlar */}
|
||||||
{carType === "wheel-excavators" && gildirakli_eks.map((item)=>{
|
{carType === "wheel-excavators" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
gildirakli_eks.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* Mini-ekskavatorlar */}
|
{/* Mini-ekskavatorlar */}
|
||||||
{carType === "mini-excavators" && mini_eks.map((item)=>{
|
{carType === "mini-excavators" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
mini_eks.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* ekskavator yuklagichlar */}
|
{/* ekskavator yuklagichlar */}
|
||||||
{carType === "excavator-loaders" && eks_yuklagichlar.map((item)=>{
|
{carType === "excavator-loaders" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
eks_yuklagichlar.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* avtogreyderlar */}
|
{/* avtogreyderlar */}
|
||||||
{carType === "avtograders" && avtogreyderlar.map((item)=>{
|
{carType === "avtograders" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
avtogreyderlar.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* Buldozerlar */}
|
{/* Buldozerlar */}
|
||||||
{carType === "buldozers" && buldozerlar.map((item)=>{
|
{carType === "buldozers" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
buldozerlar.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* Katkalar */}
|
{/* Katkalar */}
|
||||||
{carType === "katkas" && katkalar.map((item)=>{
|
{carType === "katkas" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
katkalar.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
{/* Kampressorlar */}
|
{/* Evakuatorlar */}
|
||||||
{carType === "compressors" && kompressorlar.map((item)=>{
|
{carType === "evakuator" &&
|
||||||
return <InnerProductcard data={item} key={item.id} />
|
evakuatorDemo.map((item) => {
|
||||||
})}
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
|
{/* shalanda */}
|
||||||
|
{carType === "shalanda_traller" &&
|
||||||
|
shalandaTraller.map((item) => {
|
||||||
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
|
{/* asfalt yotqizuvchi */}
|
||||||
|
{carType === "asfalt_frez" &&
|
||||||
|
asfalt.map((item) => {
|
||||||
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
|
{/* asfalt ko'chiruvchi */}
|
||||||
|
{carType === "beton_nasos" &&
|
||||||
|
betonNasoslar.map((item) => {
|
||||||
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
|
{/* manipulyator */}
|
||||||
|
{carType === "manipulyator" &&
|
||||||
|
manipulyator.map((item) => {
|
||||||
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
|
{/* vodovoz */}
|
||||||
|
{carType === "vodovoz" &&
|
||||||
|
vodovoz.map((item) => {
|
||||||
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
|
|
||||||
|
{/* assertizator */}
|
||||||
|
{carType === "assenizator" &&
|
||||||
|
assenizator.map((item) => {
|
||||||
|
return <InnerProductcard data={item} key={item.id} />;
|
||||||
|
})}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -5,14 +5,13 @@ import Faq from "@/components/pageParts/faq";
|
|||||||
import Partners from "@/components/pageParts/partners";
|
import Partners from "@/components/pageParts/partners";
|
||||||
import Map from "@/components/pageParts/map";
|
import Map from "@/components/pageParts/map";
|
||||||
import CustomSlider from "@/components/pageParts/newsSlider";
|
import CustomSlider from "@/components/pageParts/newsSlider";
|
||||||
import Footer from "@/components/nav_foot/footer";
|
|
||||||
import HeroSection from "@/components/pageParts/hero";
|
import HeroSection from "@/components/pageParts/hero";
|
||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<HeroSection/>
|
<HeroSection />
|
||||||
<section id="products" className=" mb-10">
|
<section id="products" className="mt-5 mb-10">
|
||||||
<Products />
|
<Products />
|
||||||
</section>
|
</section>
|
||||||
<Texnika />
|
<Texnika />
|
||||||
@@ -22,7 +21,10 @@ export default function Home() {
|
|||||||
</section>
|
</section>
|
||||||
<Faq />
|
<Faq />
|
||||||
<Partners />
|
<Partners />
|
||||||
<Map />
|
<section id="map">
|
||||||
|
<Map />
|
||||||
|
</section>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
assets/assenizator5.jpg
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
assets/cranes/kran130.jpg
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
assets/cranes/kran30.jpg
Normal file
|
After Width: | Height: | Size: 186 KiB |
BIN
assets/cranes/kran50.jpg
Normal file
|
After Width: | Height: | Size: 231 KiB |
BIN
assets/cranes/kran75.jpg
Normal file
|
After Width: | Height: | Size: 242 KiB |
BIN
assets/cranes/manipulyator7.jpg
Normal file
|
After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 11 KiB |
BIN
assets/details/cranes/all_cranes.jpg
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
assets/details/cranes/avtolift28.jpg
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
assets/details/cranes/avtolift53.jpg
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
assets/details/cranes/avtolift63.jpg
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
assets/details/cranes/avtovishka28.jpg
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
assets/details/cranes/avtovishka36.jpg
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
assets/details/cranes/avtovishka45.jpg
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
assets/details/cranes/avtovishka60.jpg
Normal file
|
After Width: | Height: | Size: 148 KiB |
BIN
assets/details/cranes/avtovishka75.jpg
Normal file
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 10 KiB |
BIN
assets/details/excavators/excavator.jpg
Normal file
|
After Width: | Height: | Size: 141 KiB |
BIN
assets/details/excavators/excavator_mini1.jpg
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
assets/details/excavators/excavator_mini2.jpg
Normal file
|
After Width: | Height: | Size: 147 KiB |
BIN
assets/details/loaders/avtogreyder.jpg
Normal file
|
After Width: | Height: | Size: 156 KiB |
BIN
assets/details/loaders/teleskopik_bobkat.jpg
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
assets/details/loaders/teleskopik_jcb.jpg
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
assets/details/loaders/teleskopik_katta.jpg
Normal file
|
After Width: | Height: | Size: 170 KiB |
BIN
assets/details/loaders/teleskopik_manitau.jpg
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
assets/details/old_yuklagich18kub.jpg
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
assets/details/old_yuklagich3.jpg
Normal file
|
After Width: | Height: | Size: 209 KiB |
BIN
assets/details/old_yuklagich_mini1.jpg
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
assets/details/old_yuklagich_mini2.jpg
Normal file
|
After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 9.6 KiB |
BIN
assets/details/roaders/katok10.jpg
Normal file
|
After Width: | Height: | Size: 134 KiB |
BIN
assets/details/roaders/katok20.jpg
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
assets/details/roaders/katok3.jpg
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
assets/details/roaders/katok4.jpg
Normal file
|
After Width: | Height: | Size: 209 KiB |
BIN
assets/details/roaders/katok6.jpg
Normal file
|
After Width: | Height: | Size: 205 KiB |
BIN
assets/details/roaders/pnevka_katok16.jpg
Normal file
|
After Width: | Height: | Size: 178 KiB |
BIN
assets/details/roaders/pnevka_katok4.jpg
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
assets/details/trucks/beton_nasos.jpg
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
assets/evakuator/evakuator_20_tonna.jpg
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
assets/evakuator/evakuator_5_tonna.jpg
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
assets/evakuator/evakuator_fura.jpg
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
assets/evakuator/shalanda.jpg
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
assets/evakuator/traller.jpg
Normal file
|
After Width: | Height: | Size: 80 KiB |
@@ -75,12 +75,20 @@ export {default as Kranminora1} from './details/cranes/1-1.png';
|
|||||||
export {default as Kranminora2} from './details/cranes/1-4.png';
|
export {default as Kranminora2} from './details/cranes/1-4.png';
|
||||||
export {default as Kranminora3} from './details/cranes/1-3.png';
|
export {default as Kranminora3} from './details/cranes/1-3.png';
|
||||||
export {default as Kranmexanik1} from './details/cranes/1-2.png';
|
export {default as Kranmexanik1} from './details/cranes/1-2.png';
|
||||||
|
export {default as Avtolift28} from './details/cranes/avtolift28.jpg';
|
||||||
|
export {default as Avtolift53} from './details/cranes/avtolift53.jpg';
|
||||||
|
export {default as Avtolift63} from './details/cranes/avtolift63.jpg';
|
||||||
|
export {default as Avtovishka28} from './details/cranes/avtovishka28.jpg';
|
||||||
|
export {default as Avtovishka36} from './details/cranes/avtovishka36.jpg';
|
||||||
|
export {default as Avtovishka45} from './details/cranes/avtovishka45.jpg';
|
||||||
|
export {default as Avtovishka60} from './details/cranes/avtovishka60.jpg';
|
||||||
|
export {default as Avtovishka75} from './details/cranes/avtovishka75.jpg';
|
||||||
|
|
||||||
// products avtokranlar images
|
// products avtokranlar images
|
||||||
export {default as Avtokran1} from './details/cranes/2-1.png';
|
export {default as Kran30} from './cranes/kran30.jpg';
|
||||||
export {default as Avtokran2} from './details/cranes/2-2.png';
|
export {default as Kran50} from './cranes/kran50.jpg';
|
||||||
export {default as Avtokran3} from './details/cranes/2-3.webp';
|
export {default as Kran75} from './cranes/kran75.jpg';
|
||||||
export {default as Avtokran4} from './details/cranes/2-4.webp';
|
export {default as Kran130} from './cranes/kran130.jpg';
|
||||||
|
|
||||||
// products paletli kran images
|
// products paletli kran images
|
||||||
export {default as Palet1} from './details/cranes/3-1.png';
|
export {default as Palet1} from './details/cranes/3-1.png';
|
||||||
@@ -92,6 +100,7 @@ export {default as Minora1} from './details/cranes/4-1.png';
|
|||||||
export {default as Minora2} from './details/cranes/4-3.png';
|
export {default as Minora2} from './details/cranes/4-3.png';
|
||||||
export {default as Minora3} from './details/cranes/4-5.jpg';
|
export {default as Minora3} from './details/cranes/4-5.jpg';
|
||||||
export {default as Minora4} from './details/cranes/4-6.jpg';
|
export {default as Minora4} from './details/cranes/4-6.jpg';
|
||||||
|
export {default as All_cranes} from './details/cranes/all_cranes.jpg';
|
||||||
|
|
||||||
// products dizel kotargich images
|
// products dizel kotargich images
|
||||||
export {default as Dizel1} from './details/cranes/5-1.png';
|
export {default as Dizel1} from './details/cranes/5-1.png';
|
||||||
@@ -111,9 +120,14 @@ export {default as Old4} from './details/loaders/1-4.png';
|
|||||||
export {default as Old5} from './details/loaders/1-5.webp';
|
export {default as Old5} from './details/loaders/1-5.webp';
|
||||||
export {default as Old6} from './details/loaders/1-6.webp';
|
export {default as Old6} from './details/loaders/1-6.webp';
|
||||||
export {default as Old7} from './details/loaders/1-7.webp';
|
export {default as Old7} from './details/loaders/1-7.webp';
|
||||||
export {default as Tel1} from './details/loaders/2-1.png';
|
export {default as Old_yuklagich_biru8} from './details/old_yuklagich18kub.jpg';
|
||||||
export {default as Tel2} from './details/loaders/2-2.jpg';
|
export {default as Old_yuklagich_3} from './details/old_yuklagich3.jpg';
|
||||||
export {default as Tel3} from './details/loaders/2-4.png';
|
export {default as Old_yuklagich_mini1} from './details/old_yuklagich_mini1.jpg';
|
||||||
|
export {default as Old_yuklagich_mini2} from './details/old_yuklagich_mini2.jpg';
|
||||||
|
export {default as Tel1} from './details/loaders/teleskopik_manitau.jpg';
|
||||||
|
export {default as Tel2} from './details/loaders/teleskopik_bobkat.jpg';
|
||||||
|
export {default as Tel3} from './details/loaders/teleskopik_katta.jpg';
|
||||||
|
export {default as Tel4} from './details/loaders/teleskopik_jcb.jpg'
|
||||||
export {default as Fork1} from './details/loaders/3-1.png';
|
export {default as Fork1} from './details/loaders/3-1.png';
|
||||||
export {default as Fork2} from './details/loaders/3-2.jpeg';
|
export {default as Fork2} from './details/loaders/3-2.jpeg';
|
||||||
export {default as Fork3} from './details/loaders/3-3.webp';
|
export {default as Fork3} from './details/loaders/3-3.webp';
|
||||||
@@ -133,11 +147,11 @@ export {default as Digger} from './excavators/digger.png';
|
|||||||
// products Paletli of ekskavator images
|
// products Paletli of ekskavator images
|
||||||
export {default as Paletli1} from './details/excavators/1-1.png';
|
export {default as Paletli1} from './details/excavators/1-1.png';
|
||||||
export {default as Paletli2} from './details/excavators/1-2.png';
|
export {default as Paletli2} from './details/excavators/1-2.png';
|
||||||
export {default as Balon1} from './details/excavators/2-1.png';
|
export {default as Balon1} from './details/excavators/excavator_mini1.jpg';
|
||||||
export {default as Balon2} from './details/excavators/2-2.png';
|
export {default as Balon2} from './details/excavators/excavator_mini2.jpg';
|
||||||
export {default as Mini1} from './details/excavators/3-1.png';
|
export {default as Mini1} from './details/excavators/3-1.png';
|
||||||
export {default as Mini2} from './details/excavators/3-2.png';
|
export {default as Mini2} from './details/excavators/3-2.png';
|
||||||
export {default as Digger1} from './details/excavators/4-1.png';
|
export {default as Digger1} from './details/excavators/excavator.jpg';
|
||||||
export {default as Digger2} from './details/excavators/4-2.png';
|
export {default as Digger2} from './details/excavators/4-2.png';
|
||||||
export {default as Digger3} from './details/excavators/4-3.png';
|
export {default as Digger3} from './details/excavators/4-3.png';
|
||||||
|
|
||||||
@@ -145,20 +159,46 @@ export {default as Digger3} from './details/excavators/4-3.png';
|
|||||||
export {default as Grayder} from './roders/avtogreyder.png';
|
export {default as Grayder} from './roders/avtogreyder.png';
|
||||||
export {default as Buldozer} from './roders/buldozer.png';
|
export {default as Buldozer} from './roders/buldozer.png';
|
||||||
export {default as Kat} from './roders/kat.png';
|
export {default as Kat} from './roders/kat.png';
|
||||||
export {default as Kompressor} from './roders/kompressor.png';
|
export {default as Evakuator} from './evakuator/evakuator_fura.jpg';
|
||||||
|
|
||||||
// avtograyder , buldozer , katka , kampressor
|
// avtograyder , buldozer , katka , kampressor
|
||||||
export {default as Grayder1} from './details/roaders/1-1.png';
|
export {default as Grayder1} from './details/loaders/avtogreyder.jpg';
|
||||||
export {default as Grayder2} from './details/roaders/1-2.png';
|
export {default as Grayder2} from './details/roaders/1-2.png';
|
||||||
export {default as Grayder3} from './details/roaders/1-3.png';
|
export {default as Grayder3} from './details/roaders/1-3.png';
|
||||||
export {default as Buldozer1} from './details/roaders/2-1.png';
|
export {default as Buldozer1} from './details/roaders/2-1.png';
|
||||||
export {default as Buldozer2} from './details/roaders/2-2.png';
|
export {default as Buldozer2} from './details/roaders/2-2.png';
|
||||||
export {default as Buldozer3} from './details/roaders/2-3.png';
|
export {default as Buldozer3} from './details/roaders/2-3.png';
|
||||||
export {default as Katka1} from './details/roaders/3-1.png';
|
export {default as Katok3} from './details/roaders/katok3.jpg';
|
||||||
export {default as Katka2} from './details/roaders/3-2.png';
|
export {default as Katok4} from './details/roaders/katok4.jpg';
|
||||||
export {default as Kampressor1} from './details/roaders/4-1.png';
|
export {default as Katok6} from './details/roaders/katok6.jpg';
|
||||||
export {default as Kampressor2} from './details/roaders/4-3.png';
|
export {default as Katok10} from './details/roaders/katok10.jpg';
|
||||||
export {default as Kampressor3} from './details/roaders/4-5.png';
|
export {default as Katok20} from './details/roaders/katok20.jpg';
|
||||||
|
export {default as Pnevka_Katok4} from './details/roaders/pnevka_katok4.jpg';
|
||||||
|
export {default as Pnevka_Katok16} from './details/roaders/pnevka_katok16.jpg';
|
||||||
|
export {default as Evakuator5} from './evakuator/evakuator_5_tonna.jpg';
|
||||||
|
export {default as Evakuator20} from './evakuator/evakuator_20_tonna.jpg';
|
||||||
|
export {default as EvakuatorGruzavoy} from './evakuator/evakuator_fura.jpg';
|
||||||
|
|
||||||
|
// shalanda
|
||||||
|
export {default as Shalanda} from './evakuator/shalanda.jpg';
|
||||||
|
export {default as Traller} from './evakuator/traller.jpg';
|
||||||
|
|
||||||
|
// asfalt
|
||||||
|
export { default as Aspal_800} from './roders/aspal800.jpg';
|
||||||
|
export {default as Aspal_1800} from './roders/aspal1800.jpg';
|
||||||
|
export {default as Aspal_k} from './roders/aspal_k.jpg'
|
||||||
|
|
||||||
|
// beton nasos
|
||||||
|
export {default as Beton_nasos} from './details/trucks/beton_nasos.jpg'
|
||||||
|
|
||||||
|
// vodovoz
|
||||||
|
export {default as Vodovoz} from './vodavoz6.jpg';
|
||||||
|
|
||||||
|
// assenizator
|
||||||
|
export {default as Assenizator} from './assenizator5.jpg';
|
||||||
|
|
||||||
|
// manipulyator
|
||||||
|
export {default as Manipulyator} from './cranes/manipulyator7.jpg';
|
||||||
|
|
||||||
// avto brands
|
// avto brands
|
||||||
export {default as Gehl} from './brands/gehl.png'
|
export {default as Gehl} from './brands/gehl.png'
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 13 KiB |
BIN
assets/roders/aspal1800.jpg
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
assets/roders/aspal800.jpg
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
assets/roders/aspal_k.jpg
Normal file
|
After Width: | Height: | Size: 151 KiB |
BIN
assets/vodavoz6.jpg
Normal file
|
After Width: | Height: | Size: 112 KiB |
@@ -24,12 +24,12 @@ export default function InnerProductcard({ data }: { data: innerCardTypes }) {
|
|||||||
boxShadow: "0px 0px 15px rgba(0,0,0,0.1)",
|
boxShadow: "0px 0px 15px rgba(0,0,0,0.1)",
|
||||||
}}
|
}}
|
||||||
whileTap={{ scale: 0.97 }}
|
whileTap={{ scale: 0.97 }}
|
||||||
className="rounded-lg overflow-hidden bg-white transition-all"
|
className="h-[420px] rounded-lg overflow-hidden bg-white transition-all"
|
||||||
>
|
>
|
||||||
<Link
|
<Link
|
||||||
href={`/${route.lang}/${route.carType}/${data.name}`}
|
href={`/${route.lang}/${route.carType}/${data.name}`}
|
||||||
onClick={() => setDetail(data)}
|
onClick={() => setDetail(data)}
|
||||||
className="flex flex-col items-center justify-between rounded-lg hover:cursor-pointer"
|
className="h-full flex flex-col items-center justify-between rounded-lg hover:cursor-pointer"
|
||||||
>
|
>
|
||||||
{/* Rasm qismi */}
|
{/* Rasm qismi */}
|
||||||
<div className="rounded-t-lg bg-white">
|
<div className="rounded-t-lg bg-white">
|
||||||
|
|||||||
@@ -17,34 +17,37 @@ export default function ProductCard({ data }: { data: ProductTypes }) {
|
|||||||
viewport={{ once: true, amount: 0.2 }}
|
viewport={{ once: true, amount: 0.2 }}
|
||||||
transition={{ duration: 0.3, ease: "easeOut" }}
|
transition={{ duration: 0.3, ease: "easeOut" }}
|
||||||
whileHover={{
|
whileHover={{
|
||||||
scale: 1.05,
|
boxShadow: "0px 0px 15px rgba(0,0,0,0.8)",
|
||||||
boxShadow: "0px 0px 15px rgba(0,0,0,0.1)",
|
|
||||||
}}
|
}}
|
||||||
whileTap={{ scale: 0.98 }}
|
whileTap={{ scale: 0.98 }}
|
||||||
|
className="rounded-xl border-2 border-primary h-[430px]"
|
||||||
>
|
>
|
||||||
<Link
|
<Link
|
||||||
href={`/${lang}/${data.path}`}
|
href={`/${lang}/${data.path}`}
|
||||||
className="h-[400px] flex flex-col items-center justify-between rounded-lg bg-white transition-transform"
|
className="h-full flex flex-col items-center justify-between rounded-lg bg-white transition-transform"
|
||||||
>
|
>
|
||||||
{/* Yuqori qism - rasm */}
|
{/* Yuqori qism - rasm */}
|
||||||
<div className="rounded-t-lg bg-white py-10 px-2 flex justify-center items-center">
|
<div className="rounded-t-lg bg-white py-10 px-2 flex justify-center items-center">
|
||||||
<Image
|
<Image
|
||||||
src={data.image}
|
src={data.image}
|
||||||
alt={data.truck_name}
|
alt={data.truck_name}
|
||||||
width={200}
|
width={260}
|
||||||
height={200}
|
height={200}
|
||||||
className="object-contain max-h-[200px] h-full"
|
className="object-contain max-h-[200px] h-full rounded-xl"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Pastki qism - matn */}
|
{/* Pastki qism - matn */}
|
||||||
<div className="bg-[#fafafa] w-full py-5 rounded-b-lg flex flex-col items-center justify-center space-y-1">
|
<div className="bg-[#fafafa] w-full py-5 rounded-b-lg flex flex-col items-center justify-center space-y-1">
|
||||||
<div className="font-medium text-gray-800 text-lg text-center">
|
<div className="font-medium text-primary text-xl text-center">
|
||||||
<Text txt={data.truck_name} />
|
<Text txt={data.truck_name} />
|
||||||
</div>
|
</div>
|
||||||
<div className="text-secondary text-sm text-center">
|
<div className="text-secondary text-md font-extrabold text-center">
|
||||||
<Text txt={data.desc} />
|
<Text txt={data.desc} />
|
||||||
</div>
|
</div>
|
||||||
|
<div className="text-center text-secondary bg-primary max-w-[200px] w-full rounded-xl text-lg py-2 hover:cursor-pointer">
|
||||||
|
<Text txt="more" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Link>
|
</Link>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|||||||
@@ -2,64 +2,115 @@
|
|||||||
|
|
||||||
import React, { useEffect, useRef } from "react";
|
import React, { useEffect, useRef } from "react";
|
||||||
|
|
||||||
interface YandexMapProps {
|
interface GoogleMapProps {
|
||||||
lat?: number;
|
lat?: number;
|
||||||
lng?: number;
|
lng?: number;
|
||||||
zoom?: number;
|
zoom?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function YandexMap({
|
export default function GoogleMap({
|
||||||
lat = 41.263731,
|
lat = 41.263731,
|
||||||
lng = 69.219434,
|
lng = 69.219434,
|
||||||
zoom = 12,
|
zoom = 17,
|
||||||
}: YandexMapProps) {
|
}: GoogleMapProps) {
|
||||||
const mapRef = useRef<HTMLDivElement>(null);
|
const mapRef = useRef<HTMLDivElement | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Yandex Map scriptini dinamik yuklash
|
let map: google.maps.Map | null = null;
|
||||||
if (!window.ymaps) {
|
let marker: google.maps.Marker | null = null;
|
||||||
|
|
||||||
|
// 🔹 Google script yuklash funksiyasi
|
||||||
|
function loadGoogleMapsScript(callback: () => void) {
|
||||||
|
if (typeof window.google === "object" && window.google.maps) {
|
||||||
|
callback();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const existingScript = document.getElementById("googleMaps");
|
||||||
|
if (existingScript) {
|
||||||
|
existingScript.addEventListener("load", callback);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const script = document.createElement("script");
|
const script = document.createElement("script");
|
||||||
script.src = "https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=5169ae9d-529a-43f8-9cb1-30e1a3360dac";
|
script.id = "googleMaps";
|
||||||
|
script.src = `https://maps.googleapis.com/maps/api/js?key=AIzaSyCiq6iQrcZX6jJMkK_8eT56IeeZDY0LUYo`;
|
||||||
script.async = true;
|
script.async = true;
|
||||||
script.onload = () => initMap();
|
script.defer = true;
|
||||||
|
script.onload = callback;
|
||||||
document.body.appendChild(script);
|
document.body.appendChild(script);
|
||||||
} else {
|
|
||||||
initMap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 🔹 Google Mapni ishga tushirish
|
||||||
function initMap() {
|
function initMap() {
|
||||||
if (!mapRef.current || !window.ymaps) return;
|
if (!mapRef.current || !window.google) return;
|
||||||
|
|
||||||
window.ymaps.ready(() => {
|
map = new window.google.maps.Map(mapRef.current, {
|
||||||
const map = new window.ymaps.Map(mapRef.current!, {
|
center: { lat, lng },
|
||||||
center: [lat, lng],
|
zoom,
|
||||||
zoom,
|
mapTypeControl: false,
|
||||||
controls: ["zoomControl", "typeSelector", "fullscreenControl"],
|
streetViewControl: false,
|
||||||
});
|
fullscreenControl: true,
|
||||||
|
});
|
||||||
|
|
||||||
const placemark = new window.ymaps.Placemark(
|
// 🔸 Custom marker (svg yoki png)
|
||||||
[lat, lng],
|
marker = new window.google.maps.Marker({
|
||||||
{
|
position: { lat, lng },
|
||||||
balloonContent: `
|
map,
|
||||||
<div style="font-size:14px">
|
title: "Bizning joylashuv",
|
||||||
<b>Bizning joylashuv:</b><br/>
|
icon: {
|
||||||
Toshkent sh., Mustaqillik maydoni<br/>
|
url: "/custom-marker.svg", // 📍 custom icon
|
||||||
<a href="https://yandex.uz/maps/?ll=${lng}%2C${lat}&z=14" target="_blank">Yandex xaritada ochish</a>
|
scaledSize: new window.google.maps.Size(45, 45),
|
||||||
</div>
|
anchor: new window.google.maps.Point(22, 45),
|
||||||
`,
|
},
|
||||||
},
|
});
|
||||||
{
|
|
||||||
iconColor: "#ff0000",
|
|
||||||
draggable: false,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
map.geoObjects.add(placemark);
|
// 🔸 Marker click eventi
|
||||||
|
marker.addListener("click", () => {
|
||||||
|
console.log("Marker clicked!");
|
||||||
|
new window.google.maps.InfoWindow({
|
||||||
|
content: `
|
||||||
|
<div style="font-size:14px; line-height:1.5;">
|
||||||
|
<b>Bizning joylashuv:</b><br/>
|
||||||
|
Toshkent sh., Mustaqillik maydoni<br/>
|
||||||
|
<a href="https://www.google.com/maps?q=${lat},${lng}" target="_blank">Google xaritada ochish</a>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
}).open(map!, marker!);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 🔸 Xarita ustida click qilinsa
|
||||||
|
map.addListener("click", (event: google.maps.MapMouseEvent) => {
|
||||||
|
if (!event.latLng) return;
|
||||||
|
const coords = event.latLng.toJSON();
|
||||||
|
console.log("Map clicked at:", coords);
|
||||||
|
|
||||||
|
// Markazni o‘zgartirish
|
||||||
|
map!.setCenter(coords);
|
||||||
|
|
||||||
|
// Zoomni saqlab qolish (setZoom ishlatish mumkin)
|
||||||
|
const currentZoom = map!.getZoom() ?? 17;
|
||||||
|
map!.setZoom(currentZoom);
|
||||||
|
|
||||||
|
// Marker joyini o‘zgartirish
|
||||||
|
marker!.setPosition(coords);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 🔹 Scriptni yuklash
|
||||||
|
loadGoogleMapsScript(initMap);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
// tozalash
|
||||||
|
if (map) map = null;
|
||||||
|
if (marker) marker = null;
|
||||||
|
};
|
||||||
}, [lat, lng, zoom]);
|
}, [lat, lng, zoom]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full h-[500px] rounded-lg shadow-md overflow-hidden" ref={mapRef}></div>
|
<div
|
||||||
|
ref={mapRef}
|
||||||
|
className="w-full h-[400px] rounded-lg shadow-md overflow-hidden"
|
||||||
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { FaLocationDot } from "react-icons/fa6";
|
import { FaLocationDot } from "react-icons/fa6";
|
||||||
|
import Text from "../lib_components/text";
|
||||||
|
|
||||||
export default function Header() {
|
export default function Header() {
|
||||||
return (
|
return (
|
||||||
@@ -7,12 +8,21 @@ export default function Header() {
|
|||||||
className="bg-primary py-3 flex items-center sm:justify-around justify-center px-4"
|
className="bg-primary py-3 flex items-center sm:justify-around justify-center px-4"
|
||||||
>
|
>
|
||||||
<div className="max-w-[1500px] w-full mx-auto flex items-center sm:justify-between justify-center gap-4 flex-wrap ">
|
<div className="max-w-[1500px] w-full mx-auto flex items-center sm:justify-between justify-center gap-4 flex-wrap ">
|
||||||
|
<div className="flex justify-center items-center gap-2 text-white max-w-[250px] w-full ">
|
||||||
<div className="flex justify-center items-center text-white max-w-[250px] w-full ">
|
|
||||||
Uzbekistan , Tashkent
|
Uzbekistan , Tashkent
|
||||||
<span className="text-[#f2a01c] text-[20px]">
|
<a href="#map" className="text-[#f2a01c] text-[20px]">
|
||||||
<FaLocationDot />
|
<FaLocationDot />
|
||||||
</span>
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex flex-col items-center justify-center">
|
||||||
|
<div className="text-white text-lg">
|
||||||
|
<Text txt="work_day_title" />
|
||||||
|
</div>
|
||||||
|
<div className="text-secondary text-xl">
|
||||||
|
<Text txt="work_day" />
|
||||||
|
</div>
|
||||||
|
<p className="text-xl text-secondary">24/7</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@@ -24,7 +34,6 @@ export default function Header() {
|
|||||||
+998 33 252 00 00
|
+998 33 252 00 00
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,53 +2,51 @@
|
|||||||
|
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
|
import Text from "../lib_components/text";
|
||||||
|
|
||||||
export default function HeroSection() {
|
export default function HeroSection() {
|
||||||
return (
|
return (
|
||||||
<section
|
<section
|
||||||
dir="ltr"
|
dir="ltr"
|
||||||
className="relative w-full md:h-[300px] max-md:py-10 max-lg:px-2 overflow-hidden flex items-center justify-center"
|
className="relative w-full md:h-[500px] max-md:py-10 max-lg:px-2 overflow-hidden flex items-center justify-between"
|
||||||
>
|
>
|
||||||
<Image
|
{/* <Image
|
||||||
src="/hero2.jpg" // public papkaga rasm joylash (masalan, texnika rasmi)
|
src="/hero2.jpg" // public papkaga rasm joylash (masalan, texnika rasmi)
|
||||||
alt="SpetsTexnika"
|
alt="SpetsTexnika"
|
||||||
width={800}
|
width={800}
|
||||||
height={400}
|
height={400}
|
||||||
className="object-contain rounded-3xl"
|
className="object-contain rounded-3xl"
|
||||||
/>
|
/> */}
|
||||||
|
|
||||||
|
|
||||||
{/* Asosiy kontent */}
|
{/* Asosiy kontent */}
|
||||||
{/* <div className="relative z-20 max-w-6xl mx-auto md:px-6 px-3 text-primary flex flex-col md:flex-row items-center gap-5 justify-between">
|
{/* <div className="absolute inset-0 -z-10 mx-auto w-full h-full">
|
||||||
<div className="absolute inset-0 z-10">
|
<Image
|
||||||
<Image
|
src="/2.jpg"
|
||||||
src="/hero2.jpg" // public papkaga rasm joylash (masalan, texnika rasmi)
|
alt="SpetsTexnika"
|
||||||
alt="SpetsTexnika"
|
fill
|
||||||
fill
|
className="object-cover"
|
||||||
className="object-cover opacity-30"
|
priority
|
||||||
priority
|
/>
|
||||||
/>
|
</div> */}
|
||||||
</div>
|
|
||||||
|
|
||||||
Chap tomondagi matn
|
<div className="relative z-20 max-w-7xl w-full mx-auto md:px-6 px-3 text-primary flex flex-col md:flex-row items-center gap-5 justify-between">
|
||||||
|
{/* Chap tomondagi matn */}
|
||||||
<motion.div
|
<motion.div
|
||||||
className="space-y-6 max-w-xl"
|
className="space-y-3 max-w-xl backdrop-blur-3xl bg-[#ffffff4a] rounded-xl py-6 px-4"
|
||||||
initial={{ opacity: 0, x: -60 }}
|
initial={{ opacity: 0, x: -60 }}
|
||||||
animate={{ opacity: 1, x: 0 }}
|
animate={{ opacity: 1, x: 0 }}
|
||||||
transition={{ duration: 0.8, ease: "easeOut" }}
|
transition={{ duration: 0.8, ease: "easeOut" }}
|
||||||
>
|
>
|
||||||
<h1 className="text-2xl lg:text-4xl font-extrabold leading-tight">
|
<div className="text-2xl lg:text-4xl font-extrabold leading-tight text-primary">
|
||||||
Ishonchli <span className="text-yellow-400">SpesTexnika</span> —
|
<Text txt="hero_title"/>
|
||||||
sizning loyihangiz uchun eng yaxshi tanlov!
|
</div>
|
||||||
</h1>
|
|
||||||
|
|
||||||
<p className="text-lg text-gray-600">
|
<div className="text-xl font-medium text-secondary">
|
||||||
Biz eng so‘nggi texnikalar, maxsus transportlar va qurilish
|
<Text txt="hero_desc"/>
|
||||||
uskunalarini qulay narxda taqdim etamiz.
|
</div>
|
||||||
</p>
|
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
O‘ng tomondagi texnika rasmi
|
{/* O‘ng tomondagi texnika rasmi */}
|
||||||
<motion.div
|
<motion.div
|
||||||
className="hidden md:block"
|
className="hidden md:block"
|
||||||
initial={{ opacity: 0, x: 80 }}
|
initial={{ opacity: 0, x: 80 }}
|
||||||
@@ -63,7 +61,7 @@ export default function HeroSection() {
|
|||||||
className="drop-shadow-2xl rounded-xl"
|
className="drop-shadow-2xl rounded-xl"
|
||||||
/>
|
/>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
</div> */}
|
</div>
|
||||||
|
|
||||||
{/* Pastdagi to‘lqinli animatsiya (dekor) */}
|
{/* Pastdagi to‘lqinli animatsiya (dekor) */}
|
||||||
{/* <motion.div
|
{/* <motion.div
|
||||||
|
|||||||
@@ -18,23 +18,23 @@ export default function Map() {
|
|||||||
<div className="text-left flex w-full justify-start">
|
<div className="text-left flex w-full justify-start">
|
||||||
<Title text="contacts" />
|
<Title text="contacts" />
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center justify-start gap-2 text-gray-500 text-[20px] ">
|
<div className="flex items-center justify-start gap-2 text-gray-500 text-[18px] ">
|
||||||
<span className="text-secondary">
|
<span className="text-secondary">
|
||||||
<FaPhoneAlt />
|
<FaPhoneAlt />
|
||||||
</span>
|
</span>
|
||||||
+998 33 252-00-00
|
+998 33 252-00-00
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center justify-start gap-2 text-gray-500 text-[20px] ">
|
<div className="flex items-center justify-start gap-2 text-gray-500 text-[18px] ">
|
||||||
<span className="text-secondary">
|
<span className="text-secondary">
|
||||||
<FaTelegram />
|
<FaTelegram />
|
||||||
</span>
|
</span>
|
||||||
spes-texnika
|
spes-texnika
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center justify-start gap-2 text-gray-500 text-[20px] ">
|
<div className="flex items-center justify-start gap-2 text-gray-500 text-[18px] ">
|
||||||
<span className="text-secondary">
|
<span className="text-secondary">
|
||||||
<BiTargetLock />
|
<BiTargetLock />
|
||||||
</span>
|
</span>
|
||||||
Yakkasaroy , Toshkent
|
Toshkent , Yakkasaroy , Xushtepa 6
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -26,30 +26,30 @@ const productFilterTypesMainPage: productFilterTypes[] = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
export default function Products() {
|
export default function Products() {
|
||||||
const [productFilter, setProductFilter] = useState<string | null>(null);
|
//const [productFilter, setProductFilter] = useState<string | null>(null);
|
||||||
|
|
||||||
const [cars, setCars] = useState(allProducts);
|
const [cars, setCars] = useState(allProducts);
|
||||||
|
|
||||||
// execute filetr function
|
// execute filetr function
|
||||||
useEffect(() => {
|
// useEffect(() => {
|
||||||
if (productFilter === "trucks") {
|
// if (productFilter === "trucks") {
|
||||||
setCars(trucks);
|
// setCars(trucks);
|
||||||
} else if (productFilter === "cranes") {
|
// } else if (productFilter === "cranes") {
|
||||||
setCars(cranes);
|
// setCars(cranes);
|
||||||
} else if (productFilter === "forklift-trucks") {
|
// } else if (productFilter === "forklift-trucks") {
|
||||||
setCars(forklift);
|
// setCars(forklift);
|
||||||
} else if (productFilter === "excavators") {
|
// } else if (productFilter === "excavators") {
|
||||||
setCars(excavators);
|
// setCars(excavators);
|
||||||
} else if (productFilter === "road-repairs") {
|
// } else if (productFilter === "road-repairs") {
|
||||||
setCars(road_repairs);
|
// setCars(road_repairs);
|
||||||
} else {
|
// } else {
|
||||||
setCars(allProducts);
|
// setCars(allProducts);
|
||||||
}
|
// }
|
||||||
}, [productFilter]);
|
// }, [productFilter]);
|
||||||
return (
|
return (
|
||||||
<div dir="ltr" className="max-w-[1200px] w-full mx-auto">
|
<div dir="ltr" className="max-w-[1200px] w-full mx-auto">
|
||||||
{/* title part */}
|
{/* title part */}
|
||||||
<div className="flex flex-col">
|
<div className="flex flex-col mb-10">
|
||||||
<div className="flex items-center justify-center w-full ">
|
<div className="flex items-center justify-center w-full ">
|
||||||
<div className="text-secondary px-2 text-[18px] font-semibold ">
|
<div className="text-secondary px-2 text-[18px] font-semibold ">
|
||||||
<Text txt="katalog" />
|
<Text txt="katalog" />
|
||||||
@@ -59,7 +59,7 @@ export default function Products() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* product filters */}
|
{/* product filters */}
|
||||||
<div className="flex flex-wrap gap-1 gap-y-4 items-center justify-center mb-10 ">
|
{/* <div className="flex flex-wrap gap-1 gap-y-4 items-center justify-center mb-10 ">
|
||||||
{productFilterTypesMainPage.map((item, index) => (
|
{productFilterTypesMainPage.map((item, index) => (
|
||||||
<button
|
<button
|
||||||
key={index}
|
key={index}
|
||||||
@@ -80,7 +80,7 @@ export default function Products() {
|
|||||||
)}
|
)}
|
||||||
</button>
|
</button>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div> */}
|
||||||
|
|
||||||
{/* products */}
|
{/* products */}
|
||||||
<div className="px-4 grid gap-5 grid-cols-1 place-content-center min-[500px]:grid-cols-2 min-lg:grid-cols-4 min-[1210px]:grid-cols-4">
|
<div className="px-4 grid gap-5 grid-cols-1 place-content-center min-[500px]:grid-cols-2 min-lg:grid-cols-4 min-[1210px]:grid-cols-4">
|
||||||
|
|||||||
851
data/index.ts
BIN
public/beton_nasos.jpg
Normal file
|
After Width: | Height: | Size: 69 KiB |
6
public/custom-marker.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg width="45" height="45" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="32" cy="32" r="18" fill="#FF3B30"></circle>
|
||||||
|
<circle cx="32" cy="32" r="10" fill="white"></circle>
|
||||||
|
<circle cx="32" cy="32" r="6" fill="#FF3B30"></circle>
|
||||||
|
<path d="M32 62C32 62 52 42 52 28C52 16.9543 43.0457 8 32 8C20.9543 8 12 16.9543 12 28C12 42 32 62 32 62Z" fill="#FF3B30"></path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 406 B |
@@ -194,5 +194,17 @@
|
|||||||
"siqish": "Давление сжатия",
|
"siqish": "Давление сжатия",
|
||||||
"havo": "Ёмкость воздуха",
|
"havo": "Ёмкость воздуха",
|
||||||
"kompressor_sig": "Объём компрессора",
|
"kompressor_sig": "Объём компрессора",
|
||||||
"katalog": "Познакомьтесь с каталогом"
|
"katalog": "Познакомьтесь с каталогом",
|
||||||
|
"work_day_title": "Рабочие дни:",
|
||||||
|
"work_day": "Понедельник–Воскресенье",
|
||||||
|
"hero_title": "Надёжная спецтехника — лучший выбор для вашего проекта!",
|
||||||
|
"hero_desc": "Мы предлагаем новейшую технику, специализированный транспорт и строительное оборудование по выгодной цене.",
|
||||||
|
"shalanda_traller": "Шаланда и Траллеры",
|
||||||
|
"evakuator": "Эвакуаторы",
|
||||||
|
"asfalt_yotqizuvchi": "Асфальтоукладчик",
|
||||||
|
"asfalt_kochiruvchi": "Асфальтоперегружатель",
|
||||||
|
"beton_nasos": "Бетононасосы",
|
||||||
|
"vodovoz": "Водовоз",
|
||||||
|
"assenizator": "Ассенизатор",
|
||||||
|
"manipulyator": "Манипулятор"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -196,5 +196,17 @@
|
|||||||
"siqish": "Siqish bosimi",
|
"siqish": "Siqish bosimi",
|
||||||
"havo": "Havo sig‘imi",
|
"havo": "Havo sig‘imi",
|
||||||
"kompressor_sig": "Kompressor sig‘imi",
|
"kompressor_sig": "Kompressor sig‘imi",
|
||||||
"katalog": "Katalog bilan tanishing"
|
"katalog": "Katalog bilan tanishing",
|
||||||
|
"work_day_title": "Ish kunlari:",
|
||||||
|
"work_day": "Dushanba-Yakshanba",
|
||||||
|
"hero_title": "Ishonchli SpesTexnika — sizning loyihangiz uchun eng yaxshi tanlov!",
|
||||||
|
"hero_desc": "Biz eng so‘nggi texnikalar, maxsus transportlar va qurilish uskunalarini qulay narxda taqdim etamiz.",
|
||||||
|
"shalanda_traller": "Shalanda va Trallerlar",
|
||||||
|
"evakuator": "Evakuatorlar",
|
||||||
|
"asfalt_yotqizuvchi": "Asfalt yotqizuvchi mashina",
|
||||||
|
"asfalt_kochiruvchi": "Asfalt ko‘chiruvchi mashina",
|
||||||
|
"beton_nasos": "Beton nasos mashinalari",
|
||||||
|
"vodovoz":"Vodovoz",
|
||||||
|
"assenizator":"Assenizator",
|
||||||
|
"manipulyator":"Manipulyator"
|
||||||
}
|
}
|
||||||
|
|||||||
6
public/location.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg width="45" height="45" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="32" cy="32" r="18" fill="#FF3B30"></circle>
|
||||||
|
<circle cx="32" cy="32" r="10" fill="white"></circle>
|
||||||
|
<circle cx="32" cy="32" r="6" fill="#FF3B30"></circle>
|
||||||
|
<path d="M32 62C32 62 52 42 52 28C52 16.9543 43.0457 8 32 8C20.9543 8 12 16.9543 12 28C12 42 32 62 32 62Z" fill="#FF3B30"></path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 406 B |
117
types/index.ts
@@ -9,29 +9,29 @@ export interface TitleType {
|
|||||||
|
|
||||||
export interface productFilterTypes {
|
export interface productFilterTypes {
|
||||||
name: string;
|
name: string;
|
||||||
image: StaticImageData|string;
|
image: StaticImageData | string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MainProductCard{
|
export interface MainProductCard {
|
||||||
uzunlik?:string;
|
uzunlik?: string;
|
||||||
kenglik?:string;
|
kenglik?: string;
|
||||||
balandlik?:String;
|
balandlik?: String;
|
||||||
yukqob?:String;
|
yukqob?: String;
|
||||||
makBalandlik?:string;
|
makBalandlik?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ProductCardType extends MainProductCard{
|
export interface ProductCardType extends MainProductCard {
|
||||||
image?:StaticImageData[];
|
image?: StaticImageData[];
|
||||||
title?:string;
|
title?: string;
|
||||||
y_turi?:string;
|
y_turi?: string;
|
||||||
hajmi?:string;
|
hajmi?: string;
|
||||||
tezlik?:string;
|
tezlik?: string;
|
||||||
interkuler?:string;
|
interkuler?: string;
|
||||||
quvvat?:string;
|
quvvat?: string;
|
||||||
quti?:string;
|
quti?: string;
|
||||||
turboDizel?:string;
|
turboDizel?: string;
|
||||||
ogirlig?:string;
|
ogirlig?: string;
|
||||||
bomUzunlik?:string;
|
bomUzunlik?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ProductTypes {
|
export interface ProductTypes {
|
||||||
@@ -50,34 +50,55 @@ export interface innerCardTypes {
|
|||||||
price?: number;
|
price?: number;
|
||||||
path: string;
|
path: string;
|
||||||
|
|
||||||
// 🧩 Qo‘shimcha umumiy texnik xususiyatlar
|
// 🧩 Umumiy texnik xususiyatlar
|
||||||
weight_kg?: number; // Og‘irligi (kg)
|
weight_kg?: number; // Og‘irligi (kg)
|
||||||
maxLength_m?: number; // Maksimum uzunligi (m)
|
maxLength_m?: number; // Maksimum uzunligi (m)
|
||||||
maxHeight_m?: number; // Maksimum balandligi (m)
|
maxHeight_m?: number; // Maksimum balandligi (m)
|
||||||
capacity_tons?: number; // Yuk ko‘tarish qobiliyati (tonna)
|
capacity_tons?: number; // Yuk ko‘tarish qobiliyati (tonna)
|
||||||
capacity_kg?: number; // Yuk ko‘tarish qobiliyati (kg)
|
capacity_kg?: number; // Yuk ko‘tarish qobiliyati (kg)
|
||||||
fuelType?: string; // Yoqilg‘i turi
|
fuelType?: string; // Yoqilg‘i turi
|
||||||
tankVolume_m3?: number; // Tank hajmi (m³)
|
tankVolume_m3?: number; // Tank hajmi (m³)
|
||||||
maxSpeed_kmh?: number; // Maksimum tezligi (km/soat)
|
maxSpeed_kmh?: number; // Maksimum tezligi (km/soat)
|
||||||
intercooler?: string; // Interkuler bor/yo‘q
|
intercooler?: string; // Interkuler bor/yo‘q
|
||||||
enginePower_hp?: string; // Dvigatel quvvati (ot kuchi)
|
enginePower_hp?: string; // Dvigatel quvvati (ot kuchi)
|
||||||
transmission?: string; // O‘tkazmalar qutisi turi
|
transmission?: string; // O‘tkazmalar qutisi turi
|
||||||
bom?:number; // Minora kranlar bom uzunligi
|
bom?: number; // Minora kranlar bom uzunligi
|
||||||
qazish?:number; // ekskavator qazish chuqurligi
|
qazish?: number; // ekskavator qazish chuqurligi
|
||||||
pichoq?:number; // avtogreyder pichoq uzunligi
|
pichoq?: number; // avtogreyder pichoq uzunligi
|
||||||
zichlash?:number; // katka asfalt zichlovchi
|
zichlash?: number; // katka asfalt zichlovchi
|
||||||
siqish?:number; // kampressor siqish bosimi
|
siqish?: number; // kampressor siqish bosimi
|
||||||
havo?:number; // kampressor havo sig'imi
|
havo?: number; // kampressor havo sig'imi
|
||||||
kompressor_sig?:number; // kampressor sig'imi
|
kompressor_sig?: number; // kampressor sig'imi
|
||||||
|
towingCapacity_tons?: number; // evakuator ko'taruvchi og'irlik
|
||||||
|
armLength_m?: number; // evakuator uzunligi
|
||||||
|
|
||||||
|
// 🟢 Qo‘shimcha shalanda / treller tipelar
|
||||||
|
wheelCount?: number; // G‘ildiraklar soni
|
||||||
|
brakingSystem?: string; // Tormoz tizimi
|
||||||
|
|
||||||
|
// 🟢 Asfalt mashinalari uchun qo‘shimcha
|
||||||
|
pavingWidth_m?: number; // Asfalt yotqizuvchi kengligi
|
||||||
|
pavingDepth_cm?: number; // Asfalt qatlamining chuqurligi
|
||||||
|
conveyorLength_m?: number; // Asfalt kochiruvchi konveyer uzunligi
|
||||||
|
conveyorCapacity_tons?: number; // Bir marta ko‘chiradigan asfalt hajmi
|
||||||
|
|
||||||
|
// 🟢 Betonniy nasos mashinalari uchun qo‘shimcha
|
||||||
|
pumpLength_m?: number; // Beton nasosning uzatish (quvur) uzunligi (metr)
|
||||||
|
pumpCapacity_m3h?: number; // Betonni soatiga uzatish hajmi (m³/soat)
|
||||||
|
|
||||||
|
// 🔵 Vodovoz / Assenizator uchun qo‘shimchalar:
|
||||||
|
pumpPower_hp?: number; // Nasos quvvati
|
||||||
|
pumpType?: string; // Nasos turi
|
||||||
|
|
||||||
|
manipulatorCapacity_tons?: number; // manipulyator yuk ko‘tarishi
|
||||||
|
manipulatorArm_m?: number; // manipulyator strela uzunligi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const defaultDetail: innerCardTypes = {
|
||||||
|
id: 1,
|
||||||
export const defaultDetail : innerCardTypes = {
|
image: Kaimei1,
|
||||||
id:1,
|
name: "Mashina topilmadi",
|
||||||
image:Kaimei1,
|
min_order_time: 4,
|
||||||
name:'Mashina topilmadi',
|
price: 600000,
|
||||||
min_order_time:4,
|
path: "",
|
||||||
price:600000,
|
};
|
||||||
path:''
|
|
||||||
}
|
|
||||||
|
|||||||
73
types/ymaps.d.ts
vendored
@@ -1,39 +1,66 @@
|
|||||||
// src/types/ymaps.d.ts
|
// src/types/ymaps.d.ts
|
||||||
declare namespace ymaps {
|
declare namespace ymaps {
|
||||||
interface MapOptions {
|
type ReadyCallback = () => void;
|
||||||
center: number[];
|
|
||||||
zoom: number;
|
interface IEventEmitter {
|
||||||
controls?: string[];
|
add: (eventName: string, handler: (...args: any[]) => any) => void;
|
||||||
|
remove?: (eventName: string, handler: (...args: any[]) => any) => void;
|
||||||
|
fire?: (eventName: string, eventObject?: any) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Map {
|
interface IGeoObjectCollection {
|
||||||
constructor(container: HTMLElement, options: MapOptions);
|
add: (geoObject: any) => void;
|
||||||
geoObjects: {
|
remove?: (geoObject: any) => void;
|
||||||
add(obj: any): void;
|
removeAll?: () => void;
|
||||||
};
|
}
|
||||||
controls: any;
|
|
||||||
|
interface MapOptions {
|
||||||
|
center?: [number, number];
|
||||||
|
zoom?: number;
|
||||||
|
controls?: string[];
|
||||||
|
[key: string]: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Map implements IEventEmitter {
|
||||||
|
constructor(container: HTMLElement | string, options?: MapOptions);
|
||||||
|
|
||||||
|
events: IEventEmitter;
|
||||||
|
geoObjects: IGeoObjectCollection;
|
||||||
|
|
||||||
|
setCenter(center: [number, number] | number[], zoom?: number): void;
|
||||||
|
getCenter(): [number, number];
|
||||||
|
|
||||||
|
setZoom(zoom: number, options?: any): void;
|
||||||
|
getZoom(): number;
|
||||||
|
|
||||||
|
destroy(): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface PlacemarkOptions {
|
interface PlacemarkOptions {
|
||||||
|
iconLayout?: string;
|
||||||
|
iconImageHref?: string;
|
||||||
|
iconImageSize?: [number, number];
|
||||||
|
iconImageOffset?: [number, number];
|
||||||
iconColor?: string;
|
iconColor?: string;
|
||||||
draggable?: boolean;
|
draggable?: boolean;
|
||||||
|
[key: string]: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface PlacemarkProperties {
|
class Placemark implements IEventEmitter {
|
||||||
balloonContent?: string;
|
constructor(coords: [number, number] | number[], properties?: any, options?: PlacemarkOptions);
|
||||||
|
properties: any;
|
||||||
|
events: IEventEmitter;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Placemark {
|
function ready(callback: ReadyCallback): void;
|
||||||
constructor(
|
|
||||||
coords: number[],
|
|
||||||
properties?: PlacemarkProperties,
|
|
||||||
options?: PlacemarkOptions
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function ready(callback: () => void): void; // ✅ shu qator qo‘shildi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Window {
|
declare global {
|
||||||
ymaps: typeof ymaps;
|
interface Window {
|
||||||
|
ymaps?: typeof ymaps;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module "ymaps" {
|
||||||
|
export = ymaps;
|
||||||
}
|
}
|
||||||
|
|||||||