{"version":3,"file":"ParallaxMedia.Batv8TJS.mjs","names":["React.useRef","React.useState","FramerImage","p"],"sources":["https:/framerusercontent.com/modules/xEarnAKfXwrymAMucqrK/792Kcl5sgI3VpOaMmz30/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.\"}),/*#__PURE__*/_jsx(\"a\",{href:\"https://www.lavidesign.studio/\",target:\"_blank\",rel:\"noopener noreferrer\",style:{position:\"absolute\",bottom:12,fontSize:12,opacity:.6,textDecoration:\"none\",color:\"#b99cff\",transition:\"opacity 0.2s ease\"},onMouseEnter:e=>e.currentTarget.style.opacity=\"1\",onMouseLeave:e=>e.currentTarget.style.opacity=\"0.6\",children:\"Made by Lavi\"})]})});}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\",hidden:p=>p.sourceType!==\"image\"},alt:{type:ControlType.String,title:\"Alt\",hidden:p=>p.sourceType!==\"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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"}