{"version":3,"file":"InteractiveASCII_Prod.nM1eb3Vy.mjs","names":["useState","useMemo","useState","useRef","useMemo","__esmMin","window","init_npm_react_18_3_1","pe","init_ssg_sandbox_shims","ce","init_jsx_runtime","p","_e","de","useMotionValue","useSpring","init_framer_motion_DhsWWWsN","addPropertyControls","RenderTarget","init_framer_BWFVvmND","Color","ControlType","useColors","colors","isCanvas","isOptimizing","darkMode","useDarkMode","styleValues","setStyleValues","extractStyleValues","extractCSSVariableName","div","observer","variableNames","extractDefaultValue","color","values","i","variableName","colorValues","result","lightVars","darkVars","style","vars","parseVariables","extractColorStyles","light","dark","varName","lightSection","darkSection","styles","rules","styleRules","rule","subrule","isDarkMedia","css","isDark","isLight","isPreview","isDarkMode","setIsDarkMode","mutations","mutation","theme","mediaQuery","handleChange","cssString","match","cssVariableRegex","section","name","value","declaration","s","cssVar","parts","init_useColors","_define_property","key","obj","InteractiveASCII","props","image","DEFAULT_IMAGE","sizeMode","isSolidColor","ditheringMode","staticEffect","text","setText","canvasRef","ctxRef","maskCanvasRef","maskCtxRef","ref","textRef","glowRef","staticIntervalRef","cursorX","cursorY","cursorInitialized","cursorInitializedRef","useFollowCursor","cursor","lastValuesRef","color1Value","color2Value","color1Color","color2Color","colorInterpolatorRef","createColorInterpolator","rngSeedRef","img","setImg","cursorImg","setCursorImg","font","loadImage","generateASCII","ascii","asciiWidth","asciiHeight","measureFontAspectRatio","imageData","data","grayValues","gray","point1","point2","percent","mapRange","interpolatedColor","idx","r","g","b","a","error","needsUpdate","unsubscribeX","unsubscribeY","intervalId","currentValues","updateScale","containerWidth","containerHeight","textWidth","textHeight","scale","width","height","widthScale","heightScale","sizing","transform","resizeObserver","textStyle","glow","DEFAULT_FONT","temp","clamp","min","max","generateGrayValues","contrastValue","blurValue","invertEnabled","contrastFactor","fontAspectRatio","ctx","cursorWidth","mappedX","mappedY","cursorStyle","gradient","cursorInvert","cursorHeight","lum","adjusted","brightness","ditherAlgorithm","charset","ignoreWhite","whiteMode","customCharacterSet","characterSets","nLevels","grayOriginal","canvas","containerRef","y","line","x","computedLevel","newPixel","diffusion","rng","SeededRandom","randomValue","noise","noisyValue","bayer","valueWithDither","movementTransition","smoothing","hasSpring","mouseX","mouseY","springX","springY","previousScrollXRef","previousScrollYRef","initialized","setInitialized","isInitializedRef","handleMouseMove","rect","event","xPercent","yPercent","handleScroll","scrollX","scrollY","deltaX","deltaY","deltaXPercent","deltaYPercent","fromLow","fromHigh","toLow","toHigh","mode","color2","color1","init_InteractiveASCII_Prod","seed"],"sources":["https:/framerusercontent.com/modules/k76epLFsVsF4jlsF5pgg/vhK3G0ntf62fqS2tFDno/useColors.js","https:/framerusercontent.com/modules/quIQjXeusVKZRk3V2tVC/5hoALzyXyTieiXjYdtoX/InteractiveASCII_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","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/vhK3G0ntf62fqS2tFDno/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\":{\"framerSupportedLayoutHeight\":\"any\",\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"400\",\"framerIntrinsicHeight\":\"400\",\"framerDisableUnlink\":\"*\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}