{"version":3,"file":"ProjectImage.BL5fSFJy.mjs","names":["useState","useRef","useCallback","useMemo","_Fragment"],"sources":["https:/framerusercontent.com/modules/M3R0dGlKWcBzsU0khAIG/bOymF6oFwynEE0KQTUMl/ProjectImage.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{startTransition,useCallback,useEffect,useMemo,useRef,useState}from\"react\";import{createPortal}from\"react-dom\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function ProjectImage(props){const{style,image=\"\",alt=\"\",fit=\"contain\",overlayOnly=false}=props;const resolvedAlt=alt||\"\";const resolvedImage=typeof image===\"string\"?image:image?.src||image?.url||\"\";const[isOpen,setIsOpen]=useState(false);const dialogRef=useRef(null);const closeButtonRef=useRef(null);const lastFocusedRef=useRef(null);const previousOverflowRef=useRef(\"\");const canUseDOM=typeof window!==\"undefined\"&&typeof document!==\"undefined\";const isCanvas=RenderTarget.current()===RenderTarget.canvas;const openLightbox=useCallback(()=>{if(!resolvedImage||isCanvas)return;startTransition(()=>setIsOpen(true));},[isCanvas,resolvedImage]);const closeLightbox=useCallback(()=>{startTransition(()=>setIsOpen(false));},[]);const handleBackdropClick=useCallback(event=>{if(event.target===event.currentTarget){closeLightbox();}},[closeLightbox]);const portalContent=useMemo(()=>{if(!canUseDOM||!isOpen)return null;return /*#__PURE__*/createPortal(/*#__PURE__*/_jsx(\"div\",{onClick:handleBackdropClick,style:{position:\"fixed\",inset:0,zIndex:2147483e3,background:\"rgba(0,0,0,0.65)\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:/*#__PURE__*/_jsxs(\"div\",{ref:dialogRef,onClick:handleBackdropClick,role:\"dialog\",\"aria-modal\":true,\"aria-label\":resolvedAlt||\"Image preview\",tabIndex:-1,style:{position:\"relative\",width:\"100%\",height:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:[/*#__PURE__*/_jsx(\"button\",{ref:closeButtonRef,type:\"button\",onClick:event=>{event.stopPropagation();closeLightbox();},\"aria-label\":\"Close image preview\",style:{position:\"fixed\",top:16,right:16,border:\"none\",background:\"transparent\",padding:0,color:\"#FFFFFF\",fontSize:24,fontFamily:'\"Helvetica Neue LT Pro\", \"Helvetica Neue\", Arial, sans-serif',fontWeight:700,lineHeight:1,cursor:\"pointer\"},children:\"\\xd7\"}),/*#__PURE__*/_jsx(\"img\",{src:resolvedImage,alt:resolvedAlt,onClick:event=>event.stopPropagation(),style:{display:\"block\",width:\"auto\",height:\"auto\",maxWidth:\"94vw\",maxHeight:\"92vh\",objectFit:\"contain\"}})]})}),document.body);},[canUseDOM,closeLightbox,handleBackdropClick,isOpen,resolvedAlt,resolvedImage]);useEffect(()=>{if(!canUseDOM||!isOpen)return;lastFocusedRef.current=document.activeElement;previousOverflowRef.current=document.body.style.overflow;document.body.style.overflow=\"hidden\";const focusTarget=closeButtonRef.current||dialogRef.current;focusTarget?.focus();const handleKeyDown=event=>{if(event.key===\"Escape\"){event.preventDefault();closeLightbox();return;}if(event.key!==\"Tab\")return;const root=dialogRef.current;if(!root)return;const focusable=root.querySelectorAll('button,[href],input,select,textarea,[tabindex]:not([tabindex=\"-1\"])');if(focusable.length===0){event.preventDefault();root.focus();return;}const first=focusable[0];const last=focusable[focusable.length-1];const active=document.activeElement;if(event.shiftKey){if(active===first||!root.contains(active)){event.preventDefault();last.focus();}}else if(active===last||!root.contains(active)){event.preventDefault();first.focus();}};window.addEventListener(\"keydown\",handleKeyDown);return()=>{window.removeEventListener(\"keydown\",handleKeyDown);document.body.style.overflow=previousOverflowRef.current;lastFocusedRef.current?.focus();};},[canUseDOM,closeLightbox,isOpen]);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:openLightbox,\"aria-label\":resolvedAlt||\"Open image preview\",style:{position:\"relative\",width:\"100%\",height:\"100%\",display:\"block\",border:\"none\",padding:0,background:\"transparent\",cursor:resolvedImage&&!isCanvas?\"zoom-in\":\"default\",...style},children:!overlayOnly?/*#__PURE__*/_jsx(\"img\",{src:resolvedImage,alt:resolvedAlt,style:{display:\"block\",width:\"100%\",height:\"100%\",objectFit:fit}}):null}),portalContent]});}addPropertyControls(ProjectImage,{image:{type:ControlType.String,title:\"Image URL\",defaultValue:\"\"},alt:{type:ControlType.String,title:\"Alt\",defaultValue:\"\",placeholder:\"Optional alt text\"},fit:{type:ControlType.Enum,title:\"Fit\",options:[\"contain\",\"cover\"],optionTitles:[\"Contain\",\"Cover\"],defaultValue:\"contain\",displaySegmentedControl:true},overlayOnly:{type:ControlType.Boolean,title:\"Overlay Only\",defaultValue:false}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ProjectImage\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ProjectImage.map"],"mappings":"oPAGG,SAAwB,EAAa,EAAM,CAAC,GAAK,CAAC,QAAM,QAAM,GAAG,MAAI,GAAG,MAAI,UAAU,cAAY,IAAO,EAAY,EAAY,GAAK,GAAS,EAAc,OAAO,GAAQ,SAAS,EAAM,GAAO,KAAK,GAAO,KAAK,GAAQ,CAAC,EAAO,GAAWA,EAAS,EAAK,EAAQ,EAAUC,EAAO,IAAI,EAAQ,EAAeA,EAAO,IAAI,EAAQ,EAAeA,EAAO,IAAI,EAAQ,EAAoBA,EAAO,EAAE,EAAQ,EAAiB,IAAS,QAAa,OAAO,SAAW,IAAkB,EAAS,EAAa,QAAQ,IAAI,EAAa,OAAa,EAAaC,MAAgB,CAAI,CAAC,GAAe,GAAgB,MAAoB,EAAU,EAAI,CAAC,CAAE,EAAE,CAAC,EAAS,CAAa,CAAC,EAAQ,EAAcA,MAAgB,CAAC,MAAoB,EAAU,EAAK,CAAC,CAAE,EAAE,CAAC,CAAC,EAAQ,EAAoBA,EAAY,GAAO,CAAI,EAAM,SAAS,EAAM,eAAe,EAAc,CAAG,EAAE,CAAC,CAAa,CAAC,EAAQ,EAAcC,MAAgB,CAAC,GAAW,CAAC,EAAc,KAAyB,EAA0B,EAAK,MAAM,CAAC,QAAQ,EAAoB,MAAM,CAAC,SAAS,QAAQ,MAAM,EAAE,OAAO,UAAU,WAAW,mBAAmB,QAAQ,OAAO,WAAW,SAAS,eAAe,QAAQ,EAAE,SAAsB,EAAM,MAAM,CAAC,IAAI,EAAU,QAAQ,EAAoB,KAAK,SAAS,aAAa,GAAK,aAAa,GAAa,gBAAgB,SAAS,GAAG,MAAM,CAAC,SAAS,WAAW,MAAM,OAAO,OAAO,OAAO,QAAQ,OAAO,WAAW,SAAS,eAAe,QAAQ,EAAE,SAAS,CAAc,EAAK,SAAS,CAAC,IAAI,EAAe,KAAK,SAAS,QAAQ,GAAO,CAAC,EAAM,gBAAgB,EAAE,EAAc,CAAE,EAAE,aAAa,sBAAsB,MAAM,CAAC,SAAS,QAAQ,IAAI,GAAG,MAAM,GAAG,OAAO,OAAO,WAAW,cAAc,QAAQ,EAAE,MAAM,UAAU,SAAS,GAAG,WAAW,+DAA+D,WAAW,IAAI,WAAW,EAAE,OAAO,SAAS,EAAE,SAAS,GAAM,CAAC,EAAe,EAAK,MAAM,CAAC,IAAI,EAAc,IAAI,EAAY,QAAQ,GAAO,EAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,QAAQ,MAAM,OAAO,OAAO,OAAO,SAAS,OAAO,UAAU,OAAO,UAAU,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,EAAI,CAAC,EAAU,EAAc,EAAoB,EAAO,EAAY,CAAa,CAAC,EAA4nC,OAA1nC,MAAc,CAAC,GAAG,CAAC,GAAW,CAAC,EAAO,OAAO,EAAe,QAAQ,SAAS,cAAc,EAAoB,QAAQ,SAAS,KAAK,MAAM,SAAS,SAAS,KAAK,MAAM,SAAS,UAA2B,EAAe,SAAS,EAAU,QAAA,EAAqB,MAAM,EAAE,IAAM,EAAc,GAAO,CAAC,GAAG,EAAM,MAAM,SAAS,CAAC,EAAM,eAAe,EAAE,EAAc,EAAE,MAAO,CAAC,GAAG,EAAM,MAAM,MAAM,OAAO,IAAM,EAAK,EAAU,QAAQ,GAAG,CAAC,EAAK,OAAO,IAAM,EAAU,EAAK,iBAAiB,qEAAqE,EAAE,GAAG,EAAU,SAAS,EAAE,CAAC,EAAM,eAAe,EAAE,EAAK,MAAM,EAAE,MAAO,CAAC,IAAM,EAAM,EAAU,GAAS,EAAK,EAAU,EAAU,OAAO,GAAS,EAAO,SAAS,cAAiB,EAAM,UAAa,IAAS,GAAO,CAAC,EAAK,SAAS,CAAM,KAAG,EAAM,eAAe,EAAE,EAAK,MAAM,IAAY,IAAS,GAAM,CAAC,EAAK,SAAS,CAAM,KAAG,EAAM,eAAe,EAAE,EAAM,MAAM,EAAG,EAAmD,OAAjD,EAAO,iBAAiB,UAAU,CAAa,MAAY,CAAC,EAAO,oBAAoB,UAAU,CAAa,EAAE,SAAS,KAAK,MAAM,SAAS,EAAoB,QAAQ,EAAe,SAAS,MAAM,CAAE,CAAE,EAAE,CAAC,EAAU,EAAc,CAAM,CAAC,EAAsB,EAAMC,EAAU,CAAC,SAAS,CAAc,EAAK,SAAS,CAAC,KAAK,SAAS,QAAQ,EAAa,aAAa,GAAa,qBAAqB,MAAM,CAAC,SAAS,WAAW,MAAM,OAAO,OAAO,OAAO,QAAQ,QAAQ,OAAO,OAAO,QAAQ,EAAE,WAAW,cAAc,OAAO,GAAe,CAAC,EAAS,UAAU,UAAU,GAAG,CAAK,EAAE,SAAU,EAA0I,KAAjH,EAAK,MAAM,CAAC,IAAI,EAAc,IAAI,EAAY,MAAM,CAAC,QAAQ,QAAQ,MAAM,OAAO,OAAO,OAAO,UAAU,CAAG,CAAC,CAAC,CAAM,CAAC,EAAE,CAAa,CAAC,CAAC,CAAE,qBAHzpH,IAAiF,IAAoC,IAAiE,EAGo+G,EAAoB,EAAa,CAAC,MAAM,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,EAAE,EAAE,IAAI,CAAC,KAAK,EAAY,OAAO,MAAM,MAAM,aAAa,GAAG,YAAY,mBAAmB,EAAE,IAAI,CAAC,KAAK,EAAY,KAAK,MAAM,MAAM,QAAQ,CAAC,UAAU,OAAO,EAAE,aAAa,CAAC,UAAU,OAAO,EAAE,aAAa,UAAU,wBAAwB,EAAI,EAAE,YAAY,CAAC,KAAK,EAAY,QAAQ,MAAM,eAAe,aAAa,EAAK,CAAC,CAAC"}