{"version":3,"file":"PhotoSlideshow.x__ZTSg3.mjs","names":["useMemo","useRef","useState","useCallback"],"sources":["https:/framerusercontent.com/modules/Pu7WSmgUwVdk6RL4AvA4/6p3sCcffCJSI5RTy1A9o/PhotoSlideshow.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{animate,motion,useMotionValue}from\"framer-motion\";import{useCallback,useEffect,useMemo,useRef,useState}from\"react\";// --- Image weight helpers -------------------------------------------------\n// Framer prepares several sizes of every photo. These pick a sensible one\n// instead of the multi-megabyte original. 2100px wide is about 2x the\n// largest tile on the site, so nothing looks softer on normal or retina screens.\nconst MAX_IMG_W=2100;function parseSrcSet(srcSet){if(!srcSet)return[];return srcSet.split(\",\").map(s=>s.trim()).filter(Boolean).map(s=>{const parts=s.split(/\\s+/);return{url:parts[0],w:parseInt(parts[1]||\"\",10)};}).filter(c=>c.url&&c.w>0).sort((a,b)=>a.w-b.w);}function cappedSrcSet(srcSet){const all=parseSrcSet(srcSet);if(!all.length)return srcSet;const kept=all.filter(c=>c.w<=MAX_IMG_W);return(kept.length?kept:[all[0]]).map(c=>c.url+\" \"+c.w+\"w\").join(\", \");}function safeSrc(src,srcSet){const all=parseSrcSet(srcSet);if(!all.length)return src;const kept=all.filter(c=>c.w<=MAX_IMG_W);return(kept.length?kept[kept.length-1]:all[0]).url;}function pickForWidth(src,srcSet,needW=1200){const all=parseSrcSet(srcSet);if(!all.length)return src;const kept=all.filter(c=>c.w<=MAX_IMG_W);const pool=kept.length?kept:[all[0]];return(pool.find(c=>c.w>=needW)||pool[pool.length-1]).url;}// Framer puts the photo's true pixel size in its URL, so proportions can be\n// known without downloading the picture.\nfunction ratioFromUrl(src){const m=src?/[?&]width=(\\d+)&(?:amp;)?height=(\\d+)/.exec(src):null;return m?Number(m[1])/Number(m[2]):null;}/**\n * Reusable photo slideshow. Photos are a plain list in the panel, so each\n * copy on the site can carry its own set.\n *\n * \"Photo shape\" mode sizes every slide to its own photo at the height of the\n * component - portraits narrow, landscapes wide - so nothing is cropped and\n * there is no letterboxing, only the gap between photos.\n *\n * @framerIntrinsicWidth 1200\n * @framerIntrinsicHeight 600\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function PhotoSlideshow(props){const{images=[],mode=\"fit\",itemsVisible=1.2,gap=12,align=\"center\",autoplay=true,interval=5,duration=.9,pauseOnHover=true,draggable=true,radius=0,background=\"#000000\",saveData=false}=props;const isStatic=useIsStaticRenderer();const photos=useMemo(()=>(images||[]).filter(p=>p&&p.src),[images]);const n=photos.length;const rootRef=useRef(null);const[size,setSize]=useState({w:1200,h:600});useEffect(()=>{const el=rootRef.current;if(!el)return;const measure=()=>setSize({w:el.clientWidth||1,h:el.clientHeight||1});measure();const ro=new ResizeObserver(measure);ro.observe(el);return()=>ro.disconnect();},[]);// Natural proportions, read from each photo once it loads.\nconst[ratios,setRatios]=useState({});useEffect(()=>{let alive=true;photos.forEach(p=>{if(!p.src||ratios[p.src]||ratioFromUrl(p.src))return;const img=new Image;img.onload=()=>{if(!alive||!img.naturalWidth||!img.naturalHeight)return;setRatios(r=>({...r,[p.src]:img.naturalWidth/img.naturalHeight}));};img.src=pickForWidth(p.src,p.srcSet,512)||p.src;});return()=>{alive=false;};},[photos]);const slideWidth=useCallback(p=>{if(mode===\"fill\"){const k=Math.max(itemsVisible,1);return Math.max(1,(size.w-gap*(k-1))/k);}return Math.max(1,size.h*(ratios[p.src]||ratioFromUrl(p.src)||1.5));},[mode,itemsVisible,size,gap,ratios]);// Three copies of the list so the loop never runs out in either direction.\n// A single photo is shown once, still - repeating it would fake neighbours.\nconst track=useMemo(()=>n>1?[...photos,...photos,...photos]:photos,[photos,n]);const widths=useMemo(()=>track.map(slideWidth),[track,slideWidth]);const offsets=useMemo(()=>{const o=[];let acc=0;for(const w of widths){o.push(acc);acc+=w+gap;}return o;},[widths,gap]);const start=n>1?n:0;const[index,setIndex]=useState(start);useEffect(()=>setIndex(start),[start]);// Load-as-you-go (used on the archive): a row only fetches photos once it\n// is near the screen, and then only the photos around the one showing.\nconst[near,setNear]=useState(false);useEffect(()=>{const el=rootRef.current;if(!saveData||isStatic||!el||typeof IntersectionObserver===\"undefined\"){setNear(true);return;}const io=new IntersectionObserver(entries=>{if(entries.some(e=>e.isIntersecting)){setNear(true);io.disconnect();}},{rootMargin:\"1200px 0px 1200px 0px\"});io.observe(el);return()=>io.disconnect();},[saveData,isStatic]);const[loaded,setLoaded]=useState({});const targetX=useCallback(i=>{if(!widths.length)return 0;const lead=align===\"center\"?(size.w-widths[i])/2:0;return-offsets[i]+lead;},[widths,offsets,size.w,align]);// Load only the photos that are on screen, plus about one slide either side.\n// Works out from the real slide widths, so a phone (big slides, few visible)\n// fetches far less than a wide desktop.\nuseEffect(()=>{if(!saveData||!near||!n||!widths.length)return;const tx=targetX(index);const slack=Math.max(1,...widths)*.6;setLoaded(prev=>{const next={...prev};let changed=false;widths.forEach((w,i)=>{const left=offsets[i]+tx;if(left<size.w+slack&&left+w>-slack){const k=n>1?i%n:0;if(!next[k]){next[k]=true;changed=true;}}});return changed?next:prev;});},[saveData,near,index,n,widths,offsets,size.w,targetX]);const x=useMotionValue(0);const busy=useRef(false);// Keep the track in place on resize or when photos change.\nuseEffect(()=>{if(!busy.current)x.set(targetX(index));},[targetX]);const go=useCallback(next=>{if(!n)return;busy.current=true;setIndex(next);animate(x,targetX(next),{duration,ease:[.17,0,.12,1]}).then(()=>{let settled=next;if(next>=2*n)settled=next-n;if(next<n)settled=next+n;if(settled!==next){setIndex(settled);x.set(targetX(settled));}busy.current=false;});},[n,x,targetX,duration]);const[hovered,setHovered]=useState(false);useEffect(()=>{if(isStatic||!autoplay||n<2)return;if(pauseOnHover&&hovered)return;const t=setInterval(()=>{if(!busy.current&&document.visibilityState===\"visible\")go(index+1);},Math.max(interval,1)*1e3);return()=>clearInterval(t);},[isStatic,autoplay,n,hovered,pauseOnHover,interval,index,go]);const root={position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\",background};if(!n){// Hint in the editor only - an empty slideshow shows nothing on the live site.\nif(!isStatic)return /*#__PURE__*/_jsx(\"div\",{style:{...root,background:\"transparent\"}});return /*#__PURE__*/_jsx(\"div\",{style:{...root,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",color:\"#777\",fontSize:13},children:\"Add photos in the panel\"});}const slides=track.map((p,i)=>/*#__PURE__*/_jsx(\"div\",{style:{flex:\"0 0 auto\",width:widths[i],height:\"100%\",borderRadius:radius,overflow:\"hidden\",background},children:(!saveData||loaded[n>1?i%n:0])&&/*#__PURE__*/_jsx(\"img\",{src:safeSrc(p.src,p.srcSet),srcSet:cappedSrcSet(p.srcSet),sizes:Math.ceil(widths[i])+\"px\",alt:p.alt||\"\",decoding:\"async\",draggable:false,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",display:\"block\",userSelect:\"none\",pointerEvents:\"none\"}})},i));const trackStyle={display:\"flex\",gap,height:\"100%\",alignItems:\"stretch\"};if(isStatic){return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:root,children:/*#__PURE__*/_jsx(\"div\",{style:{...trackStyle,transform:`translateX(${targetX(start)}px)`},children:slides})});}return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:root,onMouseEnter:()=>setHovered(true),onMouseLeave:()=>setHovered(false),children:/*#__PURE__*/_jsx(motion.div,{style:{...trackStyle,x,cursor:draggable?\"grab\":\"default\",touchAction:\"pan-y\"},drag:draggable&&n>1?\"x\":false,dragMomentum:false,dragElastic:.15,onDragStart:()=>busy.current=true,onDragEnd:(_,info)=>{busy.current=false;const swipe=info.offset.x+info.velocity.x*.2;if(swipe<-60)go(index+1);else if(swipe>60)go(index-1);else go(index);},whileTap:draggable?{cursor:\"grabbing\"}:undefined,children:slides})});}addPropertyControls(PhotoSlideshow,{images:{type:ControlType.Array,title:\"Photos\",maxCount:60,control:{type:ControlType.ResponsiveImage}},mode:{type:ControlType.Enum,title:\"Slides\",options:[\"fit\",\"fill\"],optionTitles:[\"Photo shape\",\"Equal width\"],defaultValue:\"fit\",displaySegmentedControl:true,description:\"Photo shape never crops. Equal width crops to fill.\"},itemsVisible:{type:ControlType.Number,title:\"Across\",defaultValue:1.2,min:1,max:6,step:.05,hidden:p=>p.mode!==\"fill\"},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:12,min:0,max:80,step:1,unit:\"px\"},align:{type:ControlType.Enum,title:\"Align\",options:[\"center\",\"start\"],optionTitles:[\"Centre\",\"Left\"],defaultValue:\"center\",displaySegmentedControl:true},autoplay:{type:ControlType.Boolean,title:\"Autoplay\",defaultValue:true},saveData:{type:ControlType.Boolean,title:\"Load as you go\",defaultValue:false,description:\"Loads the row only when it nears the screen, and only the photos around the one showing.\"},interval:{type:ControlType.Number,title:\"Every\",defaultValue:5,min:1,max:30,step:.5,unit:\"s\",hidden:p=>!p.autoplay},pauseOnHover:{type:ControlType.Boolean,title:\"Pause on hover\",defaultValue:true,hidden:p=>!p.autoplay},duration:{type:ControlType.Number,title:\"Speed\",defaultValue:.9,min:.2,max:3,step:.1,unit:\"s\"},draggable:{type:ControlType.Boolean,title:\"Swipe\",defaultValue:true},radius:{type:ControlType.Number,title:\"Corners\",defaultValue:0,min:0,max:40,step:1,unit:\"px\"},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"#000000\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"PhotoSlideshow\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"1200\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"600\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./PhotoSlideshow.map"],"mappings":"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"}