ecplayer 1.0.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -418,7 +418,7 @@ function mr({
418
418
  mid: U.mid || 0,
419
419
  treble: U.treble || 0
420
420
  }), [ae, _e] = b(1), [N, Te] = b(0), [ce, Ne] = b(!1), [o, pe] = b({
421
- enable: q.dolby8d ? (a == null ? void 0 : a.enable) !== void 0 ? a.enable : !0 : !1,
421
+ enable: q.dolby8d && (a == null ? void 0 : a.enable) !== void 0 ? a.enable : !1,
422
422
  spatial: {
423
423
  rate: ((bt = a == null ? void 0 : a.spatial) == null ? void 0 : bt.rate) !== void 0 ? a.spatial.rate : 0.11,
424
424
  width: ((yt = a == null ? void 0 : a.spatial) == null ? void 0 : yt.width) !== void 0 ? a.spatial.width : 135,
@@ -74,7 +74,7 @@
74
74
  *
75
75
  * This source code is licensed under the ISC license.
76
76
  * See the LICENSE file in the root directory of this source tree.
77
- */const ar=fe("volume-x",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["line",{x1:"22",x2:"16",y1:"9",y2:"15",key:"1ewh16"}],["line",{x1:"16",x2:"22",y1:"9",y2:"15",key:"5ykzw1"}]]),ke={rainbow:{name:"Rainbow",bg:"linear-gradient(135deg, #ef444422 0%, #f9731622 15%, #f59e0b22 30%, #10b98122 45%, #06b6d422 60%, #3b82f622 75%, #6366f122 85%, #a855f722 92%, #ec489922 100%)",bars:["#ef4444","#f97316","#f59e0b","#eab308","#84cc16","#22c55e","#10b981","#06b6d4","#0ea5e9","#3b82f6","#6366f1","#8b5cf6","#a855f7","#d946ef","#ec4899","#f43f5e"],peak:"#a0a0a0ff",button:"#ec4899",buttonHover:"#d946ef",slider:"#ec4899"},ocean:{name:"Ocean Blue",bg:"linear-gradient(135deg, #667eea43 0%, #764ba243 100%)",bars:["#0ea5e9","#38bdf8","#06b6d4","#22d3ee"],peak:"#0369a1",button:"#0ea5e9",buttonHover:"#0284c7",slider:"#0ea5e9"},sunset:{name:"Sunset",bg:"linear-gradient(135deg, #f093fb43 0%, #f5576c43 100%)",bars:["#f43f5e","#fb7185","#fda4af","#fecdd3"],peak:"#be123c",button:"#f43f5e",buttonHover:"#e11d48",slider:"#f43f5e"},forest:{name:"Forest Green",bg:"linear-gradient(135deg, #0ba36043 0%, #3cba9243 100%)",bars:["#10b981","#34d399","#6ee7b7","#a7f3d0"],peak:"#047857",button:"#10b981",buttonHover:"#059669",slider:"#10b981"},midnight:{name:"Midnight",bg:"linear-gradient(135deg, #2c3e5043 0%, #3498db43 100%)",bars:["#3b82f6","#60a5fa","#93c5fd","#bfdbfe"],peak:"#1e40af",button:"#3b82f6",buttonHover:"#2563eb",slider:"#3b82f6"},neon:{name:"Neon Cyan",bg:"linear-gradient(135deg, #13547a43 0%, #80d0c743 100%)",bars:["#06b6d4","#22d3ee","#67e8f9","#a5f3fc"],peak:"#0e7490",button:"#06b6d4",buttonHover:"#0891b2",slider:"#06b6d4"},purple:{name:"Royal Purple",bg:"linear-gradient(135deg, #2f1c5622 0%, #764ba243 100%)",bars:["#8b5cf6","#a78bfa","#baabf9ff","#ddd6fe"],peak:"#6d28d9",button:"#8b5cf6",buttonHover:"#7c3aed",slider:"#8b5cf6"},amber:{name:"Amber Gold",bg:"linear-gradient(135deg, #f59e0b43 0%, #d9770643 100%)",bars:["#f59e0b","#fbbf24","#fcd34d","#fde68a"],peak:"#b45309",button:"#f59e0b",buttonHover:"#d97706",slider:"#f59e0b"},rose:{name:"Rose Pink",bg:"linear-gradient(135deg, #ec489943 0%, #be185d43 100%)",bars:["#ec4899","#f472b6","#f9a8d4","#fbcfe8"],peak:"#9f1239",button:"#ec4899",buttonHover:"#db2777",slider:"#ec4899"}};function pr({theme:l,setTheme:p,close:u}){const b=Object.keys(ke).map(x=>({key:x,name:ke[x].name,colors:ke[x].bars}));return e.jsxs("div",{className:"ecp-theme-selector-panel",children:[e.jsxs("div",{className:"ecp-theme-selector-header",children:[e.jsx("h2",{className:"ecp-theme-selector-title",children:"Choose Color Palette"}),e.jsx("button",{onClick:()=>u(),className:"ecp-theme-selector-close",children:"Close"})]}),e.jsx("div",{className:"ecp-theme-grid",children:b.map(x=>e.jsxs("div",{className:`ecp-theme-card${l===x.key?" ecp-theme-card--active":""}`,onClick:()=>p(x.key),children:[e.jsx("div",{className:"ecp-theme-color-preview",style:{background:`linear-gradient(to right, ${x.colors.join(", ")})`}}),e.jsx("div",{className:"ecp-theme-name",children:x.name})]},x.key))})]})}const dr=(l,p)=>{const u=l.sampleRate,b=Math.max(1,Math.floor(u*Math.max(.1,p))),x=l.createBuffer(2,b,u),v=x.getChannelData(0),y=x.getChannelData(1),J=3/p;for(let E=0;E<b;E++){const F=E/u,G=Math.exp(-F*J);v[E]=(Math.random()*2-1)*G,y[E]=(Math.random()*2-1)*G}return x},ur=l=>{const p=Math.max(0,l),u=44100,b=new Float32Array(u),x=Math.PI/180;if(p===0)for(let v=0;v<u;++v)b[v]=v*2/u-1;else for(let v=0;v<u;++v){const y=v*2/u-1;b[v]=(3+p)*y*20*x/(Math.PI+p*Math.abs(y))}return b};function vr({audio:l,name:p="No track loaded",author:u,theme:b="rainbow",volume:x=100,thumbnail:v=null,controls:y={play:!0,pause:!0,stop:!0,seekbar:!0,volume:!0,loop:!0,trackName:!0,equalizer:!0,speed:!0,dolby8d:!1},mode:J="light",bands:E=null,transparent:F=!1,autoPlay:G=!1,equalizer:W={bass:0,mid:0,treble:0},dolby8d:n=null}){var $r,xr,Er,Cr,Tr,Sr,Pr,Ar,Mr,Fr,zr;const[_,z]=r.useState(!1),[B,V]=r.useState(0),[j,A]=r.useState(0),[S,Pe]=r.useState(x||100),[he,xe]=r.useState(!1),[H,Ae]=r.useState(!1),[ve,ge]=r.useState(!1),[be,U]=r.useState([]),[Z,Me]=r.useState(!1),[X,Ee]=r.useState({bass:W.bass||0,mid:W.mid||0,treble:W.treble||0}),[re,He]=r.useState(1),[k,Ce]=r.useState(0),[te,qe]=r.useState(!1),[o,le]=r.useState({enable:y.dolby8d?(n==null?void 0:n.enable)!==void 0?n.enable:!0:!1,spatial:{rate:(($r=n==null?void 0:n.spatial)==null?void 0:$r.rate)!==void 0?n.spatial.rate:.11,width:((xr=n==null?void 0:n.spatial)==null?void 0:xr.width)!==void 0?n.spatial.width:135,focus:((Er=n==null?void 0:n.spatial)==null?void 0:Er.focus)!==void 0?n.spatial.focus:65},reverb:{size:((Cr=n==null?void 0:n.reverb)==null?void 0:Cr.size)!==void 0?n.reverb.size:2.4,tone:((Tr=n==null?void 0:n.reverb)==null?void 0:Tr.tone)!==void 0?n.reverb.tone:62,mix:((Sr=n==null?void 0:n.reverb)==null?void 0:Sr.mix)!==void 0?n.reverb.mix:30},echo:{time:((Pr=n==null?void 0:n.echo)==null?void 0:Pr.time)!==void 0?n.echo.time:500,feedback:((Ar=n==null?void 0:n.echo)==null?void 0:Ar.feedback)!==void 0?n.echo.feedback:45,mix:((Mr=n==null?void 0:n.echo)==null?void 0:Mr.mix)!==void 0?n.echo.mix:5},tape:{speed:typeof(n==null?void 0:n.tape)=="number"?n.tape:((Fr=n==null?void 0:n.tape)==null?void 0:Fr.speed)!==void 0?n.tape.speed:1,drive:typeof(n==null?void 0:n.tape)=="object"&&((zr=n.tape)==null?void 0:zr.drive)!==void 0?n.tape.drive:0}});r.useEffect(()=>{var t,c,g,f,w,Y,se,R,ee,D,ce;n&&le({enable:n.enable!==void 0?n.enable:!0,spatial:{rate:((t=n.spatial)==null?void 0:t.rate)!==void 0?n.spatial.rate:.2,width:((c=n.spatial)==null?void 0:c.width)!==void 0?n.spatial.width:80,focus:((g=n.spatial)==null?void 0:g.focus)!==void 0?n.spatial.focus:20},reverb:{size:((f=n.reverb)==null?void 0:f.size)!==void 0?n.reverb.size:3,tone:((w=n.reverb)==null?void 0:w.tone)!==void 0?n.reverb.tone:40,mix:((Y=n.reverb)==null?void 0:Y.mix)!==void 0?n.reverb.mix:30},echo:{time:((se=n.echo)==null?void 0:se.time)!==void 0?n.echo.time:50,feedback:((R=n.echo)==null?void 0:R.feedback)!==void 0?n.echo.feedback:20,mix:((ee=n.echo)==null?void 0:ee.mix)!==void 0?n.echo.mix:10},tape:{speed:typeof n.tape=="number"?n.tape:((D=n.tape)==null?void 0:D.speed)!==void 0?n.tape.speed:1,drive:typeof n.tape=="object"&&((ce=n.tape)==null?void 0:ce.drive)!==void 0?n.tape.drive:0}})},[n]);const[oe,me]=r.useState("spatial"),C=r.useRef(o),I=r.useRef(re);r.useEffect(()=>{C.current=o},[o]),r.useEffect(()=>{I.current=re},[re]);const ae=()=>{if(d.current){const t=C.current.enable,c=t?C.current.tape.speed:1,f=!(t&&c!==1);"preservesPitch"in d.current&&(d.current.preservesPitch=f),"webkitPreservesPitch"in d.current&&(d.current.webkitPreservesPitch=f),"mozPreservesPitch"in d.current&&(d.current.mozPreservesPitch=f),d.current.playbackRate=I.current*c}},s=(t,c,g)=>{le(f=>({...f,enable:!0,[t]:{...f[t],[c]:g}}))},q=()=>{le(t=>({...t,enable:!t.enable}))},P=()=>{le({enable:!0,spatial:{rate:.11,width:135,focus:65},reverb:{size:2.4,tone:62,mix:30},echo:{time:500,feedback:45,mix:5},tape:{speed:1,drive:0}})},d=r.useRef(null),$=r.useRef(null),K=r.useRef(null),T=r.useRef(null),pe=r.useRef(null),Te=r.useRef(null),Ne=r.useRef(null),L=r.useRef(null),de=r.useRef(null),Ie=r.useRef(null),Oe=r.useRef(null),We=r.useRef(null),De=r.useRef(null),_e=r.useRef(null),Ue=r.useRef(null),Ge=r.useRef(null),nr=r.useRef(null),Ve=r.useRef(0),Fe=r.useRef(null),we=r.useRef(null),Q=r.useRef(null),ue=r.useRef(null),ze=r.useRef(0),Xe=r.useRef(null),Je=r.useRef(null);r.useEffect(()=>{const t=Je.current;if(!t)return;const c=new ResizeObserver(g=>{for(let f of g)Ce(f.contentRect.width)});return c.observe(t),()=>c.disconnect()},[]),r.useEffect(()=>{const t=[];if(l&&typeof l!="string"&&t.push(["TypeError","audio must be a string (URL or path)"]),p&&typeof p!="string"&&t.push(["TypeError","name must be a string"]),b&&typeof b!="string"&&typeof b!="object")t.push(["TypeError","theme must be a string or a valid theme object"]);else if(typeof b=="object"){const c=["name","bg","bars","peak","button","buttonHover","slider"];for(const g of c)g in b||t.push(["ThemeError",`theme object missing key: ${g}`])}(typeof x!="number"||x<0||x>100)&&t.push(["TypeError","volume must be a number between 0 and 100"]),typeof y!="object"||Array.isArray(y)?t.push(["TypeError","controls must be an object"]):["play","pause","stop","seekbar","volume","loop","trackName","equalizer"].forEach(g=>{y&&g in y&&typeof y[g]!="boolean"&&t.push(["TypeError",`controls.${g} must be a boolean`])}),E&&(Array.isArray(E)?E.length===0?t.push(["ValueError","bands array cannot be empty"]):E.forEach((c,g)=>{typeof c.freq!="number"&&t.push(["TypeError",`bands[${g}].freq must be a number`])}):t.push(["TypeError","bands must be an array"])),t.length>0?(U(t),console.group("%cVisualizePlayer: Prop validation failed","color:red"),t.forEach(c=>console.error(`${c[0]}: ${c[1]}`)),console.groupEnd()):U([])},[l,p,b,x,y,J,E]);const a=E||[{freq:0},{freq:10},{freq:20},{freq:25},{freq:31.5},{freq:40},{freq:50},{freq:63},{freq:80},{freq:100},{freq:125},{freq:160},{freq:200},{freq:250},{freq:315},{freq:400},{freq:500},{freq:630},{freq:800},{freq:1e3},{freq:1250},{freq:1600},{freq:2e3},{freq:2500},{freq:3150},{freq:4e3},{freq:5e3},{freq:6300},{freq:8e3},{freq:1e4},{freq:12500}],h=r.useRef(a.map(()=>0)),N=r.useRef(a.map(()=>0)),M=r.useRef(a.map(()=>0)),O=r.useRef(!1),ne=r.useRef(typeof b=="string"?b:"purple"),i=typeof b=="string"?ke[b]||ke.purple:typeof b=="object"?b:ke.purple,m=J==="dark",sr=typeof y=="object"&&Object.keys(y).length===0;r.useEffect(()=>{typeof b=="string"?ne.current=b:ne.current="purple",Be()},[b]),r.useEffect(()=>{d.current||(d.current=new Audio);const t=d.current,c=()=>{ve||V(t.currentTime)},g=()=>A(t.duration),f=()=>{H||(z(!1),Q.current&&cancelAnimationFrame(Q.current))},w=()=>{z(!0),ae()},Y=()=>z(!1);return t.addEventListener("timeupdate",c),t.addEventListener("loadedmetadata",g),t.addEventListener("ended",f),t.addEventListener("play",w),t.addEventListener("pause",Y),()=>{t.removeEventListener("timeupdate",c),t.removeEventListener("loadedmetadata",g),t.removeEventListener("ended",f),t.removeEventListener("play",w),t.removeEventListener("pause",Y)}},[ve,H]),r.useEffect(()=>()=>{ue.current&&clearInterval(ue.current),d.current&&(d.current.pause(),d.current.src="",d.current.load()),$.current&&$.current.close().catch(t=>console.warn("AudioContext cleanup error:",t)),Q.current&&cancelAnimationFrame(Q.current)},[]),r.useEffect(()=>{if(l){const t=_,c=S,g=H;if(Q.current&&(cancelAnimationFrame(Q.current),Q.current=null),T.current){try{T.current.disconnect()}catch{}T.current=null}if(K.current){try{K.current.disconnect()}catch{}K.current=null}if(pe.current){try{pe.current.disconnect()}catch{}pe.current=null}if(Te.current){try{Te.current.disconnect()}catch{}Te.current=null}if(Ne.current){try{Ne.current.disconnect()}catch{}Ne.current=null}$.current&&($.current.close().catch(D=>console.warn("AudioContext close error:",D)),$.current=null),d.current&&(d.current.pause(),d.current.src="",d.current.load()),d.current=new Audio;try{d.current.crossOrigin="anonymous"}catch{}d.current.src=l,d.current.preload="auto",d.current.muted=!1,d.current.volume=he?0:c/100,d.current.loop=g,d.current.load();const f=d.current,w=()=>{ve||V(f.currentTime)},Y=()=>A(f.duration),se=()=>{H||(z(!1),Q.current&&cancelAnimationFrame(Q.current))},R=()=>{z(!0),ae()},ee=()=>z(!1);f.addEventListener("timeupdate",w),f.addEventListener("loadedmetadata",Y),f.addEventListener("ended",se),f.addEventListener("play",R),f.addEventListener("pause",ee),V(0),z(!1),h.current=a.map(()=>0),N.current=a.map(()=>0),M.current=a.map(()=>0),Be(),t&&d.current.play().catch(D=>console.error("Play failed:",D))}},[l]),r.useEffect(()=>{d.current&&(d.current.volume=he?0:S/100)},[S,he]),r.useEffect(()=>{d.current&&(d.current.loop=H)},[H]),r.useEffect(()=>{ae()},[re,o.tape.speed,o.enable]),r.useEffect(()=>{$.current&&(pe.current&&(pe.current.gain.value=X.bass),Te.current&&(Te.current.gain.value=X.mid),Ne.current&&(Ne.current.gain.value=X.treble))},[X]),r.useEffect(()=>{if($.current){const t=o.enable;if(Ge.current&&(Ge.current.curve=ur(t?o.tape.drive:0)),Oe.current&&(Oe.current.frequency.value=o.reverb.tone/100*8e3+500),We.current&&(We.current.gain.value=t?o.reverb.mix/100:0),Ie.current&&$.current)try{Ie.current.buffer=dr($.current,o.reverb.size)}catch{}if(De.current&&(De.current.delayTime.value=Math.max(.01,o.echo.time/1e3)),_e.current&&(_e.current.gain.value=t?Math.min(.85,o.echo.feedback/100):0),Ue.current&&(Ue.current.gain.value=t?o.echo.mix/100:0),!t&&(de.current&&(de.current.pan.value=0),L.current&&$.current)){const c=$.current.currentTime;L.current.positionX?(L.current.positionX.setTargetAtTime(0,c,.01),L.current.positionY.setTargetAtTime(0,c,.01),L.current.positionZ.setTargetAtTime(-1.4,c,.01)):L.current.setPosition&&L.current.setPosition(0,0,-1.4)}}},[o]);const gr=()=>{if(!$.current||!O.current)return;const t=C.current;if(!t.enable)return;const c=performance.now(),g=ze.current?Math.min(.1,(c-ze.current)/1e3):.016;ze.current=c;const f=t.spatial.rate;Ve.current+=f*5*g;const w=Ve.current,se=2.3*(t.spatial.width/135),R=Math.sin(w)*se,ee=-Math.cos(w)*se,D=Math.sin(w*2)*.4,ce=$.current.currentTime;if(L.current&&(L.current.positionX?(L.current.positionX.setTargetAtTime(R,ce,.04),L.current.positionY.setTargetAtTime(D,ce,.04),L.current.positionZ.setTargetAtTime(ee,ce,.04)):L.current.setPosition&&L.current.setPosition(R,D,ee)),de.current){const ye=Math.sin(w)*(t.spatial.width/180),Se=(t.spatial.focus-50)/100,je=Math.max(-1,Math.min(1,ye+Se));de.current.pan.setTargetAtTime(je,ce,.04)}};r.useEffect(()=>{O.current=_,Q.current&&(cancelAnimationFrame(Q.current),Q.current=null),ue.current&&(clearInterval(ue.current),ue.current=null),_?($.current||Xr(),ze.current=performance.now(),ue.current=window.setInterval(gr,30),yr()):mr()},[_]);const Xr=()=>{if(!$.current&&d.current)try{const t=window.AudioContext||window.webkitAudioContext;if(t){const c=new t;$.current=c;const g=c.createBiquadFilter();g.type="lowshelf",g.frequency.value=320,g.gain.value=X.bass;const f=c.createBiquadFilter();f.type="peaking",f.frequency.value=1e3,f.Q.value=.5,f.gain.value=X.mid;const w=c.createBiquadFilter();w.type="highshelf",w.frequency.value=3200,w.gain.value=X.treble;const Y=c.createWaveShaper();Y.curve=ur(C.current.enable?C.current.tape.drive:0),ae();let se=null;try{const $e=c.createPanner();$e.panningModel="HRTF",$e.distanceModel="inverse",$e.refDistance=1.4,$e.rolloffFactor=.55,se=$e}catch{}let R=null;if(c.createStereoPanner){const $e=c.createStereoPanner();$e.pan.value=0,R=$e}const ee=c.createGain();ee.gain.value=1;const D=c.createConvolver();D.buffer=dr(c,C.current.reverb.size);const ce=c.createBiquadFilter();ce.type="lowpass",ce.frequency.value=C.current.reverb.tone/100*8e3+500;const ye=c.createGain();ye.gain.value=C.current.enable?C.current.reverb.mix/100:0;const Se=c.createDelay(2);Se.delayTime.value=C.current.echo.time/1e3;const je=c.createGain();je.gain.value=Math.min(.85,C.current.echo.feedback/100);const Re=c.createGain();Re.gain.value=C.current.enable?C.current.echo.mix/100:0,Se.connect(je),je.connect(Se);const Le=c.createAnalyser();Le.fftSize=8192,Le.smoothingTimeConstant=.7;const Lr=c.createMediaElementSource(d.current);Lr.connect(g),g.connect(f),f.connect(w),w.connect(Y);const er=se,Ye=R,cr=er||Ye||Y;er?(Y.connect(er),Ye&&er.connect(Ye)):Ye&&Y.connect(Ye),cr.connect(ee),ee.connect(Le),cr.connect(D),D.connect(ce),ce.connect(ye),ye.connect(Le),cr.connect(Se),Se.connect(Re),Re.connect(Le),Le.connect(c.destination),pe.current=g,Te.current=f,Ne.current=w,Ge.current=Y,L.current=se,de.current=R,nr.current=ee,Ie.current=D,Oe.current=ce,We.current=ye,De.current=Se,_e.current=je,Ue.current=Re,K.current=Le,T.current=Lr}}catch(t){console.error("Failed to setup audio context:",t)}},br=t=>{const c=$.current,g=K.current;if(!c||!g)return 0;const f=c.sampleRate/2,w=Math.round(t/f*g.frequencyBinCount);return Math.min(w,g.frequencyBinCount-1)},mr=()=>{if(O.current)return;h.current=h.current.map(f=>f*.7);const t=Date.now();N.current=N.current.map((f,w)=>t-M.current[w]>1500?f*.95:f),Be();const c=Math.max(...h.current),g=Math.max(...N.current);c>.01||g>.01?Q.current=requestAnimationFrame(mr):(O.current||(h.current=a.map(()=>0),N.current=a.map(()=>0),M.current=a.map(()=>0),Be()),Q.current&&cancelAnimationFrame(Q.current),Q.current=null)},yr=()=>{if(!K.current||!O.current)return;const t=C.current;if(t.enable&&$.current){gr();const f=Ve.current,w=t.spatial.width/135;if(Fe.current){const Y=85*(w>0?1:0),se=55*(w>0?1:0),R=Math.sin(f)*Y,ee=-Math.cos(f)*se;Fe.current.style.transform=`translate(${R}px, ${ee}px)`,we.current&&(we.current.setAttribute("x2",`${110+R}`),we.current.setAttribute("y2",`${75+ee}`))}}else if($.current){const f=$.current.currentTime;L.current&&(L.current.positionX?(L.current.positionX.setTargetAtTime(0,f,.04),L.current.positionY.setTargetAtTime(0,f,.04),L.current.positionZ.setTargetAtTime(-1.4,f,.04)):L.current.setPosition&&L.current.setPosition(0,0,-1.4)),de.current&&de.current.pan.setTargetAtTime(0,f,.04),Fe.current&&(Fe.current.style.transform="translate(0px, 0px)"),we.current&&(we.current.setAttribute("x2","110"),we.current.setAttribute("y2","20"))}const c=K.current.frequencyBinCount,g=new Uint8Array(c);K.current.getByteFrequencyData(g),a.forEach((f,w)=>{const Y=br(f.freq),se=w<a.length-1?br(a[w+1].freq):g.length;let R=0,ee=0;for(let ye=Y;ye<se;ye++)R+=g[ye],ee++;let D=ee>0?R/ee/255:0;D=Math.pow(D,.6),h.current[w]=h.current[w]*.8+D*.2;const ce=Date.now();h.current[w]>N.current[w]?(N.current[w]=h.current[w],M.current[w]=ce):ce-M.current[w]>1500&&(N.current[w]*=.95)}),Be(),Q.current=requestAnimationFrame(yr)},Be=()=>{if(!Xe.current)return;const t=ke[ne.current]||ke.rainbow;let c="";a.forEach((g,f)=>{const w=h.current[f]*100,Y=100-N.current[f]*100,se=Math.floor(f/a.length*t.bars.length),R=t.bars[Math.min(se,t.bars.length-1)];c+=`
77
+ */const ar=fe("volume-x",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["line",{x1:"22",x2:"16",y1:"9",y2:"15",key:"1ewh16"}],["line",{x1:"16",x2:"22",y1:"9",y2:"15",key:"5ykzw1"}]]),ke={rainbow:{name:"Rainbow",bg:"linear-gradient(135deg, #ef444422 0%, #f9731622 15%, #f59e0b22 30%, #10b98122 45%, #06b6d422 60%, #3b82f622 75%, #6366f122 85%, #a855f722 92%, #ec489922 100%)",bars:["#ef4444","#f97316","#f59e0b","#eab308","#84cc16","#22c55e","#10b981","#06b6d4","#0ea5e9","#3b82f6","#6366f1","#8b5cf6","#a855f7","#d946ef","#ec4899","#f43f5e"],peak:"#a0a0a0ff",button:"#ec4899",buttonHover:"#d946ef",slider:"#ec4899"},ocean:{name:"Ocean Blue",bg:"linear-gradient(135deg, #667eea43 0%, #764ba243 100%)",bars:["#0ea5e9","#38bdf8","#06b6d4","#22d3ee"],peak:"#0369a1",button:"#0ea5e9",buttonHover:"#0284c7",slider:"#0ea5e9"},sunset:{name:"Sunset",bg:"linear-gradient(135deg, #f093fb43 0%, #f5576c43 100%)",bars:["#f43f5e","#fb7185","#fda4af","#fecdd3"],peak:"#be123c",button:"#f43f5e",buttonHover:"#e11d48",slider:"#f43f5e"},forest:{name:"Forest Green",bg:"linear-gradient(135deg, #0ba36043 0%, #3cba9243 100%)",bars:["#10b981","#34d399","#6ee7b7","#a7f3d0"],peak:"#047857",button:"#10b981",buttonHover:"#059669",slider:"#10b981"},midnight:{name:"Midnight",bg:"linear-gradient(135deg, #2c3e5043 0%, #3498db43 100%)",bars:["#3b82f6","#60a5fa","#93c5fd","#bfdbfe"],peak:"#1e40af",button:"#3b82f6",buttonHover:"#2563eb",slider:"#3b82f6"},neon:{name:"Neon Cyan",bg:"linear-gradient(135deg, #13547a43 0%, #80d0c743 100%)",bars:["#06b6d4","#22d3ee","#67e8f9","#a5f3fc"],peak:"#0e7490",button:"#06b6d4",buttonHover:"#0891b2",slider:"#06b6d4"},purple:{name:"Royal Purple",bg:"linear-gradient(135deg, #2f1c5622 0%, #764ba243 100%)",bars:["#8b5cf6","#a78bfa","#baabf9ff","#ddd6fe"],peak:"#6d28d9",button:"#8b5cf6",buttonHover:"#7c3aed",slider:"#8b5cf6"},amber:{name:"Amber Gold",bg:"linear-gradient(135deg, #f59e0b43 0%, #d9770643 100%)",bars:["#f59e0b","#fbbf24","#fcd34d","#fde68a"],peak:"#b45309",button:"#f59e0b",buttonHover:"#d97706",slider:"#f59e0b"},rose:{name:"Rose Pink",bg:"linear-gradient(135deg, #ec489943 0%, #be185d43 100%)",bars:["#ec4899","#f472b6","#f9a8d4","#fbcfe8"],peak:"#9f1239",button:"#ec4899",buttonHover:"#db2777",slider:"#ec4899"}};function pr({theme:l,setTheme:p,close:u}){const b=Object.keys(ke).map(x=>({key:x,name:ke[x].name,colors:ke[x].bars}));return e.jsxs("div",{className:"ecp-theme-selector-panel",children:[e.jsxs("div",{className:"ecp-theme-selector-header",children:[e.jsx("h2",{className:"ecp-theme-selector-title",children:"Choose Color Palette"}),e.jsx("button",{onClick:()=>u(),className:"ecp-theme-selector-close",children:"Close"})]}),e.jsx("div",{className:"ecp-theme-grid",children:b.map(x=>e.jsxs("div",{className:`ecp-theme-card${l===x.key?" ecp-theme-card--active":""}`,onClick:()=>p(x.key),children:[e.jsx("div",{className:"ecp-theme-color-preview",style:{background:`linear-gradient(to right, ${x.colors.join(", ")})`}}),e.jsx("div",{className:"ecp-theme-name",children:x.name})]},x.key))})]})}const dr=(l,p)=>{const u=l.sampleRate,b=Math.max(1,Math.floor(u*Math.max(.1,p))),x=l.createBuffer(2,b,u),v=x.getChannelData(0),y=x.getChannelData(1),J=3/p;for(let E=0;E<b;E++){const F=E/u,G=Math.exp(-F*J);v[E]=(Math.random()*2-1)*G,y[E]=(Math.random()*2-1)*G}return x},ur=l=>{const p=Math.max(0,l),u=44100,b=new Float32Array(u),x=Math.PI/180;if(p===0)for(let v=0;v<u;++v)b[v]=v*2/u-1;else for(let v=0;v<u;++v){const y=v*2/u-1;b[v]=(3+p)*y*20*x/(Math.PI+p*Math.abs(y))}return b};function vr({audio:l,name:p="No track loaded",author:u,theme:b="rainbow",volume:x=100,thumbnail:v=null,controls:y={play:!0,pause:!0,stop:!0,seekbar:!0,volume:!0,loop:!0,trackName:!0,equalizer:!0,speed:!0,dolby8d:!1},mode:J="light",bands:E=null,transparent:F=!1,autoPlay:G=!1,equalizer:W={bass:0,mid:0,treble:0},dolby8d:n=null}){var $r,xr,Er,Cr,Tr,Sr,Pr,Ar,Mr,Fr,zr;const[_,z]=r.useState(!1),[B,V]=r.useState(0),[j,A]=r.useState(0),[S,Pe]=r.useState(x||100),[he,xe]=r.useState(!1),[H,Ae]=r.useState(!1),[ve,ge]=r.useState(!1),[be,U]=r.useState([]),[Z,Me]=r.useState(!1),[X,Ee]=r.useState({bass:W.bass||0,mid:W.mid||0,treble:W.treble||0}),[re,He]=r.useState(1),[k,Ce]=r.useState(0),[te,qe]=r.useState(!1),[o,le]=r.useState({enable:y.dolby8d&&(n==null?void 0:n.enable)!==void 0?n.enable:!1,spatial:{rate:(($r=n==null?void 0:n.spatial)==null?void 0:$r.rate)!==void 0?n.spatial.rate:.11,width:((xr=n==null?void 0:n.spatial)==null?void 0:xr.width)!==void 0?n.spatial.width:135,focus:((Er=n==null?void 0:n.spatial)==null?void 0:Er.focus)!==void 0?n.spatial.focus:65},reverb:{size:((Cr=n==null?void 0:n.reverb)==null?void 0:Cr.size)!==void 0?n.reverb.size:2.4,tone:((Tr=n==null?void 0:n.reverb)==null?void 0:Tr.tone)!==void 0?n.reverb.tone:62,mix:((Sr=n==null?void 0:n.reverb)==null?void 0:Sr.mix)!==void 0?n.reverb.mix:30},echo:{time:((Pr=n==null?void 0:n.echo)==null?void 0:Pr.time)!==void 0?n.echo.time:500,feedback:((Ar=n==null?void 0:n.echo)==null?void 0:Ar.feedback)!==void 0?n.echo.feedback:45,mix:((Mr=n==null?void 0:n.echo)==null?void 0:Mr.mix)!==void 0?n.echo.mix:5},tape:{speed:typeof(n==null?void 0:n.tape)=="number"?n.tape:((Fr=n==null?void 0:n.tape)==null?void 0:Fr.speed)!==void 0?n.tape.speed:1,drive:typeof(n==null?void 0:n.tape)=="object"&&((zr=n.tape)==null?void 0:zr.drive)!==void 0?n.tape.drive:0}});r.useEffect(()=>{var t,c,g,f,w,Y,se,R,ee,D,ce;n&&le({enable:n.enable!==void 0?n.enable:!0,spatial:{rate:((t=n.spatial)==null?void 0:t.rate)!==void 0?n.spatial.rate:.2,width:((c=n.spatial)==null?void 0:c.width)!==void 0?n.spatial.width:80,focus:((g=n.spatial)==null?void 0:g.focus)!==void 0?n.spatial.focus:20},reverb:{size:((f=n.reverb)==null?void 0:f.size)!==void 0?n.reverb.size:3,tone:((w=n.reverb)==null?void 0:w.tone)!==void 0?n.reverb.tone:40,mix:((Y=n.reverb)==null?void 0:Y.mix)!==void 0?n.reverb.mix:30},echo:{time:((se=n.echo)==null?void 0:se.time)!==void 0?n.echo.time:50,feedback:((R=n.echo)==null?void 0:R.feedback)!==void 0?n.echo.feedback:20,mix:((ee=n.echo)==null?void 0:ee.mix)!==void 0?n.echo.mix:10},tape:{speed:typeof n.tape=="number"?n.tape:((D=n.tape)==null?void 0:D.speed)!==void 0?n.tape.speed:1,drive:typeof n.tape=="object"&&((ce=n.tape)==null?void 0:ce.drive)!==void 0?n.tape.drive:0}})},[n]);const[oe,me]=r.useState("spatial"),C=r.useRef(o),I=r.useRef(re);r.useEffect(()=>{C.current=o},[o]),r.useEffect(()=>{I.current=re},[re]);const ae=()=>{if(d.current){const t=C.current.enable,c=t?C.current.tape.speed:1,f=!(t&&c!==1);"preservesPitch"in d.current&&(d.current.preservesPitch=f),"webkitPreservesPitch"in d.current&&(d.current.webkitPreservesPitch=f),"mozPreservesPitch"in d.current&&(d.current.mozPreservesPitch=f),d.current.playbackRate=I.current*c}},s=(t,c,g)=>{le(f=>({...f,enable:!0,[t]:{...f[t],[c]:g}}))},q=()=>{le(t=>({...t,enable:!t.enable}))},P=()=>{le({enable:!0,spatial:{rate:.11,width:135,focus:65},reverb:{size:2.4,tone:62,mix:30},echo:{time:500,feedback:45,mix:5},tape:{speed:1,drive:0}})},d=r.useRef(null),$=r.useRef(null),K=r.useRef(null),T=r.useRef(null),pe=r.useRef(null),Te=r.useRef(null),Ne=r.useRef(null),L=r.useRef(null),de=r.useRef(null),Ie=r.useRef(null),Oe=r.useRef(null),We=r.useRef(null),De=r.useRef(null),_e=r.useRef(null),Ue=r.useRef(null),Ge=r.useRef(null),nr=r.useRef(null),Ve=r.useRef(0),Fe=r.useRef(null),we=r.useRef(null),Q=r.useRef(null),ue=r.useRef(null),ze=r.useRef(0),Xe=r.useRef(null),Je=r.useRef(null);r.useEffect(()=>{const t=Je.current;if(!t)return;const c=new ResizeObserver(g=>{for(let f of g)Ce(f.contentRect.width)});return c.observe(t),()=>c.disconnect()},[]),r.useEffect(()=>{const t=[];if(l&&typeof l!="string"&&t.push(["TypeError","audio must be a string (URL or path)"]),p&&typeof p!="string"&&t.push(["TypeError","name must be a string"]),b&&typeof b!="string"&&typeof b!="object")t.push(["TypeError","theme must be a string or a valid theme object"]);else if(typeof b=="object"){const c=["name","bg","bars","peak","button","buttonHover","slider"];for(const g of c)g in b||t.push(["ThemeError",`theme object missing key: ${g}`])}(typeof x!="number"||x<0||x>100)&&t.push(["TypeError","volume must be a number between 0 and 100"]),typeof y!="object"||Array.isArray(y)?t.push(["TypeError","controls must be an object"]):["play","pause","stop","seekbar","volume","loop","trackName","equalizer"].forEach(g=>{y&&g in y&&typeof y[g]!="boolean"&&t.push(["TypeError",`controls.${g} must be a boolean`])}),E&&(Array.isArray(E)?E.length===0?t.push(["ValueError","bands array cannot be empty"]):E.forEach((c,g)=>{typeof c.freq!="number"&&t.push(["TypeError",`bands[${g}].freq must be a number`])}):t.push(["TypeError","bands must be an array"])),t.length>0?(U(t),console.group("%cVisualizePlayer: Prop validation failed","color:red"),t.forEach(c=>console.error(`${c[0]}: ${c[1]}`)),console.groupEnd()):U([])},[l,p,b,x,y,J,E]);const a=E||[{freq:0},{freq:10},{freq:20},{freq:25},{freq:31.5},{freq:40},{freq:50},{freq:63},{freq:80},{freq:100},{freq:125},{freq:160},{freq:200},{freq:250},{freq:315},{freq:400},{freq:500},{freq:630},{freq:800},{freq:1e3},{freq:1250},{freq:1600},{freq:2e3},{freq:2500},{freq:3150},{freq:4e3},{freq:5e3},{freq:6300},{freq:8e3},{freq:1e4},{freq:12500}],h=r.useRef(a.map(()=>0)),N=r.useRef(a.map(()=>0)),M=r.useRef(a.map(()=>0)),O=r.useRef(!1),ne=r.useRef(typeof b=="string"?b:"purple"),i=typeof b=="string"?ke[b]||ke.purple:typeof b=="object"?b:ke.purple,m=J==="dark",sr=typeof y=="object"&&Object.keys(y).length===0;r.useEffect(()=>{typeof b=="string"?ne.current=b:ne.current="purple",Be()},[b]),r.useEffect(()=>{d.current||(d.current=new Audio);const t=d.current,c=()=>{ve||V(t.currentTime)},g=()=>A(t.duration),f=()=>{H||(z(!1),Q.current&&cancelAnimationFrame(Q.current))},w=()=>{z(!0),ae()},Y=()=>z(!1);return t.addEventListener("timeupdate",c),t.addEventListener("loadedmetadata",g),t.addEventListener("ended",f),t.addEventListener("play",w),t.addEventListener("pause",Y),()=>{t.removeEventListener("timeupdate",c),t.removeEventListener("loadedmetadata",g),t.removeEventListener("ended",f),t.removeEventListener("play",w),t.removeEventListener("pause",Y)}},[ve,H]),r.useEffect(()=>()=>{ue.current&&clearInterval(ue.current),d.current&&(d.current.pause(),d.current.src="",d.current.load()),$.current&&$.current.close().catch(t=>console.warn("AudioContext cleanup error:",t)),Q.current&&cancelAnimationFrame(Q.current)},[]),r.useEffect(()=>{if(l){const t=_,c=S,g=H;if(Q.current&&(cancelAnimationFrame(Q.current),Q.current=null),T.current){try{T.current.disconnect()}catch{}T.current=null}if(K.current){try{K.current.disconnect()}catch{}K.current=null}if(pe.current){try{pe.current.disconnect()}catch{}pe.current=null}if(Te.current){try{Te.current.disconnect()}catch{}Te.current=null}if(Ne.current){try{Ne.current.disconnect()}catch{}Ne.current=null}$.current&&($.current.close().catch(D=>console.warn("AudioContext close error:",D)),$.current=null),d.current&&(d.current.pause(),d.current.src="",d.current.load()),d.current=new Audio;try{d.current.crossOrigin="anonymous"}catch{}d.current.src=l,d.current.preload="auto",d.current.muted=!1,d.current.volume=he?0:c/100,d.current.loop=g,d.current.load();const f=d.current,w=()=>{ve||V(f.currentTime)},Y=()=>A(f.duration),se=()=>{H||(z(!1),Q.current&&cancelAnimationFrame(Q.current))},R=()=>{z(!0),ae()},ee=()=>z(!1);f.addEventListener("timeupdate",w),f.addEventListener("loadedmetadata",Y),f.addEventListener("ended",se),f.addEventListener("play",R),f.addEventListener("pause",ee),V(0),z(!1),h.current=a.map(()=>0),N.current=a.map(()=>0),M.current=a.map(()=>0),Be(),t&&d.current.play().catch(D=>console.error("Play failed:",D))}},[l]),r.useEffect(()=>{d.current&&(d.current.volume=he?0:S/100)},[S,he]),r.useEffect(()=>{d.current&&(d.current.loop=H)},[H]),r.useEffect(()=>{ae()},[re,o.tape.speed,o.enable]),r.useEffect(()=>{$.current&&(pe.current&&(pe.current.gain.value=X.bass),Te.current&&(Te.current.gain.value=X.mid),Ne.current&&(Ne.current.gain.value=X.treble))},[X]),r.useEffect(()=>{if($.current){const t=o.enable;if(Ge.current&&(Ge.current.curve=ur(t?o.tape.drive:0)),Oe.current&&(Oe.current.frequency.value=o.reverb.tone/100*8e3+500),We.current&&(We.current.gain.value=t?o.reverb.mix/100:0),Ie.current&&$.current)try{Ie.current.buffer=dr($.current,o.reverb.size)}catch{}if(De.current&&(De.current.delayTime.value=Math.max(.01,o.echo.time/1e3)),_e.current&&(_e.current.gain.value=t?Math.min(.85,o.echo.feedback/100):0),Ue.current&&(Ue.current.gain.value=t?o.echo.mix/100:0),!t&&(de.current&&(de.current.pan.value=0),L.current&&$.current)){const c=$.current.currentTime;L.current.positionX?(L.current.positionX.setTargetAtTime(0,c,.01),L.current.positionY.setTargetAtTime(0,c,.01),L.current.positionZ.setTargetAtTime(-1.4,c,.01)):L.current.setPosition&&L.current.setPosition(0,0,-1.4)}}},[o]);const gr=()=>{if(!$.current||!O.current)return;const t=C.current;if(!t.enable)return;const c=performance.now(),g=ze.current?Math.min(.1,(c-ze.current)/1e3):.016;ze.current=c;const f=t.spatial.rate;Ve.current+=f*5*g;const w=Ve.current,se=2.3*(t.spatial.width/135),R=Math.sin(w)*se,ee=-Math.cos(w)*se,D=Math.sin(w*2)*.4,ce=$.current.currentTime;if(L.current&&(L.current.positionX?(L.current.positionX.setTargetAtTime(R,ce,.04),L.current.positionY.setTargetAtTime(D,ce,.04),L.current.positionZ.setTargetAtTime(ee,ce,.04)):L.current.setPosition&&L.current.setPosition(R,D,ee)),de.current){const ye=Math.sin(w)*(t.spatial.width/180),Se=(t.spatial.focus-50)/100,je=Math.max(-1,Math.min(1,ye+Se));de.current.pan.setTargetAtTime(je,ce,.04)}};r.useEffect(()=>{O.current=_,Q.current&&(cancelAnimationFrame(Q.current),Q.current=null),ue.current&&(clearInterval(ue.current),ue.current=null),_?($.current||Xr(),ze.current=performance.now(),ue.current=window.setInterval(gr,30),yr()):mr()},[_]);const Xr=()=>{if(!$.current&&d.current)try{const t=window.AudioContext||window.webkitAudioContext;if(t){const c=new t;$.current=c;const g=c.createBiquadFilter();g.type="lowshelf",g.frequency.value=320,g.gain.value=X.bass;const f=c.createBiquadFilter();f.type="peaking",f.frequency.value=1e3,f.Q.value=.5,f.gain.value=X.mid;const w=c.createBiquadFilter();w.type="highshelf",w.frequency.value=3200,w.gain.value=X.treble;const Y=c.createWaveShaper();Y.curve=ur(C.current.enable?C.current.tape.drive:0),ae();let se=null;try{const $e=c.createPanner();$e.panningModel="HRTF",$e.distanceModel="inverse",$e.refDistance=1.4,$e.rolloffFactor=.55,se=$e}catch{}let R=null;if(c.createStereoPanner){const $e=c.createStereoPanner();$e.pan.value=0,R=$e}const ee=c.createGain();ee.gain.value=1;const D=c.createConvolver();D.buffer=dr(c,C.current.reverb.size);const ce=c.createBiquadFilter();ce.type="lowpass",ce.frequency.value=C.current.reverb.tone/100*8e3+500;const ye=c.createGain();ye.gain.value=C.current.enable?C.current.reverb.mix/100:0;const Se=c.createDelay(2);Se.delayTime.value=C.current.echo.time/1e3;const je=c.createGain();je.gain.value=Math.min(.85,C.current.echo.feedback/100);const Re=c.createGain();Re.gain.value=C.current.enable?C.current.echo.mix/100:0,Se.connect(je),je.connect(Se);const Le=c.createAnalyser();Le.fftSize=8192,Le.smoothingTimeConstant=.7;const Lr=c.createMediaElementSource(d.current);Lr.connect(g),g.connect(f),f.connect(w),w.connect(Y);const er=se,Ye=R,cr=er||Ye||Y;er?(Y.connect(er),Ye&&er.connect(Ye)):Ye&&Y.connect(Ye),cr.connect(ee),ee.connect(Le),cr.connect(D),D.connect(ce),ce.connect(ye),ye.connect(Le),cr.connect(Se),Se.connect(Re),Re.connect(Le),Le.connect(c.destination),pe.current=g,Te.current=f,Ne.current=w,Ge.current=Y,L.current=se,de.current=R,nr.current=ee,Ie.current=D,Oe.current=ce,We.current=ye,De.current=Se,_e.current=je,Ue.current=Re,K.current=Le,T.current=Lr}}catch(t){console.error("Failed to setup audio context:",t)}},br=t=>{const c=$.current,g=K.current;if(!c||!g)return 0;const f=c.sampleRate/2,w=Math.round(t/f*g.frequencyBinCount);return Math.min(w,g.frequencyBinCount-1)},mr=()=>{if(O.current)return;h.current=h.current.map(f=>f*.7);const t=Date.now();N.current=N.current.map((f,w)=>t-M.current[w]>1500?f*.95:f),Be();const c=Math.max(...h.current),g=Math.max(...N.current);c>.01||g>.01?Q.current=requestAnimationFrame(mr):(O.current||(h.current=a.map(()=>0),N.current=a.map(()=>0),M.current=a.map(()=>0),Be()),Q.current&&cancelAnimationFrame(Q.current),Q.current=null)},yr=()=>{if(!K.current||!O.current)return;const t=C.current;if(t.enable&&$.current){gr();const f=Ve.current,w=t.spatial.width/135;if(Fe.current){const Y=85*(w>0?1:0),se=55*(w>0?1:0),R=Math.sin(f)*Y,ee=-Math.cos(f)*se;Fe.current.style.transform=`translate(${R}px, ${ee}px)`,we.current&&(we.current.setAttribute("x2",`${110+R}`),we.current.setAttribute("y2",`${75+ee}`))}}else if($.current){const f=$.current.currentTime;L.current&&(L.current.positionX?(L.current.positionX.setTargetAtTime(0,f,.04),L.current.positionY.setTargetAtTime(0,f,.04),L.current.positionZ.setTargetAtTime(-1.4,f,.04)):L.current.setPosition&&L.current.setPosition(0,0,-1.4)),de.current&&de.current.pan.setTargetAtTime(0,f,.04),Fe.current&&(Fe.current.style.transform="translate(0px, 0px)"),we.current&&(we.current.setAttribute("x2","110"),we.current.setAttribute("y2","20"))}const c=K.current.frequencyBinCount,g=new Uint8Array(c);K.current.getByteFrequencyData(g),a.forEach((f,w)=>{const Y=br(f.freq),se=w<a.length-1?br(a[w+1].freq):g.length;let R=0,ee=0;for(let ye=Y;ye<se;ye++)R+=g[ye],ee++;let D=ee>0?R/ee/255:0;D=Math.pow(D,.6),h.current[w]=h.current[w]*.8+D*.2;const ce=Date.now();h.current[w]>N.current[w]?(N.current[w]=h.current[w],M.current[w]=ce):ce-M.current[w]>1500&&(N.current[w]*=.95)}),Be(),Q.current=requestAnimationFrame(yr)},Be=()=>{if(!Xe.current)return;const t=ke[ne.current]||ke.rainbow;let c="";a.forEach((g,f)=>{const w=h.current[f]*100,Y=100-N.current[f]*100,se=Math.floor(f/a.length*t.bars.length),R=t.bars[Math.min(se,t.bars.length-1)];c+=`
78
78
  <div class="ecp-vu-bar-wrap">
79
79
  <div class="ecp-vu-bar-fill" style="height: ${w}%; background: ${R};">
80
80
  ${N.current[f]>.1?`<div class="ecp-vu-peak-line" style="top: ${Y}%; background: ${t.peak};"></div>`:""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ecplayer",
3
- "version": "1.0.9",
3
+ "version": "1.1.0",
4
4
  "description": "Professional audio and video players with advanced visualization, customizable themes, and seamless responsive design",
5
5
  "license": "MIT",
6
6
  "author": "K.Prabhasha",