{"version":3,"file":"Soundwave.DYA4pcZq.mjs","names":["useMemo","useRef","useState","useCallback"],"sources":["https:/framerusercontent.com/modules/4JQk8KATnwHuWUbUJ3wh/LerFmV81aPP83EwRQSv6/Soundwave.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState,useCallback,useMemo}from\"react\";import{addPropertyControls,ControlType,RenderTarget,useIsStaticRenderer}from\"framer\";/* ==========================================================================\n   DEFAULT SETTINGS\n   ========================================================================== */const DEFAULT_AUDIO={audioFile:\"\",sensitivity:1.5,audioInfluence:1,volume:100};const DEFAULT_WAVE={waveCount:18,amplitude:50,frequency:1.35,spacing:24,phase:0};const DEFAULT_PERSPECTIVE={perspective:65,depth:1,tilt:0,horizon:.28};const DEFAULT_ANIMATION={speed:1,movement:.9,distortion:1};const DEFAULT_APPEARANCE={waveColor:\"#FFFFFF\",backgroundColor:\"#080808\",backgroundImage:\"\",showScrim:false,scrimColor:\"#000000\",scrimOpacity:.5,scrimDirection:180,strokeWidth:1,opacity:.72,glow:0};const DEFAULT_PLAYBACK={showPlayButton:true,autoPlay:false,loop:true,mute:false,playTrigger:\"playButton\",stopTrigger:\"none\",restartOnTrigger:false};const DEFAULT_RESPONSIVE={responsive:true};/* ==========================================================================\n   HELPERS\n   ========================================================================== */const clamp=(value,min,max)=>Math.min(Math.max(value,min),max);const lerp=(a,b,t)=>a+(b-a)*t;/* ==========================================================================\n   COMPONENT\n   ========================================================================== *//**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicWidth 1200\n * @framerIntrinsicHeight 800\n */export default function SoundWave(props){/* -----------------------------------------------------------------------\n       FRAMER RUNTIME\n       ----------------------------------------------------------------------- */const isStaticRenderer=useIsStaticRenderer();const isCanvas=RenderTarget.current()===RenderTarget.canvas;/*\n     * Dynamic browser APIs, audio, observers and animation frames should\n     * never run in Framer's canvas or static renderer.\n     *\n     * Static/canvas rendering still draws one visual frame.\n     */const canRunDynamicEffects=!isCanvas&&!isStaticRenderer;const canPlayAudio=canRunDynamicEffects;/* -----------------------------------------------------------------------\n       RESOLVE SETTINGS\n\n       Object controls are the primary source.\n       Legacy flat props are used as a fallback so existing instances\n       remain compatible.\n       ----------------------------------------------------------------------- */const audio=useMemo(()=>({...DEFAULT_AUDIO,...props.audio||{}}),[props.audio]);const wave=useMemo(()=>({...DEFAULT_WAVE,...props.wave||{}}),[props.wave]);const perspectiveSettings=useMemo(()=>({...DEFAULT_PERSPECTIVE,...props.perspectiveSettings||{}}),[props.perspectiveSettings]);const animation=useMemo(()=>({...DEFAULT_ANIMATION,...props.animation||{}}),[props.animation]);const appearance=useMemo(()=>({...DEFAULT_APPEARANCE,...props.appearance||{}}),[props.appearance]);const playback=useMemo(()=>({...DEFAULT_PLAYBACK,...props.playback||{}}),[props.playback]);const responsiveSettings=useMemo(()=>({...DEFAULT_RESPONSIVE,...props.responsiveSettings||{}}),[props.responsiveSettings]);/*\n     * Keep the resolved objects available so the categorized controls\n     * remain the primary source of truth.\n     */const audioFile=props.audio?.audioFile!==undefined?props.audio.audioFile:props.audioFile??audio.audioFile;const sensitivity=props.audio?.sensitivity!==undefined?props.audio.sensitivity:props.sensitivity??audio.sensitivity;const audioInfluence=props.audio?.audioInfluence!==undefined?props.audio.audioInfluence:props.audioInfluence??audio.audioInfluence;const volume=props.audio?.volume!==undefined?props.audio.volume:props.volume??audio.volume;const waveCount=props.wave?.waveCount!==undefined?props.wave.waveCount:props.waveCount??wave.waveCount;const amplitude=props.wave?.amplitude!==undefined?props.wave.amplitude:props.amplitude??wave.amplitude;const frequency=props.wave?.frequency!==undefined?props.wave.frequency:props.frequency??wave.frequency;const spacing=props.wave?.spacing!==undefined?props.wave.spacing:props.spacing??wave.spacing;const phase=props.wave?.phase!==undefined?props.wave.phase:props.phase??wave.phase;const perspective=props.perspectiveSettings?.perspective!==undefined?props.perspectiveSettings.perspective:props.perspective??perspectiveSettings.perspective;const depth=props.perspectiveSettings?.depth!==undefined?props.perspectiveSettings.depth:props.depth??perspectiveSettings.depth;const tilt=props.perspectiveSettings?.tilt!==undefined?props.perspectiveSettings.tilt:props.tilt??perspectiveSettings.tilt;const horizon=props.perspectiveSettings?.horizon!==undefined?props.perspectiveSettings.horizon:props.horizon??perspectiveSettings.horizon;const speed=props.animation?.speed!==undefined?props.animation.speed:props.speed??animation.speed;const movement=props.animation?.movement!==undefined?props.animation.movement:props.movement??animation.movement;const distortion=props.animation?.distortion!==undefined?props.animation.distortion:props.distortion??animation.distortion;const waveColor=props.appearance?.waveColor!==undefined?props.appearance.waveColor:props.waveColor??appearance.waveColor;const backgroundColor=props.appearance?.backgroundColor!==undefined?props.appearance.backgroundColor:props.backgroundColor??appearance.backgroundColor;const backgroundImage=props.appearance?.backgroundImage!==undefined?props.appearance.backgroundImage:props.backgroundImage??appearance.backgroundImage;const showScrim=props.appearance?.showScrim!==undefined?props.appearance.showScrim:props.showScrim??appearance.showScrim;const scrimColor=props.appearance?.scrimColor!==undefined?props.appearance.scrimColor:props.scrimColor??appearance.scrimColor;const scrimOpacity=props.appearance?.scrimOpacity!==undefined?props.appearance.scrimOpacity:props.scrimOpacity??appearance.scrimOpacity;const scrimDirection=props.appearance?.scrimDirection!==undefined?props.appearance.scrimDirection:props.scrimDirection??appearance.scrimDirection;const strokeWidth=props.appearance?.strokeWidth!==undefined?props.appearance.strokeWidth:props.strokeWidth??appearance.strokeWidth;const opacity=props.appearance?.opacity!==undefined?props.appearance.opacity:props.opacity??appearance.opacity;const glow=props.appearance?.glow!==undefined?props.appearance.glow:props.glow??appearance.glow;const showPlayButton=props.playback?.showPlayButton!==undefined?props.playback.showPlayButton:props.showPlayButton??playback.showPlayButton;const autoPlay=props.playback?.autoPlay!==undefined?props.playback.autoPlay:props.autoPlay??playback.autoPlay;const loop=props.playback?.loop!==undefined?props.playback.loop:props.loop??playback.loop;const mute=props.playback?.mute!==undefined?props.playback.mute:props.mute??playback.mute;const playTrigger=props.playback?.playTrigger!==undefined?props.playback.playTrigger:props.playTrigger??playback.playTrigger;const stopTrigger=props.playback?.stopTrigger!==undefined?props.playback.stopTrigger:props.stopTrigger??playback.stopTrigger;const restartOnTrigger=props.playback?.restartOnTrigger!==undefined?props.playback.restartOnTrigger:props.restartOnTrigger??playback.restartOnTrigger;const responsive=props.responsiveSettings?.responsive!==undefined?props.responsiveSettings.responsive:props.responsive??responsiveSettings.responsive;/* -----------------------------------------------------------------------\n       REFS\n       ----------------------------------------------------------------------- */const rootRef=useRef(null);const canvasRef=useRef(null);const audioRef=useRef(null);const audioContextRef=useRef(null);const analyserRef=useRef(null);const sourceRef=useRef(null);const sourceCreatedRef=useRef(false);const animationFrameRef=useRef(null);const observerRef=useRef(null);const amplitudeRef=useRef(0);const targetAmplitudeRef=useRef(0);const timeRef=useRef(0);const isPlayingRef=useRef(false);const mountedRef=useRef(false);const triggerInitializedRef=useRef(false);const wasInViewRef=useRef(false);const currentAudioFileRef=useRef(\"\");const analyserDataRef=useRef(null);/* -----------------------------------------------------------------------\n       BACKGROUND IMAGE REF\n       ----------------------------------------------------------------------- */const backgroundImageRef=useRef(null);const currentBackgroundImageRef=useRef(\"\");/* -----------------------------------------------------------------------\n       STATE\n       ----------------------------------------------------------------------- */const[isPlaying,setIsPlaying]=useState(false);/* -----------------------------------------------------------------------\n       BACKGROUND IMAGE LOADING\n       ----------------------------------------------------------------------- */useEffect(()=>{const nextImage=backgroundImage||\"\";if(currentBackgroundImageRef.current===nextImage){return;}currentBackgroundImageRef.current=nextImage;backgroundImageRef.current=null;if(!nextImage){return;}const image=new Image;image.onload=()=>{if(currentBackgroundImageRef.current===nextImage){backgroundImageRef.current=image;}};image.onerror=()=>{if(currentBackgroundImageRef.current===nextImage){backgroundImageRef.current=null;}};image.src=nextImage;return()=>{image.onload=null;image.onerror=null;};},[backgroundImage]);/* -----------------------------------------------------------------------\n       PLAY STATE\n       ----------------------------------------------------------------------- */const updatePlayingState=useCallback(playing=>{isPlayingRef.current=playing;setIsPlaying(previous=>previous===playing?previous:playing);},[]);/* -----------------------------------------------------------------------\n       AUDIO SETUP\n       ----------------------------------------------------------------------- */const setupAudio=useCallback(()=>{if(!canPlayAudio)return;const audioElement=audioRef.current;if(!audioElement)return;if(sourceCreatedRef.current){return;}const AudioContextClass=window.AudioContext||window.webkitAudioContext;if(!AudioContextClass){return;}try{const context=new AudioContextClass;const analyser=context.createAnalyser();analyser.fftSize=512;analyser.smoothingTimeConstant=.82;const source=context.createMediaElementSource(audioElement);source.connect(analyser);analyser.connect(context.destination);audioContextRef.current=context;analyserRef.current=analyser;sourceRef.current=source;analyserDataRef.current=new Uint8Array(analyser.fftSize);sourceCreatedRef.current=true;}catch{/*\n             * Normal audio playback fallback.\n             */}},[canPlayAudio]);/* -----------------------------------------------------------------------\n       PLAY AUDIO\n       ----------------------------------------------------------------------- */const playAudio=useCallback((restart=false)=>{if(!canPlayAudio)return;const audioElement=audioRef.current;if(!audioElement||!audioFile){return;}if(restart||restartOnTrigger){try{audioElement.currentTime=0;}catch{/* Ignore unsupported currentTime updates. */}}audioElement.volume=mute?0:clamp(volume/100,0,1);try{const result=audioElement.play();if(result&&typeof result.then===\"function\"){result.then(()=>{updatePlayingState(true);setupAudio();const context=audioContextRef.current;if(context&&context.state===\"suspended\"){context.resume().catch(()=>{});}}).catch(()=>{updatePlayingState(false);});}else{updatePlayingState(true);setupAudio();}}catch{updatePlayingState(false);}},[canPlayAudio,audioFile,restartOnTrigger,mute,volume,setupAudio,updatePlayingState]);/* -----------------------------------------------------------------------\n       PAUSE AUDIO\n       ----------------------------------------------------------------------- */const pauseAudio=useCallback(()=>{const audioElement=audioRef.current;if(!audioElement)return;audioElement.pause();updatePlayingState(false);},[updatePlayingState]);/* -----------------------------------------------------------------------\n       TOGGLE AUDIO\n       ----------------------------------------------------------------------- */const togglePlayback=useCallback(()=>{if(!canPlayAudio)return;const audioElement=audioRef.current;if(!audioElement||!audioFile){return;}if(audioElement.paused){playAudio(false);}else{pauseAudio();}},[canPlayAudio,audioFile,playAudio,pauseAudio]);/* -----------------------------------------------------------------------\n       AUDIO PROPERTIES\n       ----------------------------------------------------------------------- */useEffect(()=>{const audioElement=audioRef.current;if(!audioElement)return;audioElement.loop=loop;audioElement.muted=mute;audioElement.volume=mute?0:clamp(volume/100,0,1);},[loop,mute,volume]);/* -----------------------------------------------------------------------\n       CANVAS / STATIC RENDERER SAFETY\n       ----------------------------------------------------------------------- */useEffect(()=>{if(canRunDynamicEffects)return;const audioElement=audioRef.current;if(audioElement){audioElement.pause();}updatePlayingState(false);if(animationFrameRef.current!==null){cancelAnimationFrame(animationFrameRef.current);animationFrameRef.current=null;}observerRef.current?.disconnect();observerRef.current=null;},[canRunDynamicEffects,updatePlayingState]);/* -----------------------------------------------------------------------\n       AUDIO EVENTS\n       ----------------------------------------------------------------------- */useEffect(()=>{const audioElement=audioRef.current;if(!audioElement)return;const handlePlay=()=>{if(!canPlayAudio){audioElement.pause();updatePlayingState(false);return;}updatePlayingState(true);};const handlePause=()=>{updatePlayingState(false);};const handleEnded=()=>{if(!audioElement.loop){updatePlayingState(false);}};audioElement.addEventListener(\"play\",handlePlay);audioElement.addEventListener(\"pause\",handlePause);audioElement.addEventListener(\"ended\",handleEnded);return()=>{audioElement.removeEventListener(\"play\",handlePlay);audioElement.removeEventListener(\"pause\",handlePause);audioElement.removeEventListener(\"ended\",handleEnded);};},[canPlayAudio,updatePlayingState]);/* -----------------------------------------------------------------------\n       AUDIO FILE CHANGES\n       ----------------------------------------------------------------------- */useEffect(()=>{const audioElement=audioRef.current;if(!audioElement)return;const nextFile=audioFile||\"\";if(currentAudioFileRef.current===nextFile){return;}currentAudioFileRef.current=nextFile;audioElement.pause();updatePlayingState(false);amplitudeRef.current=0;targetAmplitudeRef.current=0;sourceCreatedRef.current=false;analyserDataRef.current=null;if(audioContextRef.current){audioContextRef.current.close().catch(()=>{});audioContextRef.current=null;analyserRef.current=null;sourceRef.current=null;}audioElement.load();},[audioFile,updatePlayingState]);/* -----------------------------------------------------------------------\n       INITIAL AUTOPLAY\n       ----------------------------------------------------------------------- */useEffect(()=>{if(!canRunDynamicEffects)return;if(triggerInitializedRef.current){return;}triggerInitializedRef.current=true;mountedRef.current=true;if(!audioFile)return;if(playTrigger!==\"autoplay\"&&!autoPlay){return;}const timer=window.setTimeout(()=>{if(mountedRef.current&&canPlayAudio){playAudio(false);}},0);return()=>{window.clearTimeout(timer);};},[canRunDynamicEffects,canPlayAudio,audioFile,playTrigger,autoPlay,playAudio]);/* -----------------------------------------------------------------------\n       IN VIEW TRIGGER\n       ----------------------------------------------------------------------- */useEffect(()=>{if(!canRunDynamicEffects)return;const element=rootRef.current;if(!element)return;const needsObserver=playTrigger===\"inView\"||stopTrigger===\"outOfView\";if(!needsObserver){observerRef.current?.disconnect();observerRef.current=null;return;}observerRef.current?.disconnect();wasInViewRef.current=false;const observer=new IntersectionObserver(entries=>{const entry=entries[0];if(!entry)return;const visible=entry.isIntersecting;if(visible){const enteredView=!wasInViewRef.current;wasInViewRef.current=true;if(enteredView&&playTrigger===\"inView\"){playAudio(restartOnTrigger);}}else{const leftView=wasInViewRef.current;wasInViewRef.current=false;if(leftView&&stopTrigger===\"outOfView\"){pauseAudio();}}},{threshold:.15});observer.observe(element);observerRef.current=observer;return()=>{observer.disconnect();if(observerRef.current===observer){observerRef.current=null;}};},[canRunDynamicEffects,playTrigger,stopTrigger,restartOnTrigger,playAudio,pauseAudio]);/* -----------------------------------------------------------------------\n       HOVER\n       ----------------------------------------------------------------------- */const handleMouseEnter=useCallback(()=>{if(!canPlayAudio)return;if(playTrigger===\"hover\"){playAudio(restartOnTrigger);}},[canPlayAudio,playTrigger,restartOnTrigger,playAudio]);const handleMouseLeave=useCallback(()=>{if(!canPlayAudio)return;if(stopTrigger===\"hoverEnd\"){pauseAudio();}},[canPlayAudio,stopTrigger,pauseAudio]);/* -----------------------------------------------------------------------\n       TAP\n       ----------------------------------------------------------------------- */const handleTap=useCallback(()=>{if(!canPlayAudio)return;if(playTrigger===\"tap\"){togglePlayback();}},[canPlayAudio,playTrigger,togglePlayback]);/* -----------------------------------------------------------------------\n       PLAY BUTTON\n       ----------------------------------------------------------------------- */const handlePlayButton=useCallback(event=>{event.stopPropagation();if(!canPlayAudio)return;togglePlayback();},[canPlayAudio,togglePlayback]);/* -----------------------------------------------------------------------\n       AUDIO ANALYSIS\n       ----------------------------------------------------------------------- */const readAudioAmplitude=useCallback(()=>{const analyser=analyserRef.current;if(!analyser||!isPlayingRef.current||!canPlayAudio){return 0;}let data=analyserDataRef.current;if(!data||data.length!==analyser.fftSize){data=new Uint8Array(analyser.fftSize);analyserDataRef.current=data;}analyser.getByteTimeDomainData(data);let sum=0;for(let i=0;i<data.length;i++){const normalized=(data[i]-128)/128;sum+=normalized*normalized;}const rms=Math.sqrt(sum/data.length);return clamp(rms*sensitivity*4,0,1);},[sensitivity,canPlayAudio]);/* -----------------------------------------------------------------------\n       CANVAS\n       ----------------------------------------------------------------------- */useEffect(()=>{/*\n         * IMPORTANT:\n         * Static renderer and Framer canvas still need to draw the visual.\n         *\n         * They simply draw one deterministic frame instead of creating\n         * a continuous animation loop.\n         */const canvas=canvasRef.current;if(!canvas)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;let width=1;let height=1;let dpr=1;/* -------------------------------------------------------------------\n           RESIZE\n           ------------------------------------------------------------------- */const resize=()=>{const rect=canvas.getBoundingClientRect();width=Math.max(rect.width,1);height=Math.max(rect.height,1);dpr=Math.min(window.devicePixelRatio||1,2);canvas.width=Math.round(width*dpr);canvas.height=Math.round(height*dpr);ctx.setTransform(dpr,0,0,dpr,0,0);};/* -------------------------------------------------------------------\n           DRAW\n           ------------------------------------------------------------------- */const draw=()=>{/*\n             * Dynamic mode uses the live animation time.\n             *\n             * Static/canvas mode intentionally uses time = 0 so the preview\n             * remains deterministic and does not animate.\n             */const currentTime=canRunDynamicEffects?timeRef.current:0;/*\n             * Static/canvas mode must never use live audio amplitude.\n             */const currentAmplitude=canRunDynamicEffects?amplitudeRef.current:0;const audioAmount=currentAmplitude*audioInfluence;/* ---------------------------------------------------------------\n               CLEAR\n               --------------------------------------------------------------- */ctx.clearRect(0,0,width,height);/*\n             * Existing background color remains the base layer.\n             */ctx.fillStyle=backgroundColor;ctx.fillRect(0,0,width,height);/* ---------------------------------------------------------------\n               BACKGROUND IMAGE\n               --------------------------------------------------------------- */const backgroundImageElement=backgroundImageRef.current;if(backgroundImageElement&&backgroundImageElement.complete&&backgroundImageElement.naturalWidth>0&&backgroundImageElement.naturalHeight>0){const imageWidth=backgroundImageElement.naturalWidth;const imageHeight=backgroundImageElement.naturalHeight;/*\n                 * Cover behavior:\n                 * The image fills the entire component while preserving\n                 * its original aspect ratio.\n                 */const imageScale=Math.max(width/imageWidth,height/imageHeight);const renderedWidth=imageWidth*imageScale;const renderedHeight=imageHeight*imageScale;const imageX=(width-renderedWidth)/2;const imageY=(height-renderedHeight)/2;ctx.drawImage(backgroundImageElement,imageX,imageY,renderedWidth,renderedHeight);}/* ---------------------------------------------------------------\n               METRICS\n               --------------------------------------------------------------- */const minDimension=Math.min(width,height);const aspectRatio=width/Math.max(height,1);const sizeScale=clamp(minDimension/500,.55,1.8);const widthCompression=clamp(Math.sqrt(1/Math.max(aspectRatio,.35)),.7,1.15);const heightExpansion=clamp(Math.sqrt(height/Math.max(width,1)),.8,1.25);const visualScale=responsive?clamp(sizeScale*widthCompression*1.05,.5,1.8):1;/* ---------------------------------------------------------------\n               HORIZON\n               --------------------------------------------------------------- */const responsiveHorizon=responsive?clamp(horizon*(.92+heightExpansion*.08),.05,.72):horizon;const horizonY=height*responsiveHorizon;/* ---------------------------------------------------------------\n               AMPLITUDE\n               --------------------------------------------------------------- */const baseAmplitude=minDimension*.075*(amplitude/50)*visualScale;const safeBaseAmplitude=responsive?clamp(baseAmplitude,2,Math.max(height*.3,2)):baseAmplitude;/* ---------------------------------------------------------------\n               WAVE COUNT\n               --------------------------------------------------------------- */const densityScale=responsive?clamp(minDimension/500,.6,1.55):1;const waveTotal=Math.max(2,Math.round(waveCount*densityScale));/* ---------------------------------------------------------------\n               DEPTH\n               --------------------------------------------------------------- */const responsiveDepth=responsive?clamp(depth*heightExpansion,.15,2.4):depth;const planeDepth=responsive?clamp(height*.55*responsiveDepth,height*.25,height*1.15):height*.55*responsiveDepth;/* ---------------------------------------------------------------\n               STROKE\n               --------------------------------------------------------------- */const responsiveStroke=responsive?clamp(strokeWidth*clamp(minDimension/500,.7,1.25),.25,5):strokeWidth;/* ---------------------------------------------------------------\n               PERSPECTIVE\n               --------------------------------------------------------------- */const perspectiveAmount=clamp(perspective/100,0,1);/* ---------------------------------------------------------------\n               SPACING\n               --------------------------------------------------------------- */const responsiveSpacing=responsive?spacing*clamp(minDimension/500,.65,1.35):spacing;const totalSpacing=Math.max(responsiveSpacing,planeDepth/Math.max(waveTotal-1,1));const spacingDepth=Math.min(planeDepth,totalSpacing*Math.max(waveTotal-1,1));/* ---------------------------------------------------------------\n               RESOLUTION\n               --------------------------------------------------------------- */const resolution=responsive?clamp(Math.floor(width/3),80,520):Math.max(100,Math.floor(width/3));const tiltScale=responsive?clamp(minDimension/500,.65,1.35):1;/* ---------------------------------------------------------------\n               WAVE PLANE\n               --------------------------------------------------------------- */for(let row=waveTotal-1;row>=0;row--){const normalizedRow=row/Math.max(waveTotal-1,1);const perspectiveCurve=Math.pow(normalizedRow,1.15+perspectiveAmount*1.8);const perspectiveScale=.18+perspectiveCurve*(.65+perspectiveAmount*.65);const rowY=horizonY+Math.min(normalizedRow*spacingDepth,planeDepth);const rowAmplitude=safeBaseAmplitude*perspectiveScale*(1+audioAmount);const rowFrequency=frequency*(.72+perspectiveScale*.38);const rowPhase=phase+currentTime*movement+normalizedRow*2.4;/* -----------------------------------------------------------\n                   PATH\n                   ----------------------------------------------------------- */ctx.beginPath();for(let x=0;x<=resolution;x++){const progress=x/resolution;const px=progress*width;const sine=Math.sin(progress*Math.PI*2*rowFrequency+rowPhase);const harmonic=Math.sin(progress*Math.PI*4*rowFrequency+rowPhase*.72)*.18;const audioDistortion=Math.sin(progress*Math.PI*7+currentTime*1.8)*audioAmount*distortion*.18;const waveValue=sine+harmonic+audioDistortion;const tiltOffset=(progress-.5)*tilt*height*.12*perspectiveScale*tiltScale;const py=rowY+waveValue*rowAmplitude+tiltOffset;if(x===0){ctx.moveTo(px,py);}else{ctx.lineTo(px,py);}}/* -----------------------------------------------------------\n                   OPACITY\n                   ----------------------------------------------------------- */const rowOpacity=opacity*(.22+Math.pow(normalizedRow,1.15)*.78);ctx.globalAlpha=clamp(rowOpacity,0,1);ctx.strokeStyle=waveColor;ctx.lineWidth=responsiveStroke;/* -----------------------------------------------------------\n                   GLOW\n                   ----------------------------------------------------------- */if(glow>0){ctx.shadowColor=waveColor;ctx.shadowBlur=glow*10*(responsive?clamp(minDimension/500,.7,1.2):1);}else{ctx.shadowBlur=0;}ctx.stroke();ctx.shadowBlur=0;}ctx.globalAlpha=1;};/* -------------------------------------------------------------------\n           INITIAL STATIC FRAME / DYNAMIC START\n           ------------------------------------------------------------------- */resize();if(!canRunDynamicEffects){/*\n             * Static renderer / Framer canvas:\n             * draw exactly one frame.\n             */timeRef.current=0;amplitudeRef.current=0;targetAmplitudeRef.current=0;draw();}else{/* ---------------------------------------------------------------\n               DYNAMIC DRAW LOOP\n               --------------------------------------------------------------- */const animate=()=>{if(!canRunDynamicEffects){animationFrameRef.current=null;return;}timeRef.current+=.016*speed;/* -----------------------------------------------------------\n                   AUDIO\n                   ----------------------------------------------------------- */if(isPlayingRef.current&&analyserRef.current&&canPlayAudio){targetAmplitudeRef.current=readAudioAmplitude();}else{targetAmplitudeRef.current=0;}amplitudeRef.current=lerp(amplitudeRef.current,targetAmplitudeRef.current,.075);draw();animationFrameRef.current=requestAnimationFrame(animate);};animationFrameRef.current=requestAnimationFrame(animate);}/* -------------------------------------------------------------------\n           RESIZE\n           ------------------------------------------------------------------- */const resizeObserver=new ResizeObserver(()=>{resize();/*\n             * Static renderer has no animation loop, so resizing must\n             * explicitly redraw the visual.\n             */if(!canRunDynamicEffects){draw();}});resizeObserver.observe(canvas);return()=>{resizeObserver.disconnect();if(animationFrameRef.current!==null){cancelAnimationFrame(animationFrameRef.current);animationFrameRef.current=null;}};},[canRunDynamicEffects,canPlayAudio,waveColor,backgroundColor,backgroundImage,waveCount,amplitude,frequency,spacing,phase,perspective,depth,tilt,horizon,sensitivity,audioInfluence,speed,movement,distortion,strokeWidth,opacity,glow,responsive,readAudioAmplitude]);/* -----------------------------------------------------------------------\n       CLEANUP\n       ----------------------------------------------------------------------- */useEffect(()=>{mountedRef.current=true;return()=>{mountedRef.current=false;if(animationFrameRef.current!==null){cancelAnimationFrame(animationFrameRef.current);animationFrameRef.current=null;}observerRef.current?.disconnect();observerRef.current=null;if(audioRef.current){audioRef.current.pause();}if(audioContextRef.current){audioContextRef.current.close().catch(()=>{});audioContextRef.current=null;}analyserRef.current=null;sourceRef.current=null;analyserDataRef.current=null;sourceCreatedRef.current=false;};},[]);/* -----------------------------------------------------------------------\n       SCRIM\n       ----------------------------------------------------------------------- */const scrimOpacityValue=clamp(scrimOpacity,0,1);const scrimGradient=`linear-gradient(\n        ${scrimDirection}deg,\n        ${scrimColor} 0%,\n        rgba(0,0,0,0) 100%\n    )`;/* -----------------------------------------------------------------------\n       RENDER\n       ----------------------------------------------------------------------- */return /*#__PURE__*/_jsxs(\"div\",{ref:rootRef,style:{width:\"100%\",height:\"100%\",minWidth:0,minHeight:0,position:\"relative\",overflow:\"hidden\",background:backgroundColor,cursor:playTrigger===\"tap\"||playTrigger===\"hover\"?\"pointer\":\"default\"},onMouseEnter:handleMouseEnter,onMouseLeave:handleMouseLeave,onClick:playTrigger===\"tap\"?handleTap:undefined,\"aria-label\":\"Sound wave visualization\",children:[/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,\"aria-hidden\":\"true\",role:\"presentation\",style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",maxWidth:\"100%\",maxHeight:\"100%\",display:\"block\",zIndex:0,pointerEvents:\"none\"}}),showScrim&&backgroundImage&&/*#__PURE__*/_jsx(\"div\",{\"aria-hidden\":\"true\",style:{position:\"absolute\",inset:0,background:scrimGradient,opacity:scrimOpacityValue,pointerEvents:\"none\",zIndex:1}}),/*#__PURE__*/_jsx(\"audio\",{ref:audioRef,src:audioFile||undefined,loop:loop,muted:mute,preload:\"auto\",crossOrigin:\"anonymous\",\"aria-hidden\":\"true\",style:{display:\"none\"}}),showPlayButton&&audioFile&&/*#__PURE__*/_jsx(\"button\",{type:\"button\",\"aria-label\":isPlaying?\"Pause audio\":\"Play audio\",\"aria-pressed\":isPlaying,onClick:handlePlayButton,disabled:!canPlayAudio,style:{position:\"absolute\",left:\"50%\",top:\"50%\",transform:\"translate(-50%, -50%)\",width:48,height:48,padding:0,border:\"1px solid rgba(255,255,255,0.18)\",borderRadius:\"50%\",background:\"rgba(255,255,255,0.08)\",backdropFilter:\"blur(10px)\",WebkitBackdropFilter:\"blur(10px)\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",cursor:canPlayAudio?\"pointer\":\"default\",opacity:canPlayAudio?1:.65,zIndex:10},children:isPlaying?/*#__PURE__*/_jsxs(\"div\",{\"aria-hidden\":\"true\",style:{display:\"flex\",gap:4},children:[/*#__PURE__*/_jsx(\"span\",{style:{width:3,height:14,borderRadius:2,background:waveColor}}),/*#__PURE__*/_jsx(\"span\",{style:{width:3,height:14,borderRadius:2,background:waveColor}})]}):/*#__PURE__*/_jsx(\"div\",{\"aria-hidden\":\"true\",style:{width:0,height:0,marginLeft:3,borderTop:\"7px solid transparent\",borderBottom:\"7px solid transparent\",borderLeft:`10px solid ${waveColor}`}})})]});}/* ==========================================================================\n   DEFAULT PROPERTIES\n   ========================================================================== */SoundWave.defaultProps={audio:DEFAULT_AUDIO,wave:DEFAULT_WAVE,perspectiveSettings:DEFAULT_PERSPECTIVE,animation:DEFAULT_ANIMATION,appearance:DEFAULT_APPEARANCE,playback:DEFAULT_PLAYBACK,responsiveSettings:DEFAULT_RESPONSIVE,/*\n     * Legacy defaults retained for\n     * backwards compatibility.\n     */audioFile:\"\",waveColor:\"#FFFFFF\",backgroundColor:\"#080808\",backgroundImage:\"\",showScrim:false,scrimColor:\"#000000\",scrimOpacity:.5,scrimDirection:180,waveCount:18,amplitude:50,frequency:1.35,spacing:24,phase:0,perspective:65,depth:1,tilt:0,horizon:.28,sensitivity:1.5,audioInfluence:1,volume:100,speed:1,movement:.9,distortion:1,strokeWidth:1,opacity:.72,glow:0,showPlayButton:true,autoPlay:false,loop:true,mute:false,playTrigger:\"playButton\",stopTrigger:\"none\",restartOnTrigger:false,responsive:true};/* ==========================================================================\n   PROPERTY CONTROLS\n   ========================================================================== */addPropertyControls(SoundWave,{/* ======================================================================\n       AUDIO\n       ====================================================================== */audio:{type:ControlType.Object,title:\"Audio\",buttonTitle:\"Audio\",icon:\"sound\",controls:{audioFile:{type:ControlType.File,title:\"Audio File\",allowedFileTypes:[\"mp3\",\"wav\",\"m4a\",\"ogg\"]},sensitivity:{type:ControlType.Number,title:\"Sensitivity\",min:0,max:5,step:.05,defaultValue:1.5,displayStepper:true},audioInfluence:{type:ControlType.Number,title:\"Wave Influence\",min:0,max:3,step:.05,defaultValue:1,displayStepper:true},volume:{type:ControlType.Number,title:\"Volume\",min:0,max:100,step:1,defaultValue:100,displayStepper:true,unit:\"%\"}}},/* ======================================================================\n       WAVE\n       ====================================================================== */wave:{type:ControlType.Object,title:\"Wave\",buttonTitle:\"Wave\",icon:\"object\",controls:{waveCount:{type:ControlType.Number,title:\"Count\",min:4,max:50,step:1,defaultValue:18,displayStepper:true},amplitude:{type:ControlType.Number,title:\"Amplitude\",min:5,max:100,step:1,defaultValue:50,displayStepper:true},frequency:{type:ControlType.Number,title:\"Frequency\",min:.25,max:5,step:.05,defaultValue:1.35,displayStepper:true},spacing:{type:ControlType.Number,title:\"Spacing\",min:5,max:100,step:1,defaultValue:24,displayStepper:true,unit:\"px\"},phase:{type:ControlType.Number,title:\"Phase\",min:-10,max:10,step:.05,defaultValue:0,displayStepper:true}}},/* ======================================================================\n       PERSPECTIVE\n       ====================================================================== */perspectiveSettings:{type:ControlType.Object,title:\"Perspective\",buttonTitle:\"Perspective\",icon:\"object\",controls:{perspective:{type:ControlType.Number,title:\"Perspective\",min:0,max:100,step:1,defaultValue:65,displayStepper:true,unit:\"%\"},depth:{type:ControlType.Number,title:\"Depth\",min:.2,max:2,step:.05,defaultValue:1,displayStepper:true},tilt:{type:ControlType.Number,title:\"Tilt\",min:-2,max:2,step:.05,defaultValue:0,displayStepper:true},horizon:{type:ControlType.Number,title:\"Horizon\",min:0,max:.7,step:.01,defaultValue:.28,displayStepper:true}}},/* ======================================================================\n       ANIMATION\n       ====================================================================== */animation:{type:ControlType.Object,title:\"Animation\",buttonTitle:\"Animation\",icon:\"interact\",controls:{speed:{type:ControlType.Number,title:\"Speed\",min:0,max:4,step:.05,defaultValue:1,displayStepper:true},movement:{type:ControlType.Number,title:\"Movement\",min:0,max:3,step:.05,defaultValue:.9,displayStepper:true},distortion:{type:ControlType.Number,title:\"Distortion\",min:0,max:3,step:.05,defaultValue:1,displayStepper:true}}},/* ======================================================================\n       APPEARANCE\n       ========================================================================== */appearance:{type:ControlType.Object,title:\"Appearance\",buttonTitle:\"Appearance\",icon:\"color\",controls:{waveColor:{type:ControlType.Color,title:\"Wave\",defaultValue:\"#FFFFFF\"},backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"#080808\"},backgroundImage:{type:ControlType.File,title:\"Background Image\",allowedFileTypes:[\"jpg\",\"jpeg\",\"png\",\"webp\",\"gif\"]},showScrim:{type:ControlType.Boolean,title:\"Show Scrim\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},scrimColor:{type:ControlType.Color,title:\"Scrim Color\",defaultValue:\"#000000\",hidden:props=>!props.showScrim},scrimOpacity:{type:ControlType.Number,title:\"Scrim Opacity\",min:0,max:1,step:.01,defaultValue:.5,displayStepper:true,unit:\"%\",hidden:props=>!props.showScrim},scrimDirection:{type:ControlType.Number,title:\"Scrim Direction\",min:0,max:360,step:1,defaultValue:180,displayStepper:true,unit:\"\\xb0\",hidden:props=>!props.showScrim},strokeWidth:{type:ControlType.Number,title:\"Stroke Width\",min:.25,max:5,step:.25,defaultValue:1,displayStepper:true,unit:\"px\"},opacity:{type:ControlType.Number,title:\"Opacity\",min:0,max:1,step:.01,defaultValue:.72,displayStepper:true},glow:{type:ControlType.Number,title:\"Glow\",min:0,max:10,step:.25,defaultValue:0,displayStepper:true}}},/* ======================================================================\n       PLAYBACK\n       ====================================================================== */playback:{type:ControlType.Object,title:\"Playback\",buttonTitle:\"Playback\",icon:\"interact\",controls:{playTrigger:{type:ControlType.Enum,title:\"Play Trigger\",options:[\"playButton\",\"autoplay\",\"inView\",\"hover\",\"tap\"],optionTitles:[\"Play Button\",\"Autoplay\",\"In View\",\"Hover\",\"Tap\"],defaultValue:\"playButton\"},stopTrigger:{type:ControlType.Enum,title:\"Stop Trigger\",options:[\"none\",\"outOfView\",\"hoverEnd\"],optionTitles:[\"None\",\"Out of View\",\"Hover End\"],defaultValue:\"none\"},restartOnTrigger:{type:ControlType.Boolean,title:\"Restart on Trigger\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"},showPlayButton:{type:ControlType.Boolean,title:\"Show Play Button\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},autoPlay:{type:ControlType.Boolean,title:\"Autoplay\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},loop:{type:ControlType.Boolean,title:\"Loop\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},mute:{type:ControlType.Boolean,title:\"Mute\",defaultValue:false,enabledTitle:\"Muted\",disabledTitle:\"Sound\"}}},/* ======================================================================\n       RESPONSIVE\n       ====================================================================== */responsiveSettings:{type:ControlType.Object,title:\"Responsive\",buttonTitle:\"Responsive\",icon:\"object\",controls:{responsive:{type:ControlType.Boolean,title:\"Responsive Scaling\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SoundWave\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"800\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"1200\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Soundwave.map"],"mappings":"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"}