{"version":3,"file":"PixelTrail_Prod.DatHYH4u.mjs","names":["useState","useMemo","useState","useRef","useMemo"],"sources":["https:/framerusercontent.com/modules/k76epLFsVsF4jlsF5pgg/vhK3G0ntf62fqS2tFDno/useColors.js","https:/framerusercontent.com/modules/P7CERvZDMOoPtAW3iQjh/ExcinTcV8f84Hc9Vmljm/PixelTrail_Prod.js"],"sourcesContent":["import{RenderTarget}from\"framer\";import{useEffect,useState,useMemo}from\"react\";const cssVariableRegex=/var\\s*\\(\\s*(--[\\w-]+)(?:\\s*,\\s*((?:[^)(]+|\\((?:[^)(]+|\\([^)(]*\\))*\\))*))?\\s*\\)/;export function useColors(...colors){const isCanvas=RenderTarget.current()===RenderTarget.canvas;const isOptimizing=typeof window===\"undefined\";const darkMode=useDarkMode();const[styleValues,setStyleValues]=useState(()=>extractStyleValues(colors.map(extractCSSVariableName)));useEffect(()=>{if(!isCanvas)return;const div=document.body.querySelector(\"main > div\");if(!div)return;const observer=new MutationObserver(()=>{setStyleValues(extractStyleValues(colors.map(extractCSSVariableName)));});observer.observe(div,{attributes:true,attributeFilter:[\"style\"]});return()=>observer.disconnect();},colors);const variableNames=useMemo(()=>colors.map(extractCSSVariableName),[colors]);if(isOptimizing){return colors.map(color=>extractDefaultValue(color));}let values=[];for(let i=0;i<colors.length;i++){const color=colors[i];// Return original value if not a string\nif(typeof color!==\"string\"){values.push(color);continue;}const variableName=variableNames[i];const colorValues=styleValues[variableName];if(variableName&&colorValues){values.push(darkMode?colorValues.dark||colorValues.light||color:colorValues.light||color);}else{values.push(color);}}return values;}////////////////////\nfunction extractStyleValues(variableNames){const isCanvas=RenderTarget.current()===RenderTarget.canvas;const result={};let lightVars={};let darkVars={};if(isCanvas&&typeof document!==\"undefined\"){const div=document.body.querySelector(\"main > div\");if(div){const style=div.getAttribute(\"style\");if(style){const vars=parseVariables(style);lightVars=vars;darkVars=vars;}}}else{const{light,dark}=extractColorStyles();lightVars=parseVariables(light);darkVars=parseVariables(dark);}// Include all variables\nconst allVarNames=new Set([...Object.keys(lightVars),...Object.keys(darkVars)]);allVarNames.forEach(varName=>{result[varName]={light:lightVars[varName]||\"\",dark:darkVars[varName]||\"\"};});return result;}function extractColorStyles(){let lightSection=\"\";let darkSection=\"\";if(typeof document!==\"undefined\"){const styles=document.head.querySelectorAll(\"style[data-framer-css], style[data-framer-css-ssr], style[data-framer-css-ssr-minified]\");for(const style of styles){const rules=style.sheet?.cssRules;if(!rules)continue;const styleRules=[];for(const rule of rules){if(rule instanceof CSSStyleRule){styleRules.push([rule,false]);}else if(rule instanceof CSSMediaRule){if(rule.conditionText===\"(prefers-color-scheme: dark)\"){for(const subrule of rule.cssRules){if(subrule instanceof CSSStyleRule){styleRules.push([subrule,true]);}}}}}for(const[rule,isDarkMedia]of styleRules){const css=rule.cssText;const hasVars=css.includes(\"--token-\");if(!hasVars)continue;const isDark=isDarkMedia?rule.selectorText===\"body\":rule.selectorText==='body[data-framer-theme=\"dark\"]';const isLight=!isDarkMedia&&rule.selectorText===\"body\";if(!isDark&&!isLight)continue;if(isDark){if(!darkSection){darkSection=css.substring(css.indexOf(\"{\")+1,css.lastIndexOf(\"}\")).trim();}}else{if(!lightSection){lightSection=css.substring(css.indexOf(\"{\")+1,css.lastIndexOf(\"}\")).trim();}}if(darkSection&&lightSection)break;}if(darkSection&&lightSection)break;}}return{light:lightSection,dark:darkSection};}export function useDarkMode(){const isPreview=typeof window!==\"undefined\"&&window.location.origin.endsWith(\"framercanvas.com\");const[isDarkMode,setIsDarkMode]=useState(()=>{if(typeof window===\"undefined\"){return false;}else if(isPreview&&typeof document!==\"undefined\"){return document.body.getAttribute(\"data-framer-theme\")===\"dark\";}else{return window.matchMedia(\"(prefers-color-scheme: dark)\").matches;}});useEffect(()=>{if(isPreview){const observer=new MutationObserver(mutations=>{mutations.forEach(mutation=>{if(mutation.attributeName===\"data-framer-theme\"){const theme=document.body.getAttribute(\"data-framer-theme\");setIsDarkMode(theme===\"dark\");}});});observer.observe(document.body,{attributes:true,attributeFilter:[\"data-framer-theme\"]});return()=>observer.disconnect();}else{const mediaQuery=window.matchMedia(\"(prefers-color-scheme: dark)\");const handleChange=e=>{setIsDarkMode(e.matches);};// Update initial value\nif(mediaQuery.matches!==isDarkMode){setIsDarkMode(mediaQuery.matches);}mediaQuery.addListener(handleChange);return()=>mediaQuery.removeListener(handleChange);}},[isPreview]);return isDarkMode;}function extractCSSVariableName(cssString){if(!cssString||!cssString.startsWith(\"var(\")){return\"\";}const match=cssVariableRegex.exec(cssString);if(match){const variableName=match[1];return variableName||\"\";}return\"\";}function parseVariables(section){const vars={};if(!section)return vars;const declarations=section.split(\";\").filter(Boolean);declarations.forEach(declaration=>{const[name,value]=declaration.split(\":\").map(s=>s.trim());if(name&&value){vars[name]=value;}});return vars;}function extractDefaultValue(cssVar){// Check if the string starts with \"var(\"\nif(!cssVar||!cssVar.startsWith(\"var(\")){return cssVar// Return the original value if it doesn't start with \"var(\"\n;}// Remove \"var(\" from the beginning and \")\" from the end\nconst content=cssVar.slice(4,-1);// Split the content by comma\nconst parts=content.split(\",\");// If there's more than one part, the second part is the default value\nif(parts.length>1){// Trim any whitespace from the default value\nreturn parts.slice(1).join(\",\").trim();}// If there's no comma, return an empty string or null\nreturn\"\";}\nexport const __FramerMetadata__ = {\"exports\":{\"useDarkMode\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useColors\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./useColors.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useState,useRef,useMemo}from\"react\";import{animate}from\"framer-motion\";import{useColors}from\"https://framerusercontent.com/modules/k76epLFsVsF4jlsF5pgg/vhK3G0ntf62fqS2tFDno/useColors.js\";/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n *\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 400\n */export default function PixelTrail(props){const{tileSize,trigger,delay,transition}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const isOptimizing=typeof window===\"undefined\";const[isMousePressed,setIsMousePressed]=useState(false);const[tiles,setTiles]=useState([]);const[dimensions,setDimensions]=useState({width:0,height:0});const[hoveredTiles,setHoveredTiles]=useState(new Set);const[tileColors,setTileColors]=useState({});const canvasRef=useRef(null);const containerRef=useRef(null);const gridRef=useRef({cols:0,rows:0});const prevPositionRef=useRef(null);const timeoutRefs=useRef({});const animationRefs=useRef({});const mousePositionRef=useRef(null);const hoveredTilesRef=useRef(new Set);const[backgroundColorValue,trailColorValue]=useColors(props.backgroundColor,props.trailColor);const[backgroundColor,trailColor]=useMemo(()=>{let finalTrailColor=trailColorValue;let finalBackgroundColor=backgroundColorValue;// Convert colors to RGBA if they're RGB\nconst trailRGBA=ensureRGBA(trailColorValue);const backgroundRGBA=ensureRGBA(backgroundColorValue);// Check for transparency\nconst isTrailTransparent=trailRGBA?.endsWith(\", 0)\")||!trailRGBA;const isBackgroundTransparent=backgroundRGBA?.endsWith(\", 0)\")||!backgroundRGBA;if(isTrailTransparent&&!isBackgroundTransparent){// Extract RGB from backgroundColor and make it fully opaque\nconst rgb=backgroundRGBA.substring(0,backgroundRGBA.lastIndexOf(\",\"));finalTrailColor=`${rgb}, 0)`;}else if(isBackgroundTransparent&&!isTrailTransparent){// Extract RGB from trailColor and make it fully transparent\nconst rgb=trailRGBA.substring(0,trailRGBA.lastIndexOf(\",\"));finalBackgroundColor=`${rgb}, 0)`;}return[finalBackgroundColor,finalTrailColor];},[backgroundColorValue,trailColorValue]);const updateHoveredTiles=updater=>{const newTiles=typeof updater===\"function\"?updater(hoveredTilesRef.current):updater;hoveredTilesRef.current=newTiles;setHoveredTiles(newTiles);};// Setup canvas and tile grid\nuseEffect(()=>{if(!containerRef.current)return;const{width,height}=containerRef.current.getBoundingClientRect();setDimensions({width,height});const cols=Math.ceil(width/tileSize);const rows=Math.ceil(height/tileSize);gridRef.current={cols,rows};// Initialize array with all false values\nsetTiles(new Array(cols*rows).fill(false));},[tileSize]);// Add resize observer\nuseEffect(()=>{if(!containerRef.current)return;const resizeObserver=new ResizeObserver(entries=>{for(const entry of entries){const{width,height}=entry.contentRect;setDimensions({width,height});const newCols=Math.ceil(width/tileSize);const newRows=Math.ceil(height/tileSize);// Only clear data if grid dimensions have changed\nif(newCols!==gridRef.current.cols||newRows!==gridRef.current.rows){gridRef.current={cols:newCols,rows:newRows};setTiles(new Array(newCols*newRows).fill(false));updateHoveredTiles(new Set);setTileColors({});// Stop all animations when resizing\nObject.keys(timeoutRefs.current).forEach(key=>{clearTimeout(timeoutRefs.current[Number(key)]);delete timeoutRefs.current[Number(key)];});Object.keys(animationRefs.current).forEach(key=>{animationRefs.current[Number(key)]?.stop();delete animationRefs.current[Number(key)];});}}});resizeObserver.observe(containerRef.current);return()=>resizeObserver.disconnect();},[tileSize]);// Draw the grid\nuseEffect(()=>{const canvas=canvasRef.current;if(!canvas)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;// Set canvas size to match grid dimensions (1px per tile)\ncanvas.width=gridRef.current.cols;canvas.height=gridRef.current.rows;// Set canvas CSS size to match actual display dimensions\ncanvas.style.width=`${dimensions.width}px`;canvas.style.height=`${dimensions.height}px`;const{cols}=gridRef.current;for(let i=0;i<tiles.length;i++){const x=i%cols;const y=Math.floor(i/cols);ctx.fillStyle=tileColors[i]||backgroundColor;ctx.fillRect(x,y,1,1);}},[tiles,dimensions,backgroundColor,tileColors]);const clearAnimation=index=>{if(timeoutRefs.current[index]){clearTimeout(timeoutRefs.current[index]);delete timeoutRefs.current[index];}if(animationRefs.current[index]){animationRefs.current[index].stop();delete animationRefs.current[index];}};const startResetTimer=index=>{// Don't reset tiles if in drawing mode\nif(props.mode===\"drawing\"){return;}// Clear existing timeout and animation if they exist\nclearAnimation(index);const onComplete=()=>{setTiles(prev=>{const newTiles=[...prev];newTiles[index]=false;return newTiles;});setTileColors(prev=>{const newColors={...prev};delete newColors[index];return newColors;});delete timeoutRefs.current[index];delete animationRefs.current[index];};let shouldAnimate=true;if(typeof transition.duration===\"number\"&&transition.duration<=0){shouldAnimate=false;}if(shouldAnimate){setTileColors(prev=>({...prev,[index]:trailColor}));timeoutRefs.current[index]=window.setTimeout(()=>{const animation=animate(trailColor,backgroundColor,{...transition,onUpdate:latest=>{const color=latest===\"rgba(NaN, NaN, NaN, NaN)\"?trailColor:latest;setTileColors(prev=>({...prev,[index]:color}));},onComplete});animationRefs.current[index]=animation;},delay*1e3);}else{const transitionDelay=transition.delay||0;timeoutRefs.current[index]=window.setTimeout(onComplete,(delay+transitionDelay)*1e3);}};const getPointsOnLine=(x0,y0,x1,y1)=>{const points=[];const dx=Math.abs(x1-x0);const dy=Math.abs(y1-y0);const sx=x0<x1?1:-1;const sy=y0<y1?1:-1;let err=dx-dy;for(let i=0;i<500;i++){points.push(y0*gridRef.current.cols+x0);if(x0===x1&&y0===y1){break;}const e2=2*err;if(e2>-dy){err-=dy;x0+=sx;}if(e2<dx){err+=dx;y0+=sy;}}return points;};const isMouseInBounds=(mouseX,mouseY)=>{return mouseX>=0&&mouseX<=dimensions.width&&mouseY>=0&&mouseY<=dimensions.height;};const onMove=(x,y)=>{if(navigator.maxTouchPoints)return;if(trigger===\"hover\"||trigger===\"click\"&&isMousePressed){const canvas=canvasRef.current;if(!canvas)return;// Get canvas bounding box\nconst rect=canvas.getBoundingClientRect();// Calculate relative position\nconst relativeX=x-rect.left;const relativeY=y-rect.top;// Check if mouse is within bounds using relative point\nif(!isMouseInBounds(relativeX,relativeY)){handleMouseUp();return;}const currentX=Math.floor(relativeX/tileSize);const currentY=Math.floor(relativeY/tileSize);// Ensure currentX and currentY are within grid bounds\nif(currentX<0||currentX>=gridRef.current.cols||currentY<0||currentY>=gridRef.current.rows){return;}if(prevPositionRef.current){const{x:prevX,y:prevY}=prevPositionRef.current;const points=getPointsOnLine(prevX,prevY,currentX,currentY);const validPoints=points.filter(index=>index>=0&&index<tiles.length);setTiles(prev=>{const newTiles=[...prev];for(const index of validPoints){newTiles[index]=true;}return newTiles;});updateHoveredTiles(prev=>new Set([...prev,...validPoints]));setTileColors(prev=>{const newColors={...prev};for(const index of validPoints){newColors[index]=trailColor;}return newColors;});}prevPositionRef.current={x:currentX,y:currentY};// Check which tiles are no longer being hovered\nconst currentIndex=currentY*gridRef.current.cols+currentX;hoveredTilesRef.current.forEach(index=>{if(index!==currentIndex&&!getPointsOnLine(prevPositionRef.current?.x||currentX,prevPositionRef.current?.y||currentY,currentX,currentY).includes(index)){updateHoveredTiles(prev=>{const next=new Set(prev);next.delete(index);return next;});startResetTimer(index);}});}};const handleMouseUp=()=>{if(navigator.maxTouchPoints)return;setIsMousePressed(false);prevPositionRef.current=null;// Only reset tiles if not in drawing mode\nif(props.mode!==\"drawing\"){hoveredTilesRef.current.forEach(index=>{startResetTimer(index);});}updateHoveredTiles(new Set);};// Update mouse event handlers to use global events\nuseEffect(()=>{const handleGlobalMouseMove=e=>{if(navigator.maxTouchPoints)return;const{clientX,clientY}=e;const{innerWidth,innerHeight}=window;let isInside=false;if(clientX>=0&&clientY>=0&&clientX<=innerWidth&&clientY<=innerHeight){isInside=true;}else{isInside=false;}if(isInside){mousePositionRef.current=[e.clientX,e.clientY];onMove(e.clientX,e.clientY);}else{handleMouseLeave();}};const handleGlobalMouseDown=e=>{if(navigator.maxTouchPoints)return;if(trigger===\"click\"){const canvas=canvasRef.current;if(!canvas)return;// Get canvas bounding box\nconst rect=canvas.getBoundingClientRect();// Calculate relative position\nconst relativeX=e.clientX-rect.left;const relativeY=e.clientY-rect.top;if(!isMouseInBounds(relativeX,relativeY))return;setIsMousePressed(true);const x=Math.floor(relativeX/tileSize);const y=Math.floor(relativeY/tileSize);const index=y*gridRef.current.cols+x;if(index>=tiles.length)return;updateHoveredTiles(prev=>new Set(prev).add(index));setTiles(prev=>{const newTiles=[...prev];newTiles[index]=true;return newTiles;});setTileColors(prev=>({...prev,[index]:trailColor}));}};const handleScroll=()=>{if(navigator.maxTouchPoints)return;if(mousePositionRef.current){const[mouseX,mouseY]=mousePositionRef.current;onMove(mouseX,mouseY);}};const handleMouseLeave=e=>{if(navigator.maxTouchPoints)return;if(!e||!isMouseInBounds(e.clientX,e.clientY)){prevPositionRef.current=null;hoveredTilesRef.current.forEach(startResetTimer);updateHoveredTiles(new Set);}};const handleMouseEnter=e=>{if(navigator.maxTouchPoints)return;if(!isMouseInBounds(prevPositionRef.current?.x,prevPositionRef.current?.y)){prevPositionRef.current=null// Reset the previous position on re-enter\n;}};const container=containerRef.current;if(container){container.addEventListener(\"mouseenter\",handleMouseEnter);container.addEventListener(\"mouseleave\",handleMouseLeave);}window.addEventListener(\"mousemove\",handleGlobalMouseMove);window.addEventListener(\"mouseup\",handleMouseUp);window.addEventListener(\"mousedown\",handleGlobalMouseDown);window.addEventListener(\"scroll\",handleScroll);window.addEventListener(\"mouseleave\",handleMouseLeave);return()=>{if(container){container.removeEventListener(\"mouseenter\",handleMouseEnter);container.removeEventListener(\"mouseleave\",handleMouseLeave);}window.removeEventListener(\"mousemove\",handleGlobalMouseMove);window.removeEventListener(\"mouseup\",handleMouseUp);window.removeEventListener(\"mousedown\",handleGlobalMouseDown);window.removeEventListener(\"scroll\",handleScroll);window.removeEventListener(\"mouseleave\",handleMouseLeave);};},[trigger,tileSize,tiles.length,trailColor,isMousePressed]);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{...props.style,position:\"relative\",overflow:\"hidden\"},children:isCanvas||isOptimizing?/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:0,left:0,width:\"100%\",height:\"100%\",backgroundColor:props.backgroundColor}}):/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"absolute\",top:0,left:0,imageRendering:\"pixelated\"}})});}PixelTrail.displayName=\"Pixel Trail\";addPropertyControls(PixelTrail,{backgroundColor:{type:ControlType.Color,defaultValue:\"#000\",optional:true,title:\"Background\"},trailColor:{type:ControlType.Color,defaultValue:\"#FFF\",optional:true,title:\"Trail\"},tileSize:{type:ControlType.Number,defaultValue:50,min:5,step:1,title:\"Size\"},trigger:{type:ControlType.Enum,defaultValue:\"hover\",options:[\"hover\",\"click\"],optionTitles:[\"Hover\",\"Click\"],displaySegmentedControl:true},mode:{type:ControlType.Enum,defaultValue:\"trail\",options:[\"trail\",\"drawing\"],optionTitles:[\"Trail\",\"Drawing\"],displaySegmentedControl:true},delay:{type:ControlType.Number,defaultValue:1,min:0,step:.1,hidden:props=>props.mode!==\"trail\"},transition:{type:ControlType.Transition,defaultValue:{type:\"spring\",duration:.5,bounce:0},hidden:props=>props.mode!==\"trail\",description:\"More components at [Framer University](https://frameruni.link/cc).\"}});const ensureRGBA=color=>{if(!color)return color;if(color.startsWith(\"rgb(\")){return color.replace(\"rgb(\",\"rgba(\").replace(\")\",\", 1)\");}return color;};\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"PixelTrail\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"fixed\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerIntrinsicWidth\":\"400\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"*\",\"framerIntrinsicHeight\":\"400\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}