{"version":3,"file":"InteractiveASCII_Prod.WGSirPdS.mjs","names":["useRef","useState","useMemo","useState","useRef","useMemo","img"],"sources":["https:/framerusercontent.com/modules/DuR6VDtxvwo2eUI8Aa0Z/SwAzDMLHbbX6RevUYGVz/AnimatedNumber.js","https:/framerusercontent.com/modules/k76epLFsVsF4jlsF5pgg/ge79eoA2CuYo94sUAjT9/useColors.js","https:/framerusercontent.com/modules/quIQjXeusVKZRk3V2tVC/6aSo37U4awzwXGBQwZyB/InteractiveASCII_Prod.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{motion,useInView,useMotionValue,useSpring,useTransform}from\"framer-motion\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * @framerDisableUnlink\n */export default function AnimatedNumber({start=0,end=100,decimals=0,font,color=\"#000\"}){const ref=useRef(null);const isInView=useInView(ref,{once:true,amount:.5});const value=useMotionValue(start);const spring=useSpring(value,{damping:30,stiffness:100});const display=useTransform(spring,num=>{const n=Number(num);const fixed=n.toFixed(decimals);return n>=1e3?Number(fixed).toLocaleString():fixed;});useEffect(()=>{value.set(isInView?end:start);},[start,end,isInView,value]);return /*#__PURE__*/_jsx(motion.span,{ref:ref,style:{color,display:\"inline-block\",...font},children:display});}AnimatedNumber.displayName=\"AnimatedNumber\";addPropertyControls(AnimatedNumber,{start:{type:ControlType.Number,title:\"Start\",defaultValue:0,min:0,max:1e5,step:1},end:{type:ControlType.Number,title:\"End\",defaultValue:100,min:0,max:1e5,step:1},decimals:{type:ControlType.Number,title:\"Decimals\",defaultValue:0,min:0,max:10,step:1},font:{type:ControlType.Font,controls:\"extended\",title:\"Styles\"},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"AnimatedNumber\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./AnimatedNumber.map","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};}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\":{\"useColors\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./useColors.map","function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget,Color}from\"framer\";import{useEffect,useState,useRef,useMemo}from\"react\";import{useMotionValue,useSpring}from\"framer-motion\";import{useColors}from\"https://framerusercontent.com/modules/k76epLFsVsF4jlsF5pgg/ge79eoA2CuYo94sUAjT9/useColors.js\";const characterSets={detailed:\"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'.\",standard:\"@%#*+=-:.\",blocks:\"█▓▒░ \",binary:\"01\",hex:\"0123456789ABCDEF\"};const DEFAULT_IMAGE={src:\"https://framerusercontent.com/images/rMjuVOUhT39Hdz1kbwue16ZOySE.png\",srcSet:\"https://framerusercontent.com/images/rMjuVOUhT39Hdz1kbwue16ZOySE.png?scale-down-to=512 512w,https://framerusercontent.com/images/rMjuVOUhT39Hdz1kbwue16ZOySE.png 710w\"};const DEFAULT_FONT={fontFamily:'\"Fragment Mono\", monospace',fontSize:\"12px\",fontStyle:\"normal\",fontWeight:400,letterSpacing:\"0em\",lineHeight:\"1em\"};/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n *\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 400\n */export default function InteractiveASCII(props){const{cursor,backgroundColor,color,font,sizing,style,glow,staticEffect}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const image=props.image||DEFAULT_IMAGE;const sizeMode=style?.width&&style?.height?\"both\":style?.width?\"width\":style?.height?\"height\":\"none\";const isSolidColor=color.mode===\"color\";const ditheringMode=staticEffect?\"noise\":props.ditheringMode;const[text,setText]=useState(\"\");const canvasRef=useRef(null);const ctxRef=useRef(null);const maskCanvasRef=useRef(null);const maskCtxRef=useRef(null);const ref=useRef(null);const textRef=useRef(null);const glowRef=useRef(null);const staticIntervalRef=useRef(null);const{x:cursorX,y:cursorY,initialized:cursorInitialized,initializedRef:cursorInitializedRef}=useFollowCursor(cursor?.smoothing||0,textRef);const lastValuesRef=useRef({cursorX:0,cursorY:0,cursorInitialized,outputWidth:props.outputWidth,characterSet:props.characterSet,customCharacterSet:props.customCharacterSet,ditheringMode,invertColors:props.invertColors,whiteMode:props.whiteMode,blur:props.blur,brightness:props.brightness,contrast:props.contrast,cursorStyle:cursor?.style,cursorInvert:cursor?.invert,cursorWidth:cursor?.width,font});const[color1Value,color2Value]=useColors(isSolidColor?\"#FFF\":color.color1,isSolidColor?\"#FFF\":color.color2);const[color1Color,color2Color]=useMemo(()=>[new Color(color1Value),new Color(color2Value)],[color1Value,color2Value]);const colorInterpolatorRef=useRef(()=>createColorInterpolator(color.mode,color1Color,color2Color));const rngSeedRef=useRef(Math.random());const[img,setImg]=useState(null);const[cursorImg,setCursorImg]=useState(null);useEffect(()=>{if(image?.src){const img=new Image;img.crossOrigin=\"anonymous\";img.onload=()=>{setImg(img);};img.src=image.src;return()=>{img.onload=null;};}else{setImg(null);}},[image]);useEffect(()=>{if(cursor?.style===\"image\"&&cursor?.image?.src){const img=new Image;img.crossOrigin=\"anonymous\";img.onload=()=>{setCursorImg(img);};img.src=cursor.image.src;return()=>{img.onload=null;};}else{setCursorImg(null);}},[cursor?.style,cursor?.image]);useEffect(()=>{colorInterpolatorRef.current=createColorInterpolator(color.mode,color1Color,color2Color);},[color1Color,color2Color,color.mode]);useEffect(()=>{lastValuesRef.current={...lastValuesRef.current,outputWidth:props.outputWidth,characterSet:props.characterSet,customCharacterSet:props.customCharacterSet,ditheringMode,invertColors:props.invertColors,whiteMode:props.whiteMode,blur:props.blur,brightness:props.brightness,contrast:props.contrast,font,cursorStyle:cursor?.style,cursorInvert:cursor?.invert,cursorWidth:cursor?.width};},[props.outputWidth,props.characterSet,props.customCharacterSet,ditheringMode,props.invertColors,props.whiteMode,props.blur,props.brightness,props.contrast,font,cursor?.style,cursor?.invert,cursor?.width]);useEffect(()=>{// Initialize canvas and context\nif(!canvasRef.current){canvasRef.current=document.createElement(\"canvas\");ctxRef.current=canvasRef.current.getContext(\"2d\",{willReadFrequently:true});}if(!maskCanvasRef.current){maskCanvasRef.current=document.createElement(\"canvas\");maskCtxRef.current=maskCanvasRef.current.getContext(\"2d\",{willReadFrequently:true});}if(img&&ctxRef.current&&maskCtxRef.current){const loadImage=async()=>{try{const{ascii,grayValues}=generateASCII(img,lastValuesRef.current,canvasRef.current,ctxRef.current,cursorX,cursorY,cursorInitializedRef,textRef,cursorImg,rngSeedRef);setText(ascii);// Update the mask with gradient colors\nif(!isSolidColor){const{outputWidth:asciiWidth}=lastValuesRef.current;const asciiHeight=Math.round(img.height/img.width*asciiWidth*measureFontAspectRatio(font));maskCanvasRef.current.width=asciiWidth;maskCanvasRef.current.height=asciiHeight;const imageData=maskCtxRef.current.getImageData(0,0,asciiWidth,asciiHeight);const data=imageData.data;for(let i=0;i<grayValues.length;i++){const gray=grayValues[i];const point1=color.mode===\"gradient\"?color.color1Point/100:color.threshold/100;const point2=color.mode===\"gradient\"?color.color2Point/100:1;let percent;if(point1===point2){// If points are equal, pick color based on which side of the point the gray value falls\npercent=gray/255<point1?0:1;}else{percent=Math.min(Math.max(mapRange(gray/255,Math.min(point1,point2),Math.max(point1,point2),0,1),0),1);}let interpolatedColor=percent<=point1?color1Color:percent>=point2?color2Color:colorInterpolatorRef.current(percent);const{r,g,b,a}=Color.toRgb(interpolatedColor);const idx=i*4;data[idx]=isNaN(r)?0:r;data[idx+1]=isNaN(g)?0:g;data[idx+2]=isNaN(b)?0:b;data[idx+3]=typeof a===\"number\"?isNaN(a)?0:a*255:255;}maskCtxRef.current.putImageData(imageData,0,0);}}catch(error){console.error(\"Error generating ASCII:\",error);}};let needsUpdate=false;// Subscribe to motion value changes\nconst unsubscribeX=cursorX.on(\"change\",()=>{needsUpdate=true;});const unsubscribeY=cursorY.on(\"change\",()=>{needsUpdate=true;});// Set up interval to check for changes\nconst intervalId=setInterval(()=>{if(needsUpdate){const currentValues={...lastValuesRef.current,cursorInitialized:cursorInitializedRef.current,cursorX:cursorX.get(),cursorY:cursorY.get()};// Check if any values have changed\nconst hasChanged=Object.entries(currentValues).some(([key,value])=>lastValuesRef.current[key]!==value);if(hasChanged){loadImage();lastValuesRef.current=currentValues;}needsUpdate=false;}},24);// Set up static effect interval if enabled\nif(staticEffect&&staticEffect.interval>0&&!(isCanvas&&staticEffect.preview===false)){// Clear any existing interval\nif(staticIntervalRef.current){clearInterval(staticIntervalRef.current);}// Create new interval for static effect\nstaticIntervalRef.current=setInterval(()=>{rngSeedRef.current=Math.random();loadImage();},staticEffect.interval*1e3);}else if(staticIntervalRef.current){// Clear interval if static effect is disabled\nclearInterval(staticIntervalRef.current);staticIntervalRef.current=null;}// Initial load\nloadImage();return()=>{clearInterval(intervalId);if(staticIntervalRef.current){clearInterval(staticIntervalRef.current);staticIntervalRef.current=null;}unsubscribeX();unsubscribeY();};}return()=>{if(canvasRef.current){canvasRef.current.remove();}if(maskCanvasRef.current){maskCanvasRef.current.remove();}if(staticIntervalRef.current){clearInterval(staticIntervalRef.current);staticIntervalRef.current=null;}};},[img,props,cursorX,cursorY,cursorImg,staticEffect]);useEffect(()=>{// Scale text to fit container width\nif(ref.current&&textRef.current){const updateScale=()=>{const containerWidth=ref.current?.offsetWidth;const containerHeight=ref.current?.offsetHeight;const textWidth=textRef.current?.scrollWidth;const textHeight=textRef.current?.scrollHeight;if(textWidth&&textHeight){let scale=1;let width=style?.width||\"auto\";let height=style?.height||\"auto\";switch(sizeMode){case\"width\":scale=containerWidth/textWidth;height=style?.height||`${textHeight*scale}px`;break;case\"height\":scale=containerHeight/textHeight;width=style?.width||`${textWidth*scale}px`;break;case\"both\":const widthScale=containerWidth/textWidth;const heightScale=containerHeight/textHeight;scale=sizing===\"fit\"?Math.min(widthScale,heightScale):Math.max(widthScale,heightScale);break;case\"none\":scale=1;break;}const translate=sizeMode===\"none\"?\"\":`translate(-50%, -50%)`;const transform=`${translate} scale(${scale})`;textRef.current.style.transform=transform;if(glowRef.current){glowRef.current.style.transform=transform;}ref.current.style.width=width;ref.current.style.height=height;}};const resizeObserver=new ResizeObserver(updateScale);resizeObserver.observe(ref.current);resizeObserver.observe(textRef.current);// Initial scale\nupdateScale();return()=>{resizeObserver.disconnect();};}},[text,sizeMode,sizing]);const textStyle={width:\"fit-content\",height:\"fit-content\",color:color.mode===\"color\"?color.color:\"transparent\",userSelect:\"none\",whiteSpace:\"pre\",textAlign:\"center\",transformOrigin:\"center\",fontVariantNumeric:\"tabular-nums\",...sizeMode!==\"none\"?{position:\"absolute\",top:\"50%\",left:\"50%\",transform:\"translate(-50%, -50%)\"}:{},...!isSolidColor?{backgroundImage:`url(${maskCanvasRef.current?.toDataURL()})`,backgroundRepeat:\"no-repeat\",backgroundSize:\"100% 100%\",imageRendering:\"pixelated\",backgroundClip:\"text\",WebkitBackgroundClip:\"text\"}:{},...font};return /*#__PURE__*/_jsxs(\"div\",{ref:ref,style:{position:\"relative\",overflow:\"hidden\",backgroundColor,borderRadius:props.radius,...style},children:[glow?.blur>0&&glow?.opacity>0&&/*#__PURE__*/_jsx(\"div\",{ref:glowRef,style:{position:\"absolute\",filter:`blur(${glow.blur}px)`,...textStyle,opacity:glow.opacity},\"aria-hidden\":\"true\",children:text}),/*#__PURE__*/_jsx(\"div\",{ref:textRef,style:{...textStyle},\"aria-label\":image?.alt,children:text})]});}InteractiveASCII.displayName=\"Interactive ASCII\";addPropertyControls(InteractiveASCII,{cursor:{type:ControlType.Object,icon:\"effect\",optional:true,defaultValue:{size:20,smoothing:0},controls:{style:{type:ControlType.Enum,defaultValue:\"gradient\",options:[\"gradient\",\"circle\",\"image\"],optionTitles:[\"Gradient\",\"Circle\",\"Image\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},image:{type:ControlType.ResponsiveImage,hidden:props=>props.style!==\"image\"},width:{type:ControlType.Number,defaultValue:20,min:1,max:500,step:1,description:\"Measured in characters\"},invert:{type:ControlType.Boolean,defaultValue:false},smoothing:{type:ControlType.Number,defaultValue:0,min:0,max:100,step:1}}},image:{type:ControlType.ResponsiveImage,__defaultAssetReference:\"data:framer/asset-reference,rMjuVOUhT39Hdz1kbwue16ZOySE.png?originalFilename=image.png&preferredSize=auto\"},sizing:{type:ControlType.Enum,defaultValue:\"fit\",options:[\"fit\",\"fill\"],optionTitles:[\"Fit\",\"Fill\"],displaySegmentedControl:true},font:{type:\"font\",defaultFontType:\"monospace\",displayTextAlignment:false,controls:\"extended\",defaultValue:{fontSize:12,lineHeight:1}},color:{type:ControlType.Object,controls:{mode:{type:ControlType.Enum,options:[\"color\",\"gradient\",\"glow\"],optionTitles:[\"Color\",\"Gradient\",\"Glow\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},color:{type:ControlType.Color,defaultValue:\"#fff\",hidden:props=>props.mode!==\"color\"},color1:{type:ControlType.Color,defaultValue:\"#fff\",title:\"Color 1\",hidden:props=>props.mode!==\"gradient\"&&props.mode!==\"glow\"},color1Point:{type:ControlType.Number,defaultValue:0,min:0,max:100,step:1,unit:\"%\",title:\"Position\",hidden:props=>props.mode!==\"gradient\"},color2:{type:ControlType.Color,defaultValue:\"#000\",title:\"Color 2\",hidden:props=>props.mode!==\"gradient\"&&props.mode!==\"glow\"},color2Point:{type:ControlType.Number,defaultValue:100,min:0,max:100,step:1,unit:\"%\",title:\"Position\",hidden:props=>props.mode!==\"gradient\"},threshold:{type:ControlType.Number,defaultValue:50,min:0,max:100,step:1,unit:\"%\",hidden:props=>props.mode!==\"glow\"}}},glow:{type:ControlType.Object,optional:true,icon:\"effect\",controls:{blur:{type:ControlType.Number,defaultValue:8,min:1,max:30,step:1},opacity:{type:ControlType.Number,defaultValue:1,min:0,max:1,step:.01}}},staticEffect:{type:ControlType.Object,optional:true,icon:\"effect\",title:\"Static\",controls:{preview:{type:ControlType.Boolean,defaultValue:true,description:\"Show effect in editor\"},interval:{type:ControlType.Number,defaultValue:.1,min:.05,max:1,step:.01,unit:\"s\",description:\"Makes the text change continuously like a static/noise effect\"}}},backgroundColor:{type:ControlType.Color,defaultValue:\"#000\",optional:true,title:\"Background\"},outputWidth:{type:ControlType.Number,defaultValue:100,min:20,max:500,step:1,title:\"Width\"},characterSet:{type:ControlType.Enum,defaultValue:\"detailed\",options:[\"detailed\",\"standard\",\"blocks\",\"binary\",\"hex\",\"custom\"],optionTitles:[`Detailed (${characterSets.detailed})`,`Standard (${characterSets.standard})`,`Blocks (${characterSets.blocks})`,`Binary (${characterSets.binary})`,`Hex (${characterSets.hex})`,\"Custom\"],title:\"Characters\"},customCharacterSet:{type:ControlType.String,defaultValue:\"@%#*+=-:.\",placeholder:\"Character set\",title:\"Custom\",hidden:props=>props.characterSet!==\"custom\"},ditheringMode:{type:ControlType.Enum,defaultValue:\"none\",options:[\"none\",\"floyd\",\"atkinson\",\"ordered\"],optionTitles:[\"None\",\"Floyd-Steinberg\",\"Atkinson\",\"Ordered\"],title:\"Dithering\",hidden:props=>!!props.staticEffect},invertColors:{type:ControlType.Boolean,defaultValue:false,title:\"Invert\"},whiteMode:{type:ControlType.Enum,defaultValue:\"ignore\",options:[\"keep\",\"ignore\"],optionTitles:[\"Keep\",\"Ignore\"],displaySegmentedControl:true,title:\"White\"},blur:{type:ControlType.Number,defaultValue:0,min:0,max:10,step:1,displayStepper:true},brightness:{type:ControlType.Number,defaultValue:0,min:-100,max:100},contrast:{type:ControlType.Number,defaultValue:0,min:-100,max:100},radius:{type:ControlType.BorderRadius,defaultValue:\"0px\",description:\"More components at [Framer University](https://frameruni.link/cc).\"}});// Helper Functions\n// Measure font aspect ratio by creating a temporary element\nfunction measureFontAspectRatio(font){font=font||DEFAULT_FONT;const temp=document.createElement(\"div\");temp.style.position=\"absolute\";temp.style.visibility=\"hidden\";temp.style.whiteSpace=\"nowrap\";temp.style.fontFamily=font.fontFamily;temp.style.fontWeight=font.fontWeight;temp.style.fontSize=font.fontSize;temp.style.lineHeight=font.lineHeight;temp.style.letterSpacing=font.letterSpacing;temp.textContent=\"W\";document.body.appendChild(temp);const width=temp.offsetWidth;const height=temp.offsetHeight;document.body.removeChild(temp);return width/height;}// Clamp a value between min and max.\nfunction clamp(value,min,max){return Math.max(min,Math.min(max,value));}// ASCII Art Generation Functions\n// Generate grayscale 0-255 values from an image.\nfunction generateGrayValues(img,props,canvas,ctx,cursorX,cursorY,cursorInitializedRef,containerRef,cursorImg){const{cursorStyle,cursorWidth,cursorInvert,outputWidth:asciiWidth,brightness,contrast:contrastValue,blur:blurValue,invertColors:invertEnabled,font}=props;const contrastFactor=259*(contrastValue+255)/(255*(259-contrastValue));const fontAspectRatio=measureFontAspectRatio(font);const asciiHeight=Math.round(img.height/img.width*asciiWidth*fontAspectRatio);canvas.width=asciiWidth;canvas.height=asciiHeight;ctx.filter=blurValue>0?`blur(${blurValue}px)`:\"none\";ctx.drawImage(img,0,0,asciiWidth,asciiHeight);if(cursorWidth&&cursorInitializedRef.current){// Map cursor coordinates from component space to ASCII grid space\nconst mappedX=cursorX.get()*asciiWidth;const mappedY=cursorY.get()*(asciiHeight/fontAspectRatio);ctx.save();ctx.scale(1,fontAspectRatio);switch(cursorStyle){case\"gradient\":{// Create a radial gradient for the cursor effect\nconst gradient=ctx.createRadialGradient(mappedX,mappedY,0,mappedX,mappedY,cursorWidth/2);if(cursorInvert){gradient.addColorStop(0,\"rgba(255, 255, 255, 1)\");gradient.addColorStop(1,\"rgba(255, 255, 255, 0)\");}else{gradient.addColorStop(0,\"rgba(0, 0, 0, 1)\");gradient.addColorStop(1,\"rgba(0, 0, 0, 0)\");}ctx.fillStyle=gradient;ctx.fillRect(0,0,asciiWidth,asciiHeight/fontAspectRatio);break;}case\"circle\":{ctx.fillStyle=cursorInvert?\"rgba(255, 255, 255, 1)\":\"rgba(0, 0, 0, 1)\";ctx.beginPath();ctx.arc(mappedX,mappedY,cursorWidth/2,0,Math.PI*2);ctx.fill();break;}case\"image\":{if(cursorImg){// Calculate the size of the cursor image in ASCII grid space\nconst cursorHeight=cursorImg.height/cursorImg.width*cursorWidth;// Draw the cursor image centered at the cursor position\nctx.save();if(cursorInvert){ctx.filter=\"invert(1)\";}ctx.drawImage(cursorImg,mappedX-cursorWidth/2,mappedY-cursorHeight/2,cursorWidth,cursorHeight);ctx.restore();}break;}}ctx.restore();}const imageData=ctx.getImageData(0,0,asciiWidth,asciiHeight);const data=imageData.data;const gray=[];for(let i=0;i<data.length;i+=4){let lum=.299*data[i]+.587*data[i+1]+.114*data[i+2];if(invertEnabled)lum=255-lum;let adjusted=clamp(contrastFactor*(lum-128)+128+brightness,0,255);gray.push(adjusted);}return{gray,asciiHeight};}// Generate standard ASCII art (non-DOG modes).\nfunction generateASCII(img,props,canvas,ctx,cursorX,cursorY,cursorInitializedRef,containerRef,cursorImg,rngSeedRef){const{outputWidth:asciiWidth,ditheringMode:ditherAlgorithm,characterSet:charset,customCharacterSet,whiteMode}=props;const ignoreWhite=whiteMode===\"ignore\";const gradient=charset===\"custom\"?customCharacterSet||\"0 \":characterSets[charset];const nLevels=gradient.length;const{gray:grayOriginal,asciiHeight}=generateGrayValues(img,props,canvas,ctx,cursorX,cursorY,cursorInitializedRef,containerRef,cursorImg);const gray=[...grayOriginal];let ascii=\"\";if(ditherAlgorithm!==\"none\"){if(ditherAlgorithm===\"floyd\"){// Floyd–Steinberg dithering\nfor(let y=0;y<asciiHeight;y++){let line=\"\";for(let x=0;x<asciiWidth;x++){const idx=y*asciiWidth+x;if(ignoreWhite&&grayOriginal[idx]===255){line+=\" \";continue;}let computedLevel=Math.round(gray[idx]/255*(nLevels-1));line+=gradient.charAt(computedLevel);const newPixel=computedLevel/(nLevels-1)*255;const error=gray[idx]-newPixel;if(x+1<asciiWidth){gray[idx+1]=clamp(gray[idx+1]+error*(7/16),0,255);}if(x-1>=0&&y+1<asciiHeight){gray[idx-1+asciiWidth]=clamp(gray[idx-1+asciiWidth]+error*(3/16),0,255);}if(y+1<asciiHeight){gray[idx+asciiWidth]=clamp(gray[idx+asciiWidth]+error*(5/16),0,255);}if(x+1<asciiWidth&&y+1<asciiHeight){gray[idx+asciiWidth+1]=clamp(gray[idx+asciiWidth+1]+error*(1/16),0,255);}}ascii+=line+\"\\n\";}}else if(ditherAlgorithm===\"atkinson\"){// Atkinson dithering\nfor(let y=0;y<asciiHeight;y++){let line=\"\";for(let x=0;x<asciiWidth;x++){const idx=y*asciiWidth+x;if(ignoreWhite&&grayOriginal[idx]===255){line+=\" \";continue;}let computedLevel=Math.round(gray[idx]/255*(nLevels-1));line+=gradient.charAt(computedLevel);const newPixel=computedLevel/(nLevels-1)*255;const error=gray[idx]-newPixel;const diffusion=error/8;if(x+1<asciiWidth){gray[idx+1]=clamp(gray[idx+1]+diffusion,0,255);}if(x+2<asciiWidth){gray[idx+2]=clamp(gray[idx+2]+diffusion,0,255);}if(y+1<asciiHeight){if(x-1>=0){gray[idx-1+asciiWidth]=clamp(gray[idx-1+asciiWidth]+diffusion,0,255);}gray[idx+asciiWidth]=clamp(gray[idx+asciiWidth]+diffusion,0,255);if(x+1<asciiWidth){gray[idx+asciiWidth+1]=clamp(gray[idx+asciiWidth+1]+diffusion,0,255);}}if(y+2<asciiHeight){gray[idx+2*asciiWidth]=clamp(gray[idx+2*asciiWidth]+diffusion,0,255);}}ascii+=line+\"\\n\";}}else if(ditherAlgorithm===\"noise\"){const rng=new SeededRandom(rngSeedRef.current);// Noise dithering\nfor(let y=0;y<asciiHeight;y++){let line=\"\";for(let x=0;x<asciiWidth;x++){const idx=y*asciiWidth+x;const randomValue=rng.next();if(ignoreWhite&&grayOriginal[idx]===255){line+=\" \";continue;}const noise=(randomValue-.4)*(255/nLevels);const noisyValue=clamp(gray[idx]+noise,0,255);let computedLevel=Math.round(noisyValue/255*(nLevels-1));line+=gradient.charAt(computedLevel);}ascii+=line+\"\\n\";}}else if(ditherAlgorithm===\"ordered\"){// Ordered dithering using a 4x4 Bayer matrix.\nconst bayer=[[0,8,2,10],[12,4,14,6],[3,11,1,9],[15,7,13,5]];const matrixSize=4;for(let y=0;y<asciiHeight;y++){let line=\"\";for(let x=0;x<asciiWidth;x++){const idx=y*asciiWidth+x;if(ignoreWhite&&grayOriginal[idx]===255){line+=\" \";continue;}const p=gray[idx]/255;const t=(bayer[y%matrixSize][x%matrixSize]+.5)/(matrixSize*matrixSize);let valueWithDither=p+t-.5;valueWithDither=Math.min(Math.max(valueWithDither,0),1);let computedLevel=Math.floor(valueWithDither*nLevels);if(computedLevel>=nLevels)computedLevel=nLevels-1;line+=gradient.charAt(computedLevel);}ascii+=line+\"\\n\";}}}else{// Simple mapping without dithering.\nfor(let y=0;y<asciiHeight;y++){let line=\"\";for(let x=0;x<asciiWidth;x++){const idx=y*asciiWidth+x;if(ignoreWhite&&grayOriginal[idx]===255){line+=\" \";continue;}const computedLevel=Math.round(gray[idx]/255*(nLevels-1));line+=gradient.charAt(computedLevel);}ascii+=line+\"\\n\";}}return{ascii,grayValues:gray};}function useFollowCursor(smoothing=0,containerRef){const movementTransition={damping:100,stiffness:mapRange(smoothing,0,100,2e3,50)};const hasSpring=smoothing!==0;const mouseX=useMotionValue(0);const mouseY=useMotionValue(0);const springX=useSpring(mouseX,movementTransition);const springY=useSpring(mouseY,movementTransition);const previousScrollXRef=useRef(0);const previousScrollYRef=useRef(0);const[initialized,setInitialized]=useState(false);const isInitializedRef=useRef(false);useEffect(()=>{const handleMouseMove=event=>{if(!containerRef.current)return;const rect=containerRef.current.getBoundingClientRect();const x=event.clientX-rect.left;const y=event.clientY-rect.top;// Convert to percentages, handling edge cases to prevent infinite values\nconst xPercent=rect.width===0?0:x/rect.width;const yPercent=rect.height===0?0:y/rect.height;mouseX.set(xPercent);mouseY.set(yPercent);if(!isInitializedRef.current){springX.jump(xPercent);springY.jump(yPercent);isInitializedRef.current=true;setInitialized(true);}};const handleScroll=()=>{if(!containerRef.current||!isInitializedRef.current)return;const rect=containerRef.current.getBoundingClientRect();const scrollX=window.scrollX||window.pageXOffset||document.documentElement.scrollLeft;const scrollY=window.scrollY||window.pageYOffset||document.documentElement.scrollTop;// Calculate scroll delta\nconst deltaX=scrollX-previousScrollXRef.current;const deltaY=scrollY-previousScrollYRef.current;// Update previous scroll positions\npreviousScrollXRef.current=scrollX;previousScrollYRef.current=scrollY;// Convert scroll delta to percentage, handling edge cases\nconst deltaXPercent=rect.width===0?0:deltaX/rect.width;const deltaYPercent=rect.height===0?0:deltaY/rect.height;// Update position using scroll delta percentages\nmouseX.set(mouseX.get()+deltaXPercent);mouseY.set(mouseY.get()+deltaYPercent);};window.addEventListener(\"mousemove\",handleMouseMove);window.addEventListener(\"scroll\",handleScroll);return()=>{window.removeEventListener(\"mousemove\",handleMouseMove);window.removeEventListener(\"scroll\",handleScroll);};},[containerRef]);return{initialized,initializedRef:isInitializedRef,x:hasSpring?springX:mouseX,y:hasSpring?springY:mouseY};}function mapRange(value,fromLow,fromHigh,toLow,toHigh){if(fromLow===fromHigh){return toLow;}const percentage=(value-fromLow)/(fromHigh-fromLow);return toLow+percentage*(toHigh-toLow);}function createColorInterpolator(mode,color1,color2){if(mode===\"glow\"){return Color.interpolate(color2,new Color(color2.r,color2.g,color2.b,0));}return Color.interpolate(color1,color2);}class SeededRandom{next(){this.seed=this.seed*16807%2147483647;return(this.seed-1)/2147483646;}constructor(seed){_define_property(this,\"seed\",void 0);this.seed=seed%2147483647;if(this.seed<=0)this.seed+=2147483646;}}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"InteractiveASCII\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\",\"framerIntrinsicWidth\":\"400\",\"framerIntrinsicHeight\":\"400\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"*\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./InteractiveASCII_Prod.map"],"mappings":"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"}