{"version":3,"file":"TrueParallaxImage.BgxATOY_.mjs","names":["useRef","useState","__esmMin","le","init_ssg_sandbox_shims","init_npm_react_18_3_1","c","init_jsx_runtime","_e","de","window","motion","useMotionValue","useAnimationFrame","useTransform","init_framer_motion_DhsWWWsN","useReducedMotion","init_framer_B1b760uK","ControlType","useIsStaticRenderer","addPropertyControls","TrueParallaxImage","props","ref","natural","setNatural","reduced","isStatic","isVideo","mediaType","source","video","image","mediaKey","scrollYProgress","shift","reverse","intensity","original","ratio","aspectMode","still","controls","updateProgress","element","rect","viewportHeight","progress","mediaStyle","rememberRatio","width","height","style","radius","autoplay","altText","event","init_TrueParallaxImage","p"],"sources":["https:/framerusercontent.com/modules/qggb9WSA7Troyk9ROL2j/vJhtCDPV2VM5Cynsj7h3/TrueParallaxImage.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useRef,useState,useLayoutEffect}from\"react\";import{motion,useMotionValue,useTransform,useReducedMotion,useAnimationFrame}from\"framer-motion\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * Based on True Parallax Image by Shouvik Biswas.\n * @framerIntrinsicWidth 600\n * @framerIntrinsicHeight 600\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n */export default function TrueParallaxImage(props){const{mediaType=\"image\",image,video,autoplay=true,loop=true,muted=true,controls=false,aspectMode=\"original\",radius=0,intensity=20,reverse=false,altText=\"\",style}=props;const ref=useRef(null);const[natural,setNatural]=useState({key:\"\",ratio:1});const reduced=useReducedMotion();const isStatic=useIsStaticRenderer();const isVideo=mediaType===\"video\";const source=isVideo?video:image?.src;const mediaKey=mediaType+\":\"+(source||\"\");// Page transitions can move an ancestor without emitting scroll or resize.\n// Measure the actual frame position so parallax stays current during and\n// after navigation, including restored scroll and late layout changes.\nconst scrollYProgress=useMotionValue(.5);const shift=useTransform(scrollYProgress,[0,1],reverse?[intensity+\"%\",-intensity+\"%\"]:[-intensity+\"%\",intensity+\"%\"]);const original=!isVideo&&image?.width&&image?.height?image.width/image.height:natural.key===mediaKey?natural.ratio:1;const ratio=aspectMode===\"square\"?1:aspectMode===\"portrait\"?3/4:aspectMode===\"wide\"?16/9:aspectMode===\"threeTwo\"?3/2:aspectMode===\"fourThree\"?4/3:original;// Keep native playback controls inside the visible frame.\nconst still=reduced||isStatic||isVideo&&controls;const updateProgress=()=>{const element=ref.current;if(still||!element)return;const rect=element.getBoundingClientRect();const viewportHeight=window.innerHeight;if(rect.height<=0||viewportHeight<=0)return;const progress=Math.max(0,Math.min(1,(viewportHeight-rect.top)/(viewportHeight+rect.height)));if(Math.abs(scrollYProgress.get()-progress)>1e-5)scrollYProgress.set(progress);};useLayoutEffect(()=>{updateProgress();},[still,ratio,mediaKey,intensity,reverse]);// Framer Motion owns the frame subscription and removes it on unmount.\n// No React state updates or synthetic global scroll events are needed.\nuseAnimationFrame(()=>updateProgress());const mediaStyle={position:\"absolute\",left:0,top:still?0:-intensity+\"%\",width:\"100%\",height:still?\"100%\":100+intensity*2+\"%\",objectFit:\"cover\",objectPosition:isVideo?\"50% 50%\":`${image?.positionX??\"50%\"} ${image?.positionY??\"50%\"}`,display:\"block\"};const rememberRatio=(width,height)=>{if(width>0&&height>0)setNatural({key:mediaKey,ratio:width/height});};return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{...style,position:\"relative\",width:style?.width||\"100%\",height:\"auto\",aspectRatio:ratio,overflow:\"hidden\",borderRadius:radius,backgroundColor:\"transparent\"},children:/*#__PURE__*/_jsx(motion.div,{style:{position:\"absolute\",inset:0,y:still?0:shift},children:isVideo?/*#__PURE__*/_jsx(\"video\",{src:video||undefined,autoPlay:autoplay&&!isStatic&&!reduced,loop:loop,muted:muted,controls:controls&&!isStatic,playsInline:true,preload:\"metadata\",\"aria-label\":altText||undefined,onLoadedMetadata:event=>rememberRatio(event.currentTarget.videoWidth,event.currentTarget.videoHeight),style:mediaStyle},mediaKey):/*#__PURE__*/_jsx(\"img\",{src:image?.src,srcSet:image?.srcSet,alt:altText||image?.alt||\"\",onLoad:event=>rememberRatio(event.currentTarget.naturalWidth,event.currentTarget.naturalHeight),style:mediaStyle},mediaKey)})});}addPropertyControls(TrueParallaxImage,{mediaType:{type:ControlType.Enum,title:\"Media Type\",options:[\"image\",\"video\"],optionTitles:[\"Image\",\"Video\"],defaultValue:\"image\",displaySegmentedControl:true},image:{type:ControlType.ResponsiveImage,title:\"Image\",hidden:p=>p.mediaType===\"video\"},video:{type:ControlType.File,title:\"Video\",allowedFileTypes:[\"mp4\",\"webm\",\"mov\"],hidden:p=>p.mediaType!==\"video\"},autoplay:{type:ControlType.Boolean,title:\"Autoplay\",defaultValue:true,hidden:p=>p.mediaType!==\"video\"},loop:{type:ControlType.Boolean,title:\"Loop\",defaultValue:true,hidden:p=>p.mediaType!==\"video\"},muted:{type:ControlType.Boolean,title:\"Muted\",defaultValue:true,description:\"Keep on for reliable autoplay on mobile.\",hidden:p=>p.mediaType!==\"video\"},controls:{type:ControlType.Boolean,title:\"Controls\",defaultValue:false,description:\"Shows native playback controls. Parallax is paused to keep controls visible.\",hidden:p=>p.mediaType!==\"video\"},aspectMode:{type:ControlType.Enum,title:\"Aspect Ratio\",options:[\"square\",\"portrait\",\"threeTwo\",\"fourThree\",\"wide\",\"original\"],optionTitles:[\"1:1\",\"3:4\",\"3:2\",\"4:3\",\"16:9\",\"Original\"],defaultValue:\"original\"},radius:{type:ControlType.Number,title:\"Radius\",min:0,max:200,defaultValue:0},intensity:{type:ControlType.Number,title:\"Intensity\",min:0,max:100,defaultValue:20},reverse:{type:ControlType.Boolean,title:\"Reverse\",defaultValue:false},altText:{type:ControlType.String,title:\"Alt Text\",defaultValue:\"\"}});TrueParallaxImage.displayName=\"True Parallax Image — Ratios\";\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TrueParallaxImage\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerIntrinsicHeight\":\"600\",\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"600\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TrueParallaxImage.map"],"mappings":"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"}