{"version":3,"file":"ScrollPathDrawer.DQ5-FVmY.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/XMljViyfZvcoJ4YtHuEK/Bffya2t3v1ALUZgZtqDv/ScrollPathDrawer.js"],"sourcesContent":["// SVG Path Drawing Animation Component - Synced with scroll position\n// The line draws progressively as the user scrolls, from 0% to 100% based on viewport position\n// Customizable SVG path, scroll sensitivity, and animation speed\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useRef,useEffect,useState,startTransition}from\"react\";import{motion,useScroll,useTransform,useMotionValue}from\"framer-motion\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * SVG Path Drawing Animation - Scroll Controlled\n *\n * Draws an SVG path progressively based on scroll position.\n * The animation is synchronized with scroll - no auto-play or triggers.\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 300\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function ScrollPathDrawer(props){const{svgPath=\"M898.166 9.94702C897.217 122.141 885.737 395.449 687.343 581.45C496.794 760.096 153.376 804.86 9.73828 651.652\",strokeColor=\"#000000\",strokeBackgroundColor=\"#000000\",useCustomBackgroundColor=false,strokeWidth=3,strokeLinecap=\"round\",strokeLinejoin=\"round\",scrollSensitivity=1,animationSpeed=1,showStaticPreview=true,backgroundColor=\"transparent\",opacity=1,svgPositionX=0,svgPositionY=0,svgRotation=0,viewportOffset=\"start\",drawFromEnd=false,startSection=\"\",startSectionOffset=\"start\",endSection=\"\",endSectionOffset=\"end\",viewportStartOffset=\"start\",viewportEndOffset=\"end\"}=props;const containerRef=useRef(null);const pathRef=useRef(null);const[pathLength,setPathLength]=useState(0);const isStatic=useIsStaticRenderer();const[scrollY,setScrollY]=useState(0);const manualProgress=useMotionValue(0);// Calculate SVG viewBox dimensions based on the path\nconst[viewBoxDimensions,setViewBoxDimensions]=useState({minX:-20,minY:-20,width:940,height:740});// Get scroll progress for this specific element when no sections are specified\nconst{scrollYProgress}=useScroll({target:!startSection&&!endSection?containerRef:undefined,offset:[`${viewportStartOffset} end`,`${viewportEndOffset} start`]});// Calculate path bounds to set proper viewBox\nuseEffect(()=>{if(typeof document===\"undefined\"||isStatic)return;// Create a temporary SVG to calculate path bounds\nconst tempSvg=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");tempSvg.style.position=\"absolute\";tempSvg.style.visibility=\"hidden\";document.body.appendChild(tempSvg);const tempPath=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");tempPath.setAttribute(\"d\",svgPath);tempSvg.appendChild(tempPath);// Get the bounding box\nconst bbox=tempPath.getBBox();// Add padding for stroke width\nconst padding=strokeWidth*2;startTransition(()=>{setViewBoxDimensions({minX:bbox.x-padding,minY:bbox.y-padding,width:bbox.width+padding*2,height:bbox.height+padding*2});});// Clean up\ndocument.body.removeChild(tempSvg);},[svgPath,strokeWidth,isStatic]);// For section-based animation\nuseEffect(()=>{if(isStatic||typeof window===\"undefined\")return;// Function to find the target section and calculate progress\nconst updateScrollProgress=()=>{// Default to the component's own scroll progress if no sections are specified\nif(!startSection&&!endSection)return;// Find the start and end section elements - handle both with and without hash\nconst startId=startSection?startSection.startsWith(\"#\")?startSection.substring(1):startSection:null;const endId=endSection?endSection.startsWith(\"#\")?endSection.substring(1):endSection:null;const startElement=startId?document.getElementById(startId):null;const endElement=endId?document.getElementById(endId):null;// If neither section exists, return\nif(!startElement&&!endElement)return;// Calculate viewport height\nconst viewportHeight=window.innerHeight;// Calculate start position\nlet startPosition=0;if(startElement){const startRect=startElement.getBoundingClientRect();if(startSectionOffset===\"start\"){startPosition=startRect.top;}else if(startSectionOffset===\"center\"){startPosition=startRect.top+startRect.height/2;}else if(startSectionOffset===\"end\"){startPosition=startRect.top+startRect.height;}}// Calculate end position\nlet endPosition=viewportHeight;if(endElement){const endRect=endElement.getBoundingClientRect();if(endSectionOffset===\"start\"){endPosition=endRect.top;}else if(endSectionOffset===\"center\"){endPosition=endRect.top+endRect.height/2;}else if(endSectionOffset===\"end\"){endPosition=endRect.top+endRect.height;}}else if(startElement){// If only start section is specified, use viewport bottom as end\nendPosition=viewportHeight;}// Calculate progress based on the positions\n// When startPosition is at the viewport offset, progress should be 0\n// When endPosition is at the viewport offset, progress should be 1\nlet progress=0;// Normalize the positions to the viewport offset point\nconst offsetPosition=viewportOffset===\"start\"?0:viewportOffset===\"center\"?viewportHeight/2:viewportHeight;// Calculate progress as a ratio of how far we've moved from start to end\nconst totalDistance=endPosition-startPosition;const currentDistance=offsetPosition-startPosition;if(totalDistance!==0){progress=Math.max(0,Math.min(1,currentDistance/totalDistance));}// Apply sensitivity and speed\nprogress=Math.min(1,progress*scrollSensitivity*animationSpeed);// Update the manual progress value\nmanualProgress.set(progress);};// Update on scroll\nconst handleScroll=()=>{setScrollY(window.scrollY);updateScrollProgress();};// Initial update\nupdateScrollProgress();// Add scroll listener\nwindow.addEventListener(\"scroll\",handleScroll,{passive:true});return()=>window.removeEventListener(\"scroll\",handleScroll);},[startSection,endSection,startSectionOffset,endSectionOffset,viewportOffset,scrollSensitivity,animationSpeed,isStatic,manualProgress]);// Transform scroll progress based on sensitivity and speed\nconst drawProgress=useTransform(startSection||endSection?manualProgress:scrollYProgress,[0,Math.min(1,1/(scrollSensitivity*animationSpeed))],[0,1]);// Calculate path length on mount\nuseEffect(()=>{if(pathRef.current&&typeof window!==\"undefined\"){const length=pathRef.current.getTotalLength();startTransition(()=>setPathLength(length));}},[svgPath]);// For static preview, start from 0% if showStaticPreview is enabled\nconst staticProgress=showStaticPreview?0:0;// Determine background path color - either custom color or lower opacity of stroke color\nconst backgroundPathColor=useCustomBackgroundColor?strokeBackgroundColor:strokeColor;// Create viewBox string from dimensions\nconst viewBoxString=`${viewBoxDimensions.minX} ${viewBoxDimensions.minY} ${viewBoxDimensions.width} ${viewBoxDimensions.height}`;return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,style:{width:\"100%\",height:\"100%\",backgroundColor,opacity,overflow:\"hidden\",position:\"relative\",...props.style},children:[/*#__PURE__*/_jsxs(\"svg\",{width:\"100%\",height:\"100%\",viewBox:viewBoxString,style:{display:\"block\",transform:`translate(${svgPositionX}px, ${svgPositionY}px) rotate(${svgRotation}deg)`,width:\"100%\",height:\"100%\"},preserveAspectRatio:\"xMidYMid meet\",\"aria-label\":\"Animated SVG path drawing\",children:[/*#__PURE__*/_jsx(\"path\",{d:svgPath,stroke:backgroundPathColor,strokeWidth:strokeWidth,strokeLinecap:strokeLinecap,strokeLinejoin:strokeLinejoin,fill:\"none\",opacity:useCustomBackgroundColor?1:.1}),/*#__PURE__*/_jsx(motion.path,{ref:pathRef,d:svgPath,stroke:strokeColor,strokeWidth:strokeWidth,strokeLinecap:strokeLinecap,strokeLinejoin:strokeLinejoin,fill:\"none\",style:{pathLength:isStatic?staticProgress:drawProgress,pathOffset:drawFromEnd?isStatic?1-staticProgress:useTransform(drawProgress,[0,1],[1,0]):0},initial:{pathLength:0,pathOffset:drawFromEnd?1:0}})]}),isStatic&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",bottom:8,right:8,background:\"rgba(0, 0, 0, 0.7)\",color:\"white\",padding:\"4px 8px\",borderRadius:4,fontSize:10,fontFamily:\"system-ui, sans-serif\",pointerEvents:\"none\"},children:\"Scroll to animate\"})]});}addPropertyControls(ScrollPathDrawer,{svgPath:{type:ControlType.String,title:\"SVG Path\",defaultValue:\"M898.166 9.94702C897.217 122.141 885.737 395.449 687.343 581.45C496.794 760.096 153.376 804.86 9.73828 651.652\",displayTextArea:true,description:\"The SVG path data that defines the shape to be drawn. You can create custom paths using tools like SVG Path Editor or export from design software.\"},strokeColor:{type:ControlType.Color,title:\"Stroke Color\",defaultValue:\"#000000\",description:\"The color of the animated line that draws as you scroll.\"},useCustomBackgroundColor:{type:ControlType.Boolean,title:\"Custom Background\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Toggle to use a custom color for the background path instead of a transparent version of the stroke color.\"},strokeBackgroundColor:{type:ControlType.Color,title:\"Stroke Background\",defaultValue:\"#000000\",hidden:({useCustomBackgroundColor})=>!useCustomBackgroundColor,description:\"The color of the background path when custom background is enabled.\"},strokeWidth:{type:ControlType.Number,title:\"Stroke Width\",defaultValue:3,min:.5,max:20,step:.5,unit:\"px\",description:\"The thickness of the line being drawn.\"},strokeLinecap:{type:ControlType.Enum,title:\"Line Cap\",options:[\"butt\",\"round\",\"square\"],optionTitles:[\"Butt\",\"Round\",\"Square\"],defaultValue:\"round\",displaySegmentedControl:true,description:\"The style of the line ends - round creates rounded caps, square creates squared caps, butt creates flat caps.\"},strokeLinejoin:{type:ControlType.Enum,title:\"Line Join\",options:[\"miter\",\"round\",\"bevel\"],optionTitles:[\"Miter\",\"Round\",\"Bevel\"],defaultValue:\"round\",displaySegmentedControl:true,description:\"The style of the corners where line segments meet - round creates rounded corners, miter creates pointed corners, bevel creates flattened corners.\"},svgPositionX:{type:ControlType.Number,title:\"SVG Position X\",defaultValue:0,min:-500,max:500,step:1,unit:\"px\",description:\"Horizontal position adjustment for the SVG within its container. Positive values move right, negative values move left.\"},svgPositionY:{type:ControlType.Number,title:\"SVG Position Y\",defaultValue:0,min:-500,max:500,step:1,unit:\"px\",description:\"Vertical position adjustment for the SVG within its container. Positive values move down, negative values move up.\"},svgRotation:{type:ControlType.Number,title:\"SVG Rotation\",defaultValue:0,min:-360,max:360,step:1,unit:\"\\xb0\",description:\"Rotation angle for the entire SVG in degrees. Positive values rotate clockwise, negative values rotate counterclockwise.\"},scrollSensitivity:{type:ControlType.Number,title:\"Scroll Sensitivity\",defaultValue:1,min:.1,max:3,step:.1,description:\"Controls how quickly the animation completes as you scroll. Lower values require more scrolling to complete the animation, higher values complete it faster.\"},animationSpeed:{type:ControlType.Number,title:\"Animation Speed\",defaultValue:1,min:.1,max:5,step:.1,description:\"Multiplier for the drawing speed. Higher values make the animation complete faster relative to scroll position.\"},showStaticPreview:{type:ControlType.Boolean,title:\"Static Preview\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",description:\"When enabled, shows a preview of the path in the Framer canvas. Disable to hide the path in design mode.\"},backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"transparent\",optional:true,description:\"Background color for the entire component container.\"},opacity:{type:ControlType.Number,title:\"Opacity\",defaultValue:1,min:0,max:1,step:.1,description:\"Overall opacity of the entire component. 1 is fully visible, 0 is completely transparent.\"},viewportOffset:{type:ControlType.Enum,title:\"Viewport Offset\",options:[\"start\",\"center\",\"end\"],optionTitles:[\"Start\",\"Center\",\"End\"],defaultValue:\"start\",displaySegmentedControl:true,hidden:({startSection,endSection})=>startSection||endSection,description:\"The point in the viewport where the animation triggers when no specific sections are set. Start = top of viewport, Center = middle, End = bottom.\"},drawFromEnd:{type:ControlType.Boolean,title:\"Draw from End\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"When enabled, the path draws from the end point to the start point, while still following the same scroll progress direction (0% to 100%).\"},startSection:{type:ControlType.String,title:\"Start Section\",defaultValue:\"\",description:\"ID of the section where animation should start (0% progress). Enter the section ID with or without the # symbol. Leave empty to use viewport-based animation.\"},startSectionOffset:{type:ControlType.Enum,title:\"Start Viewport Offset\",options:[\"start\",\"center\",\"end\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],defaultValue:\"start\",displaySegmentedControl:true,hidden:({startSection})=>!startSection,description:\"Which part of the start section should trigger the animation beginning (0% progress) - Top, Center, or Bottom of the section.\"},endSection:{type:ControlType.String,title:\"End Section\",defaultValue:\"\",description:\"ID of the section where animation should complete (100% progress). Enter the section ID with or without the # symbol. Leave empty to use viewport-based animation.\"},endSectionOffset:{type:ControlType.Enum,title:\"End Viewport Offset\",options:[\"start\",\"center\",\"end\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],defaultValue:\"end\",displaySegmentedControl:true,hidden:({endSection})=>!endSection,description:\"Which part of the end section should trigger the animation completion (100% progress) - Top, Center, or Bottom of the section.\"},viewportStartOffset:{type:ControlType.Enum,title:\"Start Viewport Offset\",options:[\"start\",\"center\",\"end\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],defaultValue:\"start\",displaySegmentedControl:true,hidden:({startSection,endSection})=>startSection||endSection,description:\"The point in the viewport where the animation should start (0% progress) when no specific sections are set. Top = top of viewport, Center = middle, Bottom = bottom.\"},viewportEndOffset:{type:ControlType.Enum,title:\"End Viewport Offset\",options:[\"start\",\"center\",\"end\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],defaultValue:\"end\",displaySegmentedControl:true,hidden:({startSection,endSection})=>startSection||endSection,description:\"The point in the viewport where the animation should complete (100% progress) when no specific sections are set. Top = top of viewport, Center = middle, Bottom = bottom.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ScrollPathDrawer\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"400\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"300\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ScrollPathDrawer.map"],"mappings":"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"}