{"version":3,"file":"RandomizeWorksPreviewPosition.Dlr3r6d2.mjs","names":["useCallback","minLeft","minTop","useState","useRef","useMemo","_Fragment"],"sources":["https:/framerusercontent.com/modules/hZIkq3IE0Q2rSm8MQhxp/pWcg1CN8lFi3kIEKfEEn/RandomizeWorksPreviewPosition.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{forwardRef,startTransition,useCallback,useEffect,useMemo,useRef,useState}from\"react\";import{createPortal}from\"react-dom\";import{useIsStaticRenderer}from\"framer\";// Create a Framer code override named RandomizeWorksPreviewPosition for the existing canvas project preview image on the Works page. Keep canvas styling/image fill/editability, and randomize a safely contained central desktop position each time the fixed overlay becomes visible after a project-row click.\nexport function RandomizeWorksPreviewPosition(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const frameWidth=360;const frameHeight=450;const edgeClearance=60;const centralPadding=40;const pickCenteredPosition=useCallback(()=>{if(typeof window===\"undefined\"){return{left:edgeClearance,top:edgeClearance};}const viewportWidth=window.innerWidth||1200;const viewportHeight=window.innerHeight||800;const minLeft=edgeClearance;const maxLeft=Math.max(minLeft,viewportWidth-frameWidth-edgeClearance);const minTop=edgeClearance;const maxTop=Math.max(minTop,viewportHeight-frameHeight-edgeClearance);const innerMinLeft=Math.min(maxLeft,minLeft+centralPadding);const innerMaxLeft=Math.max(innerMinLeft,maxLeft-centralPadding);const innerMinTop=Math.min(maxTop,minTop+centralPadding);const innerMaxTop=Math.max(innerMinTop,maxTop-centralPadding);const centerBiased=(min,max)=>{if(min>=max)return min;const t=(Math.random()+Math.random())/2;return min+t*(max-min);};return{left:Math.round(centerBiased(innerMinLeft,innerMaxLeft)),top:Math.round(centerBiased(innerMinTop,innerMaxTop))};},[]);const[position,setPosition]=useState(()=>pickCenteredPosition());const wasVisibleRef=useRef(false);const isVisible=useMemo(()=>{const style=props?.style??{};if(style.display===\"none\")return false;if(style.visibility===\"hidden\")return false;if(typeof style.opacity===\"number\"&&style.opacity<=0)return false;if(typeof style.opacity===\"string\"&&parseFloat(style.opacity)<=0)return false;return true;},[props?.style]);useEffect(()=>{if(isVisible&&!wasVisibleRef.current){const next=pickCenteredPosition();startTransition(()=>setPosition(next));}wasVisibleRef.current=isVisible;},[isVisible,pickCenteredPosition]);return /*#__PURE__*/_jsx(Component,{ref:ref,...props,style:{...props.style,left:position.left,top:position.top,right:\"auto\",bottom:\"auto\"}});});}// Create a code override export named MobileProjectPreview for the existing CMS-driven Works project row on Phone; tapping a row should show that row’s bound project image in a mobile-safe portrait preview above a transparent dismissible backdrop, preserving existing row styling/interactions and avoiding hardcoded data.\nexport function MobileProjectPreview(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const isStatic=useIsStaticRenderer();const[isOpen,setIsOpen]=useState(false);const[activeImage,setActiveImage]=useState(\"\");const[viewportWidth,setViewportWidth]=useState(()=>{if(typeof window!==\"undefined\")return window.innerWidth;return null;});const lastOpenAtRef=useRef(0);const rowElementRef=useRef(null);useEffect(()=>{if(typeof window===\"undefined\")return;const updateViewportWidth=()=>{startTransition(()=>setViewportWidth(window.innerWidth));};updateViewportWidth();window.addEventListener(\"resize\",updateViewportWidth);window.addEventListener(\"orientationchange\",updateViewportWidth);return()=>{window.removeEventListener(\"resize\",updateViewportWidth);window.removeEventListener(\"orientationchange\",updateViewportWidth);};},[]);const isPhoneViewport=useMemo(()=>{if(viewportWidth!==null)return viewportWidth<1200;if(typeof window!==\"undefined\")return window.innerWidth<1200;return false;},[viewportWidth]);const findImageUrl=useCallback((value,visited=new WeakSet)=>{if(!value)return null;if(typeof value===\"string\"){const bgMatch=value.match(/url\\((['\"]?)(.*?)\\1\\)/i);if(bgMatch?.[2])return bgMatch[2];if(/^https?:\\/\\//i.test(value)&&(/\\.(jpg|jpeg|png|webp|gif|avif|svg)(\\?.*)?$/i.test(value)||/framerusercontent\\.com\\/images\\//i.test(value))){return value;}return null;}if(typeof value!==\"object\")return null;if(visited.has(value))return null;visited.add(value);if(typeof value.src===\"string\"&&value.src)return value.src;if(typeof value.url===\"string\"&&value.url)return value.url;if(typeof value.image===\"string\"&&value.image)return value.image;for(const key of Object.keys(value)){const result=findImageUrl(value[key],visited);if(result)return result;}return null;},[]);const getImageFromRowDom=useCallback(()=>{if(typeof window===\"undefined\"||typeof document===\"undefined\")return null;const rowEl=rowElementRef.current;if(!rowEl)return null;const selectors=[`[data-framer-name=\"Mobile Preview Source\"]`,`[aria-label=\"Mobile Preview Source\"]`,`[title=\"Mobile Preview Source\"]`];for(const selector of selectors){const sourceEl=rowEl.querySelector(selector);if(!sourceEl)continue;const computed=window.getComputedStyle(sourceEl);const fromComputed=findImageUrl(computed.backgroundImage);if(fromComputed)return fromComputed;const fromInline=findImageUrl(sourceEl.style.backgroundImage);if(fromInline)return fromInline;}return null;},[findImageUrl]);const imageUrl=useMemo(()=>{const fromStyle=findImageUrl(props?.style?.backgroundImage);if(fromStyle)return fromStyle;return findImageUrl(props);},[findImageUrl,props]);const openPreview=useCallback(()=>{if(isStatic||!isPhoneViewport)return;const now=Date.now();if(now-lastOpenAtRef.current<250)return;lastOpenAtRef.current=now;const resolvedImage=getImageFromRowDom()??imageUrl;if(!resolvedImage)return;startTransition(()=>{setActiveImage(resolvedImage);setIsOpen(true);});},[getImageFromRowDom,imageUrl,isStatic,isPhoneViewport]);const closePreview=useCallback(()=>{startTransition(()=>{setIsOpen(false);setActiveImage(\"\");});},[]);useEffect(()=>{if(!isPhoneViewport&&isOpen){startTransition(()=>{setIsOpen(false);setActiveImage(\"\");});}},[isOpen,isPhoneViewport]);const handleTap=useCallback((...args)=>{if(typeof props.onTap===\"function\")props.onTap(...args);openPreview();},[openPreview,props]);const handleClick=useCallback((...args)=>{if(typeof props.onClick===\"function\")props.onClick(...args);openPreview();},[openPreview,props]);const shouldRenderOverlay=isPhoneViewport&&isOpen&&!!activeImage&&typeof document!==\"undefined\"&&!isStatic;const setComponentRef=useCallback(node=>{rowElementRef.current=node;if(typeof ref===\"function\"){ref(node);return;}if(ref&&typeof ref===\"object\"){ref.current=node;}},[ref]);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Component,{ref:setComponentRef,...props,onTap:handleTap,onClick:handleClick}),shouldRenderOverlay?/*#__PURE__*/createPortal(/*#__PURE__*/_jsx(\"div\",{role:\"button\",\"aria-label\":\"Dismiss project preview\",onClick:closePreview,style:{position:\"fixed\",inset:0,background:\"rgba(0, 0, 0, 0)\",display:\"flex\",justifyContent:\"center\",alignItems:\"flex-start\",paddingTop:\"12vh\",zIndex:9999},children:/*#__PURE__*/_jsx(\"img\",{src:activeImage,alt:\"Selected project preview\",onClick:event=>event.stopPropagation(),style:{width:270,height:360,objectFit:\"cover\",borderRadius:0,boxShadow:\"none\",filter:\"none\",transition:\"none\",maxWidth:\"calc(100vw - 32px)\",maxHeight:\"calc(100vh - 120px)\"}})}),document.body):null]});});}\nexport const __FramerMetadata__ = {\"exports\":{\"MobileProjectPreview\":{\"type\":\"reactHoc\",\"name\":\"MobileProjectPreview\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"RandomizeWorksPreviewPosition\":{\"type\":\"reactHoc\",\"name\":\"RandomizeWorksPreviewPosition\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./RandomizeWorksPreviewPosition.map"],"mappings":"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"}