PageSourceSearch

https://murano.ae/assets/Projects-CE5hl0LQ.js

js murano.ae collected 2026-10-07 10:00:16 UTC 17,105 bytes, 1 lines download raw bytes

1import{r,j as e,m as j,A as L,d as E,X as T,C as B,e as R,f as G,a as F,H as D,V as q,S as O,B as Y,F as V}from"./index-BkEgdAV4.js";import{S as z,a as W,b as $,c as J,d as U}from"./select-BNHEcc_d.js";import{S as f}from"./skeleton-B_Vn3L5j.js";function Q({project:t,onSelect:a}){var u;const[i,m]=r.useState(!1);return e.jsxs(j.article,{className:"relative overflow-hidden cursor-pointer group aspect-video",onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),onClick:()=>a==null?void 0:a(t),whileHover:{y:-8,transition:{duration:.3,ease:"easeOut"}},style:{boxShadow:i?"0 24px 48px rgba(0,0,0,0.12)":"none"},children:[e.jsx("div",{className:"absolute inset-0",children:e.jsx("img",{src:typeof t.heroImage=="string"?t.heroImage:(u=t.heroImage)==null?void 0:u.original,alt:t.title,className:"w-full h-full object-cover",loading:"lazy"})}),e.jsx(j.div,{initial:{opacity:0},animate:{opacity:i?1:0},transition:{duration:.3},className:"absolute inset-0 bg-[rgba(28,28,28,0.85)] backdrop-blur-[8px] flex flex-col justify-end p-8 lg:p-10",children:e.jsxs("div",{className:"text-white",children:[e.jsx("h3",{className:"font-['Roboto'] font-medium text-2xl mb-2",children:t.title}),e.jsx("p",{className:"font-['DM_Sans'] text-gray-300 mb-1",children:t.location}),e.jsx("p",{className:"font-['Space_Mono'] text-sm text-gray-400 mb-6",children:t.year}),e.jsxs("span",{className:"font-['DM_Sans'] inline-flex items-center gap-2 text-white group-hover:gap-3 transition-all duration-300",children:["View Project",e.jsx(L,{className:"w-4 h-4"})]})]})}),e.jsx("div",{className:"absolute top-4 left-4",children:e.jsx("span",{className:"inline-block px-3 py-1 bg-white/90 backdrop-blur-sm rounded-full text-xs font-medium text-gray-800 capitalize",children:t.type})})]})}function K({projects:t,onProjectSelect:a}){const[i,m]=r.useState(2),u=r.useRef(null);r.useEffect(()=>{const n=()=>{window.innerWidth>=768?m(2):m(1)};return n(),window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[]);const b=(()=>{const n=Array.from({length:i},()=>[]),d=new Array(i).fill(0);return t.forEach((h,o)=>{const c=d.indexOf(Math.min(...d));n[c].push(h);const g=h.scale==="monumental"?800:h.scale==="grand"?600:400;d[c]+=g}),n})();return e.jsxs("section",{ref:u,className:"w-full",children:[e.jsx("div",{className:"grid gap-[2px] lg:gap-[2px] md:gap-1 sm:gap-2",style:{gridTemplateColumns:`repeat(${i}, 1fr)`},children:e.jsx(E,{mode:"wait",children:b.map((n,d)=>e.jsx("div",{className:"flex flex-col gap-[2px] lg:gap-[2px] md:gap-1 sm:gap-2",children:n.map((h,o)=>e.jsx(j.div,{initial:{opacity:0,y:40},animate:{opacity:1,y:0},exit:{opacity:0,y:-20},transition:{duration:.6,delay:(d*n.length+o)*.08,ease:"easeOut"},layout:!0,children:e.jsx(Q,{project:h,onSelect:a})},h._id))},d))})}),t.length===0&&e.jsx(j.div,{initial:{opacity:0}
1,animate:{opacity:1},className:"text-center py-32 px-4",children:e.jsx("p",{className:"text-gray-500 text-lg",children:"No projects found matching your criteria."})})]})}const X=[{value:"all",label:"All Types"},{value:"hospitality",label:"Hospitality"},{value:"residential",label:"Residential"},{value:"commercial",label:"Commercial"},{value:"public",label:"Public"}],P=new Date().getFullYear(),Z=[{value:"all",label:"All Years"},...Array.from({length:P-2e3},(t,a)=>({value:(P-a).toString(),label:(P-a).toString()}))];function ee({selectedType:t,selectedYear:a,onTypeChange:i,onYearChange:m,projectCount:u}){return e.jsx("div",{className:"mb-8 bg-white px-6 py-6 border-t border-b border-murano-gray/10",children:e.jsxs("div",{className:"max-w-7xl mx-auto",children:[e.jsxs("div",{className:"flex items-center justify-between mb-6",children:[e.jsx("h2",{className:"font-roboto text-2xl font-bold text-murano-green",children:"Filter Projects"}),e.jsxs("span",{className:"font-sans text-sm text-gray-600",children:[u," projects"]})]}),e.jsxs("div",{className:"flex flex-wrap gap-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-sans text-sm text-gray-600 mr-2",children:"Type:"}),e.jsx("div",{className:"flex gap-1",children:X.map(l=>e.jsx("button",{onClick:()=>i(l.value),className:`font-sans px-4 py-1.5 rounded-full text-sm font-medium transition-all duration-200 whitespace-nowrap ${t===l.value?"bg-murano-green text-white":"text-gray-700 hover:bg-gray-100"}`,children:l.label},l.value))})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-sans text-sm text-gray-600 mr-2",children:"Year:"}),e.jsxs(z,{value:a,onValueChange:m,children:[e.jsx(W,{className:"w-40",children:e.jsx($,{placeholder:"Select year"})}),e.jsx(J,{children:Z.map(l=>e.jsx(U,{value:l.value,children:l.label},l.value))})]})]})]})]})})}function te({project:t,onClose:a}){var h;const[i,m]=r.useState(0),l=[typeof t.heroImage=="string"?t.heroImage:(h=t.heroImage)==null?void 0:h.original,...t.galleryImages||[]].filter(Boolean),b=(o,c)=>{c.offset.x>50?d():c.offset.x<-50&&n()};r.useEffect(()=>{document.body.style.overflow="hidden";const o=c=>{c.key==="ArrowLeft"?d():c.key==="ArrowRight"?n():c.key==="Escape"&&a()};return document.addEventListener("keydown",o),()=>{document.body.style.overflow="unset",document.removeEventListener("keydown",o)}},[]);const n=()=>{m(o=>(o+1)%l.length)},d=()=>{m(o=>(o-1+l.length)%l.length)};return e.jsx(E,{children:e.jsx(j.div,{initial:{opacity:0}
1,animate:{opacity:1},exit:{opacity:0},className:"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm",onClick:a,children:e.jsx("div",{className:"relative w-full h-full flex items-center justify-center p-4 md:p-8",children:e.jsxs(j.div,{initial:{scale:.9,opacity:0},animate:{scale:1,opacity:1},exit:{scale:.9,opacity:0},transition:{duration:.3},className:"w-full max-w-7xl h-full max-h-[90vh] bg-white rounded-lg overflow-hidden flex flex-col md:flex-row",onClick:o=>o.stopPropagation(),children:[e.jsxs("div",{className:"w-full md:flex-1 aspect-video md:aspect-auto relative bg-black",children:[e.jsx("button",{onClick:a,className:"absolute top-4 right-4 z-10 p-2 bg-murano-green/90 backdrop-blur-sm rounded-full hover:bg-murano-green transition-colors shadow-lg","aria-label":"Close",children:e.jsx(T,{className:"w-5 h-5 text-white"})}),e.jsxs("div",{className:"relative w-full h-full",children:[e.jsx(E,{mode:"wait",children:e.jsx(j.img,{src:l[i],alt:`${t.title} - Image ${i+1}`,className:"w-full h-full object-cover cursor-grab active:cursor-grabbing",initial:{opacity:0,x:100},animate:{opacity:1,x:0},exit:{opacity:0,x:-100},transition:{duration:.3},drag:"x",dragConstraints:{left:0,right:0},dragElastic:.2,onDragEnd:b},i)}),l.length>1&&e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:d,className:"absolute left-4 top-1/2 -translate-y-1/2 p-2 bg-white/10 backdrop-blur-sm rounded-full hover:bg-white/20 transition-colors","aria-label":"Previous image",children:e.jsx(B,{className:"w-6 h-6 text-white"})}),e.jsx("button",{onClick:n,className:"absolute right-4 top-1/2 -translate-y-1/2 p-2 bg-white/10 backdrop-blur-sm rounded-full hover:bg-white/20 transition-colors","aria-label":"Next image",children:e.jsx(R,{className:"w-6 h-6 text-white"})})]}),e.jsx("div",{className:"absolute bottom-4 left-1/2 -translate-x-1/2 px-3 py-1 bg-white/10 backdrop-blur-sm rounded-full",children:e.jsxs("span",{className:"text-white text-sm",children:[i+1," / ",l.length]})})]}),e.jsx("div",{className:"absolute bottom-0 left-0 right-0 p-4 flex gap-2 overflow-x-auto",children:l.map((o,c)=>e.jsx("button",{onClick:()=>m(c),className:`flex-shrink-0 w-16 h-9 rounded overflow-hidden border-2 transition-all ${c===i?"border-[#FF6B00] opacity-100":"border-transparent opacity-60 hover:opacity-80"}`,children:e.jsx("img",{src:o,alt:`Thumbnail ${c+1}`,className:"w-full h-full object-cover"})},c))})]}),e.jsx("div",{className:"w-full md:w-96 md:flex-shrink-0 overflow-y-auto",children:e.jsxs("div",{className:"p-8 md:p-12",children:[e.jsx("h2",{className:"font-serif text-4xl md:text-5xl text-[#408080] mb-4",children:t.title}),e.jsxs("p",{className:"font-serif italic text-2xl md:text-3xl text-gray-800 mb-8 leading-relaxed",children:['"',t.heroQuote,'"']}),e.jsx("div",{className:"prose prose-lg max-w-none mb-8",children:e.jsx("p",{className:"text-gray-700 leading-relaxed",children:t.description})}),e.jsxs("div",{className:"border-t border-gray-200 pt-8 mb-8",children:[e.jsx("h3",{className:"font-medium text-lg mb-4 text-gray-900",children:"Project Details"}),e.jsxs("dl",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("dt",{className:"font-mono text-sm text-gray-600",children:"Location"}),e.jsx("dd",{className:"mt-1 text-gray-900",children:t.location})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"font-mono text-sm text-gray-600",children:"Project Type"}),e.jsx("dd",{className:"mt-1 text-gray-900 capitalize",children:t.type})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"font-mono text-sm text-gray-600",children:"Scale"}),e.jsx("dd",{className:"mt-1 text-gray-900 capitalize",children:t.scale})]}),t.area&&e.jsxs("div",{children:[e.jsx("dt",{className:"font-mono text-sm text-gray-600",children:"Project Area"}),e.jsx("dd",{className:"mt-1 text-gray-900",children:t.area})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"font-mono text-sm text-gray-600",children:"Completion Date"}),e.jsx("dd",{className:"mt-1 text-gray-900",children:t.year})]})]})]}),e.jsxs("div",{className:"border-t border-gray-200 pt-8",children:[e.jsx("h3",{className:"font-medium text-lg mb-4 text-gray-900",children:"Credits"}),e.jsxs("dl",{className:"space-y-3",children:[t.client&&e.jsxs("div",{children:[e.jsx("dt",{className:"font-mono text-sm text-gray-600",children:"Client"}),e.jsx("dd",{className:"mt-1 text-gray-900",children:t.client})]}),t.architect&&e.jsxs("div",{children:[e.jsx("dt",{className:"font-mono text-sm text-gray-600",children:"Architect"}),e.jsx("dd",{className:"mt-1 text-gray-900",children:t.architect})]}),t.photographer&&e.jsxs("div",{children:[e.jsx("dt",{className:"font-mono text-sm text-gray-600",children:"Photography"}),e.jsx("dd",{className:"mt-1 text-gray-900",children:t.photographer})]})]})]}),e.jsx("div",{className:"mt-12",children:e.jsx("a",{href:"/contact",className:"inline-block px-8 py-3 bg-[#FF6B00] text-white font-medium rounded-full hover:bg-[#
1E55A00] transform hover:-translate-y-0.5 transition-all duration-300 hover:shadow-lg",children:"Inquire About This Project"})})]})})]})})})})}const N=[{_id:"sample-1",title:"Four Seasons Resort Dubai",location:"Dubai, UAE",year:2024,type:"hospitality",scale:"monumental",heroImage:{original:"https://images.unsplash.com/photo-1571896349842-33c89424de2d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1200&q=95"},galleryImages:["https://images.unsplash.com/photo-1582719478250-c89cae4dc85b?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80","https://images.unsplash.com/photo-1445019980597-93fa8acb246c?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80"],heroQuote:"Where desert winds meet crystalline light",description:"A landmark installation featuring 127 custom Murano pieces, each capturing the essence of Arabian nights through contemporary Italian craftsmanship.",area:"2,400m²",client:"Four Seasons Hotels and Resorts",architect:"Foster + Partners",photographer:"Sebastian Weiss",is_featured:!0,is_active:!0}];function ie(){const t=[{video:"https://res.cloudinary.com/murano-lighting-cdn/video/upload/v1756661535/Marsa_Al_Arab_3_hryzlg.webm",image:"https://images.unsplash.com/photo-1571896349842-33c89424de2d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1200&q=80",mobileImage:"https://res.cloudinary.com/murano-lighting-cdn/image/upload/v1761048558/PROJECTS_PAGE_yqdwac.webp",title:"Iconic Installations",subtitle:"Illuminating the world's most prestigious venues",description:"Where luxury meets innovation in Dubai's most prestigious waterfront development.",projectName:"MARSA AL ARAB"},{video:"https://res.cloudinary.com/murano-lighting-cdn/video/upload/v1756661535/Marsa_Al_Arab_4_gqlu0o.webm",image:"https://images.unsplash.com/photo-1571896349842-33c89424de2d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1200&q=80",mobileImage:"https://res.cloudinary.com/murano-lighting-cdn/image/upload/v1761048558/PROJECTS_PAGE_yqdwac.webp",title:"Marsa Al Arab",subtitle:"Oceanfront Elegance",description:"Creating luminous experiences that complement the breathtaking views and maritime luxury.",projectName:"MARSA AL ARAB"},{video:"https://res.cloudinary.com/murano-lighting-cdn/video/upload/v1756661536/Sofitel_2_gzqk2n.webm",image:"https://images.unsplash.com/photo-1571896349842-33c89424de2d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1200&q=80",mobileImage:"https://res.cloudinary.com/murano-lighting-cdn/image/upload/v1761048558/PROJECTS_PAGE_yqdwac.webp",title:"Sofitel",subtitle:"French Art de Vivre",description:"Blending Parisian sophistication with local culture through exquisite lighting design.",projectName:"SOFITEL"}],a=G(F.projects.list,{pagination:{page:1,limit:100},includeInactive:!1}),[i,m]=r.useState([]),[u,l]=r.useState([]),[b,n]=r.useState([]),[d,h]=r.useState(!0),[o,c]=r.useState(!1),g=20,[y,M]=r.useState("all"),[w,k]=r.useState("all"),[C,v]=r.useState(null);r.useEffect(()=>{var s;a!==void 0&&(a&&((s=a.projects)==null?void 0:s.length)>0?(m(a.projects),l(a.projects),n(a.projects.slice(0,g)),h(a.projects.length>g)):(m(N),l(N),n(N.slice(0,g)),h(N.length>g)))},[a]),r.useEffect(()=>{let s=[...i];y!=="all"&&(s=s.filter(x=>{var p;return((p=x.type)==null?void 0:p.toLowerCase())===y.toLowerCase()})),w!=="all"&&(s=s.filter(x=>x.year.toString()===w)),l(s),n(s.slice(0,g)),h(s.length>g)},[i,y,w]);const A=r.useCallback(()=>{o||!d||(c(!0),setTimeout(()=>{const s=b.length,x=u.slice(s,s+g);n(p=>[...p,...x]),h(s+g<u.length),c(!1)},500))},[b.length,u,d,o]);r.useEffect(()=>{const s=()=>{const x=document.documentElement.scrollTop,p=document.documentElement.scrollHeight,S=document.documentElement.clientHeight;x+S>=p-200&&A()};return window.addEventListener("scroll",s),()=>window.removeEventListener("scroll",s)},[A]),r.useEffect(()=>{const x=new URLSearchParams(window.location.search).get("project");
1if(x&&i.length>0){const p=i.find(S=>S._id===x);p&&v(p)}},[i]),r.useEffect(()=>{const s=()=>{v(null)};return window.addEventListener("popstate",s),()=>window.removeEventListener("popstate",s)},[]);const I=s=>{v(s),window.history.pushState({modal:"project"},"",`/projects?project=${s._id}`)},H=()=>{var s;v(null),((s=window.history.state)==null?void 0:s.modal)==="project"?window.history.back():window.history.replaceState({},document.title,"/projects")},_=()=>e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:Array.from({length:6}).map((s,x)=>e.jsxs("div",{className:"bg-white rounded-lg overflow-hidden shadow-sm",children:[e.jsx(f,{className:"h-64 w-full"}),e.jsxs("div",{className:"p-6 space-y-3",children:[e.jsx(f,{className:"h-6 w-3/4"}),e.jsx(f,{className:"h-4 w-1/2"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(f,{className:"h-6 w-20"}),e.jsx(f,{className:"h-6 w-16"})]})]})]},x))});return a===void 0?e.jsxs("div",{className:"min-h-screen bg-murano-bg",children:[e.jsx(D,{currentPage:"projects"}),e.jsx("section",{className:"pt-32 pb-16 bg-gradient-to-b from-gray-50 to-white",children:e.jsxs("div",{className:"section-padding",children:[e.jsxs("div",{className:"text-center space-y-4 mb-12",children:[e.jsx(f,{className:"h-12 w-64 mx-auto"}),e.jsx(f,{className:"h-6 w-96 mx-auto"})]}),e.jsx("div",{className:"mb-12 flex flex-wrap gap-4 justify-center",children:Array.from({length:5}).map((s,x)=>e.jsx(f,{className:"h-10 w-24"},x))}),e.jsx(_,{})]})})]}):e.jsxs("div",{className:"min-h-screen bg-murano-bg",children:[e.jsx(D,{currentPage:"projects"}),e.jsxs("div",{className:"relative",children:[e.jsx(q,{slides:t,className:"h-screen",showNavigation:!0,showDots:!0,showContent:!0,contentPosition:"bottom-left",autoAdvance:!0,overlayOpacity:"light",textBackgroundOverlay:"blur"}),e.jsx(O,{className:"absolute left-1/2 transform -translate-x-1/2 top-1/4 md:top-auto md:bottom-8 z-20"})]}),e.jsx("section",{className:"py-4 bg-murano-alt",children:e.jsx("div",{className:"section-padding",children:e.jsx(Y,{pageName:"Projects"})})}),e.jsxs("section",{className:"py-12",children:[e.jsx(ee,{selectedType:y,selectedYear:w,onTypeChange:M,onYearChange:k,projectCount:u.length}),e.jsx(K,{projects:b,onProjectSelect:I}),o&&e.jsx("div",{className:"text-center py-8 px-4",children:e.jsx("p",{className:"text-murano-gray-dark",children:"Loading more projects..."})}),d&&!o&&e.jsx("div",{className:"text-center py-8",children:e.jsx("button",{onClick:A,className:"px-6 py-3 bg-murano-green text-white rounded-full hover:bg-murano-green/90 transition-colors",children:"Load More Projects"})})]}),C&&e.jsx(te,{project:C,onClose:H}),e.jsx(V,{})]})}export{ie 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.