{"version":3,"file":"WithOriginalImageViewer.CGyp8u_8.mjs","names":["forwardRef","useRef","useState","useCallback","_Fragment"],"sources":["https:/framerusercontent.com/modules/OAQ9hPLkCSscwoMZLiUd/z7M49cYECyxkYOEzcXjo/WithOriginalImageViewer.js"],"sourcesContent":["// User request: Create code override withOriginalImageViewer for existing native Framer image-fill frames and project Card primary frame. Native lightbox expands cropped rounded frame; require original unedited image without frame styling. Keep canvas elements unchanged. Use browser runtime DOM/computedStyle to resolve CMS image source, capture click on wrapped root through forwarded/merged ref and DOM event listener, prevent navigation only when image/background region clicked while preserving nested links/buttons, extract source from data-framer-background-image-wrapper img (currentSrc/src) or root backgroundImage, strip only width/height/fit params, open accessible viewport modal via portal with contain sizing, backdrop/close/Escape dismissal, focus restore and scroll-lock cleanup, SSR/canvas safe, no dependencies, preserve root styling/editability.\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useCallback,useEffect,useRef,useState,startTransition,forwardRef}from\"react\";import{createPortal}from\"react-dom\";import{useIsStaticRenderer}from\"framer\";function sanitizeFramerImageUrl(rawUrl){if(typeof window===\"undefined\")return rawUrl;try{const parsed=new URL(rawUrl,window.location.href);parsed.searchParams.delete(\"width\");parsed.searchParams.delete(\"height\");parsed.searchParams.delete(\"fit\");return parsed.toString();}catch{return rawUrl;}}function extractBackgroundUrl(backgroundImage){const match=backgroundImage.match(/url\\((['\"]?)(.*?)\\1\\)/i);return match?.[2]??\"\";}function resolveImageUrlFromRoot(root){const imageEl=root.querySelector(\"[data-framer-background-image-wrapper] img\");if(imageEl){const source=imageEl.src||imageEl.currentSrc;if(source)return sanitizeFramerImageUrl(source);}if(typeof window!==\"undefined\"){const computed=window.getComputedStyle(root);const extracted=extractBackgroundUrl(computed.backgroundImage);if(extracted)return sanitizeFramerImageUrl(extracted);}return\"\";}function isInteractiveTarget(target){return Boolean(target.closest('a,button,input,select,textarea,label,[role=\"button\"],[data-no-lightbox],[contenteditable=\"true\"]'));}function isImageRegionClick(root,target){const wrappedImageRegion=target.closest(\"[data-framer-background-image-wrapper], [data-framer-background-image-wrapper] img\");if(wrappedImageRegion&&root.contains(wrappedImageRegion))return true;const hasBackgroundWrapper=Boolean(root.querySelector(\"[data-framer-background-image-wrapper] img\"));if(hasBackgroundWrapper){if(target===root)return true;const isLikelyOverlayText=Boolean(target.closest(\"h1,h2,h3,h4,h5,h6,p,span,small,strong,em,blockquote,figcaption,[data-no-lightbox-text]\"));if(!isLikelyOverlayText)return true;}if(typeof window!==\"undefined\"){const hasRootBackgroundImage=extractBackgroundUrl(window.getComputedStyle(root).backgroundImage).length>0;if(hasRootBackgroundImage)return true;}return false;}export function withOriginalImageViewer(Component){const Wrapped=/*#__PURE__*/forwardRef(function WithOriginalImageViewer(props,ref){const isStatic=useIsStaticRenderer();const rootRef=useRef(null);const modalRef=useRef(null);const closeButtonRef=useRef(null);const lastFocusedElementRef=useRef(null);const[{isOpen,imageUrl},setLightboxState]=useState({isOpen:false,imageUrl:\"\"});const setMergedRef=useCallback(node=>{rootRef.current=node;if(typeof ref===\"function\"){ref(node);}else if(ref&&\"current\"in ref){ref.current=node;}},[ref]);const closeModal=useCallback(()=>{startTransition(()=>{setLightboxState(prev=>({...prev,isOpen:false}));});},[]);useEffect(()=>{if(isStatic||typeof window===\"undefined\")return;const root=rootRef.current;if(!root)return;const handleClick=event=>{const target=event.target;if(!target)return;if(!root.contains(target))return;if(isInteractiveTarget(target))return;if(!isImageRegionClick(root,target))return;const nextImageUrl=resolveImageUrlFromRoot(root);if(!nextImageUrl)return;event.preventDefault();event.stopPropagation();if(document.activeElement instanceof HTMLElement){lastFocusedElementRef.current=document.activeElement;}else{lastFocusedElementRef.current=null;}startTransition(()=>{setLightboxState({isOpen:true,imageUrl:nextImageUrl});});};root.addEventListener(\"click\",handleClick,true);return()=>{root.removeEventListener(\"click\",handleClick,true);};},[isStatic]);useEffect(()=>{if(!isOpen||typeof document===\"undefined\")return;const previousOverflow=document.body.style.overflow;document.body.style.overflow=\"hidden\";closeButtonRef.current?.focus();const handleEsc=event=>{if(event.key===\"Escape\"){closeModal();return;}if(event.key!==\"Tab\")return;const modal=modalRef.current;if(!modal)return;const focusable=Array.from(modal.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])')).filter(el=>!el.hasAttribute(\"disabled\")&&el.getAttribute(\"aria-hidden\")!==\"true\");if(focusable.length===0){event.preventDefault();modal.focus();return;}const first=focusable[0];const last=focusable[focusable.length-1];const active=document.activeElement;if(event.shiftKey){if(!active||active===first||!modal.contains(active)){event.preventDefault();last.focus();}}else if(!active||active===last||!modal.contains(active)){event.preventDefault();first.focus();}};document.addEventListener(\"keydown\",handleEsc);return()=>{document.body.style.overflow=previousOverflow;document.removeEventListener(\"keydown\",handleEsc);lastFocusedElementRef.current?.focus();};},[isOpen,closeModal]);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Component,{...props,ref:setMergedRef}),!isStatic&&isOpen&&typeof document!==\"undefined\"&&/*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(\"div\",{ref:modalRef,role:\"dialog\",\"aria-modal\":\"true\",\"aria-label\":\"Image viewer\",tabIndex:-1,onClick:event=>{if(event.target===event.currentTarget)closeModal();},style:{position:\"fixed\",inset:0,background:\"rgba(0, 0, 0, 0.85)\",zIndex:2147483647,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",padding:24},children:[/*#__PURE__*/_jsx(\"button\",{ref:closeButtonRef,\"aria-label\":\"Close image viewer\",onClick:closeModal,style:{position:\"absolute\",top:16,right:16,width:40,height:40,borderRadius:999,border:\"1px solid rgba(255,255,255,0.35)\",background:\"rgba(0,0,0,0.5)\",color:\"#FFFFFF\",cursor:\"pointer\",fontSize:24,lineHeight:1},children:\"\\xd7\"}),/*#__PURE__*/_jsx(\"img\",{src:imageUrl,alt:\"\",style:{width:\"auto\",height:\"auto\",maxWidth:\"calc(100vw - 48px)\",maxHeight:\"calc(100dvh - 48px)\",objectFit:\"contain\",borderRadius:0,display:\"block\"}})]}),document.body)]});});return Wrapped;}\nexport const __FramerMetadata__ = {\"exports\":{\"withOriginalImageViewer\":{\"type\":\"reactHoc\",\"name\":\"withOriginalImageViewer\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./WithOriginalImageViewer.map"],"mappings":"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"}