PageSourceSearch

https://dhruba-datta.netlify.app/assets/ProjectsPage-Du4yBM3P.js

js dhruba-datta.netlify.app collected 2026-10-03 10:39:07 UTC 8,487 bytes, 2 lines download raw bytes

1import{u as R,j as e,m as s}from"./vendor-motion-C0Ykwh7C.js";import{N as z}from"./index-C9VRkwIY.js";import{e as L,r as l}from"./vendor-react-D8ZVE-1i.js";import{p as v,c as p}from"./projects-Clb5hPl-.js";import{P as E}from"./ProjectCard-BwLNlIzs.js";import{L as w,C as M,a as D,b as F}from"./vendor-icons-CZ0fHw8h.js";import T from"./Footer-ClRpSHv8.js";import{S as $}from"./Seo-D8Plyq5-.js";import"./index-CMnRXDm6.js";import"./index-DQYSP24l.js";const O=["all","development","app","automation"],f=9,_=()=>{const[n,o]=L(),[N,P]=l.useState(!1),r=R(),[h,C]=l.useState(!1);l.useLayoutEffect(()=>C(!0),[]);const m=h?n.get("tab"):null,u=m&&O.includes(m)?m:"all",I=t=>{const a=new URLSearchParams(n);t==="all"?a.delete("tab"):a.set("tab",t),a.delete("page"),o(a,{replace:!0})};l.useEffect(()=>{const t=requestAnimationFrame(()=>P(!0));return()=>cancelAnimationFrame(t)},[]);const y=u==="all"?v:v.filter(t=>t.category===u),d=Math.max(1,Math.ceil(y.length/f)),x=h?Number(n.get("page")):1,i=Number.isInteger(x)&&x>=1?Math.min(x,d):1,j=y.slice((i-1)*f,i*f),k=l.useRef(null),b=t=>{const a=new URLSearchParams(n);t<=1?a.delete("page"):a.set("page",String(t)),o(a,{replace:!0});const c=k.current;c&&window.scrollTo({top:c.getBoundingClientRect().top+window.scrollY-120,behavior:r?"auto":"smooth"})},A=l.useMemo(()=>Array.from({length:8}).map((t,a)=>({left:`${8+a*11}%`,top:`${20+a*8}%`,size:8+a%3*2,opacity:.04+a%4*.02,duration:6+a,delay:a*.5})),[]);return e.jsxs("section",{id:"projects",className:"relative py-12 sm:py-14 lg:py-16 overflow-hidden",children:[e.jsxs("div",{className:"absolute inset-0 -z-10 pointer-events-none",children:[e.jsx(s.div,{className:"absolute inset-0",initial:{opacity:0}
1,animate:{opacity:1},transition:{duration:1},style:{background:"radial-gradient(800px 400px at 60% -5%, rgba(59,130,246,0.08), transparent 65%), radial-gradient(700px 400px at 20% 105%, rgba(99,102,241,0.06), transparent 70%)"}}),e.jsx(s.div,{className:"absolute -top-20 left-1/3 w-[20rem] h-[20rem] rounded-full blur-3xl bg-gradient-to-tr from-blue-500/12 via-indigo-500/8 to-cyan-500/10",animate:r?{}:{y:[0,15,0],x:[0,20,0],scale:[1,1.03,1]},transition:r?{}:{duration:9,repeat:1/0,ease:"easeInOut"}}),e.jsx(s.div,{className:"absolute -bottom-16 right-1/4 w-[18rem] h-[18rem] rounded-full blur-3xl bg-gradient-to-tl from-sky-400/10 via-blue-500/8 to-indigo-600/8",animate:r?{}:{y:[0,-12,0],x:[0,-15,0],scale:[1,1.04,1]},transition:r?{}:{duration:10,repeat:1/0,ease:"easeInOut"}}),A.map((t,a)=>e.jsx(s.span,{className:"absolute rounded-full bg-blue-400/40 dark:bg-sky-300/40",style:{left:t.left,top:t.top,width:t.size,height:t.size,filter:"blur(1px)",opacity:t.opacity},initial:{y:0},animate:r?{}:{y:[0,-12,0]},transition:r?{}:{duration:t.duration,delay:t.delay,repeat:1/0,ease:"easeInOut"}},a))]}),e.jsxs("div",{className:"container mx-auto px-4 sm:px-6 max-w-7xl",children:[e.jsxs("div",{className:"flex flex-col items-center text-center mb-6 sm:mb-8 lg:mb-10",children:[e.jsx("p",{className:"eyebrow text-slate-500 dark:text-slate-400",children:"Projects"}),e.jsx("h1",{className:"mt-2 sm:mt-3 text-slate-900 dark:text-white text-2xl sm:text-3xl md:text-4xl lg:text-5xl xl:text-5xl",children:"Featured Works"})]}),e.jsx("div",{className:"flex justify-center mb-6 sm:mb-7 lg:mb-8",children:e.jsx(s.div,{initial:!1,whileInView:{opacity:1},viewport:{once:!0,amount:.6},transition:{duration:.5,ease:"easeOut"},className:"relative inline-flex items-center gap-0.5 sm:gap-1 rounded-full p-0.5 sm:p-1 border border-slate-200/70 dark:border-white/10 bg-white/60 dark:bg-slate-900/60 backdrop-blur-md shadow-sm",children:["all",...p.map(t=>t.key)].map(t=>{const a=u===t,c=t==="all"?"All":p.find(g=>g.key===t)?.label,S=t==="all"?w:p.find(g=>g.key===t)?.icon||M;return e.jsxs("button",{onClick:()=>I(t),className:`relative z-10 px-3 sm:px-3.5 py-1.5 sm:py-1.5 rounded-full text-sm sm:text-sm font-outfit font-medium inline-flex items-center gap-1.5 sm:gap-1.5 transition-all focus-override
2                    ${a?"text-white":"text-slate-700 dark:text-slate-300 hover:text-blue-700 dark:hover:text-sky-300"}`,children:[a?N?e.jsxs(e.Fragment,{children:[e.jsx(s.span,{layoutId:"activePillBg",className:"absolute inset-0 -z-10 rounded-full ring-1 ring-inset ring-blue-300/40 dark:ring-sky-400/25",transition:{type:"spring",stiffness:500,damping:36},style:{background:"linear-gradient(90deg, rgba(37,99,235,0.95) 0%, rgba(79,70,229,0.95) 100%)"}}),e.jsx(s.span,{layoutId:"activePillGlow",className:"absolute -inset-[2px] -z-20 rounded-full blur-md",transition:{type:"spring",stiffness:500,damping:36},style:{background:"radial-gradient(70% 120% at 50% 50%, rgba(59,130,246,0.35), rgba(99,102,241,0.22) 60%, transparent 80%)"}})]}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"absolute inset-0 -z-10 rounded-full ring-1 ring-inset ring-blue-300/40 dark:ring-sky-400/25",style:{background:"linear-gradient(90deg, rgba(37,99,235,0.95) 0%, rgba(79,70,229,0.95) 100%)"}}),e.jsx("span",{className:"absolute -inset-[2px] -z-20 rounded-full blur-md",style:{background:"radial-gradient(70% 120% at 50% 50%, rgba(59,130,246,0.35), rgba(99,102,241,0.22) 60%, transparent 80%)"}})]}):null,e.jsxs(s.span,{initial:!1,animate:{scale:a?1:.98},transition:{type:"spring",stiffness:400,damping:22},className:"inline-flex items-center gap-1.5 sm:gap-1.5",children:[e.jsx(S,{className:`w-3.5 sm:w-4 h-3.5 sm:h-4 ${a?"opacity-100":"opacity-80"}`}),c]})]},t)})})}),e.jsx("div",{ref:k,className:"grid gap-4 sm:gap-5 lg:gap-6 md:grid-cols-2 xl:grid-cols-3",children:j.map((t,a)=>e.jsx(E,{project:t,index:a,priority:a<3},t.id))}),d>1&&e.jsxs("nav",{"aria-label":"Projects pagination",className:"mt-8 sm:mt-10 lg:mt-12 flex items-center justify-center gap-1.5 sm:gap-2 font-outfit",children:[e.jsx("button",{type:"button",onClick:()=>b(i-1),disabled:i===1,"aria-label":"Previous page",className:"inline-flex items-center justify-center w-10 h-10 rounded-full border border-slate-200/70 dark:border-white/10 bg-white/60 dark:bg-slate-900/60 backdrop-blur-md text-slate-700 dark:text-slate-300 hover:text-blue-700 dark:hover:text-sky-300 disabled:opacity-40 disabled:pointer-events-none transition-colors focus-override",children:e.jsx(D,{className:"w-4 h-4"})}),Array.from({length:d},(t,a)=>a+1).map(t=>{const a=t===i;return e.jsx("button",{type:"button",onClick:()=>b(t),"aria-label":`Page ${t}`,"aria-current":a?"page":void 0,className:`inline-flex items-center justify-center min-w-10 h-10 px-3 rounded-full text-sm font-medium transition-all focus-override ${a?"text-white shadow-sm ring-1 ring-inset ring-blue-300/40 dark:ring-sky-400/25 bg-gradient-to-r from-blue-600 to-indigo-600":"border border-slate-200/70 dark:border-white/10 bg-white/60 dark:bg-slate-900/60 backdrop-blur-md text-slate-700 dark:text-slate-300 hover:text-blue-700 dark:hover:text-sky-300"}`,children:t},t)}),e.jsx("button",{type:"button",onClick:()=>b(i+1),disabled:i===d,"aria-label":"Next page",className:"inline-flex items-center justify-center w-10 h-10 rounded-full border border-slate-200/70 dark:border-white/10 bg-white/60 dark:bg-slate-900/60 backdrop-blur-md text-slate-700 dark:text-slate-300 hover:text-blue-700 dark:hover:text-sky-300 disabled:opacity-40 disabled:pointer-events-none transition-colors focus-override",children:e.jsx(F,{className:"w-4 h-4"})})]}),j.length===0&&e.jsxs("div",{className:"mt-8 sm:mt-10 mx-auto max-w-md rounded-2xl border border-slate-200/70 dark:border-white/[0.08] bg-white/70 dark:bg-slate-950/70 backdrop-blur-md p-8 text-center",children:[e.jsx("div",{className:"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-blue-50 dark:bg-sky-500/10 ring-1 ring-blue-200/70 dark:ring-sky-400/20",children:e.jsx(w,{className:"h-5 w-5 text-blue-600 dar
2k:text-sky-400"})}),e.jsx("h6",{className:"text-slate-900 dark:text-white",children:"No projects yet"}),e.jsx("p",{className:"mt-1.5 text-sm text-slate-600 dark:text-slate-400",children:"This category is empty. Try switching to another tab."})]})]})]})},J=({isDark:n,toggleTheme:o})=>e.jsxs("div",{className:"min-h-screen flex flex-col bg-white dark:bg-[#0a0f1c] transition-colors duration-300",children:[e.jsx($,{title:"Projects | Dhruba Datta",description:"Case studies from Dhruba Datta: voice AI and LLM automation, client web platforms, e-commerce, and n8n workflows.",path:"/projects"}),e.jsx(z,{isDark:n,toggleTheme:o}),e.jsx("main",{className:"pt-14 sm:pt-20 flex-grow",children:e.jsx(_,{})}),e.jsx(T,{})]});export{J as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.