{"version":3,"file":"AudioUploader.CSWRahRf.mjs","names":["useState","useRef"],"sources":["https:/framerusercontent.com/modules/QQD68UvOHATZMq8PGQLN/xVC9bOpMKtUd7HCZOIn0/AudioUploader.js"],"sourcesContent":["// Audio player component with file upload and customizable play/pause button\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useState,useRef,useEffect,startTransition}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function AudioUploader(props){const{audioFile=\"https://framerusercontent.com/assets/8w3IUatLX9a5JVJ6XPCVuHi94.mp3\",playIcon={src:\"https://framerusercontent.com/images/GfGkADagM4KEibNcIiRUWlfrR0.jpg\",alt:\"Play\"},pauseIcon={src:\"https://framerusercontent.com/images/aNsAT3jCvt4zglbWCUoFe33Q.jpg\",alt:\"Pause\"},showButton,buttonSize,buttonColor,borderRadius,borderStroke,borderWidth,enableFade,fadeDuration,waveformColor,waveformHeight,waveformBars,strokeWidth,strokeLinecap,strokeSpacing}=props;const[isPlaying,setIsPlaying]=useState(false);const[waveformData,setWaveformData]=useState([]);const audioRef=useRef(null);const audioContextRef=useRef(null);const analyserRef=useRef(null);const animationFrameRef=useRef(null);// Initialize waveform with flat line\nuseEffect(()=>{setWaveformData(new Array(waveformBars).fill(.1));},[waveformBars]);useEffect(()=>{const audio=audioRef.current;if(!audio)return;const handleEnded=()=>{startTransition(()=>{setIsPlaying(false);});};audio.addEventListener(\"ended\",handleEnded);return()=>{audio.removeEventListener(\"ended\",handleEnded);};},[audioFile]);// Setup audio analysis\nuseEffect(()=>{if(typeof window===\"undefined\")return;const setupAudioContext=async()=>{const audio=audioRef.current;if(!audio)return;try{const audioContext=new(window.AudioContext||window.webkitAudioContext);const analyser=audioContext.createAnalyser();const source=audioContext.createMediaElementSource(audio);analyser.fftSize=512;analyser.smoothingTimeConstant=.6;source.connect(analyser);analyser.connect(audioContext.destination);audioContextRef.current=audioContext;analyserRef.current=analyser;}catch(error){console.warn(\"Audio analysis not supported:\",error);}};setupAudioContext();return()=>{if(audioContextRef.current){audioContextRef.current.close();}if(animationFrameRef.current){cancelAnimationFrame(animationFrameRef.current);}};},[audioFile]);// Animate waveform\nuseEffect(()=>{const updateWaveform=()=>{if(!analyserRef.current||!isPlaying){// Transition to flat line when paused\nsetWaveformData(prev=>prev.map(value=>Math.max(.1,value*.9)));if(isPlaying){animationFrameRef.current=requestAnimationFrame(updateWaveform);}return;}const bufferLength=analyserRef.current.frequencyBinCount;const dataArray=new Uint8Array(bufferLength);analyserRef.current.getByteFrequencyData(dataArray);// Focus on bass frequencies (lower 20% of spectrum)\nconst bassRange=Math.floor(bufferLength*.2);const newWaveformData=[];const step=Math.floor(bassRange/waveformBars);for(let i=0;i<waveformBars;i++){const index=Math.min(i*step,bassRange-1);// Amplify bass response with power curve\nconst rawValue=dataArray[index]/255;const amplified=Math.pow(rawValue,.7)*1.5;newWaveformData.push(Math.max(.05,Math.min(1,amplified)));}setWaveformData(newWaveformData);animationFrameRef.current=requestAnimationFrame(updateWaveform);};if(isPlaying){updateWaveform();}else{// Smooth transition to flat line\nconst flattenWaveform=()=>{setWaveformData(prev=>{const newData=prev.map(value=>Math.max(.1,value*.95));const isFlat=newData.every(v=>v<=.11);if(!isFlat&&!isPlaying){setTimeout(flattenWaveform,50);}return newData;});};flattenWaveform();}return()=>{if(animationFrameRef.current){cancelAnimationFrame(animationFrameRef.current);}};},[isPlaying,waveformBars]);const fadeIn=audio=>{if(!enableFade){audio.volume=1;return;}audio.volume=0;const fadeStep=1/(fadeDuration*10)// 10 steps per second\n;const fadeInterval=setInterval(()=>{if(audio.volume<1){audio.volume=Math.min(1,audio.volume+fadeStep);}else{clearInterval(fadeInterval);}},100);};const fadeOut=audio=>{if(!enableFade){audio.pause();return;}const fadeStep=1/(fadeDuration*10)// 10 steps per second\n;const fadeInterval=setInterval(()=>{if(audio.volume>0){audio.volume=Math.max(0,audio.volume-fadeStep);}else{audio.pause();clearInterval(fadeInterval);}},100);};const togglePlayPause=async()=>{const audio=audioRef.current;if(!audio)return;// Resume audio context if suspended\nif(audioContextRef.current&&audioContextRef.current.state===\"suspended\"){await audioContextRef.current.resume();}if(isPlaying){fadeOut(audio);}else{audio.play();fadeIn(audio);}startTransition(()=>{setIsPlaying(!isPlaying);});};// Calculate waveform width based on bars, stroke width, and spacing\nconst waveformWidth=waveformBars*strokeWidth+(waveformBars-1)*strokeSpacing;return /*#__PURE__*/_jsxs(\"div\",{style:{...props.style,position:\"relative\",borderRadius:12,padding:16,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",gap:16,minWidth:\"auto\"},children:[/*#__PURE__*/_jsx(\"audio\",{ref:audioRef,src:audioFile,preload:\"metadata\",crossOrigin:\"anonymous\"}),showButton&&/*#__PURE__*/_jsx(\"button\",{onClick:togglePlayPause,style:{width:buttonSize,height:buttonSize,borderRadius:borderRadius,border:`${borderWidth}px solid ${borderStroke}`,backgroundColor:buttonColor,cursor:\"pointer\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",padding:0,overflow:\"hidden\",transition:\"transform 0.1s ease\",flexShrink:0},onMouseDown:e=>{e.currentTarget.style.transform=\"scale(0.95)\";},onMouseUp:e=>{e.currentTarget.style.transform=\"scale(1)\";},onMouseLeave:e=>{e.currentTarget.style.transform=\"scale(1)\";},children:/*#__PURE__*/_jsx(\"img\",{src:isPlaying?pauseIcon.src:playIcon.src,alt:isPlaying?pauseIcon.alt:playIcon.alt,style:{width:\"70%\",height:\"70%\",objectFit:\"contain\"}})}),/*#__PURE__*/_jsx(\"svg\",{onClick:!showButton?togglePlayPause:undefined,width:waveformWidth,height:waveformHeight,style:{cursor:!showButton?\"pointer\":\"default\"},children:(()=>{// Symmetrical waveform bars from center\nconst bars=[];const N=waveformData.length;const center=Math.floor(N/2);const x=strokeWidth/2;for(let i=0;i<N;i++){// Create symmetrical pattern: left side mirrors right side\nlet amplitude;if(i<center){// Left side - use mirrored index from right side\nconst mirrorIndex=center+(center-1-i);amplitude=waveformData[Math.min(mirrorIndex,N-1)];}else{// Right side - use original data\namplitude=waveformData[i];}const barHeight=Math.max(2,amplitude*waveformHeight);const xPos=x+i*(strokeWidth+strokeSpacing);const centerY=waveformHeight/2;const y1=centerY-barHeight/2;const y2=centerY+barHeight/2;bars.push(/*#__PURE__*/_jsx(\"line\",{x1:xPos,y1:y1,x2:xPos,y2:y2,stroke:waveformColor,strokeWidth:strokeWidth,strokeLinecap:strokeLinecap,style:{transition:isPlaying?\"none\":\"y1 0.1s ease-out, y2 0.1s ease-out\"}},i));}return bars;})()})]});}addPropertyControls(AudioUploader,{audioFile:{type:ControlType.File,title:\"Audio File\",allowedFileTypes:[\"mp3\",\"wav\",\"ogg\",\"m4a\"]},showButton:{type:ControlType.Boolean,title:\"Show Button\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},playIcon:{type:ControlType.ResponsiveImage,title:\"Play Icon\",hidden:({showButton})=>!showButton},pauseIcon:{type:ControlType.ResponsiveImage,title:\"Pause Icon\",hidden:({showButton})=>!showButton},buttonSize:{type:ControlType.Number,title:\"Button Size\",defaultValue:48,min:24,max:80,step:4,unit:\"px\",hidden:({showButton})=>!showButton},buttonColor:{type:ControlType.Color,title:\"Button Color\",defaultValue:\"#000000\",hidden:({showButton})=>!showButton},borderRadius:{type:ControlType.Number,title:\"Corner Radius\",defaultValue:8,min:0,max:24,step:1,unit:\"px\",hidden:({showButton})=>!showButton},borderStroke:{type:ControlType.Color,title:\"Border Color\",defaultValue:\"rgba(255,255,255,0.2)\",hidden:({showButton})=>!showButton},borderWidth:{type:ControlType.Number,title:\"Border Width\",defaultValue:2,min:0,max:8,step:1,unit:\"px\",hidden:({showButton})=>!showButton},enableFade:{type:ControlType.Boolean,title:\"Fade Audio\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},fadeDuration:{type:ControlType.Number,title:\"Fade Duration\",defaultValue:1,min:.1,max:5,step:.1,unit:\"s\",hidden:({enableFade})=>!enableFade},waveformColor:{type:ControlType.Color,title:\"Waveform Color\",defaultValue:\"#6366f1\"},waveformHeight:{type:ControlType.Number,title:\"Waveform Height\",defaultValue:100,min:1,max:200,step:5,unit:\"px\"},waveformBars:{type:ControlType.Number,title:\"Waveform Bars\",defaultValue:60,min:10,max:100,step:1},strokeWidth:{type:ControlType.Number,title:\"Stroke Width\",defaultValue:2,min:.5,max:10,step:.5,unit:\"px\"},strokeLinecap:{type:ControlType.Enum,title:\"Stroke End\",options:[\"round\",\"square\"],optionTitles:[\"Round\",\"Square\"],defaultValue:\"round\",displaySegmentedControl:true},strokeSpacing:{type:ControlType.Number,title:\"Stroke Spacing\",defaultValue:1,min:0,max:50,step:.5,unit:\"px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"AudioUploader\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./AudioUploader.map"],"mappings":"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"}