{"version":3,"file":"ProjectCarousel.cD26JMPY.mjs","names":["useState","useRef","useMemo","useCallback"],"sources":["https:/framerusercontent.com/modules/eSmgm9q96fFjyWBmf6Et/iZwLeJOSPM20LtrZJ0sc/ProjectCarousel.js"],"sourcesContent":["// Project carousel with horizontal+vertical scroll lock, only carousel scrolls when hovered, seamless infinite loop\n// @framerSupportedLayoutWidth any-prefer-fixed\n// @framerSupportedLayoutHeight fixed\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useRef,useEffect,useState,useCallback,startTransition,useMemo}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";const defaultImages=[{src:\"https://framerusercontent.com/images/GfGkADagM4KEibNcIiRUWlfrR0.jpg\",alt:\"Project 1\"},{src:\"https://framerusercontent.com/images/aNsAT3jCvt4zglbWCUoFe33Q.jpg\",alt:\"Project 2\"},{src:\"https://framerusercontent.com/images/BYnxEV1zjYb9bhWh1IwBZ1ZoS60.jpg\",alt:\"Project 3\"},{src:\"https://framerusercontent.com/images/2uTNEj5aTl2K3NJaEFWMbnrA.jpg\",alt:\"Project 4\"}];/**\n * Project Carousel with Scroll Lock\n *\n * @framerIntrinsicWidth 1560\n * @framerIntrinsicHeight 320\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight fixed\n */export default function ProjectCarousel(props){const{projects=defaultImages.map(img=>({image:img})),projectWidth=260,projectHeight=320,gap=32,speed=60,style,descriptionFont,descriptionBg=\"#FFFFFFE6\",descriptionTextColor=\"#222\",cornerRadius=5,showFrameInEditor=true,descriptionPadding=8}=props;const isStatic=useIsStaticRenderer();const[isHovered,setIsHovered]=useState(false);const[hoveredIndex,setHoveredIndex]=useState(null);const[touchedIndex,setTouchedIndex]=useState(null);const[scrollX,setScrollX]=useState(0);const[dragging,setDragging]=useState(false);const[dragStart,setDragStart]=useState(0);const[dragScroll,setDragScroll]=useState(0);const[mousePos,setMousePos]=useState({x:0,y:0});const[touchStartY,setTouchStartY]=useState(0);const[touchStartX,setTouchStartX]=useState(0);const[touchDirection,setTouchDirection]=useState(null);const containerRef=useRef(null);const projectRefs=useRef([]);const frameCount=projects.length;const totalWidth=frameCount*(projectWidth+gap);// Repeat projects to fill at least 3x the visible area for seamless loop\nconst repeatCount=12;const loopProjects=useMemo(()=>{let arr=[];for(let i=0;i<repeatCount;i++)arr=arr.concat(projects);return arr;},[projects]);const loopCount=loopProjects.length;const loopWidth=loopCount*(projectWidth+gap);// Clamp scrollX for seamless loop\nconst displayScrollX=useMemo(()=>{const singleSetWidth=frameCount*(projectWidth+gap);let x=scrollX%singleSetWidth;if(x<0)x+=singleSetWidth;return x;},[scrollX,frameCount,projectWidth,gap]);// Animation loop\nuseEffect(()=>{if(isStatic||isHovered)return;let raf;let last=performance.now();function animate(now){const dt=(now-last)/1e3;last=now;startTransition(()=>{setScrollX(prev=>{// Use exact speed regardless of frame rate\nlet next=prev+speed*dt;// Wrap at single project set width for seamless loop\nconst singleSetWidth=frameCount*(projectWidth+gap);next=next%singleSetWidth;if(next<0)next+=singleSetWidth;return next;});});raf=requestAnimationFrame(animate);}raf=requestAnimationFrame(animate);return()=>cancelAnimationFrame(raf);},[isStatic,isHovered,speed,frameCount,projectWidth,gap]);// Drag/scroll logic for mouse\nuseEffect(()=>{if(!dragging)return;function onMove(e){const x=e.clientX;startTransition(()=>setScrollX(dragScroll+(dragStart-x)));}function onUp(){setDragging(false);window.removeEventListener(\"mousemove\",onMove);window.removeEventListener(\"mouseup\",onUp);}window.addEventListener(\"mousemove\",onMove);window.addEventListener(\"mouseup\",onUp);return()=>{window.removeEventListener(\"mousemove\",onMove);window.removeEventListener(\"mouseup\",onUp);};},[dragging,dragStart,dragScroll]);// Touch event handlers\nconst onTouchStart=useCallback(e=>{const touch=e.touches[0];setDragging(false);setDragStart(touch.clientX);setDragScroll(scrollX);setTouchStartY(touch.clientY);setTouchStartX(touch.clientX);setTouchDirection(null);// Detect which project was touched\nif(containerRef.current){const containerRect=containerRef.current.getBoundingClientRect();const touchX=touch.clientX-containerRect.left+displayScrollX;const projectIndex=Math.floor(touchX/(projectWidth+gap))%frameCount;startTransition(()=>setTouchedIndex(projectIndex));}},[scrollX,displayScrollX,projectWidth,gap,frameCount]);const onTouchMove=useCallback(e=>{const touch=e.touches[0];const deltaX=Math.abs(touch.clientX-touchStartX);const deltaY=Math.abs(touch.clientY-touchStartY);// Determine direction on first significant movement\nif(touchDirection===null&&(deltaX>5||deltaY>5)){if(deltaX>deltaY){setTouchDirection(\"horizontal\");setDragging(true);}else{setTouchDirection(\"vertical\");}}// Only handle horizontal dragging for carousel\nif(touchDirection===\"horizontal\"){e.preventDefault();const x=touch.clientX;startTransition(()=>setScrollX(dragScroll+(dragStart-x)));// Update touched project during drag\nif(containerRef.current){const containerRect=containerRef.current.getBoundingClientRect();const touchX=touch.clientX-containerRect.left+(dragScroll+(dragStart-x));const projectIndex=Math.floor(touchX/(projectWidth+gap))%frameCount;startTransition(()=>setTouchedIndex(projectIndex));}}},[touchDirection,dragStart,dragScroll,touchStartX,touchStartY,projectWidth,gap,frameCount]);const onTouchEnd=useCallback(()=>{setDragging(false);setTouchDirection(null);startTransition(()=>setTouchedIndex(null));},[]);// Mouse wheel scroll\nconst onWheel=useCallback(e=>{if(!isHovered)return;e.preventDefault();startTransition(()=>setScrollX(prev=>prev+e.deltaY+e.deltaX));},[isHovered]);// Mouse move tracking for 3D effect\nconst onMouseMove=useCallback(e=>{if(typeof window===\"undefined\")return;startTransition(()=>{setMousePos({x:e.clientX,y:e.clientY});});},[]);// Drag to scroll\nconst onMouseDown=useCallback(e=>{if(!isHovered)return;setDragging(true);setDragStart(e.clientX);setDragScroll(scrollX);},[isHovered,scrollX]);// Project click handler\nconst handleProjectClick=project=>{if(project.link){if(typeof window!==\"undefined\"){window.location.href=project.link;}}};// --- SEAMLESS LOOP: recode for continuous, gapless, jitter-free loop ---\n// Find how many projects fit in the visible area\nconst visibleCount=useMemo(()=>{if(!containerRef.current)return 3;const w=containerRef.current.offsetWidth||1;return Math.ceil(w/(projectWidth+gap))+2;},[projectWidth,gap]);// Render enough projects to always fill the visible area + extra for seamlessness\nconst renderProjects=useMemo(()=>{// Render enough copies to ensure seamless loop - use a fixed multiplier\nconst copies=Math.max(Math.ceil(visibleCount/frameCount)+3,6);let arr=[];for(let i=0;i<copies*frameCount;i++)arr.push(projects[i%frameCount]);return arr;},[projects,visibleCount,frameCount]);const renderCount=renderProjects.length;const renderWidth=renderCount*(projectWidth+gap);// --- END SEAMLESS LOOP ---\nconst containerStyle={...style,width:\"100%\",height:projectHeight,overflow:\"hidden\",position:\"relative\",display:\"flex\",alignItems:\"center\",cursor:isHovered?dragging?\"grabbing\":\"grab\":\"pointer\",userSelect:dragging?\"none\":\"auto\",background:\"transparent\"};return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:containerStyle,tabIndex:0,\"aria-label\":\"Project carousel\",onMouseEnter:()=>setIsHovered(true),onMouseLeave:()=>{setIsHovered(false);setHoveredIndex(null);},onWheel:onWheel,onMouseDown:onMouseDown,onMouseMove:onMouseMove,onTouchStart:onTouchStart,onTouchMove:onTouchMove,onTouchEnd:onTouchEnd,role:\"region\",children:/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",flexDirection:\"row\",gap,position:\"absolute\",left:`-${displayScrollX%renderWidth}px`,top:0,height:projectHeight,willChange:\"transform\"},children:renderProjects.map((project,i)=>{const link=project&&project.link||\"\";const description=project&&project.description||\"\";let image={...defaultImages[0]};if(project&&typeof project===\"object\"&&project.image){if(typeof project.image===\"object\"&&project.image!==null&&typeof project.image.src===\"string\"){image={...project.image};}}if(!image||typeof image!==\"object\"||!image.src)image={...defaultImages[0]};if(!image.alt)image.alt=\"Project image\";// Calculate 3D transform based on cursor position\nlet transform=\"\";if(isHovered&&projectRefs.current[i]&&typeof window!==\"undefined\"){const rect=projectRefs.current[i]?.getBoundingClientRect();if(rect){const centerX=rect.left+rect.width/2;const centerY=rect.top+rect.height/2;const deltaX=mousePos.x-centerX;const deltaY=mousePos.y-centerY;// Calculate rotation angles (max 8 degrees)\nconst maxRotation=8;const rotateY=deltaX/rect.width*maxRotation;const rotateX=-(deltaY/rect.height)*maxRotation;transform=`perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;}}return /*#__PURE__*/_jsxs(\"div\",{ref:el=>projectRefs.current[i]=el,style:{width:projectWidth,height:projectHeight,borderRadius:cornerRadius,background:\"#F5F5F5\",boxShadow:\"0 2px 12px rgba(0,0,0,0.08)\",overflow:\"hidden\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",flexShrink:0,position:\"relative\",cursor:link?\"pointer\":\"default\",transition:\"box-shadow 0.2s\",border:isStatic&&showFrameInEditor?\"1px dashed rgba(0,0,0,0.2)\":\"none\",transform:transform,transformStyle:\"preserve-3d\"},\"aria-label\":`Project ${i%frameCount+1}`,role:\"group\",onClick:()=>handleProjectClick(project),onMouseEnter:()=>setHoveredIndex(i),onMouseLeave:()=>setHoveredIndex(prev=>prev===i?null:prev),children:[/*#__PURE__*/_jsx(\"img\",{src:image.src,alt:image.alt,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",pointerEvents:\"none\",userSelect:\"none\"},draggable:false}),isHovered&&hoveredIndex===i||touchedIndex===i%frameCount?/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",left:0,right:0,bottom:0,background:descriptionBg,color:descriptionTextColor,padding:`${descriptionPadding}px`,borderBottomLeftRadius:cornerRadius,borderBottomRightRadius:cornerRadius,minHeight:16,...descriptionFont,display:\"flex\",alignItems:\"center\",justifyContent:\"space-between\",zIndex:2,gap:8},children:[/*#__PURE__*/_jsx(\"span\",{style:{whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\",flex:\"0 1 auto\",minWidth:0},children:project.descriptionLeft||\"\"}),/*#__PURE__*/_jsx(\"span\",{style:{position:\"absolute\",left:\"50%\",transform:\"translateX(-50%)\",whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\",maxWidth:\"33%\"},children:project.descriptionMiddle||\"\"}),/*#__PURE__*/_jsx(\"span\",{style:{whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\",flex:\"0 1 auto\",textAlign:\"right\",minWidth:0},children:project.descriptionRight||\"\"})]}):null]},i);})})});}addPropertyControls(ProjectCarousel,{showFrameInEditor:{type:ControlType.Boolean,title:\"Show Frame\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},projects:{type:ControlType.Array,title:\"Projects\",control:{type:ControlType.Object,controls:{image:{type:ControlType.ResponsiveImage},link:{type:ControlType.String,title:\"Link\",defaultValue:\"\"},descriptionLeft:{type:ControlType.String,title:\"Left Text\",defaultValue:\"\"},descriptionMiddle:{type:ControlType.String,title:\"Middle Text\",defaultValue:\"\"},descriptionRight:{type:ControlType.String,title:\"Right Text\",defaultValue:\"\"}}},defaultValue:defaultImages.map(img=>({image:img,link:\"\",descriptionLeft:\"\",descriptionMiddle:\"\",descriptionRight:\"\"}))},projectWidth:{type:ControlType.Number,title:\"Project Width\",defaultValue:260,min:120,max:1080,step:1,unit:\"px\"},projectHeight:{type:ControlType.Number,title:\"Project Height\",defaultValue:320,min:120,max:1080,step:1,unit:\"px\"},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:32,min:0,max:80,step:1,unit:\"px\"},speed:{type:ControlType.Number,title:\"Loop Speed\",defaultValue:60,min:10,max:400,step:1,unit:\"px/s\"},descriptionPadding:{type:ControlType.Number,title:\"Desc Padding\",defaultValue:8,min:0,max:50,step:1,unit:\"px\"},descriptionFont:{type:ControlType.Font,title:\"Desc Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"15px\",variant:\"Medium\",letterSpacing:\"-0.01em\",lineHeight:\"1.3em\"}},descriptionBg:{type:ControlType.Color,title:\"Desc BG\",defaultValue:\"#FFFFFFE6\"},descriptionTextColor:{type:ControlType.Color,title:\"Desc Text\",defaultValue:\"#222\"},cornerRadius:{type:ControlType.Number,title:\"Corner Radius\",defaultValue:5,min:0,max:300,step:1,unit:\"px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ProjectCarousel\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"1560\",\"framerIntrinsicHeight\":\"320\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerSupportedLayoutHeight\":\"fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ProjectCarousel.map"],"mappings":"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"}