last push. animatsiya added

This commit is contained in:
nabijonovdavronbek619@gmail.com
2025-11-07 22:52:50 +05:00
parent 45f5e2251b
commit 549535b471
8 changed files with 255 additions and 88 deletions

View File

@@ -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 (
<Link
href={`/${route.lang}/${route.carType}/${data.name}`}
onClick={() => 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]"
<motion.div
initial={{ opacity: 0, y: 40 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, amount: 0.2 }}
transition={{ duration: 0.5, ease: "easeOut" }}
whileHover={{
scale: 1.05,
boxShadow: "0px 0px 15px rgba(0,0,0,0.1)",
}}
whileTap={{ scale: 0.97 }}
className="rounded-lg overflow-hidden bg-white transition-all"
>
<div className="rounded-t-lg bg-white">
<Image
src={data.image}
alt={data.name}
width={0}
height={200}
className="object-fill w-full max-h-[200px] h-full rounded-t-sm"
/>
</div>
<div className="bg-[#fafafa] w-full p-2 px-4 rounded-b-lg flex flex-col items-start justify-start gap-2">
<div className="text-xl font-semibold ">
<Text txt={data.name} />
<Link
href={`/${route.lang}/${route.carType}/${data.name}`}
onClick={() => setDetail(data)}
className="flex flex-col items-center justify-between rounded-lg hover:cursor-pointer"
>
{/* Rasm qismi */}
<div className="rounded-t-lg bg-white">
<Image
src={data.image}
alt={data.name}
width={0}
height={200}
className="object-fill w-full max-h-[200px] h-full rounded-t-sm"
/>
</div>
<div className="flex gap-2">
<Text txt="hour-price" />
{data.price?.toLocaleString("uz-UZ")}
<Text txt="wallet" />
{/* Pastki qism */}
<div className="bg-[#fafafa] w-full p-2 px-4 rounded-b-lg flex flex-col items-start justify-start gap-2">
<div className="text-xl font-semibold">
<Text txt={data.name} />
</div>
<div className="flex gap-2">
<Text txt="hour-price" />
{data.price?.toLocaleString("uz-UZ")}
<Text txt="wallet" />
</div>
<div className="flex gap-2">
<Text txt="min-time" />
{data.min_order_time}
<Text txt="time" />
</div>
{/* Tugma animatsiyasi */}
<motion.button
whileHover={{
scale: 1.05,
backgroundColor: "#ffffff",
color: "#dc2626", // hoverda text-secondary (agar sizda secondary = red)
borderColor: "#dc2626",
}}
whileTap={{ scale: 0.95 }}
transition={{ duration: 0.3 }}
className="w-full p-3 bg-secondary rounded-lg text-white border-2 border-secondary"
>
<Text txt="more" />
</motion.button>
</div>
<div className="flex gap-2">
<Text txt="min-time" />
{data.min_order_time}
<Text txt="time" />
</div>
<button className="w-full p-3 bg-secondary rounded-lg text-white border-2 border-secondary hover:cursor-pointer hover:bg-white hover:text-secondary">
<Text txt="more" />
</button>
</div>
</Link>
</Link>
</motion.div>
);
}

View File

@@ -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 (
<Link
href={`/${lang}/${data.path}`}
className="h-[400px] flex flex-col items-center justify-between rounded-sm hover:scale-105 hover:cursor-pointer hover:shadow-[0px_0px_5px_10px_#ebebeb]"
<motion.div
initial={{ opacity: 0, y: 50 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, amount: 0.2 }}
transition={{ duration: 0.3, ease: "easeOut" }}
whileHover={{
scale: 1.05,
boxShadow: "0px 0px 15px rgba(0,0,0,0.1)",
}}
whileTap={{ scale: 0.98 }}
>
<div className="rounded-t-lg bg-white py-15 px-2">
<Image
src={data.image}
alt={data.truck_name}
width={200}
height={200}
className="object-contain max-h-[200px] h-full"
/>
</div>
<div className="bg-[#fafafa] w-full py-5 rounded-b-lg flex flex-col items-center justify-center ">
<p>
<Text txt={data.truck_name} />
</p>
<p className="text-secondary">
<Text txt={data.desc} />
</p>
</div>
</Link>
<Link
href={`/${lang}/${data.path}`}
className="h-[400px] flex flex-col items-center justify-between rounded-lg bg-white transition-transform"
>
{/* Yuqori qism - rasm */}
<div className="rounded-t-lg bg-white py-10 px-2 flex justify-center items-center">
<Image
src={data.image}
alt={data.truck_name}
width={200}
height={200}
className="object-contain max-h-[200px] h-full"
/>
</div>
{/* Pastki qism - matn */}
<div className="bg-[#fafafa] w-full py-5 rounded-b-lg flex flex-col items-center justify-center space-y-1">
<p className="font-medium text-gray-800 text-lg text-center">
<Text txt={data.truck_name} />
</p>
<p className="text-secondary text-sm text-center">
<Text txt={data.desc} />
</p>
</div>
</Link>
</motion.div>
);
}

View File

@@ -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 (
<Link
href={data.path}
id="news_slider_card"
className="group hover:cursor-pointer"
className="group hover:cursor-pointer block"
>
<Image
src={data.image}
alt="slider image"
width={600}
height={600}
className="object-cover max-w-[600px] w-full h-[300px]"
/>
<div className="relative overflow-visible mt-6 text-primary flex flex-col items-start p-4 justify-start bg-gray-50 border-b-6 border-gray-400 group hover:border-b-secondary">
<div className="absolute -top-10 sm:-top-8 text-[16px] font-semibold left-5 bg-secondary py-1 px-3 clip-trapezoid">
<Text txt={data.truck_name} />
<motion.div
initial={{ opacity: 0, y: 40 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6, ease: "easeOut" }}
whileTap={{ scale: 0.98 }}
className="rounded-xl overflow-hidden shadow-md hover:shadow-lg transition-all"
>
{/* Rasm qismi */}
<Image
src={data.image}
alt="slider image"
width={600}
height={600}
className="object-cover max-w-[600px] w-full h-[300px]"
/>
{/* Pastki kontent */}
<div className="relative overflow-visible mt-6 text-primary flex flex-col items-start p-4 justify-start bg-gray-50 border-b-6 border-gray-400 group hover:border-b-secondary">
{/* Yuqoridagi belgi */}
<motion.div
className="absolute -top-10 sm:-top-8 text-[16px] font-semibold left-5 bg-secondary py-1 px-3 clip-trapezoid"
whileHover={{ scale: 1.05 }}
transition={{ type: "spring", stiffness: 200 }}
>
<Text txt={data.truck_name} />
</motion.div>
{/* Tavsif matni */}
<div className="text-xl font-bold flex items-center h-[60px] hover:text-secondary transition-colors">
<Text txt={data.desc} />
</div>
</div>
<div className="text-xl font-bold flex items-center h-[60px] hover:text-secondary">
<Text txt={data.desc} />
</div>
</div>
</motion.div>
</Link>
);
}