1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3678,8552],{5772:(e,t,r)=>{"use strict";r.d(t,{default:()=>a.a});var n=r(7651),a=r.n(n)},6853:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(5155),a=r(8798),o=r(2733),s=r(3210),l=r(1641),i=r(1362),c=r(5772),u=r(2115),d=r(7650);function p({photos:e,startIndex:t=0,onClose:r}){let[p,m]=(0,u.useState)(t),[f,h]=(0,u.useState)(!1),[g,v]=(0,u.useState)(!1);(0,u.useEffect)(()=>v(!0),[]),(0,u.useEffect)(()=>{e&&m(t)},[e,t]),(0,u.useEffect)(()=>h(!1),[p,e]);let x=e?.length??0,b=(0,u.useCallback)(()=>m(e=>x?(e+1)%x:0),[x]),w=(0,u.useCallback)(()=>m(e=>x?(e-1+x)%x:0),[x]);if((0,u.useEffect)(()=>{if(!e)return;let t=e=>{"Escape"===e.key?r():"ArrowRight"===e.key?b():"ArrowLeft"===e.key&&w()};window.addEventListener("keydown",t);let{overflow:n}=document.body.style;return document.body.style.overflow="hidden",()=>{window.removeEventListener("keydown",t),document.body.style.overflow=n}},[e,b,w,r]),!g)return null;let y=e?.[p],j=e&&x>1?Array.from(new Set([(p+1)%x,(p-1+x)%x])).filter(e=>e!==p).map(t=>e[t]):[];return(0,d.createPortal)((0,n.jsx)(a.N,{children:e&&y&&(0,n.jsxs)(o.P.div,{className:"fixed inset-0 z-[110] flex items-center justify-center p-4 md:p-10",initial:{opacity:0}
1,animate:{opacity:1},exit:{opacity:0},transition:{duration:.18},onClick:r,role:"dialog","aria-modal":"true","aria-label":y.location??"photos",children:[(0,n.jsx)("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-md"}),(0,n.jsx)("div",{"aria-hidden":!0,className:"pointer-events-none absolute h-0 w-0 overflow-hidden opacity-0",children:j.map(e=>(0,n.jsx)(c.default,{src:e.image,alt:"",width:1400,height:1400,sizes:"100vw",priority:!0},e.image))}),(0,n.jsx)("button",{"aria-label":"Close",onClick:r,className:"absolute right-4 top-4 z-10 flex h-10 w-10 items-center justify-center rounded-full bg-white/10 text-white backdrop-blur transition hover:bg-white/20",children:(0,n.jsx)(s.A,{className:"h-5 w-5"})}),x>1&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{"aria-label":"Previous photo",onClick:e=>{e.stopPropagation(),w()},className:"absolute left-2 z-10 flex h-11 w-11 items-center justify-center rounded-full bg-white/10 text-white backdrop-blur transition hover:bg-white/20 md:left-6",children:(0,n.jsx)(l.A,{className:"h-6 w-6"})}),(0,n.jsx)("button",{"aria-label":"Next photo",onClick:e=>{e.stopPropagation(),b()},className:"absolute right-2 z-10 flex h-11 w-11 items-center justify-center rounded-full bg-white/10 text-white backdrop-blur transition hover:bg-white/20 md:right-6",children:(0,n.jsx)(i.A,{className:"h-6 w-6"})})]}),(0,n.jsxs)(o.P.div,{className:"relative z-[1] flex h-full w-full flex-col items-center justify-center",initial:{opacity:0,scale:.97},animate:{opacity:1,scale:1},transition:{type:"spring",stiffness:300,damping:30},onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("div",{className:"relative w-full flex-1",children:[!f&&(0,n.jsx)("div",{className:"absolute inset-0 flex items-center justify-center",children:(0,n.jsx)("div",{className:"h-8 w-8 animate-spin rounded-full border-2 border-white/25 border-t-white/80"})}),(0,n.jsx)(c.default,{src:y.image,alt:y.location??"Photo",fill:!0,sizes:"100vw",onLoad:()=>h(!0),className:`object-contain transition-opacity duration-300 ${f?"opacity-100":"opacity-0"}`,priority:!0})]}),(y.location||y.date)&&(0,n.jsxs)("div",{className:"mt-3 flex shrink-0 items-center gap-3 text-sm lowercase text-white/90",children:[y.location&&(0,n.jsx)("span",{className:"font-medium",children:y.location}),y.date&&(0,n.jsx)("span",{className:"text-white/50",children:y.date}),x>1&&(0,n.jsxs)("span",{className:"text-white/50",children:[p+1," / ",x]})]})]},y.image)]})}),document.body)}},7651:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={default:function(){return u},getImageProps:function(){return c}};for(var a in n)Object.defineProperty(t,a,{enumerable:!0,get:n[a]});let o=r(3623),s=r(5413),l=r(8437),i=o._(r(6095));function c(e){let{props:t}=(0,s.getImgProps)(e,{defaultLoader:i.default,imgConf:{deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75,85],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1}});for(let[e,r]of Object.entries(t))void 0===r&&delete t[e];return{props:t}}let u=l.Image},8552:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(5155),a=r(2115),o=r(8500),s=r.n(o),l=r(3321),i=r(8849),c=r.n(i);r(5173);var u=r(6853);function d(e){return e?`/photos?place=${encodeURIComponent(e)}`:"/photos"}function p({places:e,zoom:t=1.4,pitch:r=20,height:o=400,linkToPhotos:s=!1}){let i=(0,l.useRouter)(),p=(0,a.useRef)(null),m=(0,a.useRef)(null),f=(0,a.useRef)([]),[h,g]=(0,a.useState)(null),v=(0,a.useRef)(g);v.current=g;let x=(0,a.useRef)(e=>{i.push(d(e))});x.current=e=>{i.push(d(e))};let b=(0,a.useRef)(s);b.current=s;let w=(0,a.useRef)(()=>{}),y=(0,a.useRef)(!1),j=(0,a.useRef)(!1),k=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(!p.current||m.current)return;m.current=new(c()).Map({container:p.current,center:[-100,40],zoom:t,pitch:r,projection:"globe",attributionControl:!1,style:"mapbox://styles/mapbox/standard"});let n=window.matchMedia("(prefers-reduced-motion: reduce)"),a=()=>{if(!m.current||n.matches||document.hidden||y.current||j.current||m.current.getZoom()>4)return;let e=m.current.getCenter();e.lng-=3,m.current.easeTo({center:e,duration:1e3,easing:e=>e})};w.current=a;let o=()=>{n.matches||document.hidden?m.current?.stop():a()};n.addEventListener("change",o),document.addEventListener("visibilitychange",o);let s=()=>{y.current=!0};
1["mousedown","dragstart","touchstart"].forEach(e=>m.current.on(e,s)),m.current.on("dragstart",()=>{k.current=!0}),m.current.on("click",e=>{if(!b.current)return;let t=e.originalEvent.target;if(!(t instanceof Element&&t.closest(".place-marker"))){if(k.current){k.current=!1;return}x.current()}}),m.current.on("moveend",()=>{y.current||a()}),["mouseup","touchend","dragend"].forEach(e=>m.current.on(e,()=>{y.current=!1,a()}));let l=(e,t,r=75)=>`/_next/image?url=${encodeURIComponent(e)}&w=${t}&q=${r}`;return m.current.on("style.load",()=>{try{m.current?.setConfigProperty("basemap","lightPreset","light")}catch{}a(),e.forEach(e=>{let t=document.createElement("button");if(t.className="place-marker",t.type="button",t.setAttribute("aria-label",`Photos from ${e.location}`),e.image?t.style.backgroundImage=`url(${l(e.image,96)})`:(t.classList.add("place-marker--empty"),t.textContent=e.location.slice(0,1)),e.count>1){let r=document.createElement("span");r.className="place-marker__badge",r.textContent=String(e.count),t.appendChild(r)}let r=e.image?`<div class="place-popup__inner"> 2 <img src="${l(e.image,384)}" alt="${e.location}" loading="lazy" /> 3 <div class="place-popup__meta"> 4 <span class="place-popup__loc">${e.location}</span> 5 <span class="place-popup__count">${e.count} photo${e.count>1?"s":""}</span> 6 </div> 7 </div>`:`<div class="place-popup__inner place-popup__inner--text"> 8 <div class="place-popup__meta"> 9 <span class="place-popup__loc">${e.location}</span> 10 </div> 11 </div>`,n=new(c()).Popup({offset:22,closeButton:!1,className:"place-popup"}).setHTML(r),a=new(c()).Marker({element:t}).setLngLat([e.lng,e.lat]).setPopup(n).addTo(m.current);t.addEventListener("mouseenter",()=>a.togglePopup()),t.addEventListener("mouseleave",()=>a.togglePopup()),t.addEventListener("click",t=>{(t.stopPropagation(),b.current)?x.current(e.location):e.photos.length>0&&v.current(e)}),f.current.push(a)})}),()=>{n.removeEventListener("change",o),document.removeEventListener("visibilitychange",o),f.current.forEach(e=>e.remove()),f.current=[],m.current?.remove(),m.current=null}},[!0,e,t,r]),(0,a.useEffect)(()=>{j.current=null!==h,h?m.current?.stop():w.current()},[h]),0;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"overflow-clip",style:{height:o,cursor:s?"pointer":void 0},children:(0,n.jsx)("div",{ref:p,className:"map-container h-full w-full rounded-2xl"})}),(0,n.jsx)(u.A,{photos:h?h.photos.map(e=>({...e,location:h.location})):null,onClose:()=>g(null)})]})}c().accessToken="pk.eyJ1IjoiZmFpem0xMCIsImEiOiJjbWtvcmlueDMwYTFrM2VteGx4ZjM1Z21qIn0.5LPPTlO0Vf5rzt9E2MT6vQ"},9365:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var n=r(5155),a=r(5772),o=r(2115);let s=function(){for(var e,t,r=0,n="",a=arguments.length;r<a;r++)(e=arguments[r])&&(t=function e(t){var r,n,a="";if("string"==typeof t||"number"==typeof t)a+=t;else if("object"==typeof t)if(Array.isArray(t)){var o=t.length;for(r=0;r<o;r++)t[r]&&(n=e(t[r]))&&(a&&(a+=" "),a+=n)}else for(n in t)t[n]&&(a&&(a+=" "),a+=n);return a}(e))&&(n&&(n+=" "),n+=t);return n};var l=r(6853);function i({photos:e}){let[t,r]=(0,o.useState)(null);if(0===e.length)return null;let i=e.length%2==1;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"grid grid-cols-2 gap-3 sm:gap-4",children:e.map((t,o)=>{let l=i&&o===e.length-1;return(0,n.jsxs)("button",{type:"button",onClick:()=>r(o),"aria-label":t.location?`open photo from ${t.location}`:"open photo",className:s("group cursor-pointer text-left focus:outline-none",l&&"col-span-2 w-[calc(50%-0.375rem)] justify-self-center sm:w-[calc(50%-0.5rem)]"),children:[(0,n.jsx)("div",{className:"overflow-hidden rounded-xl bg-[var(--ink-3)]/10 shadow-[0_4px_14px_rgba(0,0,0,0.10)] ring-1 ring-black/[0.06] transition duration-300 group-hover:shadow-[0_8px_24px_rgba(0,0,0,0.16)] group-focus-visible:ring-2 group-focus-visible:ring-[var(--accent)]",children:(0,n.jsx)(a.default,{src:t.image,alt:t.location??"photo",width:t.width,height:t.height,sizes:"(max-width: 640px) 50vw, 288px",className:"h-auto w-full transition-transform duration-500 group-hover:scale-[1.03]",priority:o<4})}),(t.location||t.date)&&(0,n.jsxs)("div",{className:"mt-2 flex items-baseline justify-between gap-3",children:[t.location&&(0,n.jsx)("span",{className:"truncate text-[13px] lowercase",style:{color:"var(--ink-2)"},children:t.location}),t.date&&(0,n.jsx)("span",{className:"shrink-0 text-[11px] lowercase",style:{color:"var(--ink-3)"},children:t.date})]})]},t.image)})}),(0,n.jsx)(l.A,{photos:null===t?null:e,startIndex:t??0,onClose:()=>r(null)})]})}},9534:(e,t,r)=>{Promise.resolve().then(r.bind(r,9365)),Promise.resolve().then(r.bind(r,8552)),Promise.resolve().then(r.t.bind(r,8500,23)),Promise.resolve().then(r.t.bind(r,8437,23))}},e=>{e.O(0,[5508,240,8500,8437,6338,8441,3794,7358],()=>e(e.s=9534)),_N_E=e.O()}]);
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.