{"version":3,"file":"Examples.BusDX-QY.mjs","names":["useState","useRef","useState","useState","useRef"],"sources":["https:/framerusercontent.com/modules/hwyXKSBSUSfWE0hql0LO/rpUilysupUU2hlE2BlLC/TextScramble.js","https:/framerusercontent.com/modules/vj7bFUjvEQFgEzNBkdoG/vf3CKm378wlVcBk7IhSU/createStore.js","https:/framer.com/m/framer/store.js@^1.0.0","https:/framerusercontent.com/modules/28rXvpPsrum7FH6cMELS/1jCAazZw1EGHjrG5Nu5D/Utils.js","https:/framer.com/m/framer/utils.js@^0.9.0","https:/framerusercontent.com/modules/ajtJD21T8h7nohCM83LG/K6KVf4Z8tns8kIwYjYdM/Examples.js"],"sourcesContent":["// Text scramble hover effect with random character animation\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useState,useEffect,useRef,startTransition}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function TextScramble(props){const{text=\"Hover Me\",duration=1e3,characters=\"!@#$%^&*()_+-=[]{}|;:,.<>?\",scrambleIntensity=100,textColor,font,triggerMode=\"hover\",appearDelay=0,style}=props;const[displayText,setDisplayText]=useState(text);const[isHovering,setIsHovering]=useState(false);const[hasAppeared,setHasAppeared]=useState(false);const frameRef=useRef(0);const startTimeRef=useRef(0);const containerRef=useRef(null);const textRef=useRef(null);const[minWidth,setMinWidth]=useState(undefined);// Detect if width/height are set to fill (100%)\nconst isFixedWidth=style?.width===\"100%\";const isFixedHeight=style?.height===\"100%\";// Measure initial text width\nuseEffect(()=>{if(textRef.current&&!isFixedWidth){const width=textRef.current.offsetWidth;startTransition(()=>setMinWidth(width));}},[text,font,isFixedWidth]);// Handle appear mode with Intersection Observer\nuseEffect(()=>{if(triggerMode!==\"appear\"||hasAppeared)return;let timeoutId;const observer=new IntersectionObserver(entries=>{entries.forEach(entry=>{if(entry.isIntersecting){timeoutId=setTimeout(()=>{startTransition(()=>setHasAppeared(true));},appearDelay);}});},{threshold:.1});const currentContainer=containerRef.current;if(currentContainer){observer.observe(currentContainer);}return()=>{if(timeoutId){clearTimeout(timeoutId);}if(currentContainer){observer.unobserve(currentContainer);}};},[triggerMode,appearDelay,hasAppeared]);useEffect(()=>{const shouldAnimate=triggerMode===\"hover\"?isHovering:hasAppeared;if(!shouldAnimate){startTransition(()=>setDisplayText(text));return;}startTimeRef.current=Date.now();let lastFrameTime=0;const animate=()=>{const now=Date.now();const elapsed=now-startTimeRef.current;const progress=Math.min(elapsed/duration,1);if(progress>=1){startTransition(()=>setDisplayText(text));return;}// Add a minimum delay between frames to make scrambling more visible\nif(now-lastFrameTime<50){frameRef.current=requestAnimationFrame(animate);return;}lastFrameTime=now;// Easing function for smoother animation\nconst easeProgress=1-Math.pow(1-progress,3);const scrambled=text.split(\"\").map((char,index)=>{if(char===\" \")return\" \";// Use scrambleIntensity to control how many characters scramble\nconst shouldScramble=Math.random()*100<scrambleIntensity;if(shouldScramble&&Math.random()>easeProgress){return characters[Math.floor(Math.random()*characters.length)];}return text[index];}).join(\"\");startTransition(()=>setDisplayText(scrambled));frameRef.current=requestAnimationFrame(animate);};frameRef.current=requestAnimationFrame(animate);return()=>{if(frameRef.current){cancelAnimationFrame(frameRef.current);}};},[isHovering,text,duration,characters,scrambleIntensity,triggerMode,hasAppeared]);const handleMouseEnter=()=>{if(triggerMode===\"hover\"){startTransition(()=>setIsHovering(true));}};const handleMouseLeave=()=>{if(triggerMode===\"hover\"){startTransition(()=>setIsHovering(false));}};const shouldAnimate=triggerMode===\"hover\"?isHovering:hasAppeared;return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{...style,position:\"relative\",display:\"flex\",alignItems:\"center\",justifyContent:\"flex-start\",cursor:triggerMode===\"hover\"?\"pointer\":\"default\",userSelect:\"none\",width:isFixedWidth?\"100%\":\"fit-content\",height:isFixedHeight?\"100%\":\"fit-content\"},onMouseEnter:handleMouseEnter,onMouseLeave:handleMouseLeave,children:/*#__PURE__*/_jsx(\"span\",{ref:textRef,style:{...font,color:textColor,fontFamily:font.fontFamily||\"monospace\",wordWrap:\"break-word\",overflowWrap:\"break-word\",width:isFixedWidth?\"100%\":\"max-content\",minWidth:!isFixedWidth&&minWidth?`${minWidth}px`:undefined},children:displayText})});}addPropertyControls(TextScramble,{text:{type:ControlType.String,title:\"Text\",defaultValue:\"Hover Me\"},triggerMode:{type:ControlType.Enum,title:\"Trigger\",options:[\"hover\",\"appear\"],optionTitles:[\"Hover\",\"Appear\"],defaultValue:\"hover\",displaySegmentedControl:true},appearDelay:{type:ControlType.Number,title:\"Appear Delay\",defaultValue:0,min:0,max:5e3,step:100,unit:\"ms\",displayStepper:true,hidden:props=>props.triggerMode!==\"appear\"},duration:{type:ControlType.Number,title:\"Duration\",defaultValue:2e3,min:100,max:5e3,step:100,unit:\"ms\",displayStepper:true},scrambleIntensity:{type:ControlType.Number,title:\"Intensity\",defaultValue:100,min:0,max:100,step:5,unit:\"%\",displayStepper:true},characters:{type:ControlType.String,title:\"Characters\",defaultValue:\"!@#$%^&*()_+-=[]{}|;:,.<>?\",displayTextArea:true},textColor:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#00FF00\"},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"monospace\",defaultValue:{fontSize:\"32px\",letterSpacing:\"0em\",lineHeight:\"1.2em\"}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextScramble\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TextScramble.map","import{useState,useEffect}from\"react\";import{Data,useObserveData}from\"framer\";export function createStore(state1){// Use Data so that a Preview reload resets the state\nconst dataStore=Data({state:Object.freeze({...state1})});// Create a set function that updates the state\nconst setDataStore=newState=>{// If the state is an object, make sure we copy it\nif(typeof newState===\"function\"){newState=newState(dataStore.state);}dataStore.state=Object.freeze({...dataStore.state,...newState});};// Store the initial state, copy the object if it's an object\nlet storeState=typeof state1===\"object\"?Object.freeze({...state1}):state1;// Keep a list of all the listeners, in the form of React hook setters\nconst storeSetters=new Set();// Create a set function that updates all the listeners / setters\nconst setStoreState=newState=>{// If the state is an object, make sure we copy it\nif(typeof newState===\"function\"){newState=newState(storeState);}storeState=typeof newState===\"object\"?Object.freeze({...storeState,...newState}):newState;// Update all the listeners / setters with the new value\nstoreSetters.forEach(setter=>setter(storeState));};// Create the actual hook based on everything above\nfunction useStore(){// Create the hook we are going to use as a listener\nconst[state,setState]=useState(storeState);// If we unmount the component using this hook, we need to remove the listener\n// @ts-ignore\nuseEffect(()=>{// But right now, we need to add the listener\nstoreSetters.add(setState);return()=>storeSetters.delete(setState);},[]);// If Data context exists, use Data, otherwise use vanilla React state\nif(useObserveData()===true){useObserveData();return[dataStore.state,setDataStore];}else{// Return the state and a function to update the central store\nreturn[state,setStoreState];}}return useStore;}\nexport const __FramerMetadata__ = {\"exports\":{\"createStore\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./createStore.map","/*\n * createStore (framer/store@1.0.1)\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/vj7bFUjvEQFgEzNBkdoG/vf3CKm378wlVcBk7IhSU/createStore.js\"\n","export const centerContent = {\n    display: \"flex\",\n    justifyContent: \"center\",\n    alignItems: \"center\"\n};\nexport const autoSizingText = {\n    width: \"max-content\",\n    wordBreak: \"break-word\",\n    overflowWrap: \"break-word\",\n    overflow: \"hidden\",\n    whiteSpace: \"pre-wrap\",\n    flexShrink: 0\n};\nexport const defaultContainerStyles = {\n    ...centerContent,\n    overflow: \"hidden\"\n};\nexport const containerStyles = defaultContainerStyles;\nexport const randomColor = ()=>\"#\" + Math.floor(Math.random() * 16777215).toString(16)\n;\n\nexport const __FramerMetadata__ = {\"exports\":{\"centerContent\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"containerStyles\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"autoSizingText\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"defaultContainerStyles\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"randomColor\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}}}}\n//# sourceMappingURL=./Utils.map","/*\n * Utils (framer/utils@0.9.0)\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/28rXvpPsrum7FH6cMELS/1jCAazZw1EGHjrG5Nu5D/Utils.js\"\n","import{jsx as _jsx}from\"react/jsx-runtime\";import{forwardRef,startTransition,useEffect,useCallback,useMemo,useRef,useState}from\"react\";import{useIsStaticRenderer}from\"framer\";// @ts-ignore Framer URL module resolves at runtime\nimport{createStore}from\"https://framer.com/m/framer/store.js@^1.0.0\";// @ts-ignore Framer URL module resolves at runtime\nimport{randomColor}from\"https://framer.com/m/framer/utils.js@^0.9.0\";// Learn more: https://www.framer.com/developers/overrides/\nconst useStore=createStore({background:\"#0099FF\"});export function withRotate(Component){return /*#__PURE__*/forwardRef((props,ref)=>{return /*#__PURE__*/_jsx(Component,{ref:ref,...props,animate:{rotate:90},transition:{duration:2}});});}export function withHover(Component){return /*#__PURE__*/forwardRef((props,ref)=>{return /*#__PURE__*/_jsx(Component,{ref:ref,...props,whileHover:{scale:1.05}});});}export function withRandomColor(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const[store,setStore]=useStore();return /*#__PURE__*/_jsx(Component,{ref:ref,...props,animate:{background:store.background},onClick:()=>{setStore({background:randomColor()});}});});}export function withProjectCardFloat(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const isStatic=useIsStaticRenderer();const[motionState,setMotionState]=useState({rotateX:0,rotateY:0,x:0,y:0});const prefersReducedMotion=useMemo(()=>{if(typeof window!==\"undefined\"){return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;}return false;},[]);const interactive=!isStatic&&!prefersReducedMotion;const handlePointerMove=useCallback(event=>{props.onPointerMove?.(event);if(!interactive)return;const target=event.currentTarget;if(!target)return;const rect=target.getBoundingClientRect();const px=(event.clientX-rect.left)/rect.width;const py=(event.clientY-rect.top)/rect.height;const intensity=4;const move=6;const rotateY=(px-.5)*intensity*2;const rotateX=(.5-py)*intensity*2;const x=(px-.5)*move*2;const y=(py-.5)*move*2;startTransition(()=>{setMotionState({rotateX,rotateY,x,y});});},[interactive,props]);const handlePointerLeave=useCallback(event=>{props.onPointerLeave?.(event);if(!interactive)return;startTransition(()=>{setMotionState({rotateX:0,rotateY:0,x:0,y:0});});},[interactive,props]);if(!interactive){return /*#__PURE__*/_jsx(Component,{ref:ref,...props});}const animateProp=props.animate&&typeof props.animate===\"object\"?{...props.animate,rotateX:motionState.rotateX,rotateY:motionState.rotateY,x:motionState.x,y:motionState.y}:{rotateX:motionState.rotateX,rotateY:motionState.rotateY,x:motionState.x,y:motionState.y};const transitionProp=props.transition&&typeof props.transition===\"object\"?{...props.transition,rotateX:{type:\"spring\",stiffness:180,damping:24,mass:.5},rotateY:{type:\"spring\",stiffness:180,damping:24,mass:.5},x:{type:\"spring\",stiffness:180,damping:24,mass:.5},y:{type:\"spring\",stiffness:180,damping:24,mass:.5}}:{rotateX:{type:\"spring\",stiffness:180,damping:24,mass:.5},rotateY:{type:\"spring\",stiffness:180,damping:24,mass:.5},x:{type:\"spring\",stiffness:180,damping:24,mass:.5},y:{type:\"spring\",stiffness:180,damping:24,mass:.5}};return /*#__PURE__*/_jsx(Component,{ref:ref,...props,style:{...props.style,transformPerspective:900,transformStyle:\"preserve-3d\",willChange:\"transform\"},animate:animateProp,transition:transitionProp,onPointerMove:handlePointerMove,onPointerLeave:handlePointerLeave});});}export function withNavbarScrollReveal(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const[isHidden,setIsHidden]=useState(false);const lastScrollY=useRef(0);const hiddenRef=useRef(false);useEffect(()=>{if(typeof window!==\"undefined\"){lastScrollY.current=window.scrollY||0;}else{lastScrollY.current=0;}const threshold=8;const onScroll=()=>{if(typeof window===\"undefined\")return;const currentY=window.scrollY||0;const delta=currentY-lastScrollY.current;let nextHidden=hiddenRef.current;if(currentY<=threshold){nextHidden=false;}else if(delta>threshold){nextHidden=true;}else if(delta<-threshold){nextHidden=false;}if(nextHidden!==hiddenRef.current){hiddenRef.current=nextHidden;startTransition(()=>{setIsHidden(nextHidden);});}lastScrollY.current=currentY;};if(typeof window!==\"undefined\"){window.addEventListener(\"scroll\",onScroll,{passive:true});return()=>{window.removeEventListener(\"scroll\",onScroll);};}return;},[]);return /*#__PURE__*/_jsx(Component,{ref:ref,...props,style:{...props.style,transform:isHidden?\"translateY(-120%)\":\"translateY(0)\",opacity:isHidden?0:1,transition:\"transform 0.22s ease, opacity 0.18s ease\",willChange:\"transform, opacity\"}});});}export function withLinkedInLabel(Component){return /*#__PURE__*/forwardRef((props,ref)=>/*#__PURE__*/_jsx(Component,{ref:ref,...props,\"aria-label\":\"LinkedIn profile\"}));}export function withScholarLabel(Component){return /*#__PURE__*/forwardRef((props,ref)=>/*#__PURE__*/_jsx(Component,{ref:ref,...props,\"aria-label\":\"Google Scholar profile\"}));}export function withGitHubLabel(Component){return /*#__PURE__*/forwardRef((props,ref)=>/*#__PURE__*/_jsx(Component,{ref:ref,...props,\"aria-label\":\"GitHub profile\"}));}\nexport const __FramerMetadata__ = {\"exports\":{\"withGitHubLabel\":{\"type\":\"reactHoc\",\"name\":\"withGitHubLabel\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withRandomColor\":{\"type\":\"reactHoc\",\"name\":\"withRandomColor\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withProjectCardFloat\":{\"type\":\"reactHoc\",\"name\":\"withProjectCardFloat\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withLinkedInLabel\":{\"type\":\"reactHoc\",\"name\":\"withLinkedInLabel\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScholarLabel\":{\"type\":\"reactHoc\",\"name\":\"withScholarLabel\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withNavbarScrollReveal\":{\"type\":\"reactHoc\",\"name\":\"withNavbarScrollReveal\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withRotate\":{\"type\":\"reactHoc\",\"name\":\"withRotate\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withHover\":{\"type\":\"reactHoc\",\"name\":\"withHover\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Examples.map"],"mappings":"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"}