{"version":3,"file":"ParallaxMedia.BPMZ64_8.mjs","names":["React.useRef","React.useState","FramerImage"],"sources":["https:/framerusercontent.com/modules/oHtGr06wOpik9LxLlTh5/WoYQXWbs8aKr1Ym0Mv8G/ParallaxMedia.js"],"sourcesContent":["// ParallaxMedia.tsx\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{motion,useScroll,useTransform,addPropertyControls,ControlType,Image as FramerImage}from\"framer\";const clamp=(v,min,max)=>Math.max(min,Math.min(max,v));export default function ParallaxMedia({sourceType=\"image\",image,videoUrl=\"\",videoFile=\"\",alt=\"\",direction=\"vertical\",invert=false,radius=0,focalX=50,focalY=50,parallax=25,autoplay=true,loop=true,muted=true,controls=false}){const ref=React.useRef(null);const[size,setSize]=React.useState({width:0,height:0});React.useLayoutEffect(()=>{if(!ref.current||typeof ResizeObserver===\"undefined\")return;const ro=new ResizeObserver(entries=>{const r=entries[0].contentRect;setSize({width:r.width,height:r.height});});ro.observe(ref.current);return()=>ro.disconnect();},[]);const{scrollYProgress}=useScroll({target:ref,offset:[\"start end\",\"end start\"]});// Parallax travel\nconst base=direction===\"vertical\"?size.height:size.width;const pct=clamp(parallax,5,60)/100;const desiredOverflow=base>0?clamp(base*pct,40,480):0;const scale=base>0?1+desiredOverflow/Math.max(base,1):1.2;const overflow=Math.max(base,1)*(scale-1);const from=invert?overflow/2:-overflow/2;const to=invert?-overflow/2:overflow/2;const mv=useTransform(scrollYProgress,[0,1],[from,to]);const transformOrigin=`${clamp(focalX??50,0,100)}% ${clamp(focalY??50,0,100)}%`;// Resolve media\nconst resolvedVideo=videoFile&&videoFile.trim()||videoUrl&&videoUrl.trim()||\"\";const hasVideo=resolvedVideo!==\"\";const imageStr=typeof image===\"string\"?image.trim():\"\";const isImageString=imageStr!==\"\";const isImageObject=!!image&&!isImageString;const wantVideo=sourceType===\"video\";const renderVideo=wantVideo&&hasVideo||!isImageString&&!isImageObject&&hasVideo;const renderImage=!renderVideo&&(isImageString||isImageObject);// Stable key helps remount when switching object ↔ string\nconst mediaKey=renderVideo?`vid:${resolvedVideo}`:isImageObject?`imgobj:${image?.id??image?.hash??image?.key??\"asset\"}`:isImageString?`imgstr:${imageStr}`:\"none\";return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\",borderRadius:radius},children:renderVideo||renderImage?/*#__PURE__*/_jsx(motion.div,{style:{position:\"absolute\",inset:0,x:direction===\"horizontal\"?mv:0,y:direction===\"vertical\"?mv:0,scale,transformOrigin,willChange:\"transform\"},children:renderVideo?/*#__PURE__*/_jsx(\"video\",{src:resolvedVideo,autoPlay:autoplay,loop:loop,muted:muted,controls:controls,playsInline:true,style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",objectFit:\"cover\",objectPosition:`${focalX}% ${focalY}%`}}):isImageObject?// ✅ Variable-bound images render here in Preview & Canvas\n/*#__PURE__*/_jsx(FramerImage,{image:image,alt:alt,fit:\"cover\",position:`${focalX}% ${focalY}%`,style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\"}}):// ✅ Direct uploads (string URL) render here\n/*#__PURE__*/_jsx(\"img\",{src:imageStr,alt:alt,draggable:false,style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",objectFit:\"cover\",objectPosition:`${focalX}% ${focalY}%`,pointerEvents:\"none\"}})},mediaKey):// Empty state\n/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",inset:0,display:\"flex\",flexDirection:\"column\",justifyContent:\"center\",alignItems:\"center\",background:\"#0f0b1f\",color:\"#b99cff\",padding:\"clamp(12px, 4vw, 24px)\",textAlign:\"center\",gap:\"clamp(12px, 2vw, 16px)\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{fontSize:\"clamp(14px, 2vw, 18px)\",fontWeight:600},children:\"ParallaxMedia\"}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:\"clamp(12px, 1.6vw, 14px)\",opacity:.8,maxWidth:\"min(90%, 420px)\",lineHeight:1.45},children:\"Add an Image or Video in the right panel to enable the parallax effect. Adjust Parallax (%), Direction, and Focal Point.\"})]})});}ParallaxMedia.defaultProps={width:1200,height:600,sourceType:\"image\",image:undefined,videoUrl:\"\",videoFile:\"\",alt:\"\",direction:\"vertical\",invert:false,radius:0,focalX:50,focalY:50,parallax:25,autoplay:true,loop:true,muted:true,controls:false};addPropertyControls(ParallaxMedia,{sourceType:{type:ControlType.SegmentedEnum,title:\"Media\",options:[\"image\",\"video\"],optionTitles:[\"Image\",\"Video\"]},image:{type:ControlType.Image,title:\"Image\"},videoUrl:{type:ControlType.String,title:\"Video (URL)\",placeholder:\"https://your.cdn/video.mp4\",hidden:p=>p.sourceType!==\"video\"},videoFile:{type:ControlType.File,title:\"Video (Upload)\",allowedFileTypes:[\"mp4\",\"webm\",\"ogg\",\"mov\"],hidden:p=>p.sourceType!==\"video\",description:\"Upload overrides URL if both are set.\"},direction:{type:ControlType.SegmentedEnum,title:\"Direction\",options:[\"vertical\",\"horizontal\"],optionTitles:[\"Vertical\",\"Horizontal\"]},invert:{type:ControlType.Boolean,title:\"Invert\"},radius:{type:ControlType.Number,title:\"Radius\",min:0,max:64,step:1},focalX:{type:ControlType.Number,title:\"Focal X\",min:0,max:100,step:1},focalY:{type:ControlType.Number,title:\"Focal Y\",min:0,max:100,step:1},parallax:{type:ControlType.Number,title:\"Parallax (%)\",min:5,max:60,step:1,displayStepper:true},autoplay:{type:ControlType.Boolean,title:\"Autoplay\",hidden:p=>p.sourceType!==\"video\"},loop:{type:ControlType.Boolean,title:\"Loop\",hidden:p=>p.sourceType!==\"video\"},muted:{type:ControlType.Boolean,title:\"Muted\",hidden:p=>p.sourceType!==\"video\"},controls:{type:ControlType.Boolean,title:\"Controls\",hidden:p=>p.sourceType!==\"video\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ParallaxMedia\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ParallaxMedia.map"],"mappings":"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"}