From 549535b4713a1904d6bbf05433562de43842449a Mon Sep 17 00:00:00 2001 From: "nabijonovdavronbek619@gmail.com" Date: Fri, 7 Nov 2025 22:52:50 +0500 Subject: [PATCH] last push. animatsiya added --- app/[lang]/[carType]/[carDeatil]/page.tsx | 72 ++++++++++++----- components/cards/innerProductcard.tsx | 94 +++++++++++++++-------- components/cards/productCard.tsx | 59 +++++++++----- components/cards/sliderCard.tsx | 53 +++++++++---- package-lock.json | 53 +++++++++++++ package.json | 2 + public/locales/ru/common.json | 5 +- public/locales/uz/common.json | 5 +- 8 files changed, 255 insertions(+), 88 deletions(-) diff --git a/app/[lang]/[carType]/[carDeatil]/page.tsx b/app/[lang]/[carType]/[carDeatil]/page.tsx index 3c3990b..5a26f5b 100644 --- a/app/[lang]/[carType]/[carDeatil]/page.tsx +++ b/app/[lang]/[carType]/[carDeatil]/page.tsx @@ -1,9 +1,10 @@ -'use client'; +"use client"; -import { useCarDetail } from '@/components/lib_components/carDetailProvider'; -import Text from '@/components/lib_components/text'; -import Image from 'next/image'; -import React from 'react'; +import { useCarDetail } from "@/components/lib_components/carDetailProvider"; +import Text from "@/components/lib_components/text"; +import Image from "next/image"; +import React from "react"; +import { Send } from "lucide-react"; export default function CarDetailPage() { const { detail } = useCarDetail(); @@ -18,33 +19,68 @@ export default function CarDetailPage() { } return ( -
+
{/* 2️⃣ Mahsulot nomi */}
-
+
{/* 3️⃣ Rasmini ko‘rsatish */} -
+
{detail.name}
{/* 4️⃣ Ma’lumotlar bloki */} -
-
- {' '} - {detail.price?.toLocaleString('uz-UZ')} so‘m +
+
+ + + {detail.price?.toLocaleString("uz-UZ")} + +
-
- {detail.min_order_time}{' '} - +
+ + + {detail.min_order_time} + + +
+
+ {" "} + + {detail.price && (detail.price * 8).toLocaleString("uz-UZ")} + + +
+
+ + +
+
+ +
diff --git a/components/cards/innerProductcard.tsx b/components/cards/innerProductcard.tsx index a2651c1..3037519 100644 --- a/components/cards/innerProductcard.tsx +++ b/components/cards/innerProductcard.tsx @@ -1,4 +1,4 @@ -"use client" +"use client"; import { innerCardTypes } from "@/types"; import Link from "next/link"; @@ -7,43 +7,75 @@ import React from "react"; import Image from "next/image"; import Text from "../lib_components/text"; import { useCarDetail } from "../lib_components/carDetailProvider"; +import { motion } from "framer-motion"; export default function InnerProductcard({ data }: { data: innerCardTypes }) { const route = useParams(); const { setDetail } = useCarDetail(); + return ( - setDetail(data)} - className=" flex flex-col items-center justify-between rounded-sm hover:scale-105 hover:cursor-pointer hover:shadow-[0px_0px_5px_10px_#ebebeb]" + -
- {data.name} -
-
-
- + setDetail(data)} + className="flex flex-col items-center justify-between rounded-lg hover:cursor-pointer" + > + {/* Rasm qismi */} +
+ {data.name}
-
- - {data.price?.toLocaleString("uz-UZ")} - + + {/* Pastki qism */} +
+
+ +
+ +
+ + {data.price?.toLocaleString("uz-UZ")} + +
+ +
+ + {data.min_order_time} + +
+ + {/* Tugma animatsiyasi */} + + +
-
- - {data.min_order_time} - -
- -
- + + ); } diff --git a/components/cards/productCard.tsx b/components/cards/productCard.tsx index 1c0d153..216577b 100644 --- a/components/cards/productCard.tsx +++ b/components/cards/productCard.tsx @@ -5,31 +5,48 @@ import Image from "next/image"; import Link from "next/link"; import Text from "../lib_components/text"; import { useParams } from "next/navigation"; +import { motion } from "framer-motion"; export default function ProductCard({ data }: { data: ProductTypes }) { const { lang } = useParams(); + return ( - -
- {data.truck_name} -
-
-

- -

-

- -

-
- + + {/* Yuqori qism - rasm */} +
+ {data.truck_name} +
+ + {/* Pastki qism - matn */} +
+

+ +

+

+ +

+
+ + ); } diff --git a/components/cards/sliderCard.tsx b/components/cards/sliderCard.tsx index 1a34d65..6321b06 100644 --- a/components/cards/sliderCard.tsx +++ b/components/cards/sliderCard.tsx @@ -1,30 +1,51 @@ +"use client"; + import { ProductTypes } from "@/types"; -import Image, { StaticImageData } from "next/image"; +import Image from "next/image"; import Link from "next/link"; import Text from "../lib_components/text"; +import { motion } from "framer-motion"; export default function SliderCard({ data }: { data: ProductTypes }) { return ( - slider image -
-
- + + {/* Rasm qismi */} + slider image + + {/* Pastki kontent */} +
+ {/* Yuqoridagi belgi */} + + + + + {/* Tavsif matni */} +
+ +
-
- -
-
+ ); } diff --git a/package-lock.json b/package-lock.json index 9ec0a7d..4c56643 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,13 @@ "version": "0.1.0", "dependencies": { "antd": "^5.27.4", + "framer-motion": "^12.23.24", "i18next": "^25.5.3", "i18next-browser-languagedetector": "^8.2.0", "i18next-http-backend": "^3.0.2", "i18next-resources-to-backend": "^1.2.1", "leaflet": "^1.9.4", + "lucide-react": "^0.553.0", "next": "15.5.4", "next-i18next": "^15.4.2", "react": "19.1.0", @@ -1614,6 +1616,33 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "12.23.24", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.24.tgz", + "integrity": "sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.23", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -1991,6 +2020,15 @@ "loose-envify": "cli.js" } }, + "node_modules/lucide-react": { + "version": "0.553.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.553.0.tgz", + "integrity": "sha512-BRgX5zrWmNy/lkVAe0dXBgd7XQdZ3HTf+Hwe3c9WK6dqgnj9h+hxV+MDncM88xDWlCq27+TKvHGE70ViODNILw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.19", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", @@ -2024,6 +2062,21 @@ "node": ">= 18" } }, + "node_modules/motion-dom": { + "version": "12.23.23", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz", + "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", diff --git a/package.json b/package.json index 9ea6d59..52262ac 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,13 @@ }, "dependencies": { "antd": "^5.27.4", + "framer-motion": "^12.23.24", "i18next": "^25.5.3", "i18next-browser-languagedetector": "^8.2.0", "i18next-http-backend": "^3.0.2", "i18next-resources-to-backend": "^1.2.1", "leaflet": "^1.9.4", + "lucide-react": "^0.553.0", "next": "15.5.4", "next-i18next": "^15.4.2", "react": "19.1.0", diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index a3210c6..d04d585 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -174,5 +174,8 @@ "wallet": "сумов", "time": "часов", "hour-price": "Цена за 1 час: ", - "min-time": "Минимальный заказ: " + "min-time": "Минимальный заказ: ", + "day-price": "Цена аренды за день: ", + "note1": "Мы предоставляем автолифт только с нашим водителем.", + "note2": "Доставка автолифта включена в стоимость аренды." } diff --git a/public/locales/uz/common.json b/public/locales/uz/common.json index 4bdaea8..e802d5a 100644 --- a/public/locales/uz/common.json +++ b/public/locales/uz/common.json @@ -176,5 +176,8 @@ "wallet":"so'm", "time":"soat", "hour-price":"1 soat uchun narx: ", - "min-time":"Minimal buyrtma: " + "min-time":"Minimal buyrtma: ", + "day-price":"Bir kunlik ijara narxi: ", + "note1":"Biz avtoliftni faqat haydovchimiz bilan taqdim etamiz.", + "note2":"Avtoliftni yetkazib berish ijara narxiga kiritilgan." } \ No newline at end of file