1import{j as t}from"./vendor-query-CO_QYTkO.js";import{r as o}from"./vendor-react-DJfEFaqw.js";import{e as A,g as H,L as P,P as T,B as M,H as $,s as q}from"./index-BuBFkYNO.js";import{u as B}from"./useGalleryCategories-DUAvmILz.js";import{L as F,X as V,c as W,d as O}from"./vendor-icons-BmcpZVdY.js";import"./vendor-ui-CCUQhf4y.js";import"./vendor-supabase-MEHSyf2E.js";import"./vendor-router-CkFJCvFZ.js";import"./vendor-helmet-Cc4zoVvE.js";import"./vendor-sanitize-D9RiKzGB.js";import"./vendor-codemirror-kF8_xaBD.js";import"./vendor-dnd-Ds4KDHQQ.js";import"./vendor-carousel-DpjaRhUe.js";const D={style:"grid",columns:"auto"},J=()=>{const{data:r,isLoading:p,error:h}=A();return{data:H(r,"gallery_display",D),isLoading:p,error:h}},E=({src:r,alt:p,className:h="",sizes:f,width:u,height:y,aspectRatio:a,onClick:m})=>{const[n,v]=o.useState(!1),[N,c]=o.useState(!1),[g,w]=o.useState(!1),x=o.useRef(null);o.useEffect(()=>{const d=x.current;if(!d)return;const j=new IntersectionObserver(([C])=>{C.isIntersecting&&(c(!0),j.unobserve(d))},{rootMargin:"200px 0px",threshold:.01});return j.observe(d),()=>j.disconnect()},[]);const b=a?{aspectRatio:a}:{};return t.jsxs("div",{ref:x,className:"relative w-full h-full",style:b,onClick:m,children:[!n&&t.jsx("div",{className:"absolute inset-0 bg-muted animate-pulse rounded-[inherit]"}),g&&t.jsx("div",{className:"absolute inset-0 bg-muted flex items-center justify-center rounded-[inherit]",children:t.jsx("span",{className:"text-muted-foreground text-xs",children:"Erro ao carregar"})}),N&&!g&&t.jsx("img",{src:r,alt:p,sizes:f,width:u,height:y,decoding:"async",loading:"lazy",onLoad:()=>v(!0),onError:()=>{w(!0),v(!0)},className:`${h} transition-opacity duration-500 ${n?"opacity-100":"opacity-0"}`})]})},ne=()=>{const[r,p]=o.useState([]),[h,f]=o.useState(!0),[u,y]=o.useState("all"),[a,m]=o.useState(null),{data:n}=J(),{data:v=[]}=B(!0),N=o.useMemo(()=>[{value:"all",label:"Tudo"},...v.map(e=>({value:e.slug,label:e.label}))],[v]),c=(n==null?void 0:n.style)||"grid",g=(n==null?void 0:n.columns)||"auto";o.useEffect(()=>{const e=async()=>{let s=q.from("gallery_images").select("id, url, alt_text, file_name, category").eq("is_enabled",!0).order("sort_order",{ascending:!0});u!=="all"&&(s=s.eq("category",u));const{data:l}=await s;p(l||[]),f(!1)};f(!0),e()},[u]);const w=e=>m(e),x=()=>m(null),b=o.useCallback(()=>{a!==null&&m((a+1)%r.length)},[a,r.length]),d=o.useCallback(()=>{a!==null&&m((a-1+r.length)%r.length)},[a,r.length]);o.useEffect(()=>{if(a===null)return;const e=s=>{s.key==="Escape"&&x(),s.key==="ArrowRight"&&b(),s.key==="ArrowLeft"&&d()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[a,b,d]);const j=o.useMemo(()=>c!=="grid"||g==="auto"?"grid-cols-2 md:grid-cols-3 lg:grid-cols-4":{2:"grid-cols-1 sm:grid-cols-2",3:"grid-cols-2 md:grid-cols-3",4:"grid-cols-2 md:grid-cols-3 lg:grid-cols-4",5:"grid-cols-2 md:grid-cols-3 lg:grid-cols-5"}[g]||"grid-cols-2 md:grid-cols-3 lg:grid-cols-4",[c,g]),C=o.useMemo(()=>{if(c!=="justified")return[];const e=280,s=[];let l=[],i=0;const k=1200;for(const G of r){const R=e*1.3333333333333333;l.push(G),i+=R,i>=k&&l.length>=2&&(s.push([...l]),l=[],i=0)}return l.length>0&&s.push(l),s},[r,c]),L=(e,s,l="rounded-card",i="aspect-square")=>t.jsx("div",{className:`${i} cursor-pointer overflow-hidden ${l} group`,children:t.jsx(E,{src:e.url,alt:e.alt_text||e.file_name,className:"w-full h-full object-cover transition-transform duration-700 ease-out group-hover:scale-[1.03]",sizes:"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw",onClick:()=>w(s)})},e.id),I=()=>t.jsx("div",{className:`grid ${j} gap-3 md:gap-4`,children:r.map((e,s)=>L(e,s,"rounded-card"))}),S=()=>t.jsx("div",{className:"columns-2 md:columns-3 lg:columns-4 gap-3 md:gap-4",children:r.map((e,s)=>t.jsx("div",{className:"mb-3 md:mb-4 break-inside-avoid cursor-pointer overflow-hidden rounded-card group",children:t.jsx(E,{src:e.url,alt:e.alt_text||e.file_name,className:"w-full h-auto object-cover transition-transform duration-700 ease-out group-hover:scale-[1.03]",sizes:"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw",onClick:()=>w(s)})},e.id))}),_=()=>{let e=0;return t.jsx("div",{className:"space-y-2",children:C.map((s,l)=>t.jsx("div",{className:"flex gap-2",children:s.map(i=>{const k=e++;return t.jsx("div",{className:"flex-1 cursor-pointer overflow-hidden rounded-card group",style:{height:"280px"},children:t.jsx(E,{src:i.url,alt:i.alt_text||i.file_name,className:"w-full h-full object-cover transition-transform duration-700 ease-out group-hover:scale-[1.03]",sizes:"(max-width: 640px) 100v
1w, (max-width: 1024px) 50vw, 33vw",onClick:()=>w(k)})},i.id)})},l))})},z=()=>c==="masonry"?S():c==="justified"?_():I();return t.jsxs(P,{children:[t.jsx(T,{title:"Galeria de Fotos",description:"Fotos do Hotel Vila Inglesa em Campos do Jordão. Ambientes, lazer, gastronomia e acomodações em imagens de alta qualidade.",path:"/galeria/",breadcrumbs:[...M,{name:"Galeria",url:"https://www.hotelvilainglesa.com.br/galeria/"}],jsonLd:{"@type":"ImageGallery",name:"Galeria de Fotos - Hotel Vila Inglesa",url:"https://www.hotelvilainglesa.com.br/galeria/"}}),t.jsx($,{pageSlug:"galeria"}),t.jsx("div",{className:"py-16 bg-[#f5f0e8]",children:t.jsxs("div",{className:"container mx-auto px-4",children:[t.jsx("div",{className:"flex justify-center gap-3 mb-10 flex-wrap",children:N.map(e=>t.jsx("button",{onClick:()=>y(e.value),className:`px-5 py-2 rounded-full text-sm font-medium tracking-wide uppercase transition-all duration-300 border ${u===e.value?"bg-primary text-primary-foreground border-primary":"bg-white/80 text-primary border-primary/20 hover:border-primary/50"}`,children:e.label},e.value))}),h?t.jsx("div",{className:"flex justify-center py-20",children:t.jsx(F,{className:"h-8 w-8 animate-spin text-primary"})}):r.length===0?t.jsx("div",{className:"text-center py-20 text-muted-foreground",children:t.jsx("p",{children:"Nenhuma imagem encontrada nesta categoria."})}):z()]})}),a!==null&&r[a]&&t.jsxs("div",{className:"fixed inset-0 z-[100] bg-black/90 flex items-center justify-center",onClick:x,children:[t.jsx("button",{onClick:e=>{e.stopPropagation(),x()},className:"absolute top-4 right-4 text-white/80 hover:text-white z-10",children:t.jsx(V,{size:32})}),t.jsx("button",{onClick:e=>{e.stopPropagation(),d()},className:"absolute left-4 text-white/80 hover:text-white z-10",children:t.jsx(W,{size:40})}),t.jsx("button",{onClick:e=>{e.stopPropagation(),b()},className:"absolute right-4 text-white/80 hover:text-white z-10",children:t.jsx(O,{size:40})}),t.jsx("img",{src:r[a].url,alt:r[a].alt_text||"",className:"max-w-[90vw] max-h-[85vh] object-contain rounded-feature",onClick:e=>e.stopPropagation()}),t.jsxs("div",{className:"absolute bottom-6 text-white/70 text-sm",children:[a+1," / ",r.length]})]})]})};export{ne 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.