Files
reui-blocks/blocks/timeline13.tsx
T

205 lines
8.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Button } from "@/components/ui/button";
import { Progress } from "@/components/ui/progress";
import { cn } from "@/lib/utils";
interface Timeline13Props {
className?: string;
}
const formatPercent = (value: number) =>
`${value.toLocaleString("fa-IR")}٪`;
const Timeline13 = ({ className }: Timeline13Props) => {
return (
<section dir="rtl" lang="fa" className={cn("py-32", className)}>
<div className="container">
<div className="flex flex-col text-start">
<h1 className="mb-2 text-3xl font-semibold md:text-2xll">
مسیر تا عرضه محصول
</h1>
<p className="max-w-2xl text-muted-foreground">
مراحل ضروری برای رساندن ایده نوآورانه به بازار و تضمین عرضه
موفق محصول را دنبال کنید.
</p>
</div>
<div className="mt-8 flex flex-col gap-6 rounded-xl border border-border bg-card p-4 sm:p-8 lg:p-11">
<div className="contents items-center justify-between sm:flex">
<h2 className="text-xl font-semibold tracking-tight">
راهنمایی از پیشگامان صنعت
</h2>
<Button className="order-last">درخواست دمو</Button>
</div>
<div className="mt-3 flex gap-4 sm:flex-col">
<div className="relative">
<div className="grid h-full w-4 justify-center gap-10 sm:h-4 sm:w-auto sm:grid-cols-3 sm:items-center">
<div
className="absolute inset-0 start-1/2 w-px -translate-x-1/2 bg-ring sm:inset-auto sm:start-auto sm:h-px sm:w-full sm:translate-x-0"
/>
<span className="relative top-3 size-2 rounded-full bg-ring sm:top-0" />
<span className="relative top-3 size-2 rounded-full bg-ring sm:top-0" />
<span className="relative top-3 size-2 rounded-full bg-ring sm:top-0" />
</div>
<div
className="animate-timeline-reveal absolute inset-0 grid h-full w-4 justify-center gap-10 sm:h-4 sm:w-auto sm:grid-cols-3 sm:items-center"
>
<div
className="absolute inset-0 start-1/2 w-px -translate-x-1/2 bg-primary sm:inset-auto sm:start-auto sm:h-px sm:w-full sm:translate-x-0"
/>
<span className="relative top-3 size-2 rounded-full bg-primary sm:top-0" />
<span className="relative top-3 size-2 rounded-full bg-primary sm:top-0" />
<span className="relative top-3 size-2 rounded-full bg-primary sm:top-0" />
</div>
</div>
<div className="grid gap-10 sm:grid-cols-3">
<div className="flex h-full flex-col justify-between gap-4 text-start">
<div className="flex flex-col">
<div className="flex h-8 w-fit items-center gap-px overflow-hidden rounded-md border border-border bg-border text-sm font-medium">
<span className="grid h-full place-items-center bg-background px-2">
۱
</span>
<span className="grid h-full place-items-center bg-background px-2">
ایده‌پردازی
</span>
</div>
<h3 className="mt-5 font-medium">
ایده را مطرح و اعتبارسنجی کنید
</h3>
<p className="mt-2 text-sm text-muted-foreground">
با تحقیق بازار، مصاحبه با مشتری و تحلیل رقبا، ایده محصول
خود را پالایش کنید.
</p>
</div>
<div>
<div className="flex items-center gap-2">
<Progress
value={15}
className="h-1 flex-1 rtl:scale-x-[-1]"
/>
<span className="w-8 text-end text-xs text-muted-foreground">
{formatPercent(15)}
</span>
</div>
<p className="mt-1 text-xs text-muted-foreground">
حدود ۲ هفته
</p>
</div>
</div>
<div className="flex h-full flex-col justify-between gap-4 text-start">
<div className="flex flex-col">
<div className="flex h-8 w-fit items-center gap-px overflow-hidden rounded-md border border-border bg-border text-sm font-medium">
<span className="grid h-full place-items-center bg-background px-2">
۲
</span>
<span className="grid h-full place-items-center bg-background px-2">
توسعه
</span>
</div>
<h3 className="mt-5 font-medium">نسخه اولیه را بسازید</h3>
<p className="mt-2 text-sm text-muted-foreground">
طراحی، نمونه‌سازی و توسعه حداقل محصول قابل عرضه. بر اساس
بازخورد و آزمایش اولیه سریع تکرار کنید.
</p>
</div>
<div>
<div className="flex items-center gap-2">
<Progress
value={85}
className="h-1 flex-1 rtl:scale-x-[-1]"
/>
<span className="w-8 text-end text-xs text-muted-foreground">
{formatPercent(85)}
</span>
</div>
<p className="mt-1 text-xs text-muted-foreground">
حدود ۶ هفته
</p>
</div>
</div>
<div className="flex h-full flex-col justify-between gap-4 text-start">
<div className="flex flex-col">
<div className="flex h-8 w-fit items-center gap-px overflow-hidden rounded-md border border-border bg-border text-sm font-medium">
<span className="grid h-full place-items-center bg-background px-2">
۰۳
</span>
<span className="grid h-full place-items-center bg-background px-2">
عرضه
</span>
</div>
<h3 className="mt-5 font-medium">ورود به بازار</h3>
<p className="mt-2 text-sm text-muted-foreground">
طرح عرضه را با کمپین‌های بازاریابی، ارتباط‌گیری و پشتیبانی
مشتری اجرا کنید تا اثر و پذیرش بیشینه شود.
</p>
</div>
<div>
<div className="flex items-center gap-2">
<Progress
value={100}
className="h-1 flex-1 rtl:scale-x-[-1]"
/>
<span className="w-8 text-end text-xs text-muted-foreground">
{formatPercent(100)}
</span>
</div>
<p className="mt-1 text-xs text-muted-foreground">
عرضه تکمیل شد
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<style>
{`
/* Mobile: Top to bottom animation */
@keyframes timeline-reveal-mobile {
from {
clip-path: inset(0 0 100% 0);
}
to {
clip-path: inset(0% 0 0 0);
}
}
/* Desktop: reveal along timeline (LTR) */
@keyframes timeline-reveal-desktop {
from {
clip-path: inset(0 100% 0 0);
}
to {
clip-path: inset(0 0% 0 0);
}
}
/* Desktop: reveal along timeline (RTL) */
@keyframes timeline-reveal-desktop-rtl {
from {
clip-path: inset(0 0 0 100%);
}
to {
clip-path: inset(0 0 0 0%);
}
}
.animate-timeline-reveal {
animation: timeline-reveal-mobile 5s linear;
}
@media (min-width: 640px) {
.animate-timeline-reveal {
animation: timeline-reveal-desktop 5s linear;
}
[dir="rtl"] .animate-timeline-reveal {
animation: timeline-reveal-desktop-rtl 5s linear;
}
}
`}
</style>
</section>
);
};
export { Timeline13 };