{"version":3,"file":"MapBoxScrollMapTrigger.C9Bl9Uob.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/qHbLnrc8eRwsuOK0wThO/L9ERngKdKoskkJhZTiCd/MapBoxScrollMapTrigger.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType}from\"framer\";function findVisualBox(el){let current=el;while(current){const rect=current.getBoundingClientRect();const style=getComputedStyle(current);const hasRealWidth=rect.width>50;const isNotContents=style.display!==\"contents\";if(hasRealWidth&&isNotContents){return current;}current=current.parentElement;}return null;}/* -------------------------------------------------------------------------- *//*                 Find nearest meaningful Framer section                     *//* -------------------------------------------------------------------------- */function findObservableSection(el){let current=el;while(current){const rect=current.getBoundingClientRect();const style=getComputedStyle(current);const hasSize=rect.height>120&&rect.width>120;const isVisible=style.display!==\"contents\";if(hasSize&&isVisible)return current;current=current.parentElement;}return null;}export function MapCameraTrigger(props){const{lng,lat,zoom,pitch,bearing,duration,activateRatio,centerXPct,centerYPct,showMarker,markerLng,markerLat}=props;const markerRef=useRef(null);const armedRef=useRef(true);useEffect(()=>{const marker=markerRef.current;if(!marker)return;const target=findObservableSection(marker);if(!target){console.warn(\"[MapCameraTrigger] No observable section found\");return;}if(getComputedStyle(target).position===\"static\"){target.style.position=\"relative\";}const thresholds=Array.from({length:21},(_,i)=>i/20);const observer=new IntersectionObserver(entries=>{for(const entry of entries){if(entry.target!==target)continue;// Re-arm when sufficiently out of view\nif(entry.intersectionRatio<Math.max(0,activateRatio-.25)){armedRef.current=true;continue;}if(entry.intersectionRatio<activateRatio)continue;if(!armedRef.current)continue;const setCamera=window.__setMapCamera;if(typeof setCamera!==\"function\")continue;const lngN=Number(lng);const latN=Number(lat);if(Number.isNaN(lngN)||Number.isNaN(latN))continue;/* ------------------------------------------------------ *//*                 % → px offset (viewport)               *//* ------------------------------------------------------ */// const vw = window.innerWidth\n// const vh = window.innerHeight\n// // Invert offset so visual intent matches Mapbox behaviour\n// const offsetX = -((centerXPct - 50) / 100) * vw\n// const offsetY = -((centerYPct - 50) / 100) * vh\n// const parent = target // the parent stack/frame you are observing\n// const parentRect = parent.getBoundingClientRect()\n// const vw = window.innerWidth\n// const vh = window.innerHeight\n// // Assume the parent is centred in the viewport (ignore scroll position)\n// const virtualLeft = (vw - parentRect.width) / 2\n// const virtualTop = (vh - parentRect.height) / 2\n// // Desired anchor point inside the parent (in viewport pixels)\n// const anchorX =\n//     virtualLeft + parentRect.width * (centerXPct / 100)\n// const anchorY =\n//     virtualTop + parentRect.height * (centerYPct / 100)\n// // Mapbox offset is relative to the viewport centre\n// const offsetX = anchorX - vw / 2\n// const offsetY = anchorY - vh / 2\nconst visualEl=findVisualBox(marker);if(!visualEl)return;const rect=visualEl.getBoundingClientRect();const vw=window.innerWidth;const vh=window.innerHeight;// --- HORIZONTAL ---\n// Use REAL layout position\nconst anchorX=rect.left+rect.width/2;// --- VERTICAL ---\n// Assume section is vertically centred\nconst virtualTop=(vh-rect.height)/2;const anchorY=virtualTop+rect.height/2;const offsetX=anchorX-vw/2;const offsetY=anchorY-vh/2;//visualEl.style.outline = \"2px solid red\"\nsetCamera({center:[lngN,latN],zoom:Number(zoom),pitch:Number(pitch),bearing:Number(bearing),duration:Number(duration),offset:[offsetX,offsetY],...showMarker?{marker:{lng:Number(markerLng),lat:Number(markerLat)}}:{}});armedRef.current=false;}},{threshold:thresholds});observer.observe(target);return()=>observer.disconnect();},[lng,lat,zoom,pitch,bearing,duration,activateRatio,centerXPct,centerYPct,showMarker,markerLng,markerLat]);// Invisible marker; parent section is observed\nreturn /*#__PURE__*/_jsx(\"div\",{ref:markerRef,style:{width:1,height:1}});}/* -------------------------------------------------------------------------- *//*                           Framer Property Controls                          *//* -------------------------------------------------------------------------- */addPropertyControls(MapCameraTrigger,{lng:{type:ControlType.Number,title:\"Longitude\",defaultValue:-2.2459,step:1e-4},lat:{type:ControlType.Number,title:\"Latitude\",defaultValue:53.4775,step:1e-4},zoom:{type:ControlType.Number,title:\"Zoom\",min:0,max:18,step:.1,defaultValue:10},pitch:{type:ControlType.Number,title:\"Pitch\",min:0,max:85,step:1,defaultValue:0},bearing:{type:ControlType.Number,title:\"Bearing\",min:-180,max:180,step:1,defaultValue:0},duration:{type:ControlType.Number,title:\"Duration (ms)\",min:0,max:5e3,step:100,defaultValue:2e3},activateRatio:{type:ControlType.Number,title:\"Activate %\",min:.1,max:.95,step:.05,defaultValue:.6},// Offset controls\ncenterXPct:{type:ControlType.Number,title:\"Center X %\",min:0,max:100,step:1,defaultValue:50},centerYPct:{type:ControlType.Number,title:\"Center Y %\",min:0,max:100,step:1,defaultValue:50},// Marker controls\nshowMarker:{type:ControlType.Boolean,title:\"Show Marker\",defaultValue:false},markerLng:{type:ControlType.Number,title:\"Marker Longitude\",defaultValue:-2.2459,step:1e-4,hidden:props=>!props.showMarker},markerLat:{type:ControlType.Number,title:\"Marker Latitude\",defaultValue:53.4775,step:1e-4,hidden:props=>!props.showMarker}});\nexport const __FramerMetadata__ = {\"exports\":{\"MapCameraTrigger\":{\"type\":\"reactComponent\",\"name\":\"MapCameraTrigger\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MapBoxScrollMapTrigger.map"],"mappings":"0LAAmI,SAAS,EAAc,EAAG,CAAC,IAAI,EAAQ,EAAG,KAAM,GAAQ,CAAC,IAAM,EAAK,EAAQ,sBAAsB,EAAQ,EAAM,iBAAiB,CAAO,EAAQ,EAAa,EAAK,MAAM,GAAS,EAAc,EAAM,UAAU,WAAW,GAAG,GAAc,EAAe,OAAO,EAAS,EAAQ,EAAQ,aAAc,CAAC,OAAO,IAAK,CAAiP,SAAS,EAAsB,EAAG,CAAC,IAAI,EAAQ,EAAG,KAAM,GAAQ,CAAC,IAAM,EAAK,EAAQ,sBAAsB,EAAQ,EAAM,iBAAiB,CAAO,EAAQ,EAAQ,EAAK,OAAO,KAAK,EAAK,MAAM,IAAU,EAAU,EAAM,UAAU,WAAW,GAAG,GAAS,EAAU,OAAO,EAAQ,EAAQ,EAAQ,aAAc,CAAC,OAAO,IAAK,CAAC,SAAgB,EAAiB,EAAM,CAAC,GAAK,CAAC,MAAI,MAAI,OAAK,QAAM,UAAQ,WAAS,gBAAc,aAAW,aAAW,aAAW,YAAU,aAAW,EAAY,EAAUA,EAAO,IAAI,EAAQ,EAASA,EAAO,EAAI,EA2BxrC,OA3B0rC,MAAc,CAAC,IAAM,EAAO,EAAU,QAAQ,GAAG,CAAC,EAAO,OAAO,IAAM,EAAO,EAAsB,CAAM,EAAE,GAAG,CAAC,EAAO,CAAC,QAAQ,KAAK,gDAAgD,EAAE,MAAO,CAAI,iBAAiB,CAAM,CAAC,CAAC,WAAW,WAAU,EAAO,MAAM,SAAS,YAAY,IAAM,EAAW,MAAM,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAQ,EAAS,IAAI,qBAAqB,GAAS,CAAC,IAAI,IAAM,KAAS,EAAQ,CAAC,GAAG,EAAM,SAAS,EAAO,SACvmD,GAAG,EAAM,kBAAkB,KAAK,IAAI,EAAE,EAAc,GAAG,EAAE,CAAC,EAAS,QAAQ,GAAK,QAAS,CAAmD,GAA/C,EAAM,kBAAkB,GAA0B,CAAC,EAAS,QAAQ,SAAS,IAAM,EAAU,EAAO,eAAe,GAAG,OAAO,GAAY,WAAW,SAAS,IAAM,EAAK,OAAO,CAAG,EAAQ,EAAK,OAAO,CAAG,EAAE,GAAG,OAAO,MAAM,CAAI,GAAG,OAAO,MAAM,CAAI,EAAE,SAoBlV,IAAM,EAAS,EAAc,CAAM,EAAE,GAAG,CAAC,EAAS,OAAO,IAAM,EAAK,EAAS,sBAAsB,EAAQ,EAAG,EAAO,WAAiB,EAAG,EAAO,YAE1I,EAAQ,EAAK,KAAK,EAAK,MAAM,EAEO,GAAxB,EAAG,EAAK,QAAQ,EAA2B,EAAK,OAAO,EAAQ,EAAQ,EAAQ,EAAG,EAAQ,EAAQ,EAAQ,EAAG,EAC/H,EAAU,CAAC,OAAO,CAAC,EAAK,CAAI,EAAE,KAAK,OAAO,CAAI,EAAE,MAAM,OAAO,CAAK,EAAE,QAAQ,OAAO,CAAO,EAAE,SAAS,OAAO,CAAQ,EAAE,OAAO,CAAC,EAAQ,CAAO,EAAE,GAAG,EAAW,CAAC,OAAO,CAAC,IAAI,OAAO,CAAS,EAAE,IAAI,OAAO,CAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAS,QAAQ,EAAM,CAAC,EAAE,CAAC,UAAU,CAAU,CAAC,EAA2B,OAAzB,EAAS,QAAQ,CAAM,MAAY,EAAS,WAAW,CAAE,EAAE,CAAC,EAAI,EAAI,EAAK,EAAM,EAAQ,EAAS,EAAc,EAAW,EAAW,EAAW,EAAU,CAAS,CAAC,EAC1Z,EAAK,MAAM,CAAC,IAAI,EAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAE,qBA3B/B,IAAoC,IAAoD,EA2ByL,EAAoB,EAAiB,CAAC,IAAI,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,QAAQ,KAAK,IAAI,EAAE,IAAI,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,QAAQ,KAAK,IAAI,EAAE,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,aAAa,EAAE,EAAE,MAAM,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,IAAI,KAAK,IAAI,IAAI,KAAK,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,IAAI,EAAE,IAAI,IAAI,KAAK,IAAI,aAAa,GAAG,EAAE,cAAc,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,aAAa,EAAE,EAC37B,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,EAAE,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,EAAE,EACxL,WAAW,CAAC,KAAK,EAAY,QAAQ,MAAM,cAAc,aAAa,EAAK,EAAE,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,mBAAmB,aAAa,QAAQ,KAAK,KAAK,OAAO,GAAO,CAAC,EAAM,UAAU,EAAE,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,kBAAkB,aAAa,QAAQ,KAAK,KAAK,OAAO,GAAO,CAAC,EAAM,UAAU,CAAC,CAAC"}