//biome-ignore-all lint/suspicious/noArrayIndexKey:<>
"use client";
import {
ChevronLeft,
ChevronRight,
Clock,
DollarSign,
MapPin,
} from "lucide-react";
import { useMemo, useState } from "react";
import { Icons } from "@/components/icons";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { cn } from "@/lib/utils";
const filters = [
{ count: 20, label: "All" },
{ count: 5, label: "Creative Team" },
{ count: 3, label: "Product Leadership" },
{ count: 12, label: "Brand Strategy" },
];
const jobs = [
{
category: "Brand Strategy",
country: "in",
description:
"We're looking for a mid-level UI designer who can craft thoughtful digital experiences with a detail-first mindset.",
location: "India",
posted: "Posted 4 days ago",
salary: "125k - 220k",
title: "UI Designer",
type: "Full time",
},
{
category: "Creative Team",
country: "in",
description:
"Lead and mentor a cross-functional team to deliver delightful products that scale with our growing customer base.",
location: "India",
posted: "Posted 1 week ago",
salary: "80k - 160k",
title: "Engineering Manager",
type: "Full time",
},
{
category: "Product Leadership",
country: "in",
description:
"Join our product leadership crew to build performant interfaces and set the standard for engineering quality.",
location: "India",
posted: "Posted 2 weeks ago",
salary: "160k - 250k",
title: "Frontend Developer",
type: "Full time",
},
];
const pages = [1, 2, 3];
export default function Component() {
const [activeFilter, setActiveFilter] = useState(filters[0].label);
const [activePage, setActivePage] = useState(1);
const filteredJobs = useMemo(() => {
if (activeFilter === "All") return jobs;
return jobs.filter((job) => job.category === activeFilter);
}, [activeFilter]);
return (
<section className="relative w-full max-w-full overflow-hidden py-12 md:py-24 dark:bg-background">
<svg
className="absolute top-0 left-20 text-neutral-100 dark:text-neutral-800"
fill="none"
height="149"
viewBox="0 0 259 149"
width="259"
xmlns="http://www.w3.org/2000/svg"
>
<g clipPath="url(#clip0_450_3432)">
<path
d="M-302.316 -438C-345.03 -335.213 -349.374 -223.272 -302.316 -158.312C-247.534 -82.6905 -123.092 -70.7382 91.5694 -211.017C-164.578 460.946 374.375 -176.105 204.032 128"
stroke="currentColor"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="40"
/>
</g>
<defs>
<clipPath id="clip0_450_3432">
<rect fill="white" height="149" width="259" />
</clipPath>
</defs>
</svg>
<div className="relative z-10 mx-auto max-w-5xl px-6 text-center lg:px-0">
<Badge
className="border-none bg-white py-0.5 font-medium shadow dark:bg-neutral-800"
variant="secondary"
>
<Icons.zap className="size-3 fill-neutral-400 text-neutral-400" />
Cnippet Careers
</Badge>
<h1 className="mx-auto mt-6 max-w-3xl text-pretty font-medium text-4xl text-neutral-900 tracking-tight sm:text-5xl dark:text-neutral-100">
Explore Exciting Career Opportunities at Cnippet.
</h1>
<div className="mt-16 flex flex-wrap justify-center gap-3">
{filters.map((filter) => (
<Button
className={cn(
"group py1 inline-flex items-center gap-2 rounded-lg border px-4 font-medium text-sm shadow-sm transition-colors",
activeFilter === filter.label
? "border-neutral-900 bg-neutral-900 text-white hover:bg-neutral-800 dark:border-neutral-100 dark:bg-neutral-100 dark:text-neutral-900 dark:hover:bg-neutral-200"
: "border-neutral-200 bg-white text-neutral-700 hover:bg-neutral-100 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-700",
)}
key={filter.label}
onClick={() => setActiveFilter(filter.label)}
variant="ghost"
>
{filter.label}
<span
className={cn(
"font-normal text-sm transition-colors",
activeFilter === filter.label
? "text-white/70 dark:text-neutral-900/70"
: "text-neutral-500 dark:text-neutral-500",
)}
>
· {filter.count}
</span>
</Button>
))}
</div>
<div className="mx-auto mt-12 max-w-2xl space-y-4">
{filteredJobs.map((job, idx) => (
<div
className="rounded-3xl border border-neutral-100 bg-white p-6 text-left shadow-sm transition-colors hover:bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-900 dark:hover:bg-neutral-800"
key={`${job.title}-${idx}`}
>
<div className="flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between">
<div>
<span className="font-semibold text-base text-neutral-900 dark:text-neutral-100">
{job.title}
</span>
<p className="mt-3 max-w-2xl text-neutral-600 text-sm dark:text-neutral-400">
{job.description}
</p>
</div>
<Badge className="w-fit rounded-full border border-neutral-200 bg-white px-3 py-1 font-normal text-neutral-700 text-xs dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-300">
{job.category}
</Badge>
</div>
<div className="mt-4 flex flex-wrap items-center gap-4 text-sm">
<div className="flex items-center gap-2 text-neutral-900 dark:text-neutral-100">
<MapPin className="h-4 w-4 text-neutral-500 dark:text-neutral-500" />
<span>{job.location}</span>
</div>
<div className="flex items-center gap-2 text-neutral-900 dark:text-neutral-100">
<Clock className="h-4 w-4 text-neutral-500 dark:text-neutral-500" />
<span>{job.type}</span>
</div>
<div className="flex items-center gap-2 text-neutral-900 dark:text-neutral-100">
<DollarSign className="h-4 w-4 text-neutral-500 dark:text-neutral-500" />
<span>{job.salary}</span>
</div>
<div className="ml-auto flex items-center gap-2 text-neutral-500 dark:text-neutral-500">
<span className="h-1.5 w-1.5 rounded-full bg-green-500" />
<span>{job.posted}</span>
</div>
</div>
</div>
))}
</div>
<div className="mx-auto mt-10 flex max-w-2xl items-center justify-between gap-2">
<div className="flex gap-2">
{pages.map((page) => (
<Button
className={cn(
"h-9 min-w-9 rounded-lg border px-3 font-medium text-sm transition-colors",
activePage === page
? "border-neutral-900 bg-neutral-900 text-white dark:border-neutral-100 dark:bg-neutral-100 dark:text-neutral-900"
: "border-neutral-200 bg-white text-neutral-700 hover:bg-neutral-100 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-700",
)}
key={page}
onClick={() => setActivePage(page)}
variant="ghost"
>
{page}
</Button>
))}
</div>
<div className="flex gap-2">
<Button
aria-label="Previous page"
className="h-9 w-9 rounded-lg border border-neutral-200 bg-white text-neutral-700 shadow-sm hover:bg-neutral-100 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-700"
onClick={() => setActivePage((prev) => Math.max(1, prev - 1))}
size="icon"
variant="ghost"
>
<ChevronLeft className="h-4 w-4" />
</Button>
<Button
aria-label="Next page"
className="h-9 w-9 rounded-lg border border-neutral-200 bg-white text-neutral-700 shadow-sm hover:bg-neutral-100 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-700"
onClick={() =>
setActivePage((prev) => Math.min(pages.length, prev + 1))
}
size="icon"
variant="ghost"
>
<ChevronRight className="h-4 w-4" />
</Button>
</div>
</div>
</div>
</section>
);
}