@waveform-playlist/browser 5.0.0 → 5.2.0-next.1

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.
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
- "use strict";var Ia=Object.create;var Ot=Object.defineProperty;var Sa=Object.getOwnPropertyDescriptor;var Aa=Object.getOwnPropertyNames;var $a=Object.getPrototypeOf,Ma=Object.prototype.hasOwnProperty;var Ra=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Aa(t))!Ma.call(e,r)&&r!==n&&Ot(e,r,{get:()=>t[r],enumerable:!(a=Sa(t,r))||a.enumerable});return e};var Ea=(e,t,n)=>(n=e!=null?Ia($a(e)):{},Ra(t||!e||!e.__esModule?Ot(n,"default",{value:e,enumerable:!0}):n,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const W=require("tone"),b=require("react/jsx-runtime"),i=require("react"),S=require("styled-components"),Ee=require("@dnd-kit/core"),Da=require("@dnd-kit/modifiers");var Rt=typeof document<"u"?document.currentScript:null;function hn(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const a=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,a.get?a:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const pn=hn(W),G=hn(i);function Kt(e,t){const n=new Float32Array(e),a=e-1;for(let r=0;r<e;r++){const s=r/a;n[r]=t?s:1-s}return n}function Ba(e,t){const n=new Float32Array(e),a=e-1;for(let r=0;r<e;r++){const s=r/a,o=t?r:e-1-r;n[o]=Math.exp(2*s-1)/Math.E}return n}function Ta(e,t){const n=new Float32Array(e),a=t?Math.PI/2:-Math.PI/2;for(let r=0;r<e;r++)n[r]=Math.sin(Math.PI*r/e-a)/2+.5;return n}function Wa(e,t,n=10){const a=new Float32Array(e);for(let r=0;r<e;r++){const s=t?r:e-1-r,o=r/e;a[s]=Math.log(1+n*o)/Math.log(1+n)}return a}function gn(e,t,n){switch(e){case"linear":return Kt(t,n);case"exponential":return Ba(t,n);case"sCurve":return Ta(t,n);case"logarithmic":return Wa(t,n);default:return Kt(t,n)}}function Ut(e,t,n,a="linear",r=0,s=1){if(!(n<=0))if(a==="linear")e.setValueAtTime(r,t),e.linearRampToValueAtTime(s,t+n);else if(a==="exponential")e.setValueAtTime(Math.max(r,.001),t),e.exponentialRampToValueAtTime(Math.max(s,.001),t+n);else{const o=gn(a,1e4,!0),l=new Float32Array(o.length),c=s-r;for(let u=0;u<o.length;u++)l[u]=r+o[u]*c;e.setValueCurveAtTime(l,t,n)}}function Jt(e,t,n,a="linear",r=1,s=0){if(!(n<=0))if(a==="linear")e.setValueAtTime(r,t),e.linearRampToValueAtTime(s,t+n);else if(a==="exponential")e.setValueAtTime(Math.max(r,.001),t),e.exponentialRampToValueAtTime(Math.max(s,.001),t+n);else{const o=gn(a,1e4,!1),l=new Float32Array(o.length),c=r-s;for(let u=0;u<o.length;u++)l[u]=s+o[u]*c;e.setValueCurveAtTime(l,t,n)}}var _a=class{constructor(e){this.activePlayers=0,this.track=e.track,this.volumeNode=new W.Volume(this.gainToDb(e.track.gain)),this.panNode=new W.Panner(e.track.stereoPan),this.muteGain=new W.Gain(e.track.muted?0:1);const t=e.destination||W.getDestination();if(e.effects){const a=e.effects(this.muteGain,t,!1);a&&(this.effectsCleanup=a)}else this.muteGain.connect(t);const n=e.clips||(e.buffer?[{buffer:e.buffer,startTime:0,duration:e.buffer.duration,offset:0,fadeIn:e.track.fadeIn,fadeOut:e.track.fadeOut,gain:1}]:[]);this.clips=n.map(a=>{const r=new W.Player({url:a.buffer,loop:!1,onstop:()=>{this.activePlayers--,this.activePlayers===0&&this.onStopCallback&&this.onStopCallback()}}),s=new W.Gain(a.gain);return r.connect(s),s.chain(this.volumeNode,this.panNode,this.muteGain),{player:r,clipInfo:a,fadeGain:s,pausedPosition:0,playStartTime:0}})}scheduleFades(e,t,n=0){const{clipInfo:a,fadeGain:r}=e,s=r.gain._param;s.cancelScheduledValues(0);const o=n-a.offset;if(a.fadeIn&&o<a.fadeIn.duration){const l=a.fadeIn.duration;if(o<=0)Ut(s,t,l,a.fadeIn.type||"linear",0,a.gain);else{const c=l-o,u=o/l,d=a.gain*u;Ut(s,t,c,a.fadeIn.type||"linear",d,a.gain)}}else s.setValueAtTime(a.gain,t);if(a.fadeOut){const c=a.duration-a.fadeOut.duration-o;if(c>0){const u=t+c;Jt(s,u,a.fadeOut.duration,a.fadeOut.type||"linear",a.gain,0)}else if(c>-a.fadeOut.duration){const u=-c,d=a.fadeOut.duration-u,v=u/a.fadeOut.duration,p=a.gain*(1-v);Jt(s,t,d,a.fadeOut.type||"linear",p,0)}}}gainToDb(e){return 20*Math.log10(e)}setVolume(e){this.track.gain=e,this.volumeNode.volume.value=this.gainToDb(e)}setPan(e){this.track.stereoPan=e,this.panNode.pan.value=e}setMute(e){this.track.muted=e,this.muteGain.gain.value=e?0:1}setSolo(e){this.track.soloed=e}play(e,t=0,n){this.clips.forEach(a=>{a.player.stop(),a.player.disconnect(),a.player.dispose();const r=new W.Player({url:a.clipInfo.buffer,loop:!1,onstop:()=>{this.activePlayers--,this.activePlayers===0&&this.onStopCallback&&this.onStopCallback()}});r.connect(a.fadeGain),a.player=r,a.pausedPosition=0}),this.activePlayers=0,this.clips.forEach(a=>{const{player:r,clipInfo:s}=a,o=t,l=s.startTime,c=s.startTime+s.duration;if(o<c){this.activePlayers++;const u=e??W.now();if(a.playStartTime=u,o>=l){const d=o-l+s.offset,v=s.duration-(o-l),p=n?Math.min(n,v):v;a.pausedPosition=d,this.scheduleFades(a,u,d),r.start(u,d,p)}else{const d=l-o,v=n?Math.min(n-d,s.duration):s.duration;d<(n??1/0)?(a.pausedPosition=s.offset,this.scheduleFades(a,u+d,s.offset),r.start(u+d,s.offset,v)):this.activePlayers--}}})}pause(){this.clips.forEach(e=>{if(e.player.state==="started"){const t=(W.now()-e.playStartTime)*e.player.playbackRate;e.pausedPosition=e.pausedPosition+t}e.player.stop()}),this.activePlayers=0}stop(e){const t=e??W.now();this.clips.forEach(n=>{n.player.stop(t),n.pausedPosition=0}),this.activePlayers=0}dispose(){this.effectsCleanup&&this.effectsCleanup(),this.clips.forEach(e=>{e.player.dispose(),e.fadeGain.dispose()}),this.volumeNode.dispose(),this.panNode.dispose(),this.muteGain.dispose()}get id(){return this.track.id}get duration(){if(this.clips.length===0)return 0;const e=this.clips[this.clips.length-1];return e.clipInfo.startTime+e.clipInfo.duration}get buffer(){return this.clips[0]?.clipInfo.buffer}get isPlaying(){return this.clips.some(e=>e.player.state==="started")}get muted(){return this.track.muted}get startTime(){return this.track.startTime}setOnStopCallback(e){this.onStopCallback=e}},Fa=class{constructor(e={}){if(this.tracks=new Map,this.isInitialized=!1,this.soloedTracks=new Set,this.manualMuteState=new Map,this.activeTracks=new Map,this.playbackSessionId=0,this.masterVolume=new W.Volume(this.gainToDb(e.masterGain??1)),e.effects){const t=e.effects(this.masterVolume,W.getDestination(),!1);t&&(this.effectsCleanup=t)}else this.masterVolume.toDestination();e.tracks&&e.tracks.forEach(t=>{this.tracks.set(t.id,t),this.manualMuteState.set(t.id,t.muted)})}gainToDb(e){return 20*Math.log10(e)}async init(){this.isInitialized||(await W.start(),this.isInitialized=!0)}addTrack(e){const t={...e,destination:this.masterVolume},n=new _a(t);return this.tracks.set(n.id,n),this.manualMuteState.set(n.id,e.track.muted??!1),e.track.soloed&&this.soloedTracks.add(n.id),n}applyInitialSoloState(){this.updateSoloMuting()}removeTrack(e){const t=this.tracks.get(e);t&&(t.dispose(),this.tracks.delete(e),this.manualMuteState.delete(e),this.soloedTracks.delete(e))}getTrack(e){return this.tracks.get(e)}play(e,t,n){if(!this.isInitialized){console.warn("TonePlayout not initialized. Call init() first.");return}const a=e??W.now(),r=t??0;this.playbackSessionId++;const s=this.playbackSessionId;this.activeTracks.clear(),this.tracks.forEach(o=>{const l=o.startTime;if(r>=l){const c=r-l;n!==void 0&&(this.activeTracks.set(o.id,s),o.setOnStopCallback(()=>{this.activeTracks.get(o.id)===s&&(this.activeTracks.delete(o.id),this.activeTracks.size===0&&this.onPlaybackCompleteCallback&&this.onPlaybackCompleteCallback())})),o.play(a,c,n)}else{const c=l-r;n!==void 0&&(this.activeTracks.set(o.id,s),o.setOnStopCallback(()=>{this.activeTracks.get(o.id)===s&&(this.activeTracks.delete(o.id),this.activeTracks.size===0&&this.onPlaybackCompleteCallback&&this.onPlaybackCompleteCallback())})),o.play(a+c,0,n)}}),t!==void 0?W.getTransport().start(a,t):W.getTransport().start(a)}pause(){W.getTransport().pause(),this.tracks.forEach(e=>{e.pause()})}stop(){W.getTransport().stop(),this.tracks.forEach(e=>{e.stop()})}setMasterGain(e){this.masterVolume.volume.value=this.gainToDb(e)}setSolo(e,t){const n=this.tracks.get(e);n&&(n.setSolo(t),t?this.soloedTracks.add(e):this.soloedTracks.delete(e),this.updateSoloMuting())}updateSoloMuting(){const e=this.soloedTracks.size>0;this.tracks.forEach((t,n)=>{if(e)if(!this.soloedTracks.has(n))t.setMute(!0);else{const a=this.manualMuteState.get(n)??!1;t.setMute(a)}else{const a=this.manualMuteState.get(n)??!1;t.setMute(a)}})}setMute(e,t){const n=this.tracks.get(e);n&&(this.manualMuteState.set(e,t),n.setMute(t))}getCurrentTime(){return W.getTransport().seconds}seekTo(e){W.getTransport().seconds=e}dispose(){this.tracks.forEach(e=>{e.dispose()}),this.tracks.clear(),this.effectsCleanup&&this.effectsCleanup(),this.masterVolume.dispose()}get context(){return W.getContext()}get sampleRate(){return W.getContext().sampleRate}setOnPlaybackComplete(e){this.onPlaybackCompleteCallback=e}},mt=null;function Za(){return mt||(mt=new W.Context,W.setContext(mt)),mt}async function Et(){const e=Za();e.state!=="running"&&await e.resume()}const Tt=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[Tt.Translate.toString(e),Tt.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:a}=e;return t+" "+n+"ms "+a}}}),Va=new Map([["bold",G.createElement(G.Fragment,null,G.createElement("path",{d:"M157.27,21.22a12,12,0,0,0-12.64,1.31L75.88,76H32A20,20,0,0,0,12,96v64a20,20,0,0,0,20,20H75.88l68.75,53.47A12,12,0,0,0,164,224V32A12,12,0,0,0,157.27,21.22ZM36,100H68v56H36Zm104,99.46L92,162.13V93.87l48-37.33ZM212,128a44,44,0,0,1-11,29.11,12,12,0,1,1-18-15.88,20,20,0,0,0,0-26.43,12,12,0,0,1,18-15.86A43.94,43.94,0,0,1,212,128Zm40,0a83.87,83.87,0,0,1-21.39,56,12,12,0,0,1-17.89-16,60,60,0,0,0,0-80,12,12,0,1,1,17.88-16A83.87,83.87,0,0,1,252,128Z"}))],["duotone",G.createElement(G.Fragment,null,G.createElement("path",{d:"M80,88v80H32a8,8,0,0,1-8-8V96a8,8,0,0,1,8-8Z",opacity:"0.2"}),G.createElement("path",{d:"M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55Zm54-106.08a40,40,0,0,1,0,52.88,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,0,1,12-10.58ZM248,128a79.9,79.9,0,0,1-20.37,53.34,8,8,0,0,1-11.92-10.67,64,64,0,0,0,0-85.33,8,8,0,1,1,11.92-10.67A79.83,79.83,0,0,1,248,128Z"}))],["fill",G.createElement(G.Fragment,null,G.createElement("path",{d:"M160,32.25V223.69a8.29,8.29,0,0,1-3.91,7.18,8,8,0,0,1-9-.56l-65.57-51A4,4,0,0,1,80,176.16V79.84a4,4,0,0,1,1.55-3.15l65.57-51a8,8,0,0,1,10,.16A8.27,8.27,0,0,1,160,32.25ZM60,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H60a4,4,0,0,0,4-4V84A4,4,0,0,0,60,80Zm126.77,20.84a8,8,0,0,0-.72,11.3,24,24,0,0,1,0,31.72,8,8,0,1,0,12,10.58,40,40,0,0,0,0-52.88A8,8,0,0,0,186.74,100.84Zm40.89-26.17a8,8,0,1,0-11.92,10.66,64,64,0,0,1,0,85.34,8,8,0,1,0,11.92,10.66,80,80,0,0,0,0-106.66Z"}))],["light",G.createElement(G.Fragment,null,G.createElement("path",{d:"M154.64,26.61a6,6,0,0,0-6.32.65L77.94,82H32A14,14,0,0,0,18,96v64a14,14,0,0,0,14,14H77.94l70.38,54.74A6,6,0,0,0,158,224V32A6,6,0,0,0,154.64,26.61ZM30,160V96a2,2,0,0,1,2-2H74v68H32A2,2,0,0,1,30,160Zm116,51.73L86,165.07V90.93l60-46.66Zm50.53-108.85a38,38,0,0,1,0,50.24,6,6,0,1,1-9-7.94,26,26,0,0,0,0-34.37,6,6,0,0,1,9-7.93ZM246,128a77.86,77.86,0,0,1-19.86,52,6,6,0,1,1-8.94-8,66,66,0,0,0,0-88,6,6,0,1,1,8.94-8A77.86,77.86,0,0,1,246,128Z"}))],["regular",G.createElement(G.Fragment,null,G.createElement("path",{d:"M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55Zm54-106.08a40,40,0,0,1,0,52.88,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,0,1,12-10.58ZM248,128a79.9,79.9,0,0,1-20.37,53.34,8,8,0,0,1-11.92-10.67,64,64,0,0,0,0-85.33,8,8,0,1,1,11.92-10.67A79.83,79.83,0,0,1,248,128Z"}))],["thin",G.createElement(G.Fragment,null,G.createElement("path",{d:"M153.76,28.41a4,4,0,0,0-4.22.43L78.63,84H32A12,12,0,0,0,20,96v64a12,12,0,0,0,12,12H78.63l70.91,55.16A4.07,4.07,0,0,0,152,228a3.92,3.92,0,0,0,1.76-.41A4,4,0,0,0,156,224V32A4,4,0,0,0,153.76,28.41ZM28,160V96a4,4,0,0,1,4-4H76v72H32A4,4,0,0,1,28,160Zm120,55.82L84,166V90l64-49.78Zm47-111.61a36,36,0,0,1,0,47.59,4,4,0,1,1-6-5.3,28,28,0,0,0,0-37,4,4,0,0,1,6-5.28ZM244,128a75.88,75.88,0,0,1-19.35,50.67,4,4,0,0,1-6-5.34,68,68,0,0,0,0-90.66,4,4,0,0,1,6-5.34A75.88,75.88,0,0,1,244,128Z"}))]]),Pa=new Map([["bold",G.createElement(G.Fragment,null,G.createElement("path",{d:"M157.27,21.22a12,12,0,0,0-12.64,1.31L75.88,76H32A20,20,0,0,0,12,96v64a20,20,0,0,0,20,20H75.88l68.75,53.47A12,12,0,0,0,164,224V32A12,12,0,0,0,157.27,21.22ZM36,100H68v56H36Zm104,99.46L92,162.13V93.87l48-37.33ZM212,128a44,44,0,0,1-11,29.11,12,12,0,0,1-18-15.88,20,20,0,0,0,0-26.44,12,12,0,0,1,18-15.85A43.94,43.94,0,0,1,212,128Z"}))],["duotone",G.createElement(G.Fragment,null,G.createElement("path",{d:"M80,88v80H32a8,8,0,0,1-8-8V96a8,8,0,0,1,8-8Z",opacity:"0.2"}),G.createElement("path",{d:"M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55ZM208,128a39.93,39.93,0,0,1-10,26.46,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,1,1,12-10.58A40,40,0,0,1,208,128Z"}))],["fill",G.createElement(G.Fragment,null,G.createElement("path",{d:"M160,32.25V223.69a8.29,8.29,0,0,1-3.91,7.18,8,8,0,0,1-9-.56l-65.57-51A4,4,0,0,1,80,176.16V79.84a4,4,0,0,1,1.55-3.15l65.57-51a8,8,0,0,1,10,.16A8.27,8.27,0,0,1,160,32.25ZM60,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H60a4,4,0,0,0,4-4V84A4,4,0,0,0,60,80ZM198,101.56a8,8,0,1,0-12,10.58,24,24,0,0,1,0,31.72,8,8,0,1,0,12,10.58,40,40,0,0,0,0-52.88Z"}))],["light",G.createElement(G.Fragment,null,G.createElement("path",{d:"M154.64,26.61a6,6,0,0,0-6.32.65L77.94,82H32A14,14,0,0,0,18,96v64a14,14,0,0,0,14,14H77.94l70.38,54.74A6,6,0,0,0,158,224V32A6,6,0,0,0,154.64,26.61ZM30,160V96a2,2,0,0,1,2-2H74v68H32A2,2,0,0,1,30,160Zm116,51.73L86,165.07V90.93l60-46.66ZM206,128a37.94,37.94,0,0,1-9.5,25.14,6,6,0,1,1-9-7.94,26,26,0,0,0,0-34.37,6,6,0,0,1,9-7.93A38,38,0,0,1,206,128Z"}))],["regular",G.createElement(G.Fragment,null,G.createElement("path",{d:"M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55ZM208,128a39.93,39.93,0,0,1-10,26.46,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,1,1,12-10.58A40,40,0,0,1,208,128Z"}))],["thin",G.createElement(G.Fragment,null,G.createElement("path",{d:"M153.76,28.41a4,4,0,0,0-4.22.43L78.63,84H32A12,12,0,0,0,20,96v64a12,12,0,0,0,12,12H78.63l70.91,55.16A4.07,4.07,0,0,0,152,228a3.92,3.92,0,0,0,1.76-.41A4,4,0,0,0,156,224V32A4,4,0,0,0,153.76,28.41ZM28,160V96a4,4,0,0,1,4-4H76v72H32A4,4,0,0,1,28,160Zm120,55.82L84,166V90l64-49.78ZM204,128a36,36,0,0,1-9,23.82,4,4,0,1,1-6-5.3,28,28,0,0,0,0-37,4,4,0,0,1,6-5.28A36,36,0,0,1,204,128Z"}))]]),za=i.createContext({color:"currentColor",size:"1em",weight:"regular",mirrored:!1}),Ft=G.forwardRef((e,t)=>{const{alt:n,color:a,size:r,weight:s,mirrored:o,children:l,weights:c,...u}=e,{color:d="currentColor",size:v,weight:p="regular",mirrored:f=!1,...C}=G.useContext(za);return G.createElement("svg",{ref:t,xmlns:"http://www.w3.org/2000/svg",width:r??v,height:r??v,fill:a??d,viewBox:"0 0 256 256",transform:o||f?"scale(-1, 1)":void 0,...C,...u},!!n&&G.createElement("title",null,n),l,c.get(s??p))});Ft.displayName="IconBase";const bn=G.forwardRef((e,t)=>G.createElement(Ft,{ref:t,...e,weights:Va}));bn.displayName="SpeakerHighIcon";const vn=G.forwardRef((e,t)=>G.createElement(Ft,{ref:t,...e,weights:Pa}));vn.displayName="SpeakerLowIcon";S.span`
1
+ "use strict";var $a=Object.create;var Jt=Object.defineProperty;var Ma=Object.getOwnPropertyDescriptor;var Ra=Object.getOwnPropertyNames;var Ea=Object.getPrototypeOf,Da=Object.prototype.hasOwnProperty;var Ba=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ra(t))!Da.call(e,r)&&r!==n&&Jt(e,r,{get:()=>t[r],enumerable:!(a=Ma(t,r))||a.enumerable});return e};var Ta=(e,t,n)=>(n=e!=null?$a(Ea(e)):{},Ba(t||!e||!e.__esModule?Jt(n,"default",{value:e,enumerable:!0}):n,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const W=require("tone"),b=require("react/jsx-runtime"),i=require("react"),S=require("styled-components"),De=require("@dnd-kit/core"),Wa=require("@dnd-kit/modifiers");var Bt=typeof document<"u"?document.currentScript:null;function bn(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const a=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,a.get?a:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const vn=bn(W),N=bn(i);function qt(e,t){const n=new Float32Array(e),a=e-1;for(let r=0;r<e;r++){const s=r/a;n[r]=t?s:1-s}return n}function _a(e,t){const n=new Float32Array(e),a=e-1;for(let r=0;r<e;r++){const s=r/a,o=t?r:e-1-r;n[o]=Math.exp(2*s-1)/Math.E}return n}function Fa(e,t){const n=new Float32Array(e),a=t?Math.PI/2:-Math.PI/2;for(let r=0;r<e;r++)n[r]=Math.sin(Math.PI*r/e-a)/2+.5;return n}function Za(e,t,n=10){const a=new Float32Array(e);for(let r=0;r<e;r++){const s=t?r:e-1-r,o=r/e;a[s]=Math.log(1+n*o)/Math.log(1+n)}return a}function Cn(e,t,n){switch(e){case"linear":return qt(t,n);case"exponential":return _a(t,n);case"sCurve":return Fa(t,n);case"logarithmic":return Za(t,n);default:return qt(t,n)}}function Qt(e,t,n,a="linear",r=0,s=1){if(!(n<=0))if(a==="linear")e.setValueAtTime(r,t),e.linearRampToValueAtTime(s,t+n);else if(a==="exponential")e.setValueAtTime(Math.max(r,.001),t),e.exponentialRampToValueAtTime(Math.max(s,.001),t+n);else{const o=Cn(a,1e4,!0),l=new Float32Array(o.length),c=s-r;for(let u=0;u<o.length;u++)l[u]=r+o[u]*c;e.setValueCurveAtTime(l,t,n)}}function en(e,t,n,a="linear",r=1,s=0){if(!(n<=0))if(a==="linear")e.setValueAtTime(r,t),e.linearRampToValueAtTime(s,t+n);else if(a==="exponential")e.setValueAtTime(Math.max(r,.001),t),e.exponentialRampToValueAtTime(Math.max(s,.001),t+n);else{const o=Cn(a,1e4,!1),l=new Float32Array(o.length),c=r-s;for(let u=0;u<o.length;u++)l[u]=s+o[u]*c;e.setValueCurveAtTime(l,t,n)}}var Va=class{constructor(e){this.activePlayers=0,this.track=e.track,this.volumeNode=new W.Volume(this.gainToDb(e.track.gain)),this.panNode=new W.Panner(e.track.stereoPan),this.muteGain=new W.Gain(e.track.muted?0:1);const t=e.destination||W.getDestination();if(e.effects){const a=e.effects(this.muteGain,t,!1);a&&(this.effectsCleanup=a)}else this.muteGain.connect(t);const n=e.clips||(e.buffer?[{buffer:e.buffer,startTime:0,duration:e.buffer.duration,offset:0,fadeIn:e.track.fadeIn,fadeOut:e.track.fadeOut,gain:1}]:[]);this.clips=n.map(a=>{const r=new W.Player({url:a.buffer,loop:!1,onstop:()=>{this.activePlayers--,this.activePlayers===0&&this.onStopCallback&&this.onStopCallback()}}),s=new W.Gain(a.gain);return r.connect(s),s.chain(this.volumeNode,this.panNode,this.muteGain),{player:r,clipInfo:a,fadeGain:s,pausedPosition:0,playStartTime:0}})}scheduleFades(e,t,n=0){const{clipInfo:a,fadeGain:r}=e,s=r.gain._param;s.cancelScheduledValues(0);const o=n-a.offset;if(a.fadeIn&&o<a.fadeIn.duration){const l=a.fadeIn.duration;if(o<=0)Qt(s,t,l,a.fadeIn.type||"linear",0,a.gain);else{const c=l-o,u=o/l,d=a.gain*u;Qt(s,t,c,a.fadeIn.type||"linear",d,a.gain)}}else s.setValueAtTime(a.gain,t);if(a.fadeOut){const c=a.duration-a.fadeOut.duration-o;if(c>0){const u=t+c;en(s,u,a.fadeOut.duration,a.fadeOut.type||"linear",a.gain,0)}else if(c>-a.fadeOut.duration){const u=-c,d=a.fadeOut.duration-u,v=u/a.fadeOut.duration,p=a.gain*(1-v);en(s,t,d,a.fadeOut.type||"linear",p,0)}}}gainToDb(e){return 20*Math.log10(e)}setVolume(e){this.track.gain=e,this.volumeNode.volume.value=this.gainToDb(e)}setPan(e){this.track.stereoPan=e,this.panNode.pan.value=e}setMute(e){this.track.muted=e,this.muteGain.gain.value=e?0:1}setSolo(e){this.track.soloed=e}play(e,t=0,n){this.clips.forEach(a=>{a.player.stop(),a.player.disconnect(),a.player.dispose();const r=new W.Player({url:a.clipInfo.buffer,loop:!1,onstop:()=>{this.activePlayers--,this.activePlayers===0&&this.onStopCallback&&this.onStopCallback()}});r.connect(a.fadeGain),a.player=r,a.pausedPosition=0}),this.activePlayers=0,this.clips.forEach(a=>{const{player:r,clipInfo:s}=a,o=t,l=s.startTime,c=s.startTime+s.duration;if(o<c){this.activePlayers++;const u=e??W.now();if(a.playStartTime=u,o>=l){const d=o-l+s.offset,v=s.duration-(o-l),p=n?Math.min(n,v):v;a.pausedPosition=d,this.scheduleFades(a,u,d),r.start(u,d,p)}else{const d=l-o,v=n?Math.min(n-d,s.duration):s.duration;d<(n??1/0)?(a.pausedPosition=s.offset,this.scheduleFades(a,u+d,s.offset),r.start(u+d,s.offset,v)):this.activePlayers--}}})}pause(){this.clips.forEach(e=>{if(e.player.state==="started"){const t=(W.now()-e.playStartTime)*e.player.playbackRate;e.pausedPosition=e.pausedPosition+t}e.player.stop()}),this.activePlayers=0}stop(e){const t=e??W.now();this.clips.forEach(n=>{n.player.stop(t),n.pausedPosition=0}),this.activePlayers=0}dispose(){this.effectsCleanup&&this.effectsCleanup(),this.clips.forEach(e=>{e.player.dispose(),e.fadeGain.dispose()}),this.volumeNode.dispose(),this.panNode.dispose(),this.muteGain.dispose()}get id(){return this.track.id}get duration(){if(this.clips.length===0)return 0;const e=this.clips[this.clips.length-1];return e.clipInfo.startTime+e.clipInfo.duration}get buffer(){return this.clips[0]?.clipInfo.buffer}get isPlaying(){return this.clips.some(e=>e.player.state==="started")}get muted(){return this.track.muted}get startTime(){return this.track.startTime}setOnStopCallback(e){this.onStopCallback=e}},Pa=class{constructor(e={}){if(this.tracks=new Map,this.isInitialized=!1,this.soloedTracks=new Set,this.manualMuteState=new Map,this.activeTracks=new Map,this.playbackSessionId=0,this.masterVolume=new W.Volume(this.gainToDb(e.masterGain??1)),e.effects){const t=e.effects(this.masterVolume,W.getDestination(),!1);t&&(this.effectsCleanup=t)}else this.masterVolume.toDestination();e.tracks&&e.tracks.forEach(t=>{this.tracks.set(t.id,t),this.manualMuteState.set(t.id,t.muted)})}gainToDb(e){return 20*Math.log10(e)}async init(){this.isInitialized||(await W.start(),this.isInitialized=!0)}addTrack(e){const t={...e,destination:this.masterVolume},n=new Va(t);return this.tracks.set(n.id,n),this.manualMuteState.set(n.id,e.track.muted??!1),e.track.soloed&&this.soloedTracks.add(n.id),n}applyInitialSoloState(){this.updateSoloMuting()}removeTrack(e){const t=this.tracks.get(e);t&&(t.dispose(),this.tracks.delete(e),this.manualMuteState.delete(e),this.soloedTracks.delete(e))}getTrack(e){return this.tracks.get(e)}play(e,t,n){if(!this.isInitialized){console.warn("TonePlayout not initialized. Call init() first.");return}const a=e??W.now(),r=t??0;this.playbackSessionId++;const s=this.playbackSessionId;this.activeTracks.clear(),this.tracks.forEach(o=>{const l=o.startTime;if(r>=l){const c=r-l;n!==void 0&&(this.activeTracks.set(o.id,s),o.setOnStopCallback(()=>{this.activeTracks.get(o.id)===s&&(this.activeTracks.delete(o.id),this.activeTracks.size===0&&this.onPlaybackCompleteCallback&&this.onPlaybackCompleteCallback())})),o.play(a,c,n)}else{const c=l-r;n!==void 0&&(this.activeTracks.set(o.id,s),o.setOnStopCallback(()=>{this.activeTracks.get(o.id)===s&&(this.activeTracks.delete(o.id),this.activeTracks.size===0&&this.onPlaybackCompleteCallback&&this.onPlaybackCompleteCallback())})),o.play(a+c,0,n)}}),t!==void 0?W.getTransport().start(a,t):W.getTransport().start(a)}pause(){W.getTransport().pause(),this.tracks.forEach(e=>{e.pause()})}stop(){W.getTransport().stop(),this.tracks.forEach(e=>{e.stop()})}setMasterGain(e){this.masterVolume.volume.value=this.gainToDb(e)}setSolo(e,t){const n=this.tracks.get(e);n&&(n.setSolo(t),t?this.soloedTracks.add(e):this.soloedTracks.delete(e),this.updateSoloMuting())}updateSoloMuting(){const e=this.soloedTracks.size>0;this.tracks.forEach((t,n)=>{if(e)if(!this.soloedTracks.has(n))t.setMute(!0);else{const a=this.manualMuteState.get(n)??!1;t.setMute(a)}else{const a=this.manualMuteState.get(n)??!1;t.setMute(a)}})}setMute(e,t){const n=this.tracks.get(e);n&&(this.manualMuteState.set(e,t),n.setMute(t))}getCurrentTime(){return W.getTransport().seconds}seekTo(e){W.getTransport().seconds=e}dispose(){this.tracks.forEach(e=>{e.dispose()}),this.tracks.clear(),this.effectsCleanup&&this.effectsCleanup(),this.masterVolume.dispose()}get context(){return W.getContext()}get sampleRate(){return W.getContext().sampleRate}setOnPlaybackComplete(e){this.onPlaybackCompleteCallback=e}},pt=null;function za(){return pt||(pt=new W.Context,W.setContext(pt)),pt}async function Tt(){const e=za();e.state!=="running"&&await e.resume()}const Ft=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[Ft.Translate.toString(e),Ft.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:a}=e;return t+" "+n+"ms "+a}}}),ja=new Map([["bold",N.createElement(N.Fragment,null,N.createElement("path",{d:"M157.27,21.22a12,12,0,0,0-12.64,1.31L75.88,76H32A20,20,0,0,0,12,96v64a20,20,0,0,0,20,20H75.88l68.75,53.47A12,12,0,0,0,164,224V32A12,12,0,0,0,157.27,21.22ZM36,100H68v56H36Zm104,99.46L92,162.13V93.87l48-37.33ZM212,128a44,44,0,0,1-11,29.11,12,12,0,1,1-18-15.88,20,20,0,0,0,0-26.43,12,12,0,0,1,18-15.86A43.94,43.94,0,0,1,212,128Zm40,0a83.87,83.87,0,0,1-21.39,56,12,12,0,0,1-17.89-16,60,60,0,0,0,0-80,12,12,0,1,1,17.88-16A83.87,83.87,0,0,1,252,128Z"}))],["duotone",N.createElement(N.Fragment,null,N.createElement("path",{d:"M80,88v80H32a8,8,0,0,1-8-8V96a8,8,0,0,1,8-8Z",opacity:"0.2"}),N.createElement("path",{d:"M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55Zm54-106.08a40,40,0,0,1,0,52.88,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,0,1,12-10.58ZM248,128a79.9,79.9,0,0,1-20.37,53.34,8,8,0,0,1-11.92-10.67,64,64,0,0,0,0-85.33,8,8,0,1,1,11.92-10.67A79.83,79.83,0,0,1,248,128Z"}))],["fill",N.createElement(N.Fragment,null,N.createElement("path",{d:"M160,32.25V223.69a8.29,8.29,0,0,1-3.91,7.18,8,8,0,0,1-9-.56l-65.57-51A4,4,0,0,1,80,176.16V79.84a4,4,0,0,1,1.55-3.15l65.57-51a8,8,0,0,1,10,.16A8.27,8.27,0,0,1,160,32.25ZM60,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H60a4,4,0,0,0,4-4V84A4,4,0,0,0,60,80Zm126.77,20.84a8,8,0,0,0-.72,11.3,24,24,0,0,1,0,31.72,8,8,0,1,0,12,10.58,40,40,0,0,0,0-52.88A8,8,0,0,0,186.74,100.84Zm40.89-26.17a8,8,0,1,0-11.92,10.66,64,64,0,0,1,0,85.34,8,8,0,1,0,11.92,10.66,80,80,0,0,0,0-106.66Z"}))],["light",N.createElement(N.Fragment,null,N.createElement("path",{d:"M154.64,26.61a6,6,0,0,0-6.32.65L77.94,82H32A14,14,0,0,0,18,96v64a14,14,0,0,0,14,14H77.94l70.38,54.74A6,6,0,0,0,158,224V32A6,6,0,0,0,154.64,26.61ZM30,160V96a2,2,0,0,1,2-2H74v68H32A2,2,0,0,1,30,160Zm116,51.73L86,165.07V90.93l60-46.66Zm50.53-108.85a38,38,0,0,1,0,50.24,6,6,0,1,1-9-7.94,26,26,0,0,0,0-34.37,6,6,0,0,1,9-7.93ZM246,128a77.86,77.86,0,0,1-19.86,52,6,6,0,1,1-8.94-8,66,66,0,0,0,0-88,6,6,0,1,1,8.94-8A77.86,77.86,0,0,1,246,128Z"}))],["regular",N.createElement(N.Fragment,null,N.createElement("path",{d:"M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55Zm54-106.08a40,40,0,0,1,0,52.88,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,0,1,12-10.58ZM248,128a79.9,79.9,0,0,1-20.37,53.34,8,8,0,0,1-11.92-10.67,64,64,0,0,0,0-85.33,8,8,0,1,1,11.92-10.67A79.83,79.83,0,0,1,248,128Z"}))],["thin",N.createElement(N.Fragment,null,N.createElement("path",{d:"M153.76,28.41a4,4,0,0,0-4.22.43L78.63,84H32A12,12,0,0,0,20,96v64a12,12,0,0,0,12,12H78.63l70.91,55.16A4.07,4.07,0,0,0,152,228a3.92,3.92,0,0,0,1.76-.41A4,4,0,0,0,156,224V32A4,4,0,0,0,153.76,28.41ZM28,160V96a4,4,0,0,1,4-4H76v72H32A4,4,0,0,1,28,160Zm120,55.82L84,166V90l64-49.78Zm47-111.61a36,36,0,0,1,0,47.59,4,4,0,1,1-6-5.3,28,28,0,0,0,0-37,4,4,0,0,1,6-5.28ZM244,128a75.88,75.88,0,0,1-19.35,50.67,4,4,0,0,1-6-5.34,68,68,0,0,0,0-90.66,4,4,0,0,1,6-5.34A75.88,75.88,0,0,1,244,128Z"}))]]),Ha=new Map([["bold",N.createElement(N.Fragment,null,N.createElement("path",{d:"M157.27,21.22a12,12,0,0,0-12.64,1.31L75.88,76H32A20,20,0,0,0,12,96v64a20,20,0,0,0,20,20H75.88l68.75,53.47A12,12,0,0,0,164,224V32A12,12,0,0,0,157.27,21.22ZM36,100H68v56H36Zm104,99.46L92,162.13V93.87l48-37.33ZM212,128a44,44,0,0,1-11,29.11,12,12,0,0,1-18-15.88,20,20,0,0,0,0-26.44,12,12,0,0,1,18-15.85A43.94,43.94,0,0,1,212,128Z"}))],["duotone",N.createElement(N.Fragment,null,N.createElement("path",{d:"M80,88v80H32a8,8,0,0,1-8-8V96a8,8,0,0,1,8-8Z",opacity:"0.2"}),N.createElement("path",{d:"M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55ZM208,128a39.93,39.93,0,0,1-10,26.46,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,1,1,12-10.58A40,40,0,0,1,208,128Z"}))],["fill",N.createElement(N.Fragment,null,N.createElement("path",{d:"M160,32.25V223.69a8.29,8.29,0,0,1-3.91,7.18,8,8,0,0,1-9-.56l-65.57-51A4,4,0,0,1,80,176.16V79.84a4,4,0,0,1,1.55-3.15l65.57-51a8,8,0,0,1,10,.16A8.27,8.27,0,0,1,160,32.25ZM60,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H60a4,4,0,0,0,4-4V84A4,4,0,0,0,60,80ZM198,101.56a8,8,0,1,0-12,10.58,24,24,0,0,1,0,31.72,8,8,0,1,0,12,10.58,40,40,0,0,0,0-52.88Z"}))],["light",N.createElement(N.Fragment,null,N.createElement("path",{d:"M154.64,26.61a6,6,0,0,0-6.32.65L77.94,82H32A14,14,0,0,0,18,96v64a14,14,0,0,0,14,14H77.94l70.38,54.74A6,6,0,0,0,158,224V32A6,6,0,0,0,154.64,26.61ZM30,160V96a2,2,0,0,1,2-2H74v68H32A2,2,0,0,1,30,160Zm116,51.73L86,165.07V90.93l60-46.66ZM206,128a37.94,37.94,0,0,1-9.5,25.14,6,6,0,1,1-9-7.94,26,26,0,0,0,0-34.37,6,6,0,0,1,9-7.93A38,38,0,0,1,206,128Z"}))],["regular",N.createElement(N.Fragment,null,N.createElement("path",{d:"M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55ZM208,128a39.93,39.93,0,0,1-10,26.46,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,1,1,12-10.58A40,40,0,0,1,208,128Z"}))],["thin",N.createElement(N.Fragment,null,N.createElement("path",{d:"M153.76,28.41a4,4,0,0,0-4.22.43L78.63,84H32A12,12,0,0,0,20,96v64a12,12,0,0,0,12,12H78.63l70.91,55.16A4.07,4.07,0,0,0,152,228a3.92,3.92,0,0,0,1.76-.41A4,4,0,0,0,156,224V32A4,4,0,0,0,153.76,28.41ZM28,160V96a4,4,0,0,1,4-4H76v72H32A4,4,0,0,1,28,160Zm120,55.82L84,166V90l64-49.78ZM204,128a36,36,0,0,1-9,23.82,4,4,0,1,1-6-5.3,28,28,0,0,0,0-37,4,4,0,0,1,6-5.28A36,36,0,0,1,204,128Z"}))]]),Xa=i.createContext({color:"currentColor",size:"1em",weight:"regular",mirrored:!1}),Pt=N.forwardRef((e,t)=>{const{alt:n,color:a,size:r,weight:s,mirrored:o,children:l,weights:c,...u}=e,{color:d="currentColor",size:v,weight:p="regular",mirrored:f=!1,...C}=N.useContext(Xa);return N.createElement("svg",{ref:t,xmlns:"http://www.w3.org/2000/svg",width:r??v,height:r??v,fill:a??d,viewBox:"0 0 256 256",transform:o||f?"scale(-1, 1)":void 0,...C,...u},!!n&&N.createElement("title",null,n),l,c.get(s??p))});Pt.displayName="IconBase";const xn=N.forwardRef((e,t)=>N.createElement(Pt,{ref:t,...e,weights:ja}));xn.displayName="SpeakerHighIcon";const wn=N.forwardRef((e,t)=>N.createElement(Pt,{ref:t,...e,weights:Ha}));wn.displayName="SpeakerLowIcon";S.span`
2
2
  font-family: 'Courier New', Monaco, monospace;
3
3
  font-size: 1rem;
4
4
  font-weight: 600;
5
5
  color: ${e=>e.theme?.textColor||"#333"};
6
6
  user-select: none;
7
- `;var Zt=S.button`
7
+ `;var zt=S.button`
8
8
  display: inline-flex;
9
9
  align-items: center;
10
10
  justify-content: center;
@@ -33,37 +33,37 @@
33
33
  opacity: 0.6;
34
34
  cursor: not-allowed;
35
35
  }
36
- `;S(Zt)`
36
+ `;S(zt)`
37
37
  padding: 0.25rem 0.5rem;
38
38
  font-size: ${e=>e.theme.fontSizeSmall};
39
- `;S(Zt)`
39
+ `;S(zt)`
40
40
  padding: 0.5rem;
41
41
  min-width: 2.25rem;
42
42
  min-height: 2.25rem;
43
- `;S(Zt)`
43
+ `;S(zt)`
44
44
  padding: 0.25rem;
45
45
  min-width: 1.75rem;
46
46
  min-height: 1.75rem;
47
47
  font-size: ${e=>e.theme.fontSizeSmall};
48
- `;var Ct=S.div`
48
+ `;var wt=S.div`
49
49
  display: inline-flex;
50
50
  align-items: center;
51
51
  gap: 0.5rem;
52
- `,xt=S.input`
52
+ `,yt=S.input`
53
53
  cursor: pointer;
54
54
  accent-color: ${e=>e.theme.inputFocusBorder};
55
55
 
56
56
  &:disabled {
57
57
  cursor: not-allowed;
58
58
  }
59
- `,wt=S.label`
59
+ `,kt=S.label`
60
60
  margin: 0;
61
61
  cursor: pointer;
62
62
  user-select: none;
63
63
  font-family: ${e=>e.theme.fontFamily};
64
64
  font-size: ${e=>e.theme.fontSize};
65
65
  color: ${e=>e.theme.textColor};
66
- `,Be=S.button`
66
+ `,Te=S.button`
67
67
  padding: 0.5rem 1rem;
68
68
  background: ${e=>e.theme.buttonBackground||"#007bff"};
69
69
  color: ${e=>e.theme.buttonText||"white"};
@@ -89,7 +89,7 @@
89
89
  cursor: not-allowed;
90
90
  opacity: 0.6;
91
91
  }
92
- `,Cn=S.input`
92
+ `,yn=S.input`
93
93
  padding: 0.5rem 0.75rem;
94
94
  font-family: ${e=>e.theme.fontFamily};
95
95
  font-size: ${e=>e.theme.fontSize};
@@ -113,10 +113,10 @@
113
113
  opacity: 0.6;
114
114
  cursor: not-allowed;
115
115
  }
116
- `;S(Cn)`
116
+ `;S(yn)`
117
117
  padding: 0.25rem 0.5rem;
118
118
  font-size: ${e=>e.theme.fontSizeSmall};
119
- `;var xn=S.label`
119
+ `;var kn=S.label`
120
120
  font-family: ${e=>e.theme.fontFamily};
121
121
  font-size: ${e=>e.theme.fontSizeSmall};
122
122
  font-weight: 500;
@@ -131,7 +131,7 @@
131
131
  align-items: center;
132
132
  gap: 0.5rem;
133
133
  cursor: pointer;
134
- `;var ja=S.span`
134
+ `;var Ga=S.span`
135
135
  position: absolute;
136
136
  width: 1px;
137
137
  height: 1px;
@@ -141,7 +141,7 @@
141
141
  clip: rect(0, 0, 0, 0);
142
142
  white-space: nowrap;
143
143
  border: 0;
144
- `,Vt=S.select`
144
+ `,jt=S.select`
145
145
  padding: 0.5rem 2rem 0.5rem 0.75rem;
146
146
  font-family: ${e=>e.theme.fontFamily};
147
147
  font-size: ${e=>e.theme.fontSize};
@@ -172,10 +172,10 @@
172
172
  color: ${e=>e.theme.inputText};
173
173
  background-color: ${e=>e.theme.inputBackground};
174
174
  }
175
- `;S(Vt)`
175
+ `;S(jt)`
176
176
  padding: 0.25rem 1.75rem 0.25rem 0.5rem;
177
177
  font-size: ${e=>e.theme.fontSizeSmall};
178
- `;var wn=S.input.attrs({type:"range"})`
178
+ `;var In=S.input.attrs({type:"range"})`
179
179
  -webkit-appearance: none;
180
180
  appearance: none;
181
181
  width: 100%;
@@ -251,7 +251,7 @@
251
251
  &:disabled::-moz-range-thumb {
252
252
  cursor: not-allowed;
253
253
  }
254
- `,Ha=({checked:e,onChange:t,disabled:n=!1,className:a})=>{const r=s=>{t(s.target.checked)};return b.jsxs(Ct,{className:a,children:[b.jsx(xt,{type:"checkbox",id:"automatic-scroll",className:"automatic-scroll",checked:e,onChange:r,disabled:n}),b.jsx(wt,{htmlFor:"automatic-scroll",children:"Automatic Scroll"})]})};function yn(e){return typeof e=="object"&&e!==null&&"type"in e}function qe(e){if(!yn(e))return e;const t=e.direction==="vertical"?"to bottom":"to right",n=e.stops.map(a=>`${a.color} ${a.offset*100}%`).join(", ");return`linear-gradient(${t}, ${n})`}var kn={waveformDrawMode:"inverted",waveOutlineColor:"#ffffff",waveFillColor:"#1a7f8e",waveProgressColor:"rgba(0, 0, 0, 0.10)",selectedWaveOutlineColor:"#ffffff",selectedWaveFillColor:"#00b4d8",selectedTrackControlsBackground:"#d9e9ff",timeColor:"#000",timescaleBackgroundColor:"#fff",playheadColor:"#f00",selectionColor:"rgba(255, 105, 180, 0.7)",loopRegionColor:"rgba(59, 130, 246, 0.3)",loopMarkerColor:"#3b82f6",clipHeaderBackgroundColor:"rgba(0, 0, 0, 0.1)",clipHeaderBorderColor:"rgba(0, 0, 0, 0.2)",clipHeaderTextColor:"#333",clipHeaderFontFamily:"inherit",selectedClipHeaderBackgroundColor:"#b3d9ff",fadeOverlayColor:"rgba(0, 0, 0, 0.4)",backgroundColor:"#ffffff",surfaceColor:"#f5f5f5",borderColor:"#ddd",textColor:"#333",textColorMuted:"#666",inputBackground:"#ffffff",inputBorder:"#ccc",inputText:"#333",inputPlaceholder:"#999",inputFocusBorder:"#0066cc",buttonBackground:"#0091ff",buttonText:"#ffffff",buttonBorder:"#0081e6",buttonHoverBackground:"#0081e6",sliderTrackColor:"#ddd",sliderThumbColor:"#daa520",annotationBoxBackground:"rgba(255, 255, 255, 0.85)",annotationBoxActiveBackground:"rgba(255, 255, 255, 0.95)",annotationBoxHoverBackground:"rgba(255, 255, 255, 0.98)",annotationBoxBorder:"#ff9800",annotationBoxActiveBorder:"#d67600",annotationLabelColor:"#2a2a2a",annotationResizeHandleColor:"rgba(0, 0, 0, 0.4)",annotationResizeHandleActiveColor:"rgba(0, 0, 0, 0.8)",annotationTextItemHoverBackground:"rgba(0, 0, 0, 0.03)",borderRadius:"4px",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, sans-serif',fontSize:"14px",fontSizeSmall:"12px"},Xa=1e3;function Ga(e,t,n,a){if(!yn(t))return t;let r;t.direction==="vertical"?r=e.createLinearGradient(0,0,0,a):r=e.createLinearGradient(0,0,n,0);for(const s of t.stops)r.addColorStop(s.offset,s.color);return r}var Na=S.canvas.attrs(e=>({style:{width:`${e.$cssWidth}px`,height:`${e.$waveHeight}px`}}))`
254
+ `,Na=({checked:e,onChange:t,disabled:n=!1,className:a})=>{const r=s=>{t(s.target.checked)};return b.jsxs(wt,{className:a,children:[b.jsx(yt,{type:"checkbox",id:"automatic-scroll",className:"automatic-scroll",checked:e,onChange:r,disabled:n}),b.jsx(kt,{htmlFor:"automatic-scroll",children:"Automatic Scroll"})]})};function Sn(e){return typeof e=="object"&&e!==null&&"type"in e}function Ue(e){if(!Sn(e))return e;const t=e.direction==="vertical"?"to bottom":"to right",n=e.stops.map(a=>`${a.color} ${a.offset*100}%`).join(", ");return`linear-gradient(${t}, ${n})`}var An={waveformDrawMode:"inverted",waveOutlineColor:"#ffffff",waveFillColor:"#1a7f8e",waveProgressColor:"rgba(0, 0, 0, 0.10)",selectedWaveOutlineColor:"#ffffff",selectedWaveFillColor:"#00b4d8",selectedTrackControlsBackground:"#d9e9ff",timeColor:"#000",timescaleBackgroundColor:"#fff",playheadColor:"#f00",selectionColor:"rgba(255, 105, 180, 0.7)",loopRegionColor:"rgba(59, 130, 246, 0.3)",loopMarkerColor:"#3b82f6",clipHeaderBackgroundColor:"rgba(0, 0, 0, 0.1)",clipHeaderBorderColor:"rgba(0, 0, 0, 0.2)",clipHeaderTextColor:"#333",clipHeaderFontFamily:"inherit",selectedClipHeaderBackgroundColor:"#b3d9ff",fadeOverlayColor:"rgba(0, 0, 0, 0.4)",backgroundColor:"#ffffff",surfaceColor:"#f5f5f5",borderColor:"#ddd",textColor:"#333",textColorMuted:"#666",inputBackground:"#ffffff",inputBorder:"#ccc",inputText:"#333",inputPlaceholder:"#999",inputFocusBorder:"#0066cc",buttonBackground:"#0091ff",buttonText:"#ffffff",buttonBorder:"#0081e6",buttonHoverBackground:"#0081e6",sliderTrackColor:"#ddd",sliderThumbColor:"#daa520",annotationBoxBackground:"rgba(255, 255, 255, 0.85)",annotationBoxActiveBackground:"rgba(255, 255, 255, 0.95)",annotationBoxHoverBackground:"rgba(255, 255, 255, 0.98)",annotationBoxBorder:"#ff9800",annotationBoxActiveBorder:"#d67600",annotationLabelColor:"#2a2a2a",annotationResizeHandleColor:"rgba(0, 0, 0, 0.4)",annotationResizeHandleActiveColor:"rgba(0, 0, 0, 0.8)",annotationTextItemHoverBackground:"rgba(0, 0, 0, 0.03)",borderRadius:"4px",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, sans-serif',fontSize:"14px",fontSizeSmall:"12px"},La=1e3;function Ya(e,t,n,a){if(!Sn(t))return t;let r;t.direction==="vertical"?r=e.createLinearGradient(0,0,0,a):r=e.createLinearGradient(0,0,n,0);for(const s of t.stops)r.addColorStop(s.offset,s.color);return r}var Oa=S.canvas.attrs(e=>({style:{width:`${e.$cssWidth}px`,height:`${e.$waveHeight}px`}}))`
255
255
  float: left;
256
256
  position: relative;
257
257
  /* Promote to own compositing layer for smoother scrolling */
@@ -259,15 +259,15 @@
259
259
  /* Disable image rendering interpolation */
260
260
  image-rendering: pixelated;
261
261
  image-rendering: crisp-edges;
262
- `,La=S.div.attrs(e=>({style:{top:`${e.$waveHeight*e.$index}px`,width:`${e.$cssWidth}px`,height:`${e.$waveHeight}px`}}))`
262
+ `,Ka=S.div.attrs(e=>({style:{top:`${e.$waveHeight*e.$index}px`,width:`${e.$cssWidth}px`,height:`${e.$waveHeight}px`}}))`
263
263
  position: absolute;
264
264
  background: ${e=>e.$waveFillColor};
265
265
  /* Force GPU compositing layer to reduce scroll flickering */
266
266
  transform: translateZ(0);
267
267
  backface-visibility: hidden;
268
- `,Ya=e=>{const{data:t,bits:n,length:a,index:r,className:s,devicePixelRatio:o=1,waveHeight:l=80,waveOutlineColor:c="#E0EFF1",waveFillColor:u="grey",barWidth:d=1,barGap:v=0,transparentBackground:p=!1,drawMode:f="inverted"}=e,C=i.useRef([]),y=i.useCallback(w=>{if(w!==null){const k=parseInt(w.dataset.index,10);C.current[k]=w}},[]);i.useLayoutEffect(()=>{const w=C.current,k=d+v;let A=0;for(let M=0;M<w.length;M++){const $=w[M],E=$.getContext("2d"),R=Math.floor(l/2),T=2**(n-1);if(E){E.resetTransform(),E.clearRect(0,0,$.width,$.height),E.imageSmoothingEnabled=!1,E.scale(o,o);const D=$.width/o;let P;f==="normal"?P=u:P=c,E.fillStyle=Ga(E,P,D,l);const V=A,F=A+D,N=Math.floor((V-d+k)/k)*k;for(let H=Math.max(0,N);H<F;H+=k){const Z=H-V;if(Z+d<=0)continue;const U=H;if(U*2+1<t.length){const re=t[U*2]/T,ne=t[U*2+1]/T,q=Math.abs(re*R),ae=Math.abs(ne*R);f==="normal"?E.fillRect(Z,R-ae,d,ae+q):(E.fillRect(Z,0,d,R-ae),E.fillRect(Z,R+q,d,R-q))}}}A+=$.width/o}},[t,n,l,c,u,o,a,d,v,f]);let m=a,g=0;const I=[];for(;m>0;){const w=Math.min(m,Xa),k=b.jsx(Na,{$cssWidth:w,width:w*o,height:l*o,$waveHeight:l,"data-index":g,ref:y},`${a}-${g}`);I.push(k),m-=w,g+=1}const h=p?"transparent":qe(u);return b.jsx(La,{$index:r,$cssWidth:a,className:s,$waveHeight:l,$waveFillColor:h,children:I})},In=22,Sn=S.div`
268
+ `,Ua=e=>{const{data:t,bits:n,length:a,index:r,className:s,devicePixelRatio:o=1,waveHeight:l=80,waveOutlineColor:c="#E0EFF1",waveFillColor:u="grey",barWidth:d=1,barGap:v=0,transparentBackground:p=!1,drawMode:f="inverted"}=e,C=i.useRef([]),y=i.useCallback(k=>{if(k!==null){const x=parseInt(k.dataset.index,10);C.current[x]=k}},[]);i.useLayoutEffect(()=>{const k=C.current,x=d+v;let $=0;for(let E=0;E<k.length;E++){const M=k[E],A=M.getContext("2d"),R=Math.floor(l/2),T=2**(n-1);if(A){A.resetTransform(),A.clearRect(0,0,M.width,M.height),A.imageSmoothingEnabled=!1,A.scale(o,o);const D=M.width/o;let Z;f==="normal"?Z=u:Z=c,A.fillStyle=Ya(A,Z,D,l);const P=$,V=$+D,Y=Math.floor((P-d+x)/x)*x;for(let j=Math.max(0,Y);j<V;j+=x){const F=j-P;if(F+d<=0)continue;const U=j;if(U*2+1<t.length){const oe=t[U*2]/T,Q=t[U*2+1]/T,ee=Math.abs(oe*R),te=Math.abs(Q*R);f==="normal"?A.fillRect(F,R-te,d,te+ee):(A.fillRect(F,0,d,R-te),A.fillRect(F,R+ee,d,R-ee))}}}$+=M.width/o}},[t,n,l,c,u,o,a,d,v,f]);let m=a,g=0;const I=[];for(;m>0;){const k=Math.min(m,La),x=b.jsx(Oa,{$cssWidth:k,width:k*o,height:l*o,$waveHeight:l,"data-index":g,ref:y},`${a}-${g}`);I.push(x),m-=k,g+=1}const h=p?"transparent":Ue(u);return b.jsx(Ka,{$index:r,$cssWidth:a,className:s,$waveHeight:l,$waveFillColor:h,children:I})},$n=22,Mn=S.div`
269
269
  position: relative;
270
- height: ${In}px;
270
+ height: ${$n}px;
271
271
  background: ${e=>e.$isSelected?e.theme.selectedClipHeaderBackgroundColor:e.theme.clipHeaderBackgroundColor};
272
272
  border-bottom: 1px solid ${e=>e.theme.clipHeaderBorderColor};
273
273
  display: flex;
@@ -289,7 +289,7 @@
289
289
  cursor: grabbing;
290
290
  }
291
291
  `}
292
- `,An=S.span`
292
+ `,Rn=S.span`
293
293
  font-size: 11px;
294
294
  font-weight: 600;
295
295
  font-family: ${e=>e.theme.clipHeaderFontFamily};
@@ -297,12 +297,12 @@
297
297
  white-space: nowrap;
298
298
  overflow: hidden;
299
299
  text-overflow: ellipsis;
300
- `,Oa=({trackName:e,isSelected:t=!1})=>b.jsx(Sn,{$isDragging:!1,$interactive:!1,$isSelected:t,children:b.jsx(An,{children:e})}),Ka=({clipId:e,trackIndex:t,clipIndex:n,trackName:a,isSelected:r=!1,disableDrag:s=!1,dragHandleProps:o})=>{if(s||!o)return b.jsx(Oa,{trackName:a,isSelected:r});const{attributes:l,listeners:c,setActivatorNodeRef:u}=o;return b.jsx(Sn,{ref:u,"data-clip-id":e,$interactive:!0,$isSelected:r,...c,...l,children:b.jsx(An,{children:a})})},Ua=8,Ja=24,qa=S.div`
300
+ `,Ja=({trackName:e,isSelected:t=!1})=>b.jsx(Mn,{$isDragging:!1,$interactive:!1,$isSelected:t,children:b.jsx(Rn,{children:e})}),qa=({clipId:e,trackIndex:t,clipIndex:n,trackName:a,isSelected:r=!1,disableDrag:s=!1,dragHandleProps:o})=>{if(s||!o)return b.jsx(Ja,{trackName:a,isSelected:r});const{attributes:l,listeners:c,setActivatorNodeRef:u}=o;return b.jsx(Mn,{ref:u,"data-clip-id":e,$interactive:!0,$isSelected:r,...c,...l,children:b.jsx(Rn,{children:a})})},Qa=8,er=24,tr=S.div`
301
301
  position: absolute;
302
302
  ${e=>e.$edge==="left"?"left: 0;":"right: 0;"}
303
303
  top: 0;
304
304
  bottom: 0;
305
- width: ${e=>e.$touchOptimized?Ja:Ua}px;
305
+ width: ${e=>e.$touchOptimized?er:Qa}px;
306
306
  cursor: col-resize;
307
307
  user-select: none;
308
308
  z-index: 105; /* Above waveform, below header */
@@ -325,19 +325,19 @@
325
325
  background: rgba(255, 255, 255, 0.4);
326
326
  ${e=>e.$edge==="left"?"border-left: 2px solid rgba(255, 255, 255, 0.8);":"border-right: 2px solid rgba(255, 255, 255, 0.8);"}
327
327
  }
328
- `,qt=({clipId:e,trackIndex:t,clipIndex:n,edge:a,dragHandleProps:r,touchOptimized:s=!1})=>{const[o,l]=i.useState(!1);if(!r)return null;const{attributes:c,listeners:u,setActivatorNodeRef:d,isDragging:v}=r;return b.jsx(qa,{ref:d,"data-clip-id":e,"data-boundary-edge":a,$edge:a,$isDragging:v,$isHovered:o,$touchOptimized:s,onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),...u,...c})},Qa=S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
328
+ `,tn=({clipId:e,trackIndex:t,clipIndex:n,edge:a,dragHandleProps:r,touchOptimized:s=!1})=>{const[o,l]=i.useState(!1);if(!r)return null;const{attributes:c,listeners:u,setActivatorNodeRef:d,isDragging:v}=r;return b.jsx(tr,{ref:d,"data-clip-id":e,"data-boundary-edge":a,$edge:a,$isDragging:v,$isHovered:o,$touchOptimized:s,onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),...u,...c})},nr=S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
329
329
  position: absolute;
330
330
  top: 0;
331
331
  bottom: 0;
332
332
  pointer-events: none;
333
333
  z-index: 50;
334
- `,er=S.svg`
334
+ `,ar=S.svg`
335
335
  width: 100%;
336
336
  height: 100%;
337
337
  display: block;
338
338
  /* Flip horizontally for fadeOut - makes it mirror of fadeIn */
339
339
  transform: ${e=>e.$type==="fadeOut"?"scaleX(-1)":"none"};
340
- `;function tr(e,t,n="logarithmic"){const a=[],r=Math.max(20,Math.min(e,100));for(let s=0;s<=r;s++){const o=s/r*e,l=s/r;let c;switch(n){case"linear":c=l;break;case"exponential":c=l*l;break;case"sCurve":c=(1-Math.cos(l*Math.PI))/2;break;case"logarithmic":default:c=Math.log10(1+l*9)/Math.log10(10);break}const u=(1-c)*t;a.push(`${o},${u}`)}return`M 0,${t} L ${a.join(" L ")} L ${e},0 L 0,0 Z`}var Qt=({left:e,width:t,type:n,curveType:a="logarithmic",color:r})=>{const s=S.useTheme();if(t<1)return null;const o=r||s?.fadeOverlayColor||"rgba(0, 0, 0, 0.4)";return b.jsx(Qa,{$left:e,$width:t,$type:n,children:b.jsx(er,{$type:n,viewBox:`0 0 ${t} 100`,preserveAspectRatio:"none",children:b.jsx("path",{d:tr(t,100,a),fill:o})})})},nr=S.div.attrs(e=>({style:e.$isOverlay?{}:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
340
+ `;function rr(e,t,n="logarithmic"){const a=[],r=Math.max(20,Math.min(e,100));for(let s=0;s<=r;s++){const o=s/r*e,l=s/r;let c;switch(n){case"linear":c=l;break;case"exponential":c=l*l;break;case"sCurve":c=(1-Math.cos(l*Math.PI))/2;break;case"logarithmic":default:c=Math.log10(1+l*9)/Math.log10(10);break}const u=(1-c)*t;a.push(`${o},${u}`)}return`M 0,${t} L ${a.join(" L ")} L ${e},0 L 0,0 Z`}var nn=({left:e,width:t,type:n,curveType:a="logarithmic",color:r})=>{const s=S.useTheme();if(t<1)return null;const o=r||s?.fadeOverlayColor||"rgba(0, 0, 0, 0.4)";return b.jsx(nr,{$left:e,$width:t,$type:n,children:b.jsx(ar,{$type:n,viewBox:`0 0 ${t} 100`,preserveAspectRatio:"none",children:b.jsx("path",{d:rr(t,100,a),fill:o})})})},or=S.div.attrs(e=>({style:e.$isOverlay?{}:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
341
341
  position: ${e=>e.$isOverlay?"relative":"absolute"};
342
342
  top: 0;
343
343
  height: ${e=>e.$isOverlay?"auto":"100%"};
@@ -351,20 +351,20 @@
351
351
  &:hover {
352
352
  background: rgba(255, 255, 255, 0.08);
353
353
  }
354
- `,ar=S.div`
354
+ `,sr=S.div`
355
355
  flex: 1;
356
356
  position: relative;
357
357
  overflow: ${e=>e.$isOverlay?"visible":"hidden"};
358
- `,Wt=({children:e,className:t,clipId:n,trackIndex:a,clipIndex:r,trackName:s,startSample:o,durationSamples:l,samplesPerPixel:c,showHeader:u=!1,disableHeaderDrag:d=!1,isOverlay:v=!1,isSelected:p=!1,onMouseDown:f,trackId:C,fadeIn:y,fadeOut:m,sampleRate:g=44100,showFades:I=!1,touchOptimized:x=!1})=>{const h=Math.floor(o/c),k=Math.floor((o+l)/c)-h,A=u&&!d&&!v,M=`clip-${a}-${r}`,{attributes:$,listeners:E,setNodeRef:R,setActivatorNodeRef:T,transform:D,isDragging:P}=Ee.useDraggable({id:M,data:{clipId:n,trackIndex:a,clipIndex:r},disabled:!A}),V=`clip-boundary-left-${a}-${r}`,{attributes:F,listeners:N,setActivatorNodeRef:H,isDragging:Z}=Ee.useDraggable({id:V,data:{clipId:n,trackIndex:a,clipIndex:r,boundary:"left"},disabled:!A}),U=`clip-boundary-right-${a}-${r}`,{attributes:re,listeners:ne,setActivatorNodeRef:q,isDragging:ae}=Ee.useDraggable({id:U,data:{clipId:n,trackIndex:a,clipIndex:r,boundary:"right"},disabled:!A}),be=D?{transform:Tt.Translate.toString(D),zIndex:P?100:void 0}:void 0;return b.jsxs(nr,{ref:R,style:be,className:t,$left:h,$width:k,$isOverlay:v,"data-clip-container":"true","data-track-id":C,onMouseDown:f,children:[u&&b.jsx(Ka,{clipId:n,trackIndex:a,clipIndex:r,trackName:s,isSelected:p,disableDrag:d,dragHandleProps:A?{attributes:$,listeners:E,setActivatorNodeRef:T}:void 0}),b.jsxs(ar,{$isOverlay:v,children:[e,I&&y&&y.duration>0&&b.jsx(Qt,{left:0,width:Math.floor(y.duration*g/c),type:"fadeIn",curveType:y.type}),I&&m&&m.duration>0&&b.jsx(Qt,{left:k-Math.floor(m.duration*g/c),width:Math.floor(m.duration*g/c),type:"fadeOut",curveType:m.type})]}),u&&!d&&!v&&b.jsxs(b.Fragment,{children:[b.jsx(qt,{clipId:n,trackIndex:a,clipIndex:r,edge:"left",touchOptimized:x,dragHandleProps:{attributes:F,listeners:N,setActivatorNodeRef:H,isDragging:Z}}),b.jsx(qt,{clipId:n,trackIndex:a,clipIndex:r,edge:"right",touchOptimized:x,dragHandleProps:{attributes:re,listeners:ne,setActivatorNodeRef:q,isDragging:ae}})]})]})},rr=S.div`
358
+ `,Zt=({children:e,className:t,clipId:n,trackIndex:a,clipIndex:r,trackName:s,startSample:o,durationSamples:l,samplesPerPixel:c,showHeader:u=!1,disableHeaderDrag:d=!1,isOverlay:v=!1,isSelected:p=!1,onMouseDown:f,trackId:C,fadeIn:y,fadeOut:m,sampleRate:g=44100,showFades:I=!1,touchOptimized:w=!1})=>{const h=Math.floor(o/c),x=Math.floor((o+l)/c)-h,$=u&&!d&&!v,E=`clip-${a}-${r}`,{attributes:M,listeners:A,setNodeRef:R,setActivatorNodeRef:T,transform:D,isDragging:Z}=De.useDraggable({id:E,data:{clipId:n,trackIndex:a,clipIndex:r},disabled:!$}),P=`clip-boundary-left-${a}-${r}`,{attributes:V,listeners:Y,setActivatorNodeRef:j,isDragging:F}=De.useDraggable({id:P,data:{clipId:n,trackIndex:a,clipIndex:r,boundary:"left"},disabled:!$}),U=`clip-boundary-right-${a}-${r}`,{attributes:oe,listeners:Q,setActivatorNodeRef:ee,isDragging:te}=De.useDraggable({id:U,data:{clipId:n,trackIndex:a,clipIndex:r,boundary:"right"},disabled:!$}),be=D?{transform:Ft.Translate.toString(D),zIndex:Z?100:void 0}:void 0;return b.jsxs(or,{ref:R,style:be,className:t,$left:h,$width:x,$isOverlay:v,"data-clip-container":"true","data-track-id":C,onMouseDown:f,children:[u&&b.jsx(qa,{clipId:n,trackIndex:a,clipIndex:r,trackName:s,isSelected:p,disableDrag:d,dragHandleProps:$?{attributes:M,listeners:A,setActivatorNodeRef:T}:void 0}),b.jsxs(sr,{$isOverlay:v,children:[e,I&&y&&y.duration>0&&b.jsx(nn,{left:0,width:Math.floor(y.duration*g/c),type:"fadeIn",curveType:y.type}),I&&m&&m.duration>0&&b.jsx(nn,{left:x-Math.floor(m.duration*g/c),width:Math.floor(m.duration*g/c),type:"fadeOut",curveType:m.type})]}),u&&!d&&!v&&b.jsxs(b.Fragment,{children:[b.jsx(tn,{clipId:n,trackIndex:a,clipIndex:r,edge:"left",touchOptimized:w,dragHandleProps:{attributes:V,listeners:Y,setActivatorNodeRef:j,isDragging:F}}),b.jsx(tn,{clipId:n,trackIndex:a,clipIndex:r,edge:"right",touchOptimized:w,dragHandleProps:{attributes:oe,listeners:Q,setActivatorNodeRef:ee,isDragging:te}})]})]})},ir=S.div`
359
359
  display: inline-flex;
360
360
  align-items: center;
361
361
  gap: 0.5rem;
362
- `,or=S(xn)`
362
+ `,lr=S(kn)`
363
363
  margin: 0;
364
364
  white-space: nowrap;
365
- `,sr=S(wn)`
365
+ `,cr=S(In)`
366
366
  width: 120px;
367
- `,ir=({volume:e,onChange:t,disabled:n=!1,className:a})=>{const r=s=>{t(parseFloat(s.target.value)/100)};return b.jsxs(rr,{className:a,children:[b.jsx(or,{htmlFor:"master-gain",children:"Master Volume"}),b.jsx(sr,{min:"0",max:"100",value:e*100,onChange:r,disabled:n,id:"master-gain"})]})};S.div.attrs(e=>({style:{transform:`translate3d(${e.$position}px, 0, 0)`}}))`
367
+ `,ur=({volume:e,onChange:t,disabled:n=!1,className:a})=>{const r=s=>{t(parseFloat(s.target.value)/100)};return b.jsxs(ir,{className:a,children:[b.jsx(lr,{htmlFor:"master-gain",children:"Master Volume"}),b.jsx(cr,{min:"0",max:"100",value:e*100,onChange:r,disabled:n,id:"master-gain"})]})};S.div.attrs(e=>({style:{transform:`translate3d(${e.$position}px, 0, 0)`}}))`
368
368
  position: absolute;
369
369
  top: 0;
370
370
  left: 0;
@@ -398,23 +398,23 @@
398
398
  width: 2px;
399
399
  height: 100%;
400
400
  background: ${e=>e.$color};
401
- `;var lr=S.div`
401
+ `;var dr=S.div`
402
402
  overflow-y: hidden;
403
403
  overflow-x: auto;
404
404
  position: relative;
405
- `,cr=S.div.attrs(e=>({style:e.$width!==void 0?{width:`${e.$width}px`}:{}}))`
405
+ `,fr=S.div.attrs(e=>({style:e.$width!==void 0?{width:`${e.$width}px`}:{}}))`
406
406
  position: relative;
407
407
  background: ${e=>e.$backgroundColor||"transparent"};
408
- `,ur=S.div.attrs(e=>({style:e.$width?{minWidth:`${e.$width}px`}:{}}))`
408
+ `,mr=S.div.attrs(e=>({style:e.$width?{minWidth:`${e.$width}px`}:{}}))`
409
409
  background: ${e=>e.$backgroundColor||"white"};
410
410
  width: 100%;
411
411
  position: relative;
412
412
  overflow: hidden; /* Constrain loop region to timescale area */
413
- `,dr=S.div.attrs(e=>({style:e.$width!==void 0?{minWidth:`${e.$width}px`}:{}}))`
413
+ `,hr=S.div.attrs(e=>({style:e.$width!==void 0?{minWidth:`${e.$width}px`}:{}}))`
414
414
  position: relative;
415
415
  background: ${e=>e.$backgroundColor||"transparent"};
416
416
  width: 100%;
417
- `,fr=S.div`
417
+ `,pr=S.div`
418
418
  position: absolute;
419
419
  top: 0;
420
420
  left: 0;
@@ -423,7 +423,7 @@
423
423
  cursor: crosshair;
424
424
  /* When selecting, raise z-index above clip boundaries (z-index: 105) to prevent interference */
425
425
  z-index: ${e=>e.$isSelecting?110:1};
426
- `,Pt=({children:e,backgroundColor:t,timescaleBackgroundColor:n,timescale:a,timescaleWidth:r,tracksWidth:s,scrollContainerWidth:o,controlsWidth:l,onTracksClick:c,onTracksMouseDown:u,onTracksMouseMove:d,onTracksMouseUp:v,scrollContainerRef:p,isSelecting:f})=>b.jsx(lr,{"data-scroll-container":"true",ref:p,children:b.jsxs(cr,{$backgroundColor:t,$width:o,children:[a&&b.jsx(ur,{$width:r,$backgroundColor:n,children:a}),b.jsxs(dr,{$width:s,$backgroundColor:t,children:[e,(c||u)&&b.jsx(fr,{$controlsWidth:l,$isSelecting:f,onClick:c,onMouseDown:u,onMouseMove:d,onMouseUp:v})]})]})});S.withTheme(Pt);var mr=S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
426
+ `,Ht=({children:e,backgroundColor:t,timescaleBackgroundColor:n,timescale:a,timescaleWidth:r,tracksWidth:s,scrollContainerWidth:o,controlsWidth:l,onTracksClick:c,onTracksMouseDown:u,onTracksMouseMove:d,onTracksMouseUp:v,scrollContainerRef:p,isSelecting:f,"data-playlist-state":C})=>b.jsx(dr,{"data-scroll-container":"true","data-playlist-state":C,ref:p,children:b.jsxs(fr,{$backgroundColor:t,$width:o,children:[a&&b.jsx(mr,{$width:r,$backgroundColor:n,children:a}),b.jsxs(hr,{$width:s,$backgroundColor:t,children:[e,(c||u)&&b.jsx(pr,{$controlsWidth:l,$isSelecting:f,onClick:c,onMouseDown:u,onMouseMove:d,onMouseUp:v})]})]})});S.withTheme(Ht);var gr=S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
427
427
  position: absolute;
428
428
  top: 0;
429
429
  background: ${e=>e.$color};
@@ -431,7 +431,7 @@
431
431
  z-index: 60; /* Above clips (z-index: 10) and fades (z-index: 50), below playhead (z-index: 100) */
432
432
  pointer-events: none;
433
433
  opacity: 0.3;
434
- `,$n=({startPosition:e,endPosition:t,color:n="#00ff00"})=>{const a=Math.max(0,t-e);return a<=0?null:b.jsx(mr,{$left:e,$width:a,$color:n,"data-selection":!0})};S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
434
+ `,En=({startPosition:e,endPosition:t,color:n="#00ff00"})=>{const a=Math.max(0,t-e);return a<=0?null:b.jsx(gr,{$left:e,$width:a,$color:n,"data-selection":!0})};S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
435
435
  position: absolute;
436
436
  top: 0;
437
437
  background: ${e=>e.$color};
@@ -458,7 +458,7 @@
458
458
  border-top: 8px solid ${e=>e.$color};
459
459
  ${e=>e.$isStart?"border-right: 8px solid transparent;":"border-left: 8px solid transparent;"}
460
460
  }
461
- `;var en=S.div.attrs(e=>({style:{left:`${e.$left}px`}}))`
461
+ `;var an=S.div.attrs(e=>({style:{left:`${e.$left}px`}}))`
462
462
  position: absolute;
463
463
  top: 0;
464
464
  width: 12px;
@@ -495,7 +495,7 @@
495
495
  &:hover::before {
496
496
  opacity: 1;
497
497
  }
498
- `,hr=S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
498
+ `,br=S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
499
499
  position: absolute;
500
500
  top: 0;
501
501
  height: 100%;
@@ -506,41 +506,41 @@
506
506
  &:active {
507
507
  cursor: grabbing;
508
508
  }
509
- `,pr=({startPosition:e,endPosition:t,markerColor:n="#3b82f6",regionColor:a="rgba(59, 130, 246, 0.3)",onLoopStartChange:r,onLoopEndChange:s,onLoopRegionMove:o,minPosition:l=0,maxPosition:c=1/0})=>{const[u,d]=i.useState(null),v=i.useRef(0),p=i.useRef(0),f=i.useRef(0),C=Math.max(0,t-e),y=i.useCallback((g,I)=>{g.preventDefault(),g.stopPropagation(),d(I),v.current=g.clientX,p.current=I==="start"?e:t;const x=w=>{const k=w.clientX-v.current,A=p.current+k;if(I==="start"){const M=Math.max(l,Math.min(t-10,A));r?.(M)}else{const M=Math.max(e+10,Math.min(c,A));s?.(M)}},h=()=>{d(null),document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",h)};document.addEventListener("mousemove",x),document.addEventListener("mouseup",h)},[e,t,l,c,r,s]),m=i.useCallback(g=>{g.preventDefault(),g.stopPropagation(),d("region"),v.current=g.clientX,p.current=e,f.current=t;const I=t-e,x=w=>{const k=w.clientX-v.current;let A=p.current+k,M=f.current+k;A<l&&(A=l,M=l+I),M>c&&(M=c,A=c-I),o?.(A,M)},h=()=>{d(null),document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",h)};document.addEventListener("mousemove",x),document.addEventListener("mouseup",h)},[e,t,l,c,o]);return C<=0?null:b.jsxs(b.Fragment,{children:[b.jsx(hr,{$left:e,$width:C,$color:a,$isDragging:u==="region",onMouseDown:m,"data-loop-region-timescale":!0}),b.jsx(en,{$left:e,$color:n,$isStart:!0,$isDragging:u==="start",onMouseDown:g=>y(g,"start"),"data-loop-marker-handle":"start"}),b.jsx(en,{$left:t,$color:n,$isStart:!1,$isDragging:u==="end",onMouseDown:g=>y(g,"end"),"data-loop-marker-handle":"end"})]})},gr=S.div.attrs(e=>({style:{left:`${e.$leftOffset||0}px`}}))`
509
+ `,vr=({startPosition:e,endPosition:t,markerColor:n="#3b82f6",regionColor:a="rgba(59, 130, 246, 0.3)",onLoopStartChange:r,onLoopEndChange:s,onLoopRegionMove:o,minPosition:l=0,maxPosition:c=1/0})=>{const[u,d]=i.useState(null),v=i.useRef(0),p=i.useRef(0),f=i.useRef(0),C=Math.max(0,t-e),y=i.useCallback((g,I)=>{g.preventDefault(),g.stopPropagation(),d(I),v.current=g.clientX,p.current=I==="start"?e:t;const w=k=>{const x=k.clientX-v.current,$=p.current+x;if(I==="start"){const E=Math.max(l,Math.min(t-10,$));r?.(E)}else{const E=Math.max(e+10,Math.min(c,$));s?.(E)}},h=()=>{d(null),document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",h)};document.addEventListener("mousemove",w),document.addEventListener("mouseup",h)},[e,t,l,c,r,s]),m=i.useCallback(g=>{g.preventDefault(),g.stopPropagation(),d("region"),v.current=g.clientX,p.current=e,f.current=t;const I=t-e,w=k=>{const x=k.clientX-v.current;let $=p.current+x,E=f.current+x;$<l&&($=l,E=l+I),E>c&&(E=c,$=c-I),o?.($,E)},h=()=>{d(null),document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",h)};document.addEventListener("mousemove",w),document.addEventListener("mouseup",h)},[e,t,l,c,o]);return C<=0?null:b.jsxs(b.Fragment,{children:[b.jsx(br,{$left:e,$width:C,$color:a,$isDragging:u==="region",onMouseDown:m,"data-loop-region-timescale":!0}),b.jsx(an,{$left:e,$color:n,$isStart:!0,$isDragging:u==="start",onMouseDown:g=>y(g,"start"),"data-loop-marker-handle":"start"}),b.jsx(an,{$left:t,$color:n,$isStart:!1,$isDragging:u==="end",onMouseDown:g=>y(g,"end"),"data-loop-marker-handle":"end"})]})},Cr=S.div.attrs(e=>({style:{left:`${e.$leftOffset||0}px`}}))`
510
510
  position: absolute;
511
511
  top: 0;
512
512
  right: 0;
513
513
  height: 100%; /* Stay within timescale bounds, don't extend into tracks */
514
514
  cursor: crosshair;
515
515
  z-index: 40; /* Below markers and shading */
516
- `,br=({startPosition:e,endPosition:t,markerColor:n="#3b82f6",regionColor:a="rgba(59, 130, 246, 0.3)",onLoopRegionChange:r,minPosition:s=0,maxPosition:o=1/0,controlsOffset:l=0})=>{const[c,u]=i.useState(!1),d=i.useRef(0),v=i.useRef(null),p=t>e,f=i.useCallback(C=>{const y=C.target;if(y.closest("[data-loop-marker-handle]")||y.closest("[data-loop-region-timescale]"))return;C.preventDefault(),u(!0);const m=v.current?.getBoundingClientRect();if(!m)return;const g=C.clientX-m.left,I=Math.max(s,Math.min(o,g));d.current=I,r?.(I,I);const x=w=>{const k=w.clientX-m.left,A=Math.max(s,Math.min(o,k)),M=Math.min(d.current,A),$=Math.max(d.current,A);r?.(M,$)},h=()=>{u(!1),document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",h)};document.addEventListener("mousemove",x),document.addEventListener("mouseup",h)},[s,o,r]);return b.jsx(gr,{ref:v,$leftOffset:l,onMouseDown:f,"data-timescale-loop-creator":!0,children:p&&b.jsx(pr,{startPosition:e,endPosition:t,markerColor:n,regionColor:a,minPosition:s,maxPosition:o,onLoopStartChange:C=>r?.(C,t),onLoopEndChange:C=>r?.(e,C),onLoopRegionMove:(C,y)=>r?.(C,y)})})};function at(e,t){const n=Math.floor(e/3600)%24,a=Math.floor(e/60)%60,r=(e%60).toFixed(t);return String(n).padStart(2,"0")+":"+String(a).padStart(2,"0")+":"+r.padStart(t+3,"0")}function tt(e,t){switch(t){case"seconds":return e.toFixed(0);case"thousandths":return e.toFixed(3);case"hh:mm:ss":return at(e,0);case"hh:mm:ss.u":return at(e,1);case"hh:mm:ss.uu":return at(e,2);case"hh:mm:ss.uuu":return at(e,3);default:return at(e,3)}}function Mn(e,t){if(!e)return 0;switch(t){case"seconds":case"thousandths":return parseFloat(e)||0;case"hh:mm:ss":case"hh:mm:ss.u":case"hh:mm:ss.uu":case"hh:mm:ss.uuu":{const n=e.split(":");if(n.length!==3)return 0;const a=parseInt(n[0],10)||0,r=parseInt(n[1],10)||0,s=parseFloat(n[2])||0;return a*3600+r*60+s}default:return 0}}var tn=({id:e,label:t,value:n,format:a,className:r,onChange:s,readOnly:o=!1})=>{const[l,c]=i.useState("");i.useEffect(()=>{const p=tt(n,a);c(p)},[n,a,e]);const u=p=>{const f=p.target.value;c(f)},d=()=>{if(s){const p=Mn(l,a);s(p)}c(tt(n,a))},v=p=>{p.key==="Enter"&&p.currentTarget.blur()};return b.jsxs(b.Fragment,{children:[b.jsx(ja,{as:"label",htmlFor:e,children:t}),b.jsx(Cn,{type:"text",className:r,id:e,value:l,onChange:u,onBlur:d,onKeyDown:v,readOnly:o})]})},vr=({selectionStart:e,selectionEnd:t,onSelectionChange:n,className:a})=>{const[r,s]=i.useState("hh:mm:ss.uuu");i.useEffect(()=>{const c=document.querySelector(".time-format"),u=()=>{c&&s(c.value)};return c&&(s(c.value),c.addEventListener("change",u)),()=>{c?.removeEventListener("change",u)}},[]);const o=c=>{n&&n(c,t)},l=c=>{n&&n(e,c)};return b.jsxs(b.Fragment,{children:[b.jsx(tn,{id:"audio_start",label:"Start of audio selection",value:e,format:r,className:"audio-start form-control mr-sm-2",onChange:o}),b.jsx(tn,{id:"audio_end",label:"End of audio selection",value:t,format:r,className:"audio-end form-control mr-sm-2",onChange:l})]})};function gt(){return window.devicePixelRatio}var Rn=i.createContext(gt()),En=({children:e})=>{const[t,n]=i.useState(gt());return matchMedia(`(resolution: ${gt()}dppx)`).addEventListener("change",()=>{n(gt())},{once:!0}),b.jsx(Rn.Provider,{value:Math.ceil(t),children:e})},Dn=()=>i.useContext(Rn),yt=i.createContext({sampleRate:48e3,samplesPerPixel:1e3,zoomLevels:[1e3,1500,2e3,2500],waveHeight:80,timeScaleHeight:15,controls:{show:!1,width:150},duration:3e4,barWidth:1,barGap:0}),st=()=>i.useContext(yt),it=()=>i.useContext(S.ThemeContext),zt=i.createContext(b.jsx(i.Fragment,{})),Cr=()=>i.useContext(zt),xr=0,wr=!1,yr=0,kr=0,Ir={progress:xr,isPlaying:wr,selectionStart:yr,selectionEnd:kr};i.createContext(Ir);i.createContext({setIsPlaying:()=>{},setProgress:()=>{},setSelection:()=>{}});var Bn=({isSelected:e,transparentBackground:t,...n})=>{const a=it(),{waveHeight:r,barWidth:s,barGap:o}=st(),l=Dn(),c=e&&a?a.selectedWaveOutlineColor:a?.waveOutlineColor,u=e&&a?a.selectedWaveFillColor:a?.waveFillColor,d=a?.waveformDrawMode||"inverted";return b.jsx(Ya,{...n,...a,waveOutlineColor:c,waveFillColor:u,waveHeight:r,devicePixelRatio:l,barWidth:s,barGap:o,transparentBackground:t,drawMode:d})};function Sr(e,t,n){return Math.ceil(e*n/t)}function Ar(e){const t=Math.floor(e/1e3),n=t%60;return`${(t-n)/60}:${String(n).padStart(2,"0")}`}var $r=S.div.attrs(e=>({style:{width:`${e.$cssWidth}px`,marginLeft:`${e.$controlWidth}px`,height:`${e.$timeScaleHeight}px`}}))`
516
+ `,xr=({startPosition:e,endPosition:t,markerColor:n="#3b82f6",regionColor:a="rgba(59, 130, 246, 0.3)",onLoopRegionChange:r,minPosition:s=0,maxPosition:o=1/0,controlsOffset:l=0})=>{const[c,u]=i.useState(!1),d=i.useRef(0),v=i.useRef(null),p=t>e,f=i.useCallback(C=>{const y=C.target;if(y.closest("[data-loop-marker-handle]")||y.closest("[data-loop-region-timescale]"))return;C.preventDefault(),u(!0);const m=v.current?.getBoundingClientRect();if(!m)return;const g=C.clientX-m.left,I=Math.max(s,Math.min(o,g));d.current=I,r?.(I,I);const w=k=>{const x=k.clientX-m.left,$=Math.max(s,Math.min(o,x)),E=Math.min(d.current,$),M=Math.max(d.current,$);r?.(E,M)},h=()=>{u(!1),document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",h)};document.addEventListener("mousemove",w),document.addEventListener("mouseup",h)},[s,o,r]);return b.jsx(Cr,{ref:v,$leftOffset:l,onMouseDown:f,"data-timescale-loop-creator":!0,children:p&&b.jsx(vr,{startPosition:e,endPosition:t,markerColor:n,regionColor:a,minPosition:s,maxPosition:o,onLoopStartChange:C=>r?.(C,t),onLoopEndChange:C=>r?.(e,C),onLoopRegionMove:(C,y)=>r?.(C,y)})})};function st(e,t){const n=Math.floor(e/3600)%24,a=Math.floor(e/60)%60,r=(e%60).toFixed(t);return String(n).padStart(2,"0")+":"+String(a).padStart(2,"0")+":"+r.padStart(t+3,"0")}function nt(e,t){switch(t){case"seconds":return e.toFixed(0);case"thousandths":return e.toFixed(3);case"hh:mm:ss":return st(e,0);case"hh:mm:ss.u":return st(e,1);case"hh:mm:ss.uu":return st(e,2);case"hh:mm:ss.uuu":return st(e,3);default:return st(e,3)}}function Dn(e,t){if(!e)return 0;switch(t){case"seconds":case"thousandths":return parseFloat(e)||0;case"hh:mm:ss":case"hh:mm:ss.u":case"hh:mm:ss.uu":case"hh:mm:ss.uuu":{const n=e.split(":");if(n.length!==3)return 0;const a=parseInt(n[0],10)||0,r=parseInt(n[1],10)||0,s=parseFloat(n[2])||0;return a*3600+r*60+s}default:return 0}}var rn=({id:e,label:t,value:n,format:a,className:r,onChange:s,readOnly:o=!1})=>{const[l,c]=i.useState("");i.useEffect(()=>{const p=nt(n,a);c(p)},[n,a,e]);const u=p=>{const f=p.target.value;c(f)},d=()=>{if(s){const p=Dn(l,a);s(p)}c(nt(n,a))},v=p=>{p.key==="Enter"&&p.currentTarget.blur()};return b.jsxs(b.Fragment,{children:[b.jsx(Ga,{as:"label",htmlFor:e,children:t}),b.jsx(yn,{type:"text",className:r,id:e,value:l,onChange:u,onBlur:d,onKeyDown:v,readOnly:o})]})},wr=({selectionStart:e,selectionEnd:t,onSelectionChange:n,className:a})=>{const[r,s]=i.useState("hh:mm:ss.uuu");i.useEffect(()=>{const c=document.querySelector(".time-format"),u=()=>{c&&s(c.value)};return c&&(s(c.value),c.addEventListener("change",u)),()=>{c?.removeEventListener("change",u)}},[]);const o=c=>{n&&n(c,t)},l=c=>{n&&n(e,c)};return b.jsxs(b.Fragment,{children:[b.jsx(rn,{id:"audio_start",label:"Start of audio selection",value:e,format:r,className:"audio-start form-control mr-sm-2",onChange:o}),b.jsx(rn,{id:"audio_end",label:"End of audio selection",value:t,format:r,className:"audio-end form-control mr-sm-2",onChange:l})]})};function vt(){return window.devicePixelRatio}var Bn=i.createContext(vt()),Tn=({children:e})=>{const[t,n]=i.useState(vt());return matchMedia(`(resolution: ${vt()}dppx)`).addEventListener("change",()=>{n(vt())},{once:!0}),b.jsx(Bn.Provider,{value:Math.ceil(t),children:e})},Wn=()=>i.useContext(Bn),It=i.createContext({sampleRate:48e3,samplesPerPixel:1e3,zoomLevels:[1e3,1500,2e3,2500],waveHeight:80,timeScaleHeight:15,controls:{show:!1,width:150},duration:3e4,barWidth:1,barGap:0}),ct=()=>i.useContext(It),ut=()=>i.useContext(S.ThemeContext),Xt=i.createContext(b.jsx(i.Fragment,{})),yr=()=>i.useContext(Xt),kr=0,Ir=!1,Sr=0,Ar=0,$r={progress:kr,isPlaying:Ir,selectionStart:Sr,selectionEnd:Ar};i.createContext($r);i.createContext({setIsPlaying:()=>{},setProgress:()=>{},setSelection:()=>{}});var _n=({isSelected:e,transparentBackground:t,...n})=>{const a=ut(),{waveHeight:r,barWidth:s,barGap:o}=ct(),l=Wn(),c=e&&a?a.selectedWaveOutlineColor:a?.waveOutlineColor,u=e&&a?a.selectedWaveFillColor:a?.waveFillColor,d=a?.waveformDrawMode||"inverted";return b.jsx(Ua,{...n,...a,waveOutlineColor:c,waveFillColor:u,waveHeight:r,devicePixelRatio:l,barWidth:s,barGap:o,transparentBackground:t,drawMode:d})};function Mr(e,t,n){return Math.ceil(e*n/t)}function Rr(e){const t=Math.floor(e/1e3),n=t%60;return`${(t-n)/60}:${String(n).padStart(2,"0")}`}var Er=S.div.attrs(e=>({style:{width:`${e.$cssWidth}px`,marginLeft:`${e.$controlWidth}px`,height:`${e.$timeScaleHeight}px`}}))`
517
517
  position: relative;
518
518
  overflow: visible; /* Allow time labels to render above the container */
519
519
  border-bottom: 1px solid ${e=>e.theme.timeColor};
520
520
  box-sizing: border-box;
521
- `,Mr=S.canvas.attrs(e=>({style:{width:`${e.$cssWidth}px`,height:`${e.$timeScaleHeight}px`}}))`
521
+ `,Dr=S.canvas.attrs(e=>({style:{width:`${e.$cssWidth}px`,height:`${e.$timeScaleHeight}px`}}))`
522
522
  position: absolute;
523
523
  left: 0;
524
524
  right: 0;
525
525
  bottom: 0;
526
- `,Rr=S.div.attrs(e=>({style:{left:`${e.$left+4}px`}}))`
526
+ `,Br=S.div.attrs(e=>({style:{left:`${e.$left+4}px`}}))`
527
527
  position: absolute;
528
528
  font-size: 0.75rem; /* Smaller font to prevent overflow */
529
529
  white-space: nowrap; /* Prevent text wrapping */
530
530
  color: ${e=>e.theme.timeColor}; /* Use theme color instead of inheriting */
531
- `,Er=e=>{const{theme:{timeColor:t},duration:n,marker:a,bigStep:r,secondStep:s,renderTimestamp:o}=e,l=new Map,c=[],u=i.useRef(null),{sampleRate:d,samplesPerPixel:v,timeScaleHeight:p,controls:{show:f,width:C}}=i.useContext(yt),y=Dn();i.useEffect(()=>{if(u.current!==null){const x=u.current,h=x.getContext("2d");if(h){h.resetTransform(),h.clearRect(0,0,x.width,x.height),h.imageSmoothingEnabled=!1,h.fillStyle=t,h.scale(y,y);for(const[w,k]of l.entries()){const A=p-k;h.fillRect(w,A,1,k)}}}},[n,y,t,p,r,s,a,l]);const m=Sr(n/1e3,v,d),g=d/v;let I=0;for(let x=0;x<m;x+=g*s/1e3){const h=Math.floor(x);if(I%a===0){const w=I,k=Ar(w),A=o?b.jsx(i.Fragment,{children:o(w,h)},`timestamp-${I}`):b.jsx(Rr,{$left:h,children:k},k);c.push(A),l.set(h,p)}else I%r===0?l.set(h,Math.floor(p/2)):I%s===0&&l.set(h,Math.floor(p/5));I+=s}return b.jsxs($r,{$cssWidth:m,$controlWidth:f?C:0,$timeScaleHeight:p,children:[c,b.jsx(Mr,{$cssWidth:m,$timeScaleHeight:p,width:m*y,height:p*y,ref:u})]})},Tn=S.withTheme(Er),Dr=S.div`
531
+ `,Tr=e=>{const{theme:{timeColor:t},duration:n,marker:a,bigStep:r,secondStep:s,renderTimestamp:o}=e,l=new Map,c=[],u=i.useRef(null),{sampleRate:d,samplesPerPixel:v,timeScaleHeight:p,controls:{show:f,width:C}}=i.useContext(It),y=Wn();i.useEffect(()=>{if(u.current!==null){const w=u.current,h=w.getContext("2d");if(h){h.resetTransform(),h.clearRect(0,0,w.width,w.height),h.imageSmoothingEnabled=!1,h.fillStyle=t,h.scale(y,y);for(const[k,x]of l.entries()){const $=p-x;h.fillRect(k,$,1,x)}}}},[n,y,t,p,r,s,a,l]);const m=Mr(n/1e3,v,d),g=d/v;let I=0;for(let w=0;w<m;w+=g*s/1e3){const h=Math.floor(w);if(I%a===0){const k=I,x=Rr(k),$=o?b.jsx(i.Fragment,{children:o(k,h)},`timestamp-${I}`):b.jsx(Br,{$left:h,children:x},x);c.push($),l.set(h,p)}else I%r===0?l.set(h,Math.floor(p/2)):I%s===0&&l.set(h,Math.floor(p/5));I+=s}return b.jsxs(Er,{$cssWidth:m,$controlWidth:f?C:0,$timeScaleHeight:p,children:[c,b.jsx(Dr,{$cssWidth:m,$timeScaleHeight:p,width:m*y,height:p*y,ref:u})]})},Fn=S.withTheme(Tr),Wr=S.div`
532
532
  display: inline-flex;
533
533
  align-items: center;
534
534
  gap: 0.5rem;
535
- `,Br=[{value:"seconds",label:"seconds"},{value:"thousandths",label:"thousandths"},{value:"hh:mm:ss",label:"hh:mm:ss"},{value:"hh:mm:ss.u",label:"hh:mm:ss + tenths"},{value:"hh:mm:ss.uu",label:"hh:mm:ss + hundredths"},{value:"hh:mm:ss.uuu",label:"hh:mm:ss + milliseconds"}],Tr=({value:e,onChange:t,disabled:n=!1,className:a})=>{const r=s=>{t(s.target.value)};return b.jsx(Dr,{className:a,children:b.jsx(Vt,{className:"time-format",value:e,onChange:r,disabled:n,"aria-label":"Time format selection",children:Br.map(s=>b.jsx("option",{value:s.value,children:s.label},s.value))})})},Wr=S.div.attrs(e=>({style:{height:`${e.$waveHeight*e.$numChannels+(e.$hasClipHeaders?In:0)}px`}}))`
535
+ `,_r=[{value:"seconds",label:"seconds"},{value:"thousandths",label:"thousandths"},{value:"hh:mm:ss",label:"hh:mm:ss"},{value:"hh:mm:ss.u",label:"hh:mm:ss + tenths"},{value:"hh:mm:ss.uu",label:"hh:mm:ss + hundredths"},{value:"hh:mm:ss.uuu",label:"hh:mm:ss + milliseconds"}],Fr=({value:e,onChange:t,disabled:n=!1,className:a})=>{const r=s=>{t(s.target.value)};return b.jsx(Wr,{className:a,children:b.jsx(jt,{className:"time-format",value:e,onChange:r,disabled:n,"aria-label":"Time format selection",children:_r.map(s=>b.jsx("option",{value:s.value,children:s.label},s.value))})})},Zr=S.div.attrs(e=>({style:{height:`${e.$waveHeight*e.$numChannels+(e.$hasClipHeaders?$n:0)}px`}}))`
536
536
  position: relative;
537
537
  display: flex;
538
538
  ${e=>e.$width!==void 0&&`width: ${e.$width}px;`}
539
- `,_r=S.div.attrs(e=>({style:{paddingLeft:`${e.$offset||0}px`}}))`
539
+ `,Vr=S.div.attrs(e=>({style:{paddingLeft:`${e.$offset||0}px`}}))`
540
540
  position: relative;
541
541
  background: ${e=>e.$backgroundColor||"transparent"};
542
542
  flex: 1;
543
- `,Fr=S.div.attrs(e=>({style:{width:`${e.$controlWidth}px`}}))`
543
+ `,Pr=S.div.attrs(e=>({style:{width:`${e.$controlWidth}px`}}))`
544
544
  position: sticky;
545
545
  z-index: 101; /* Above waveform content, below Docusaurus navbar (z-index: 200) */
546
546
  left: 0;
@@ -554,7 +554,7 @@
554
554
  ${e=>e.$isSelected&&`
555
555
  background: ${e.theme.selectedTrackControlsBackground};
556
556
  `}
557
- `,Wn=({numChannels:e,children:t,className:n,backgroundColor:a,offset:r=0,width:s,hasClipHeaders:o=!1,onClick:l,trackId:c,isSelected:u=!1})=>{const{waveHeight:d,controls:{show:v,width:p}}=st(),f=Cr();return b.jsxs(Wr,{$numChannels:e,className:n,$waveHeight:d,$controlWidth:v?p:0,$width:s,$hasClipHeaders:o,$isSelected:u,children:[b.jsx(Fr,{$controlWidth:v?p:0,$isSelected:u,children:f}),b.jsx(_r,{$controlWidth:v?p:0,$backgroundColor:a,$offset:r,onClick:l,"data-track-id":c,children:t})]})},nn=S.button.attrs({type:"button"})`
557
+ `,Zn=({numChannels:e,children:t,className:n,backgroundColor:a,offset:r=0,width:s,hasClipHeaders:o=!1,onClick:l,trackId:c,isSelected:u=!1})=>{const{waveHeight:d,controls:{show:v,width:p}}=ct(),f=yr();return b.jsxs(Zr,{$numChannels:e,className:n,$waveHeight:d,$controlWidth:v?p:0,$width:s,$hasClipHeaders:o,$isSelected:u,children:[b.jsx(Pr,{$controlWidth:v?p:0,$isSelected:u,children:f}),b.jsx(Vr,{$controlWidth:v?p:0,$backgroundColor:a,$offset:r,onClick:l,"data-track-id":c,children:t})]})},on=S.button.attrs({type:"button"})`
558
558
  display: inline-block;
559
559
  font-family: ${e=>e.theme.fontFamily};
560
560
  font-weight: 500;
@@ -613,7 +613,7 @@
613
613
  box-shadow: 0 0 0 0.2rem ${e.theme.inputFocusBorder}33;
614
614
  }
615
615
  `}
616
- `,Zr=S.div`
616
+ `,zr=S.div`
617
617
  margin-bottom: 0.3rem;
618
618
 
619
619
  button:not(:first-child) {
@@ -625,7 +625,7 @@
625
625
  border-top-right-radius: 0;
626
626
  border-bottom-right-radius: 0;
627
627
  }
628
- `,Vr=S.div`
628
+ `,jr=S.div`
629
629
  background: transparent;
630
630
  width: 100%;
631
631
  height: 100%;
@@ -638,7 +638,7 @@
638
638
  text-align: center;
639
639
  border: 1px solid ${e=>e.theme.borderColor};
640
640
  border-radius: ${e=>e.theme.borderRadius};
641
- `,Pr=S.header`
641
+ `,Hr=S.header`
642
642
  overflow: hidden;
643
643
  height: 26px;
644
644
  width: 100%;
@@ -649,7 +649,7 @@
649
649
  font-size: ${e=>e.theme.fontSizeSmall};
650
650
  color: ${e=>e.theme.textColor};
651
651
  background-color: transparent;
652
- `,zr=e=>b.jsx(vn,{weight:"light",...e}),jr=e=>b.jsx(bn,{weight:"light",...e}),an=S(wn)`
652
+ `,Xr=e=>b.jsx(wn,{weight:"light",...e}),Gr=e=>b.jsx(xn,{weight:"light",...e}),sn=S(In)`
653
653
  width: 75%;
654
654
  height: 5px;
655
655
  background: ${e=>e.theme.sliderTrackColor};
@@ -698,7 +698,7 @@
698
698
  &:focus::-moz-range-thumb {
699
699
  border: 2px solid ${e=>e.theme.textColor};
700
700
  }
701
- `,rn=S.label`
701
+ `,ln=S.label`
702
702
  width: 100%;
703
703
  display: flex;
704
704
  justify-content: space-between;
@@ -744,8 +744,8 @@
744
744
  &:active {
745
745
  transform: scale(0.9);
746
746
  }
747
- `;function Hr(e){let t=1/0,n=-1/0;for(let a=0;a<e.length;a++){const r=e[a];t>r&&(t=r),n<r&&(n=r)}return{min:t,max:n}}function on(e,t){const n=Math.pow(2,t-1),a=e<0?e*n:e*(n-1);return Math.max(-n,Math.min(n-1,a))}function _n(e,t){switch(e){case 8:return new Int8Array(t);case 16:return new Int16Array(t)}}function sn(e,t,n){const a=e.length,r=Math.ceil(a/t),s=_n(n,r*2);for(let o=0;o<r;o++){const l=o*t,c=Math.min((o+1)*t,a),u=e.subarray(l,c),d=Hr(u),v=on(d.min,n),p=on(d.max,n);s[o*2]=v,s[o*2+1]=p}return s}function Xr(e,t){const n=e.length,a=1/n,r=e[0].length/2,s=_n(t,r*2);for(let o=0;o<r;o++){let l=0,c=0;for(let u=0;u<n;u++)l+=a*e[u][o*2],c+=a*e[u][o*2+1];s[o*2]=l,s[o*2+1]=c}return[s]}function Gr(e,t=1e3,n=!0,a=0,r,s=16){if(s!==8&&s!==16)throw new Error("Invalid number of bits specified for peaks. Must be 8 or 16.");let o=[];if("getChannelData"in e){const c=e.numberOfChannels,u=r??e.length;for(let d=0;d<c;d++){const p=e.getChannelData(d).subarray(a,u);o.push(sn(p,t,s))}}else{const c=r??e.length,u=e.subarray(a,c);o.push(sn(u,t,s))}return n&&o.length>1&&(o=Xr(o,s)),{length:o[0].length/2,data:o,bits:s}}function Nr(e,t=1e3,n=!0,a=8,r=0,s){const o=s!==void 0?r+s:void 0;return Gr(e,t,n,r,o,a)}function Qe(e,t){this._waveformData=e,this._channelIndex=t}Qe.prototype.min_sample=function(e){var t=(e*this._waveformData.channels+this._channelIndex)*2;return this._waveformData._at(t)};Qe.prototype.max_sample=function(e){var t=(e*this._waveformData.channels+this._channelIndex)*2+1;return this._waveformData._at(t)};Qe.prototype.set_min_sample=function(e,t){var n=(e*this._waveformData.channels+this._channelIndex)*2;return this._waveformData._set_at(n,t)};Qe.prototype.set_max_sample=function(e,t){var n=(e*this._waveformData.channels+this._channelIndex)*2+1;return this._waveformData._set_at(n,t)};Qe.prototype.min_array=function(){for(var e=this._waveformData.length,t=[],n=0;n<e;n++)t.push(this.min_sample(n));return t};Qe.prototype.max_array=function(){for(var e=this._waveformData.length,t=[],n=0;n<e;n++)t.push(this.max_sample(n));return t};var Lr=127,Yr=-128,Or=32767,Kr=-32768;function Ur(e,t){var n=Math.floor(e/t),a=e-n*t;return a>0&&n++,n}function Jr(e){for(var t=e.scale,n=e.amplitude_scale,a=e.split_channels,r=e.length,s=e.sample_rate,o=e.channels.map(function(R){return new Float32Array(R)}),l=a?o.length:1,c=24,u=Ur(r,t),d=e.bits===8?1:2,v=c+u*2*d*l,p=new ArrayBuffer(v),f=new DataView(p),C=0,y=c,m=new Array(l),g=new Array(l),I=0;I<l;I++)m[I]=1/0,g[I]=-1/0;var x=e.bits===8?Yr:Kr,h=e.bits===8?Lr:Or;f.setInt32(0,2,!0),f.setUint32(4,e.bits===8,!0),f.setInt32(8,s,!0),f.setInt32(12,t,!0),f.setInt32(16,u,!0),f.setInt32(20,l,!0);for(var w=0;w<r;w++){var k=0;if(l===1){for(var A=0;A<o.length;++A)k+=o[A][w];k=Math.floor(h*k*n/o.length),k<m[0]&&(m[0]=k,m[0]<x&&(m[0]=x)),k>g[0]&&(g[0]=k,g[0]>h&&(g[0]=h))}else for(var M=0;M<l;++M)k=Math.floor(h*o[M][w]*n),k<m[M]&&(m[M]=k,m[M]<x&&(m[M]=x)),k>g[M]&&(g[M]=k,g[M]>h&&(g[M]=h));if(++C===t){for(var $=0;$<l;$++)e.bits===8?(f.setInt8(y++,m[$]),f.setInt8(y++,g[$])):(f.setInt16(y,m[$],!0),f.setInt16(y+2,g[$],!0),y+=4),m[$]=1/0,g[$]=-1/0;C=0}}if(C>0)for(var E=0;E<l;E++)e.bits===8?(f.setInt8(y++,m[E]),f.setInt8(y++,g[E])):(f.setInt16(y,m[E],!0),f.setInt16(y+2,g[E],!0));return p}function bt(e){"@babel/helpers - typeof";return bt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},bt(e)}function qr(e){return e&&bt(e)==="object"&&"sample_rate"in e&&"samples_per_pixel"in e&&"bits"in e&&"length"in e&&"data"in e}function Qr(e){var t=e&&bt(e)==="object"&&"byteLength"in e;if(t){var n=new DataView(e),a=n.getInt32(0,!0);if(a!==1&&a!==2)throw new TypeError("WaveformData.create(): This waveform data version not supported")}return t}function eo(e){var t=e.data,n=e.channels||1,a=24,r=e.bits===8?1:2,s=e.length*2*n;if(t.length!==s)throw new Error("WaveformData.create(): Length mismatch in JSON waveform data");var o=a+t.length*r,l=new ArrayBuffer(o),c=new DataView(l);c.setInt32(0,2,!0),c.setUint32(4,e.bits===8,!0),c.setInt32(8,e.sample_rate,!0),c.setInt32(12,e.samples_per_pixel,!0),c.setInt32(16,e.length,!0),c.setInt32(20,n,!0);var u=a;if(e.bits===8)for(var d=0;d<t.length;d++)c.setInt8(u++,t[d],!0);else for(var v=0;v<t.length;v++)c.setInt16(u,t[v],!0),u+=2;return l}function et(e){return e==null}function to(e,t){var n=atob(e);return n}function no(e,t,n){var a=to(e),r=a.indexOf(`
748
- `,10)+1,s=a.substring(r)+"",o=new Blob([s],{type:"application/javascript"});return URL.createObjectURL(o)}function ao(e,t,n){var a;return function(s){return a=a||no(e),new Worker(a,s)}}var ro=ao("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogQXVkaW9CdWZmZXItYmFzZWQgV2F2ZWZvcm1EYXRhIGdlbmVyYXRvcgogICAqCiAgICogQWRhcHRlZCBmcm9tIEJsb2NrRmlsZTo6Q2FsY1N1bW1hcnkgaW4gQXVkYWNpdHksIHdpdGggcGVybWlzc2lvbi4KICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2F1ZGFjaXR5L2F1ZGFjaXR5L2Jsb2IvCiAgICogICAxMTA4YzEzNzZjMDkxNjYxNjIzMzVmYWI0NzQzMDA4Y2JhNTdjNGVlL3NyYy9CbG9ja0ZpbGUuY3BwI0wxOTgKICAgKi8KCiAgdmFyIElOVDhfTUFYID0gMTI3OwogIHZhciBJTlQ4X01JTiA9IC0xMjg7CiAgdmFyIElOVDE2X01BWCA9IDMyNzY3OwogIHZhciBJTlQxNl9NSU4gPSAtMzI3Njg7CiAgZnVuY3Rpb24gY2FsY3VsYXRlV2F2ZWZvcm1EYXRhTGVuZ3RoKGF1ZGlvX3NhbXBsZV9jb3VudCwgc2NhbGUpIHsKICAgIHZhciBkYXRhX2xlbmd0aCA9IE1hdGguZmxvb3IoYXVkaW9fc2FtcGxlX2NvdW50IC8gc2NhbGUpOwogICAgdmFyIHNhbXBsZXNfcmVtYWluaW5nID0gYXVkaW9fc2FtcGxlX2NvdW50IC0gZGF0YV9sZW5ndGggKiBzY2FsZTsKICAgIGlmIChzYW1wbGVzX3JlbWFpbmluZyA+IDApIHsKICAgICAgZGF0YV9sZW5ndGgrKzsKICAgIH0KICAgIHJldHVybiBkYXRhX2xlbmd0aDsKICB9CiAgZnVuY3Rpb24gZ2VuZXJhdGVXYXZlZm9ybURhdGEob3B0aW9ucykgewogICAgdmFyIHNjYWxlID0gb3B0aW9ucy5zY2FsZTsKICAgIHZhciBhbXBsaXR1ZGVfc2NhbGUgPSBvcHRpb25zLmFtcGxpdHVkZV9zY2FsZTsKICAgIHZhciBzcGxpdF9jaGFubmVscyA9IG9wdGlvbnMuc3BsaXRfY2hhbm5lbHM7CiAgICB2YXIgbGVuZ3RoID0gb3B0aW9ucy5sZW5ndGg7CiAgICB2YXIgc2FtcGxlX3JhdGUgPSBvcHRpb25zLnNhbXBsZV9yYXRlOwogICAgdmFyIGNoYW5uZWxzID0gb3B0aW9ucy5jaGFubmVscy5tYXAoZnVuY3Rpb24gKGNoYW5uZWwpIHsKICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoY2hhbm5lbCk7CiAgICB9KTsKICAgIHZhciBvdXRwdXRfY2hhbm5lbHMgPSBzcGxpdF9jaGFubmVscyA/IGNoYW5uZWxzLmxlbmd0aCA6IDE7CiAgICB2YXIgaGVhZGVyX3NpemUgPSAyNDsKICAgIHZhciBkYXRhX2xlbmd0aCA9IGNhbGN1bGF0ZVdhdmVmb3JtRGF0YUxlbmd0aChsZW5ndGgsIHNjYWxlKTsKICAgIHZhciBieXRlc19wZXJfc2FtcGxlID0gb3B0aW9ucy5iaXRzID09PSA4ID8gMSA6IDI7CiAgICB2YXIgdG90YWxfc2l6ZSA9IGhlYWRlcl9zaXplICsgZGF0YV9sZW5ndGggKiAyICogYnl0ZXNfcGVyX3NhbXBsZSAqIG91dHB1dF9jaGFubmVsczsKICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodG90YWxfc2l6ZSk7CiAgICB2YXIgZGF0YV92aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcik7CiAgICB2YXIgc2NhbGVfY291bnRlciA9IDA7CiAgICB2YXIgb2Zmc2V0ID0gaGVhZGVyX3NpemU7CiAgICB2YXIgbWluX3ZhbHVlID0gbmV3IEFycmF5KG91dHB1dF9jaGFubmVscyk7CiAgICB2YXIgbWF4X3ZhbHVlID0gbmV3IEFycmF5KG91dHB1dF9jaGFubmVscyk7CiAgICBmb3IgKHZhciBjaGFubmVsID0gMDsgY2hhbm5lbCA8IG91dHB1dF9jaGFubmVsczsgY2hhbm5lbCsrKSB7CiAgICAgIG1pbl92YWx1ZVtjaGFubmVsXSA9IEluZmluaXR5OwogICAgICBtYXhfdmFsdWVbY2hhbm5lbF0gPSAtSW5maW5pdHk7CiAgICB9CiAgICB2YXIgcmFuZ2VfbWluID0gb3B0aW9ucy5iaXRzID09PSA4ID8gSU5UOF9NSU4gOiBJTlQxNl9NSU47CiAgICB2YXIgcmFuZ2VfbWF4ID0gb3B0aW9ucy5iaXRzID09PSA4ID8gSU5UOF9NQVggOiBJTlQxNl9NQVg7CiAgICBkYXRhX3ZpZXcuc2V0SW50MzIoMCwgMiwgdHJ1ZSk7IC8vIFZlcnNpb24KICAgIGRhdGFfdmlldy5zZXRVaW50MzIoNCwgb3B0aW9ucy5iaXRzID09PSA4LCB0cnVlKTsgLy8gSXMgOCBiaXQ/CiAgICBkYXRhX3ZpZXcuc2V0SW50MzIoOCwgc2FtcGxlX3JhdGUsIHRydWUpOyAvLyBTYW1wbGUgcmF0ZQogICAgZGF0YV92aWV3LnNldEludDMyKDEyLCBzY2FsZSwgdHJ1ZSk7IC8vIFNjYWxlCiAgICBkYXRhX3ZpZXcuc2V0SW50MzIoMTYsIGRhdGFfbGVuZ3RoLCB0cnVlKTsgLy8gTGVuZ3RoCiAgICBkYXRhX3ZpZXcuc2V0SW50MzIoMjAsIG91dHB1dF9jaGFubmVscywgdHJ1ZSk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzYW1wbGUgPSAwOwogICAgICBpZiAob3V0cHV0X2NoYW5uZWxzID09PSAxKSB7CiAgICAgICAgZm9yICh2YXIgX2NoYW5uZWwgPSAwOyBfY2hhbm5lbCA8IGNoYW5uZWxzLmxlbmd0aDsgKytfY2hhbm5lbCkgewogICAgICAgICAgc2FtcGxlICs9IGNoYW5uZWxzW19jaGFubmVsXVtpXTsKICAgICAgICB9CiAgICAgICAgc2FtcGxlID0gTWF0aC5mbG9vcihyYW5nZV9tYXggKiBzYW1wbGUgKiBhbXBsaXR1ZGVfc2NhbGUgLyBjaGFubmVscy5sZW5ndGgpOwogICAgICAgIGlmIChzYW1wbGUgPCBtaW5fdmFsdWVbMF0pIHsKICAgICAgICAgIG1pbl92YWx1ZVswXSA9IHNhbXBsZTsKICAgICAgICAgIGlmIChtaW5fdmFsdWVbMF0gPCByYW5nZV9taW4pIHsKICAgICAgICAgICAgbWluX3ZhbHVlWzBdID0gcmFuZ2VfbWluOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc2FtcGxlID4gbWF4X3ZhbHVlWzBdKSB7CiAgICAgICAgICBtYXhfdmFsdWVbMF0gPSBzYW1wbGU7CiAgICAgICAgICBpZiAobWF4X3ZhbHVlWzBdID4gcmFuZ2VfbWF4KSB7CiAgICAgICAgICAgIG1heF92YWx1ZVswXSA9IHJhbmdlX21heDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yICh2YXIgX2NoYW5uZWwyID0gMDsgX2NoYW5uZWwyIDwgb3V0cHV0X2NoYW5uZWxzOyArK19jaGFubmVsMikgewogICAgICAgICAgc2FtcGxlID0gTWF0aC5mbG9vcihyYW5nZV9tYXggKiBjaGFubmVsc1tfY2hhbm5lbDJdW2ldICogYW1wbGl0dWRlX3NjYWxlKTsKICAgICAgICAgIGlmIChzYW1wbGUgPCBtaW5fdmFsdWVbX2NoYW5uZWwyXSkgewogICAgICAgICAgICBtaW5fdmFsdWVbX2NoYW5uZWwyXSA9IHNhbXBsZTsKICAgICAgICAgICAgaWYgKG1pbl92YWx1ZVtfY2hhbm5lbDJdIDwgcmFuZ2VfbWluKSB7CiAgICAgICAgICAgICAgbWluX3ZhbHVlW19jaGFubmVsMl0gPSByYW5nZV9taW47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzYW1wbGUgPiBtYXhfdmFsdWVbX2NoYW5uZWwyXSkgewogICAgICAgICAgICBtYXhfdmFsdWVbX2NoYW5uZWwyXSA9IHNhbXBsZTsKICAgICAgICAgICAgaWYgKG1heF92YWx1ZVtfY2hhbm5lbDJdID4gcmFuZ2VfbWF4KSB7CiAgICAgICAgICAgICAgbWF4X3ZhbHVlW19jaGFubmVsMl0gPSByYW5nZV9tYXg7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCsrc2NhbGVfY291bnRlciA9PT0gc2NhbGUpIHsKICAgICAgICBmb3IgKHZhciBfY2hhbm5lbDMgPSAwOyBfY2hhbm5lbDMgPCBvdXRwdXRfY2hhbm5lbHM7IF9jaGFubmVsMysrKSB7CiAgICAgICAgICBpZiAob3B0aW9ucy5iaXRzID09PSA4KSB7CiAgICAgICAgICAgIGRhdGFfdmlldy5zZXRJbnQ4KG9mZnNldCsrLCBtaW5fdmFsdWVbX2NoYW5uZWwzXSk7CiAgICAgICAgICAgIGRhdGFfdmlldy5zZXRJbnQ4KG9mZnNldCsrLCBtYXhfdmFsdWVbX2NoYW5uZWwzXSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkYXRhX3ZpZXcuc2V0SW50MTYob2Zmc2V0LCBtaW5fdmFsdWVbX2NoYW5uZWwzXSwgdHJ1ZSk7CiAgICAgICAgICAgIGRhdGFfdmlldy5zZXRJbnQxNihvZmZzZXQgKyAyLCBtYXhfdmFsdWVbX2NoYW5uZWwzXSwgdHJ1ZSk7CiAgICAgICAgICAgIG9mZnNldCArPSA0OwogICAgICAgICAgfQogICAgICAgICAgbWluX3ZhbHVlW19jaGFubmVsM10gPSBJbmZpbml0eTsKICAgICAgICAgIG1heF92YWx1ZVtfY2hhbm5lbDNdID0gLUluZmluaXR5OwogICAgICAgIH0KICAgICAgICBzY2FsZV9jb3VudGVyID0gMDsKICAgICAgfQogICAgfQogICAgaWYgKHNjYWxlX2NvdW50ZXIgPiAwKSB7CiAgICAgIGZvciAodmFyIF9jaGFubmVsNCA9IDA7IF9jaGFubmVsNCA8IG91dHB1dF9jaGFubmVsczsgX2NoYW5uZWw0KyspIHsKICAgICAgICBpZiAob3B0aW9ucy5iaXRzID09PSA4KSB7CiAgICAgICAgICBkYXRhX3ZpZXcuc2V0SW50OChvZmZzZXQrKywgbWluX3ZhbHVlW19jaGFubmVsNF0pOwogICAgICAgICAgZGF0YV92aWV3LnNldEludDgob2Zmc2V0KyssIG1heF92YWx1ZVtfY2hhbm5lbDRdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YV92aWV3LnNldEludDE2KG9mZnNldCwgbWluX3ZhbHVlW19jaGFubmVsNF0sIHRydWUpOwogICAgICAgICAgZGF0YV92aWV3LnNldEludDE2KG9mZnNldCArIDIsIG1heF92YWx1ZVtfY2hhbm5lbDRdLCB0cnVlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoZXZ0KSB7CiAgICB2YXIgYnVmZmVyID0gZ2VuZXJhdGVXYXZlZm9ybURhdGEoZXZ0LmRhdGEpOwoKICAgIC8vIFRyYW5zZmVyIGJ1ZmZlciB0byB0aGUgY2FsbGluZyB0aHJlYWQKICAgIHRoaXMucG9zdE1lc3NhZ2UoYnVmZmVyLCBbYnVmZmVyXSk7CiAgICB0aGlzLmNsb3NlKCk7CiAgfTsKCn0pKCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPXdhdmVmb3JtLWRhdGEtd29ya2VyLmpzLm1hcAoK");function De(e){if(qr(e)&&(e=eo(e)),Qr(e)){this._data=new DataView(e),this._offset=this._version()===2?24:20,this._channels=[];for(var t=0;t<this.channels;t++)this._channels[t]=new Qe(this,t)}else throw new TypeError("WaveformData.create(): Unknown data format")}var rt={scale:512,bits:8,amplitude_scale:1,split_channels:!1,disable_worker:!1};function oo(e){var t={scale:e.scale||rt.scale,bits:e.bits||rt.bits,amplitude_scale:e.amplitude_scale||rt.amplitude_scale,split_channels:e.split_channels||rt.split_channels,disable_worker:e.disable_worker||rt.disable_worker};return t}function so(e){for(var t=[],n=0;n<e.numberOfChannels;++n)t.push(e.getChannelData(n).buffer);return t}function Fn(e,t,n){var a=so(e);if(t.disable_worker){var r=Jr({scale:t.scale,bits:t.bits,amplitude_scale:t.amplitude_scale,split_channels:t.split_channels,length:e.length,sample_rate:e.sampleRate,channels:a});n(void 0,new De(r),e)}else{var s=new ro;s.onmessage=function(o){n(void 0,new De(o.data),e)},s.postMessage({scale:t.scale,bits:t.bits,amplitude_scale:t.amplitude_scale,split_channels:t.split_channels,length:e.length,sample_rate:e.sampleRate,channels:a},a)}}function io(e,t,n,a){function r(o){o||(o=new DOMException("EncodingError")),a(o),a=function(){}}var s=e.decodeAudioData(t,function(o){Fn(o,n,a)},r);s&&s.catch(r)}De.create=function(t){return new De(t)};De.createFromAudio=function(e,t){var n=oo(e);if(e.audio_context&&e.array_buffer)return io(e.audio_context,e.array_buffer,n,t);if(e.audio_buffer)return Fn(e.audio_buffer,n,t);throw new TypeError("WaveformData.createFromAudio(): Pass either an AudioContext and ArrayBuffer, or an AudioBuffer object")};function kt(e){this._inputData=e.waveformData,this._output_samples_per_pixel=e.scale,this._scale=this._inputData.scale,this._input_buffer_size=this._inputData.length;var t=this._input_buffer_size*this._inputData.scale,n=Math.ceil(t/this._output_samples_per_pixel),a=24,r=this._inputData.bits===8?1:2,s=a+n*2*this._inputData.channels*r;this._output_data=new ArrayBuffer(s),this.output_dataview=new DataView(this._output_data),this.output_dataview.setInt32(0,2,!0),this.output_dataview.setUint32(4,this._inputData.bits===8,!0),this.output_dataview.setInt32(8,this._inputData.sample_rate,!0),this.output_dataview.setInt32(12,this._output_samples_per_pixel,!0),this.output_dataview.setInt32(16,n,!0),this.output_dataview.setInt32(20,this._inputData.channels,!0),this._outputWaveformData=new De(this._output_data),this._input_index=0,this._output_index=0;var o=this._inputData.channels;this._min=new Array(o),this._max=new Array(o);for(var l=0;l<o;++l)this._input_buffer_size>0?(this._min[l]=this._inputData.channel(l).min_sample(this._input_index),this._max[l]=this._inputData.channel(l).max_sample(this._input_index)):(this._min[l]=0,this._max[l]=0);this._min_value=this._inputData.bits===8?-128:-32768,this._max_value=this._inputData.bits===8?127:32767,this._where=0,this._prev_where=0,this._stop=0,this._last_input_index=0}kt.prototype.sample_at_pixel=function(e){return Math.floor(e*this._output_samples_per_pixel)};kt.prototype.next=function(){for(var e=0,t=1e3,n=this._inputData.channels,a;this._input_index<this._input_buffer_size&&e<t;){for(;Math.floor(this.sample_at_pixel(this._output_index)/this._scale)===this._input_index;){if(this._output_index>0)for(var r=0;r<n;++r)a=this._outputWaveformData.channel(r),a.set_min_sample(this._output_index-1,this._min[r]),a.set_max_sample(this._output_index-1,this._max[r]);if(this._last_input_index=this._input_index,this._output_index++,this._where=this.sample_at_pixel(this._output_index),this._prev_where=this.sample_at_pixel(this._output_index-1),this._where!==this._prev_where)for(var s=0;s<n;++s)this._min[s]=this._max_value,this._max[s]=this._min_value}for(this._where=this.sample_at_pixel(this._output_index),this._stop=Math.floor(this._where/this._scale),this._stop>this._input_buffer_size&&(this._stop=this._input_buffer_size);this._input_index<this._stop;){for(var o=0;o<n;++o){a=this._inputData.channel(o);var l=a.min_sample(this._input_index);l<this._min[o]&&(this._min[o]=l),l=a.max_sample(this._input_index),l>this._max[o]&&(this._max[o]=l)}this._input_index++}e++}if(this._input_index<this._input_buffer_size)return!1;if(this._input_index!==this._last_input_index)for(var c=0;c<n;++c)a=this._outputWaveformData.channel(c),a.set_min_sample(this._output_index-1,this._min[c]),a.set_max_sample(this._output_index-1,this._max[c]);return!0};kt.prototype.getOutputData=function(){return this._output_data};De.prototype={_getResampleOptions:function(t){var n={};if(n.scale=t.scale,n.width=t.width,!et(n.width)&&(typeof n.width!="number"||n.width<=0))throw new RangeError("WaveformData.resample(): width should be a positive integer value");if(!et(n.scale)&&(typeof n.scale!="number"||n.scale<=0))throw new RangeError("WaveformData.resample(): scale should be a positive integer value");if(!n.scale&&!n.width)throw new Error("WaveformData.resample(): Missing scale or width option");if(n.width&&(n.scale=Math.floor(this.duration*this.sample_rate/n.width)),n.scale<this.scale)throw new Error("WaveformData.resample(): Zoom level "+n.scale+" too low, minimum: "+this.scale);return n.abortSignal=t.abortSignal,n},resample:function(t){t=this._getResampleOptions(t),t.waveformData=this;for(var n=new kt(t);!n.next(););return new De(n.getOutputData())},concat:function(){var t=this,n=Array.prototype.slice.call(arguments);n.forEach(function(r){if(t.channels!==r.channels||t.sample_rate!==r.sample_rate||t.bits!==r.bits||t.scale!==r.scale)throw new Error("WaveformData.concat(): Waveforms are incompatible")});var a=this._concatBuffers.apply(this,n);return De.create(a)},_concatBuffers:function(){for(var t=Array.prototype.slice.call(arguments),n=this._offset,a=n,r=0,s=[this].concat(t).map(function(g){return g._data.buffer}),o=0;o<s.length;o++){var l=s[o],c=new DataView(l).getInt32(16,!0);a+=l.byteLength-n,r+=c}for(var u=new ArrayBuffer(a),d=new DataView(s[0]),v=new DataView(u),p=0;p<n;p++)v.setUint8(p,d.getUint8(p));v.setInt32(16,r,!0);for(var f=0,C=new Uint8Array(u,n),y=0;y<s.length;y++){var m=s[y];C.set(new Uint8Array(m,n),f),f+=m.byteLength-n}return u},slice:function(t){var n=0,a=0;if(!et(t.startIndex)&&!et(t.endIndex)?(n=t.startIndex,a=t.endIndex):!et(t.startTime)&&!et(t.endTime)&&(n=this.at_time(t.startTime),a=this.at_time(t.endTime)),n<0)throw new RangeError("startIndex or startTime must not be negative");if(a<0)throw new RangeError("endIndex or endTime must not be negative");n>this.length&&(n=this.length),a>this.length&&(a=this.length),n>a&&(n=a);var r=a-n,s=24,o=this.bits===8?1:2,l=s+r*2*this.channels*o,c=new ArrayBuffer(l),u=new DataView(c);u.setInt32(0,2,!0),u.setUint32(4,this.bits===8,!0),u.setInt32(8,this.sample_rate,!0),u.setInt32(12,this.scale,!0),u.setInt32(16,r,!0),u.setInt32(20,this.channels,!0);for(var d=0;d<r*this.channels*2;d++){var v=this._at(n*this.channels*2+d);this.bits===8?u.setInt8(s+d,v):u.setInt16(s+d*2,v,!0)}return new De(c)},_version:function(){return this._data.getInt32(0,!0)},get length(){return this._data.getUint32(16,!0)},get bits(){var e=!!this._data.getUint32(4,!0);return e?8:16},get duration(){return this.length*this.scale/this.sample_rate},get pixels_per_second(){return this.sample_rate/this.scale},get seconds_per_pixel(){return this.scale/this.sample_rate},get channels(){return this._version()===2?this._data.getInt32(20,!0):1},channel:function(t){if(t>=0&&t<this._channels.length)return this._channels[t];throw new RangeError("Invalid channel: "+t)},get sample_rate(){return this._data.getInt32(8,!0)},get scale(){return this._data.getInt32(12,!0)},_at:function(t){return this.bits===8?this._data.getInt8(this._offset+t):this._data.getInt16(this._offset+t*2,!0)},_set_at:function(t,n){return this.bits===8?this._data.setInt8(this._offset+t,n):this._data.setInt16(this._offset+t*2,n,!0)},at_time:function(t){return Math.floor(t*this.sample_rate/this.scale)},time:function(t){return t*this.scale/this.sample_rate},toJSON:function(){for(var t={version:2,channels:this.channels,sample_rate:this.sample_rate,samples_per_pixel:this.scale,bits:this.bits,length:this.length,data:[]},n=0;n<this.length;n++)for(var a=0;a<this.channels;a++)t.data.push(this.channel(a).min_sample(n)),t.data.push(this.channel(a).max_sample(n));return t},toArrayBuffer:function(){return this._data.buffer}};async function jt(e){const t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch waveform data: ${t.statusText}`);if(e.endsWith(".dat")){const a=await t.arrayBuffer();return De.create(a)}else{const a=await t.json();return De.create(a)}}function Zn(e,t=0){const n=e.channel(t),a=e.bits,r=n.min_array(),s=n.max_array(),o=r.length,l=a===8?new Int8Array(o*2):new Int16Array(o*2);for(let c=0;c<o;c++)l[c*2]=r[c],l[c*2+1]=s[c];return{data:l,bits:a,length:o,sampleRate:e.sample_rate}}async function lo(e,t=0){const n=await jt(e);return Zn(n,t)}async function co(e){const t=await jt(e);return{sampleRate:t.sample_rate,channels:t.channels,duration:t.duration,samplesPerPixel:t.scale,length:t.length,bits:t.bits}}function Vn(e,t,n=0,a,r){let s=e;if(a!==void 0&&r!==void 0){const p=e.scale,f=Math.floor(a/p),C=Math.ceil((a+r)/p);s=s.slice({startIndex:f,endIndex:C})}s.scale!==t&&(s=s.resample({scale:t}));const o=s.channel(n),l=s.bits,c=o.min_array(),u=o.max_array(),d=c.length,v=l===8?new Int8Array(d*2):new Int16Array(d*2);for(let p=0;p<d;p++)v[p*2]=c[p],v[p*2+1]=u[p];return{data:v,bits:l,length:d}}function Pn(e){return{id:e.id,start:parseFloat(e.begin),end:parseFloat(e.end),lines:e.lines,lang:e.language}}function uo(e){return{id:e.id,begin:e.start.toFixed(3),end:e.end.toFixed(3),lines:e.lines,language:e.lang||"en"}}S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
747
+ `;function Nr(e){let t=1/0,n=-1/0;for(let a=0;a<e.length;a++){const r=e[a];t>r&&(t=r),n<r&&(n=r)}return{min:t,max:n}}function cn(e,t){const n=Math.pow(2,t-1),a=e<0?e*n:e*(n-1);return Math.max(-n,Math.min(n-1,a))}function Vn(e,t){switch(e){case 8:return new Int8Array(t);case 16:return new Int16Array(t)}}function un(e,t,n){const a=e.length,r=Math.ceil(a/t),s=Vn(n,r*2);for(let o=0;o<r;o++){const l=o*t,c=Math.min((o+1)*t,a),u=e.subarray(l,c),d=Nr(u),v=cn(d.min,n),p=cn(d.max,n);s[o*2]=v,s[o*2+1]=p}return s}function Lr(e,t){const n=e.length,a=1/n,r=e[0].length/2,s=Vn(t,r*2);for(let o=0;o<r;o++){let l=0,c=0;for(let u=0;u<n;u++)l+=a*e[u][o*2],c+=a*e[u][o*2+1];s[o*2]=l,s[o*2+1]=c}return[s]}function Yr(e,t=1e3,n=!0,a=0,r,s=16){if(s!==8&&s!==16)throw new Error("Invalid number of bits specified for peaks. Must be 8 or 16.");let o=[];if("getChannelData"in e){const c=e.numberOfChannels,u=r??e.length;for(let d=0;d<c;d++){const p=e.getChannelData(d).subarray(a,u);o.push(un(p,t,s))}}else{const c=r??e.length,u=e.subarray(a,c);o.push(un(u,t,s))}return n&&o.length>1&&(o=Lr(o,s)),{length:o[0].length/2,data:o,bits:s}}function Or(e,t=1e3,n=!0,a=8,r=0,s){const o=s!==void 0?r+s:void 0;return Yr(e,t,n,r,o,a)}function Je(e,t){this._waveformData=e,this._channelIndex=t}Je.prototype.min_sample=function(e){var t=(e*this._waveformData.channels+this._channelIndex)*2;return this._waveformData._at(t)};Je.prototype.max_sample=function(e){var t=(e*this._waveformData.channels+this._channelIndex)*2+1;return this._waveformData._at(t)};Je.prototype.set_min_sample=function(e,t){var n=(e*this._waveformData.channels+this._channelIndex)*2;return this._waveformData._set_at(n,t)};Je.prototype.set_max_sample=function(e,t){var n=(e*this._waveformData.channels+this._channelIndex)*2+1;return this._waveformData._set_at(n,t)};Je.prototype.min_array=function(){for(var e=this._waveformData.length,t=[],n=0;n<e;n++)t.push(this.min_sample(n));return t};Je.prototype.max_array=function(){for(var e=this._waveformData.length,t=[],n=0;n<e;n++)t.push(this.max_sample(n));return t};var Kr=127,Ur=-128,Jr=32767,qr=-32768;function Qr(e,t){var n=Math.floor(e/t),a=e-n*t;return a>0&&n++,n}function eo(e){for(var t=e.scale,n=e.amplitude_scale,a=e.split_channels,r=e.length,s=e.sample_rate,o=e.channels.map(function(R){return new Float32Array(R)}),l=a?o.length:1,c=24,u=Qr(r,t),d=e.bits===8?1:2,v=c+u*2*d*l,p=new ArrayBuffer(v),f=new DataView(p),C=0,y=c,m=new Array(l),g=new Array(l),I=0;I<l;I++)m[I]=1/0,g[I]=-1/0;var w=e.bits===8?Ur:qr,h=e.bits===8?Kr:Jr;f.setInt32(0,2,!0),f.setUint32(4,e.bits===8,!0),f.setInt32(8,s,!0),f.setInt32(12,t,!0),f.setInt32(16,u,!0),f.setInt32(20,l,!0);for(var k=0;k<r;k++){var x=0;if(l===1){for(var $=0;$<o.length;++$)x+=o[$][k];x=Math.floor(h*x*n/o.length),x<m[0]&&(m[0]=x,m[0]<w&&(m[0]=w)),x>g[0]&&(g[0]=x,g[0]>h&&(g[0]=h))}else for(var E=0;E<l;++E)x=Math.floor(h*o[E][k]*n),x<m[E]&&(m[E]=x,m[E]<w&&(m[E]=w)),x>g[E]&&(g[E]=x,g[E]>h&&(g[E]=h));if(++C===t){for(var M=0;M<l;M++)e.bits===8?(f.setInt8(y++,m[M]),f.setInt8(y++,g[M])):(f.setInt16(y,m[M],!0),f.setInt16(y+2,g[M],!0),y+=4),m[M]=1/0,g[M]=-1/0;C=0}}if(C>0)for(var A=0;A<l;A++)e.bits===8?(f.setInt8(y++,m[A]),f.setInt8(y++,g[A])):(f.setInt16(y,m[A],!0),f.setInt16(y+2,g[A],!0));return p}function Ct(e){"@babel/helpers - typeof";return Ct=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ct(e)}function to(e){return e&&Ct(e)==="object"&&"sample_rate"in e&&"samples_per_pixel"in e&&"bits"in e&&"length"in e&&"data"in e}function no(e){var t=e&&Ct(e)==="object"&&"byteLength"in e;if(t){var n=new DataView(e),a=n.getInt32(0,!0);if(a!==1&&a!==2)throw new TypeError("WaveformData.create(): This waveform data version not supported")}return t}function ao(e){var t=e.data,n=e.channels||1,a=24,r=e.bits===8?1:2,s=e.length*2*n;if(t.length!==s)throw new Error("WaveformData.create(): Length mismatch in JSON waveform data");var o=a+t.length*r,l=new ArrayBuffer(o),c=new DataView(l);c.setInt32(0,2,!0),c.setUint32(4,e.bits===8,!0),c.setInt32(8,e.sample_rate,!0),c.setInt32(12,e.samples_per_pixel,!0),c.setInt32(16,e.length,!0),c.setInt32(20,n,!0);var u=a;if(e.bits===8)for(var d=0;d<t.length;d++)c.setInt8(u++,t[d],!0);else for(var v=0;v<t.length;v++)c.setInt16(u,t[v],!0),u+=2;return l}function tt(e){return e==null}function ro(e,t){var n=atob(e);return n}function oo(e,t,n){var a=ro(e),r=a.indexOf(`
748
+ `,10)+1,s=a.substring(r)+"",o=new Blob([s],{type:"application/javascript"});return URL.createObjectURL(o)}function so(e,t,n){var a;return function(s){return a=a||oo(e),new Worker(a,s)}}var io=so("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogQXVkaW9CdWZmZXItYmFzZWQgV2F2ZWZvcm1EYXRhIGdlbmVyYXRvcgogICAqCiAgICogQWRhcHRlZCBmcm9tIEJsb2NrRmlsZTo6Q2FsY1N1bW1hcnkgaW4gQXVkYWNpdHksIHdpdGggcGVybWlzc2lvbi4KICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2F1ZGFjaXR5L2F1ZGFjaXR5L2Jsb2IvCiAgICogICAxMTA4YzEzNzZjMDkxNjYxNjIzMzVmYWI0NzQzMDA4Y2JhNTdjNGVlL3NyYy9CbG9ja0ZpbGUuY3BwI0wxOTgKICAgKi8KCiAgdmFyIElOVDhfTUFYID0gMTI3OwogIHZhciBJTlQ4X01JTiA9IC0xMjg7CiAgdmFyIElOVDE2X01BWCA9IDMyNzY3OwogIHZhciBJTlQxNl9NSU4gPSAtMzI3Njg7CiAgZnVuY3Rpb24gY2FsY3VsYXRlV2F2ZWZvcm1EYXRhTGVuZ3RoKGF1ZGlvX3NhbXBsZV9jb3VudCwgc2NhbGUpIHsKICAgIHZhciBkYXRhX2xlbmd0aCA9IE1hdGguZmxvb3IoYXVkaW9fc2FtcGxlX2NvdW50IC8gc2NhbGUpOwogICAgdmFyIHNhbXBsZXNfcmVtYWluaW5nID0gYXVkaW9fc2FtcGxlX2NvdW50IC0gZGF0YV9sZW5ndGggKiBzY2FsZTsKICAgIGlmIChzYW1wbGVzX3JlbWFpbmluZyA+IDApIHsKICAgICAgZGF0YV9sZW5ndGgrKzsKICAgIH0KICAgIHJldHVybiBkYXRhX2xlbmd0aDsKICB9CiAgZnVuY3Rpb24gZ2VuZXJhdGVXYXZlZm9ybURhdGEob3B0aW9ucykgewogICAgdmFyIHNjYWxlID0gb3B0aW9ucy5zY2FsZTsKICAgIHZhciBhbXBsaXR1ZGVfc2NhbGUgPSBvcHRpb25zLmFtcGxpdHVkZV9zY2FsZTsKICAgIHZhciBzcGxpdF9jaGFubmVscyA9IG9wdGlvbnMuc3BsaXRfY2hhbm5lbHM7CiAgICB2YXIgbGVuZ3RoID0gb3B0aW9ucy5sZW5ndGg7CiAgICB2YXIgc2FtcGxlX3JhdGUgPSBvcHRpb25zLnNhbXBsZV9yYXRlOwogICAgdmFyIGNoYW5uZWxzID0gb3B0aW9ucy5jaGFubmVscy5tYXAoZnVuY3Rpb24gKGNoYW5uZWwpIHsKICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoY2hhbm5lbCk7CiAgICB9KTsKICAgIHZhciBvdXRwdXRfY2hhbm5lbHMgPSBzcGxpdF9jaGFubmVscyA/IGNoYW5uZWxzLmxlbmd0aCA6IDE7CiAgICB2YXIgaGVhZGVyX3NpemUgPSAyNDsKICAgIHZhciBkYXRhX2xlbmd0aCA9IGNhbGN1bGF0ZVdhdmVmb3JtRGF0YUxlbmd0aChsZW5ndGgsIHNjYWxlKTsKICAgIHZhciBieXRlc19wZXJfc2FtcGxlID0gb3B0aW9ucy5iaXRzID09PSA4ID8gMSA6IDI7CiAgICB2YXIgdG90YWxfc2l6ZSA9IGhlYWRlcl9zaXplICsgZGF0YV9sZW5ndGggKiAyICogYnl0ZXNfcGVyX3NhbXBsZSAqIG91dHB1dF9jaGFubmVsczsKICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodG90YWxfc2l6ZSk7CiAgICB2YXIgZGF0YV92aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcik7CiAgICB2YXIgc2NhbGVfY291bnRlciA9IDA7CiAgICB2YXIgb2Zmc2V0ID0gaGVhZGVyX3NpemU7CiAgICB2YXIgbWluX3ZhbHVlID0gbmV3IEFycmF5KG91dHB1dF9jaGFubmVscyk7CiAgICB2YXIgbWF4X3ZhbHVlID0gbmV3IEFycmF5KG91dHB1dF9jaGFubmVscyk7CiAgICBmb3IgKHZhciBjaGFubmVsID0gMDsgY2hhbm5lbCA8IG91dHB1dF9jaGFubmVsczsgY2hhbm5lbCsrKSB7CiAgICAgIG1pbl92YWx1ZVtjaGFubmVsXSA9IEluZmluaXR5OwogICAgICBtYXhfdmFsdWVbY2hhbm5lbF0gPSAtSW5maW5pdHk7CiAgICB9CiAgICB2YXIgcmFuZ2VfbWluID0gb3B0aW9ucy5iaXRzID09PSA4ID8gSU5UOF9NSU4gOiBJTlQxNl9NSU47CiAgICB2YXIgcmFuZ2VfbWF4ID0gb3B0aW9ucy5iaXRzID09PSA4ID8gSU5UOF9NQVggOiBJTlQxNl9NQVg7CiAgICBkYXRhX3ZpZXcuc2V0SW50MzIoMCwgMiwgdHJ1ZSk7IC8vIFZlcnNpb24KICAgIGRhdGFfdmlldy5zZXRVaW50MzIoNCwgb3B0aW9ucy5iaXRzID09PSA4LCB0cnVlKTsgLy8gSXMgOCBiaXQ/CiAgICBkYXRhX3ZpZXcuc2V0SW50MzIoOCwgc2FtcGxlX3JhdGUsIHRydWUpOyAvLyBTYW1wbGUgcmF0ZQogICAgZGF0YV92aWV3LnNldEludDMyKDEyLCBzY2FsZSwgdHJ1ZSk7IC8vIFNjYWxlCiAgICBkYXRhX3ZpZXcuc2V0SW50MzIoMTYsIGRhdGFfbGVuZ3RoLCB0cnVlKTsgLy8gTGVuZ3RoCiAgICBkYXRhX3ZpZXcuc2V0SW50MzIoMjAsIG91dHB1dF9jaGFubmVscywgdHJ1ZSk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzYW1wbGUgPSAwOwogICAgICBpZiAob3V0cHV0X2NoYW5uZWxzID09PSAxKSB7CiAgICAgICAgZm9yICh2YXIgX2NoYW5uZWwgPSAwOyBfY2hhbm5lbCA8IGNoYW5uZWxzLmxlbmd0aDsgKytfY2hhbm5lbCkgewogICAgICAgICAgc2FtcGxlICs9IGNoYW5uZWxzW19jaGFubmVsXVtpXTsKICAgICAgICB9CiAgICAgICAgc2FtcGxlID0gTWF0aC5mbG9vcihyYW5nZV9tYXggKiBzYW1wbGUgKiBhbXBsaXR1ZGVfc2NhbGUgLyBjaGFubmVscy5sZW5ndGgpOwogICAgICAgIGlmIChzYW1wbGUgPCBtaW5fdmFsdWVbMF0pIHsKICAgICAgICAgIG1pbl92YWx1ZVswXSA9IHNhbXBsZTsKICAgICAgICAgIGlmIChtaW5fdmFsdWVbMF0gPCByYW5nZV9taW4pIHsKICAgICAgICAgICAgbWluX3ZhbHVlWzBdID0gcmFuZ2VfbWluOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc2FtcGxlID4gbWF4X3ZhbHVlWzBdKSB7CiAgICAgICAgICBtYXhfdmFsdWVbMF0gPSBzYW1wbGU7CiAgICAgICAgICBpZiAobWF4X3ZhbHVlWzBdID4gcmFuZ2VfbWF4KSB7CiAgICAgICAgICAgIG1heF92YWx1ZVswXSA9IHJhbmdlX21heDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yICh2YXIgX2NoYW5uZWwyID0gMDsgX2NoYW5uZWwyIDwgb3V0cHV0X2NoYW5uZWxzOyArK19jaGFubmVsMikgewogICAgICAgICAgc2FtcGxlID0gTWF0aC5mbG9vcihyYW5nZV9tYXggKiBjaGFubmVsc1tfY2hhbm5lbDJdW2ldICogYW1wbGl0dWRlX3NjYWxlKTsKICAgICAgICAgIGlmIChzYW1wbGUgPCBtaW5fdmFsdWVbX2NoYW5uZWwyXSkgewogICAgICAgICAgICBtaW5fdmFsdWVbX2NoYW5uZWwyXSA9IHNhbXBsZTsKICAgICAgICAgICAgaWYgKG1pbl92YWx1ZVtfY2hhbm5lbDJdIDwgcmFuZ2VfbWluKSB7CiAgICAgICAgICAgICAgbWluX3ZhbHVlW19jaGFubmVsMl0gPSByYW5nZV9taW47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzYW1wbGUgPiBtYXhfdmFsdWVbX2NoYW5uZWwyXSkgewogICAgICAgICAgICBtYXhfdmFsdWVbX2NoYW5uZWwyXSA9IHNhbXBsZTsKICAgICAgICAgICAgaWYgKG1heF92YWx1ZVtfY2hhbm5lbDJdID4gcmFuZ2VfbWF4KSB7CiAgICAgICAgICAgICAgbWF4X3ZhbHVlW19jaGFubmVsMl0gPSByYW5nZV9tYXg7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCsrc2NhbGVfY291bnRlciA9PT0gc2NhbGUpIHsKICAgICAgICBmb3IgKHZhciBfY2hhbm5lbDMgPSAwOyBfY2hhbm5lbDMgPCBvdXRwdXRfY2hhbm5lbHM7IF9jaGFubmVsMysrKSB7CiAgICAgICAgICBpZiAob3B0aW9ucy5iaXRzID09PSA4KSB7CiAgICAgICAgICAgIGRhdGFfdmlldy5zZXRJbnQ4KG9mZnNldCsrLCBtaW5fdmFsdWVbX2NoYW5uZWwzXSk7CiAgICAgICAgICAgIGRhdGFfdmlldy5zZXRJbnQ4KG9mZnNldCsrLCBtYXhfdmFsdWVbX2NoYW5uZWwzXSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkYXRhX3ZpZXcuc2V0SW50MTYob2Zmc2V0LCBtaW5fdmFsdWVbX2NoYW5uZWwzXSwgdHJ1ZSk7CiAgICAgICAgICAgIGRhdGFfdmlldy5zZXRJbnQxNihvZmZzZXQgKyAyLCBtYXhfdmFsdWVbX2NoYW5uZWwzXSwgdHJ1ZSk7CiAgICAgICAgICAgIG9mZnNldCArPSA0OwogICAgICAgICAgfQogICAgICAgICAgbWluX3ZhbHVlW19jaGFubmVsM10gPSBJbmZpbml0eTsKICAgICAgICAgIG1heF92YWx1ZVtfY2hhbm5lbDNdID0gLUluZmluaXR5OwogICAgICAgIH0KICAgICAgICBzY2FsZV9jb3VudGVyID0gMDsKICAgICAgfQogICAgfQogICAgaWYgKHNjYWxlX2NvdW50ZXIgPiAwKSB7CiAgICAgIGZvciAodmFyIF9jaGFubmVsNCA9IDA7IF9jaGFubmVsNCA8IG91dHB1dF9jaGFubmVsczsgX2NoYW5uZWw0KyspIHsKICAgICAgICBpZiAob3B0aW9ucy5iaXRzID09PSA4KSB7CiAgICAgICAgICBkYXRhX3ZpZXcuc2V0SW50OChvZmZzZXQrKywgbWluX3ZhbHVlW19jaGFubmVsNF0pOwogICAgICAgICAgZGF0YV92aWV3LnNldEludDgob2Zmc2V0KyssIG1heF92YWx1ZVtfY2hhbm5lbDRdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YV92aWV3LnNldEludDE2KG9mZnNldCwgbWluX3ZhbHVlW19jaGFubmVsNF0sIHRydWUpOwogICAgICAgICAgZGF0YV92aWV3LnNldEludDE2KG9mZnNldCArIDIsIG1heF92YWx1ZVtfY2hhbm5lbDRdLCB0cnVlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoZXZ0KSB7CiAgICB2YXIgYnVmZmVyID0gZ2VuZXJhdGVXYXZlZm9ybURhdGEoZXZ0LmRhdGEpOwoKICAgIC8vIFRyYW5zZmVyIGJ1ZmZlciB0byB0aGUgY2FsbGluZyB0aHJlYWQKICAgIHRoaXMucG9zdE1lc3NhZ2UoYnVmZmVyLCBbYnVmZmVyXSk7CiAgICB0aGlzLmNsb3NlKCk7CiAgfTsKCn0pKCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPXdhdmVmb3JtLWRhdGEtd29ya2VyLmpzLm1hcAoK");function Be(e){if(to(e)&&(e=ao(e)),no(e)){this._data=new DataView(e),this._offset=this._version()===2?24:20,this._channels=[];for(var t=0;t<this.channels;t++)this._channels[t]=new Je(this,t)}else throw new TypeError("WaveformData.create(): Unknown data format")}var it={scale:512,bits:8,amplitude_scale:1,split_channels:!1,disable_worker:!1};function lo(e){var t={scale:e.scale||it.scale,bits:e.bits||it.bits,amplitude_scale:e.amplitude_scale||it.amplitude_scale,split_channels:e.split_channels||it.split_channels,disable_worker:e.disable_worker||it.disable_worker};return t}function co(e){for(var t=[],n=0;n<e.numberOfChannels;++n)t.push(e.getChannelData(n).buffer);return t}function Pn(e,t,n){var a=co(e);if(t.disable_worker){var r=eo({scale:t.scale,bits:t.bits,amplitude_scale:t.amplitude_scale,split_channels:t.split_channels,length:e.length,sample_rate:e.sampleRate,channels:a});n(void 0,new Be(r),e)}else{var s=new io;s.onmessage=function(o){n(void 0,new Be(o.data),e)},s.postMessage({scale:t.scale,bits:t.bits,amplitude_scale:t.amplitude_scale,split_channels:t.split_channels,length:e.length,sample_rate:e.sampleRate,channels:a},a)}}function uo(e,t,n,a){function r(o){o||(o=new DOMException("EncodingError")),a(o),a=function(){}}var s=e.decodeAudioData(t,function(o){Pn(o,n,a)},r);s&&s.catch(r)}Be.create=function(t){return new Be(t)};Be.createFromAudio=function(e,t){var n=lo(e);if(e.audio_context&&e.array_buffer)return uo(e.audio_context,e.array_buffer,n,t);if(e.audio_buffer)return Pn(e.audio_buffer,n,t);throw new TypeError("WaveformData.createFromAudio(): Pass either an AudioContext and ArrayBuffer, or an AudioBuffer object")};function St(e){this._inputData=e.waveformData,this._output_samples_per_pixel=e.scale,this._scale=this._inputData.scale,this._input_buffer_size=this._inputData.length;var t=this._input_buffer_size*this._inputData.scale,n=Math.ceil(t/this._output_samples_per_pixel),a=24,r=this._inputData.bits===8?1:2,s=a+n*2*this._inputData.channels*r;this._output_data=new ArrayBuffer(s),this.output_dataview=new DataView(this._output_data),this.output_dataview.setInt32(0,2,!0),this.output_dataview.setUint32(4,this._inputData.bits===8,!0),this.output_dataview.setInt32(8,this._inputData.sample_rate,!0),this.output_dataview.setInt32(12,this._output_samples_per_pixel,!0),this.output_dataview.setInt32(16,n,!0),this.output_dataview.setInt32(20,this._inputData.channels,!0),this._outputWaveformData=new Be(this._output_data),this._input_index=0,this._output_index=0;var o=this._inputData.channels;this._min=new Array(o),this._max=new Array(o);for(var l=0;l<o;++l)this._input_buffer_size>0?(this._min[l]=this._inputData.channel(l).min_sample(this._input_index),this._max[l]=this._inputData.channel(l).max_sample(this._input_index)):(this._min[l]=0,this._max[l]=0);this._min_value=this._inputData.bits===8?-128:-32768,this._max_value=this._inputData.bits===8?127:32767,this._where=0,this._prev_where=0,this._stop=0,this._last_input_index=0}St.prototype.sample_at_pixel=function(e){return Math.floor(e*this._output_samples_per_pixel)};St.prototype.next=function(){for(var e=0,t=1e3,n=this._inputData.channels,a;this._input_index<this._input_buffer_size&&e<t;){for(;Math.floor(this.sample_at_pixel(this._output_index)/this._scale)===this._input_index;){if(this._output_index>0)for(var r=0;r<n;++r)a=this._outputWaveformData.channel(r),a.set_min_sample(this._output_index-1,this._min[r]),a.set_max_sample(this._output_index-1,this._max[r]);if(this._last_input_index=this._input_index,this._output_index++,this._where=this.sample_at_pixel(this._output_index),this._prev_where=this.sample_at_pixel(this._output_index-1),this._where!==this._prev_where)for(var s=0;s<n;++s)this._min[s]=this._max_value,this._max[s]=this._min_value}for(this._where=this.sample_at_pixel(this._output_index),this._stop=Math.floor(this._where/this._scale),this._stop>this._input_buffer_size&&(this._stop=this._input_buffer_size);this._input_index<this._stop;){for(var o=0;o<n;++o){a=this._inputData.channel(o);var l=a.min_sample(this._input_index);l<this._min[o]&&(this._min[o]=l),l=a.max_sample(this._input_index),l>this._max[o]&&(this._max[o]=l)}this._input_index++}e++}if(this._input_index<this._input_buffer_size)return!1;if(this._input_index!==this._last_input_index)for(var c=0;c<n;++c)a=this._outputWaveformData.channel(c),a.set_min_sample(this._output_index-1,this._min[c]),a.set_max_sample(this._output_index-1,this._max[c]);return!0};St.prototype.getOutputData=function(){return this._output_data};Be.prototype={_getResampleOptions:function(t){var n={};if(n.scale=t.scale,n.width=t.width,!tt(n.width)&&(typeof n.width!="number"||n.width<=0))throw new RangeError("WaveformData.resample(): width should be a positive integer value");if(!tt(n.scale)&&(typeof n.scale!="number"||n.scale<=0))throw new RangeError("WaveformData.resample(): scale should be a positive integer value");if(!n.scale&&!n.width)throw new Error("WaveformData.resample(): Missing scale or width option");if(n.width&&(n.scale=Math.floor(this.duration*this.sample_rate/n.width)),n.scale<this.scale)throw new Error("WaveformData.resample(): Zoom level "+n.scale+" too low, minimum: "+this.scale);return n.abortSignal=t.abortSignal,n},resample:function(t){t=this._getResampleOptions(t),t.waveformData=this;for(var n=new St(t);!n.next(););return new Be(n.getOutputData())},concat:function(){var t=this,n=Array.prototype.slice.call(arguments);n.forEach(function(r){if(t.channels!==r.channels||t.sample_rate!==r.sample_rate||t.bits!==r.bits||t.scale!==r.scale)throw new Error("WaveformData.concat(): Waveforms are incompatible")});var a=this._concatBuffers.apply(this,n);return Be.create(a)},_concatBuffers:function(){for(var t=Array.prototype.slice.call(arguments),n=this._offset,a=n,r=0,s=[this].concat(t).map(function(g){return g._data.buffer}),o=0;o<s.length;o++){var l=s[o],c=new DataView(l).getInt32(16,!0);a+=l.byteLength-n,r+=c}for(var u=new ArrayBuffer(a),d=new DataView(s[0]),v=new DataView(u),p=0;p<n;p++)v.setUint8(p,d.getUint8(p));v.setInt32(16,r,!0);for(var f=0,C=new Uint8Array(u,n),y=0;y<s.length;y++){var m=s[y];C.set(new Uint8Array(m,n),f),f+=m.byteLength-n}return u},slice:function(t){var n=0,a=0;if(!tt(t.startIndex)&&!tt(t.endIndex)?(n=t.startIndex,a=t.endIndex):!tt(t.startTime)&&!tt(t.endTime)&&(n=this.at_time(t.startTime),a=this.at_time(t.endTime)),n<0)throw new RangeError("startIndex or startTime must not be negative");if(a<0)throw new RangeError("endIndex or endTime must not be negative");n>this.length&&(n=this.length),a>this.length&&(a=this.length),n>a&&(n=a);var r=a-n,s=24,o=this.bits===8?1:2,l=s+r*2*this.channels*o,c=new ArrayBuffer(l),u=new DataView(c);u.setInt32(0,2,!0),u.setUint32(4,this.bits===8,!0),u.setInt32(8,this.sample_rate,!0),u.setInt32(12,this.scale,!0),u.setInt32(16,r,!0),u.setInt32(20,this.channels,!0);for(var d=0;d<r*this.channels*2;d++){var v=this._at(n*this.channels*2+d);this.bits===8?u.setInt8(s+d,v):u.setInt16(s+d*2,v,!0)}return new Be(c)},_version:function(){return this._data.getInt32(0,!0)},get length(){return this._data.getUint32(16,!0)},get bits(){var e=!!this._data.getUint32(4,!0);return e?8:16},get duration(){return this.length*this.scale/this.sample_rate},get pixels_per_second(){return this.sample_rate/this.scale},get seconds_per_pixel(){return this.scale/this.sample_rate},get channels(){return this._version()===2?this._data.getInt32(20,!0):1},channel:function(t){if(t>=0&&t<this._channels.length)return this._channels[t];throw new RangeError("Invalid channel: "+t)},get sample_rate(){return this._data.getInt32(8,!0)},get scale(){return this._data.getInt32(12,!0)},_at:function(t){return this.bits===8?this._data.getInt8(this._offset+t):this._data.getInt16(this._offset+t*2,!0)},_set_at:function(t,n){return this.bits===8?this._data.setInt8(this._offset+t,n):this._data.setInt16(this._offset+t*2,n,!0)},at_time:function(t){return Math.floor(t*this.sample_rate/this.scale)},time:function(t){return t*this.scale/this.sample_rate},toJSON:function(){for(var t={version:2,channels:this.channels,sample_rate:this.sample_rate,samples_per_pixel:this.scale,bits:this.bits,length:this.length,data:[]},n=0;n<this.length;n++)for(var a=0;a<this.channels;a++)t.data.push(this.channel(a).min_sample(n)),t.data.push(this.channel(a).max_sample(n));return t},toArrayBuffer:function(){return this._data.buffer}};async function Gt(e){const t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch waveform data: ${t.statusText}`);if(e.endsWith(".dat")){const a=await t.arrayBuffer();return Be.create(a)}else{const a=await t.json();return Be.create(a)}}function zn(e,t=0){const n=e.channel(t),a=e.bits,r=n.min_array(),s=n.max_array(),o=r.length,l=a===8?new Int8Array(o*2):new Int16Array(o*2);for(let c=0;c<o;c++)l[c*2]=r[c],l[c*2+1]=s[c];return{data:l,bits:a,length:o,sampleRate:e.sample_rate}}async function fo(e,t=0){const n=await Gt(e);return zn(n,t)}async function mo(e){const t=await Gt(e);return{sampleRate:t.sample_rate,channels:t.channels,duration:t.duration,samplesPerPixel:t.scale,length:t.length,bits:t.bits}}function jn(e,t,n=0,a,r){let s=e;if(a!==void 0&&r!==void 0){const p=e.scale,f=Math.floor(a/p),C=Math.ceil((a+r)/p);s=s.slice({startIndex:f,endIndex:C})}s.scale!==t&&(s=s.resample({scale:t}));const o=s.channel(n),l=s.bits,c=o.min_array(),u=o.max_array(),d=c.length,v=l===8?new Int8Array(d*2):new Int16Array(d*2);for(let p=0;p<d;p++)v[p*2]=c[p],v[p*2+1]=u[p];return{data:v,bits:l,length:d}}function Hn(e){return{id:e.id,start:parseFloat(e.begin),end:parseFloat(e.end),lines:e.lines,lang:e.language}}function ho(e){return{id:e.id,begin:e.start.toFixed(3),end:e.end.toFixed(3),lines:e.lines,language:e.lang||"en"}}S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
749
749
  position: absolute;
750
750
  top: 0;
751
751
  background: ${e=>e.$color};
@@ -830,12 +830,12 @@
830
830
  &:active {
831
831
  background: rgba(255, 255, 255, 0.3);
832
832
  }
833
- `;var fo=S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
833
+ `;var po=S.div.attrs(e=>({style:{left:`${e.$left}px`,width:`${e.$width}px`}}))`
834
834
  position: absolute;
835
835
  top: 0;
836
836
  height: 100%;
837
837
  pointer-events: none; /* Let events pass through to children */
838
- `,mo=S.div`
838
+ `,go=S.div`
839
839
  position: absolute;
840
840
  top: 0;
841
841
  left: 0;
@@ -859,7 +859,7 @@
859
859
  border-width: 3px;
860
860
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
861
861
  }
862
- `,ho=S.span`
862
+ `,bo=S.span`
863
863
  font-size: 12px;
864
864
  font-weight: 600;
865
865
  color: ${e=>e.theme?.annotationLabelColor||"#2a2a2a"};
@@ -869,14 +869,14 @@
869
869
  padding: 0 6px;
870
870
  letter-spacing: 0.3px;
871
871
  user-select: none;
872
- `,ln=S.div`
872
+ `,dn=S.div`
873
873
  position: absolute;
874
874
  top: 0;
875
- ${e=>e.$position==="left"?"left: -8px":"right: -8px"};
876
- width: 16px;
875
+ ${e=>e.$position==="left"?"left: 0":"right: 0"};
876
+ width: 8px;
877
877
  height: 100%;
878
878
  cursor: ew-resize;
879
- z-index: 120; /* Above ClickOverlay (z-index: 100) and AnnotationBoxesWrapper (z-index: 110) */
879
+ z-index: 120;
880
880
  background: ${e=>e.$isDragging?e.theme?.annotationResizeHandleColor||"rgba(0, 0, 0, 0.2)":"transparent"};
881
881
  border-radius: 4px;
882
882
  touch-action: none; /* Important for @dnd-kit on touch devices */
@@ -904,13 +904,13 @@
904
904
  opacity: 1;
905
905
  background: ${e=>e.theme?.annotationResizeHandleActiveColor||"rgba(0, 0, 0, 0.7)"};
906
906
  }
907
- `,zn=({annotationId:e,annotationIndex:t,startPosition:n,endPosition:a,label:r,color:s="#ff9800",isActive:o=!1,onClick:l,editable:c=!0})=>{const u=Math.max(0,a-n),d=`annotation-boundary-start-${t}`,{attributes:v,listeners:p,setActivatorNodeRef:f,isDragging:C}=Ee.useDraggable({id:d,data:{annotationId:e,annotationIndex:t,edge:"start"},disabled:!c}),y=`annotation-boundary-end-${t}`,{attributes:m,listeners:g,setActivatorNodeRef:I,isDragging:x}=Ee.useDraggable({id:y,data:{annotationId:e,annotationIndex:t,edge:"end"},disabled:!c});if(u<=0)return null;const h=k=>A=>{A.stopPropagation(),k?.(A)},w=k=>{k.stopPropagation()};return b.jsxs(fo,{$left:n,$width:u,children:[b.jsx(mo,{$color:s,$isActive:o,onClick:l,children:r&&b.jsx(ho,{children:r})}),c&&b.jsx(ln,{ref:f,$position:"left",$isDragging:C,onClick:w,...p,onPointerDown:h(p?.onPointerDown),...v}),c&&b.jsx(ln,{ref:I,$position:"right",$isDragging:x,onClick:w,...g,onPointerDown:h(g?.onPointerDown),...m})]})},po=S.div.attrs(e=>({style:{height:`${e.$height}px`}}))`
907
+ `,Xn=({annotationId:e,annotationIndex:t,startPosition:n,endPosition:a,label:r,color:s="#ff9800",isActive:o=!1,onClick:l,editable:c=!0})=>{const u=Math.max(0,a-n),d=`annotation-boundary-start-${t}`,{attributes:v,listeners:p,setActivatorNodeRef:f,isDragging:C}=De.useDraggable({id:d,data:{annotationId:e,annotationIndex:t,edge:"start"},disabled:!c}),y=`annotation-boundary-end-${t}`,{attributes:m,listeners:g,setActivatorNodeRef:I,isDragging:w}=De.useDraggable({id:y,data:{annotationId:e,annotationIndex:t,edge:"end"},disabled:!c});if(u<=0)return null;const h=x=>$=>{$.stopPropagation(),x?.($)},k=x=>{x.stopPropagation()};return b.jsxs(po,{$left:n,$width:u,children:[b.jsx(go,{$color:s,$isActive:o,onClick:l,children:r&&b.jsx(bo,{children:r})}),c&&b.jsx(dn,{ref:f,$position:"left",$isDragging:C,onClick:k,...p,onPointerDown:h(p?.onPointerDown),...v}),c&&b.jsx(dn,{ref:I,$position:"right",$isDragging:w,onClick:k,...g,onPointerDown:h(g?.onPointerDown),...m})]})},vo=S.div.attrs(e=>({style:{height:`${e.$height}px`}}))`
908
908
  position: relative;
909
909
  display: flex;
910
910
  ${e=>e.$width!==void 0&&`width: ${e.$width}px;`}
911
911
  background: transparent;
912
912
  z-index: 110;
913
- `,go=S.div`
913
+ `,Co=S.div`
914
914
  position: sticky;
915
915
  z-index: 200;
916
916
  left: 0;
@@ -918,11 +918,11 @@
918
918
  width: ${e=>e.$controlWidth}px;
919
919
  flex-shrink: 0;
920
920
  background: transparent;
921
- `,bo=S.div`
921
+ `,xo=S.div`
922
922
  position: relative;
923
923
  flex: 1;
924
924
  padding-left: ${e=>e.$offset||0}px;
925
- `,jn=({children:e,className:t,height:n=30,offset:a=0,width:r})=>{const{controls:{show:s,width:o}}=st();return b.jsxs(po,{className:t,$height:n,$controlWidth:s?o:0,$width:r,children:[b.jsx(go,{$controlWidth:s?o:0}),b.jsx(bo,{$offset:a,children:e})]})};S.div.attrs(e=>({style:{height:`${e.$height}px`}}))`
925
+ `,Gn=({children:e,className:t,height:n=30,offset:a=0,width:r})=>{const{controls:{show:s,width:o}}=ct();return b.jsxs(vo,{className:t,$height:n,$controlWidth:s?o:0,$width:r,children:[b.jsx(Co,{$controlWidth:s?o:0}),b.jsx(xo,{$offset:a,children:e})]})};S.div.attrs(e=>({style:{height:`${e.$height}px`}}))`
926
926
  position: relative;
927
927
  display: flex;
928
928
  ${e=>e.$width!==void 0&&`width: ${e.$width}px;`}
@@ -945,12 +945,12 @@
945
945
  position: relative;
946
946
  flex: 1;
947
947
  padding-left: ${e=>e.$offset||0}px;
948
- `;var vo=S.div`
948
+ `;var wo=S.div`
949
949
  background: ${e=>e.theme?.backgroundColor||"#fff"};
950
950
  ${e=>e.$height?`height: ${e.$height}px;`:"max-height: 200px;"}
951
951
  overflow-y: auto;
952
952
  padding: 8px;
953
- `,Co=S.div`
953
+ `,yo=S.div`
954
954
  padding: 12px;
955
955
  margin-bottom: 6px;
956
956
  border-left: 4px solid ${e=>e.$isActive?"#ff9800":"transparent"};
@@ -969,16 +969,16 @@
969
969
  outline: 2px solid #ff9800;
970
970
  outline-offset: 2px;
971
971
  }
972
- `,xo=S.div`
972
+ `,ko=S.div`
973
973
  display: flex;
974
974
  justify-content: space-between;
975
975
  align-items: center;
976
976
  margin-bottom: 6px;
977
- `,wo=S.div`
977
+ `,Io=S.div`
978
978
  display: flex;
979
979
  align-items: center;
980
980
  gap: 8px;
981
- `,yo=S.span`
981
+ `,So=S.span`
982
982
  font-size: 11px;
983
983
  font-weight: 600;
984
984
  color: ${e=>e.theme?.textColorMuted||"#666"};
@@ -992,16 +992,16 @@
992
992
  outline: 2px solid #ff9800;
993
993
  background: rgba(255, 152, 0, 0.1);
994
994
  }
995
- `,ko=S.span`
995
+ `,Ao=S.span`
996
996
  font-size: 12px;
997
997
  font-weight: 500;
998
998
  color: ${e=>e.theme?.textColorMuted||"#555"};
999
999
  font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
1000
1000
  letter-spacing: 0.5px;
1001
- `,Io=S.div`
1001
+ `,$o=S.div`
1002
1002
  display: flex;
1003
1003
  gap: 6px;
1004
- `,So=S.button`
1004
+ `,Mo=S.button`
1005
1005
  background: ${e=>e.theme?.surfaceColor||"#f5f5f5"};
1006
1006
  border: 1px solid ${e=>e.theme?.borderColor||"#ccc"};
1007
1007
  color: ${e=>e.theme?.textColor||"#333"};
@@ -1020,7 +1020,7 @@
1020
1020
  &:active {
1021
1021
  transform: scale(0.95);
1022
1022
  }
1023
- `,Ao=S.div`
1023
+ `,Ro=S.div`
1024
1024
  font-size: 14px;
1025
1025
  line-height: 1.6;
1026
1026
  color: ${e=>e.theme?.textColor||"#2a2a2a"};
@@ -1035,9 +1035,9 @@
1035
1035
  outline: 2px solid #ff9800;
1036
1036
  background: rgba(255, 152, 0, 0.1);
1037
1037
  }
1038
- `,$o=({annotations:e,activeAnnotationId:t,shouldScrollToActive:n=!1,scrollActivePosition:a="center",scrollActiveContainer:r="nearest",editable:s=!1,controls:o=[],annotationListConfig:l,height:c,onAnnotationClick:u,onAnnotationUpdate:d,renderAnnotationItem:v})=>{const p=i.useRef(null),f=i.useRef(null),C=i.useRef(void 0);i.useEffect(()=>{}),i.useEffect(()=>{const h=f.current;if(!h)return;const w=()=>{};return h.addEventListener("scroll",w),()=>h.removeEventListener("scroll",w)},[]),i.useEffect(()=>{t&&p.current&&n&&p.current.scrollIntoView({behavior:"smooth",block:a,container:r}),C.current=t},[t,n,a,r]);const y=h=>{if(isNaN(h)||!isFinite(h))return"0:00.000";const w=Math.floor(h/60),k=(h%60).toFixed(3);return`${w}:${k.padStart(6,"0")}`},m=(h,w)=>{if(!s||!d)return;const k=[...e];k[h]={...k[h],lines:w.split(`
1039
- `)},d(k)},g=(h,w)=>{if(!s||!d)return;const k=w.trim();if(!k)return;const A=[...e];A[h]={...A[h],id:k},d(A)},I=(h,w,k)=>{if(!d)return;const A=[...e];h.action(A[k],k,A,l||{}),d(A)},x=h=>h.replace(/\./g," ");return b.jsx(vo,{ref:f,$height:c,children:e.map((h,w)=>{const k=h.id===t,A=()=>u?.(h);return v?b.jsx("div",{ref:k?p:null,children:v({annotation:h,index:w,isActive:k,onClick:A,formatTime:y})},h.id):b.jsxs(Co,{ref:k?p:null,$isActive:k,onClick:A,children:[b.jsxs(xo,{children:[b.jsxs(wo,{children:[b.jsx(yo,{$isEditable:s,contentEditable:s,suppressContentEditableWarning:!0,onBlur:M=>g(w,M.currentTarget.textContent||""),children:h.id}),b.jsxs(ko,{children:[y(h.start)," - ",y(h.end)]})]}),o.length>0&&b.jsx(Io,{onClick:M=>M.stopPropagation(),children:o.map((M,$)=>b.jsx(So,{title:M.title,onClick:()=>I(M,h,w),children:M.text?M.text:b.jsx("i",{className:x(M.class||"")})},$))})]}),b.jsx(Ao,{$isEditable:s,contentEditable:s,suppressContentEditableWarning:!0,onBlur:M=>m(w,M.currentTarget.textContent||""),children:h.lines.join(`
1040
- `)})]},h.id)})})},Hn=i.memo($o),Mo=({checked:e,onChange:t,disabled:n=!1,className:a})=>{const r=s=>{t(s.target.checked)};return b.jsxs(Ct,{className:a,children:[b.jsx(xt,{type:"checkbox",id:"continuous-play",className:"continuous-play",checked:e,onChange:r,disabled:n}),b.jsx(wt,{htmlFor:"continuous-play",children:"Continuous Play"})]})},Ro=({checked:e,onChange:t,disabled:n=!1,className:a})=>{const r=s=>{t(s.target.checked)};return b.jsxs(Ct,{className:a,children:[b.jsx(xt,{type:"checkbox",id:"link-endpoints",className:"link-endpoints",checked:e,onChange:r,disabled:n}),b.jsx(wt,{htmlFor:"link-endpoints",children:"Link Endpoints"})]})},Eo=({checked:e,onChange:t,className:n})=>b.jsxs(Ct,{className:n,children:[b.jsx(xt,{type:"checkbox",id:"editable-annotations",checked:e,onChange:a=>t(a.target.checked)}),b.jsx(wt,{htmlFor:"editable-annotations",children:"Editable Annotations"})]}),Do=S.button`
1038
+ `,Eo=({annotations:e,activeAnnotationId:t,shouldScrollToActive:n=!1,scrollActivePosition:a="center",scrollActiveContainer:r="nearest",editable:s=!1,controls:o=[],annotationListConfig:l,height:c,onAnnotationClick:u,onAnnotationUpdate:d,renderAnnotationItem:v})=>{const p=i.useRef(null),f=i.useRef(null),C=i.useRef(void 0);i.useEffect(()=>{}),i.useEffect(()=>{const h=f.current;if(!h)return;const k=()=>{};return h.addEventListener("scroll",k),()=>h.removeEventListener("scroll",k)},[]),i.useEffect(()=>{t&&p.current&&n&&p.current.scrollIntoView({behavior:"smooth",block:a,container:r}),C.current=t},[t,n,a,r]);const y=h=>{if(isNaN(h)||!isFinite(h))return"0:00.000";const k=Math.floor(h/60),x=(h%60).toFixed(3);return`${k}:${x.padStart(6,"0")}`},m=(h,k)=>{if(!s||!d)return;const x=[...e];x[h]={...x[h],lines:k.split(`
1039
+ `)},d(x)},g=(h,k)=>{if(!s||!d)return;const x=k.trim();if(!x)return;const $=[...e];$[h]={...$[h],id:x},d($)},I=(h,k,x)=>{if(!d)return;const $=[...e];h.action($[x],x,$,l||{}),d($)},w=h=>h.replace(/\./g," ");return b.jsx(wo,{ref:f,$height:c,children:e.map((h,k)=>{const x=h.id===t,$=()=>u?.(h);return v?b.jsx("div",{ref:x?p:null,children:v({annotation:h,index:k,isActive:x,onClick:$,formatTime:y})},h.id):b.jsxs(yo,{ref:x?p:null,$isActive:x,onClick:$,children:[b.jsxs(ko,{children:[b.jsxs(Io,{children:[b.jsx(So,{$isEditable:s,contentEditable:s,suppressContentEditableWarning:!0,onBlur:E=>g(k,E.currentTarget.textContent||""),children:h.id}),b.jsxs(Ao,{children:[y(h.start)," - ",y(h.end)]})]}),o.length>0&&b.jsx($o,{onClick:E=>E.stopPropagation(),children:o.map((E,M)=>b.jsx(Mo,{title:E.title,onClick:()=>I(E,h,k),children:E.text?E.text:b.jsx("i",{className:w(E.class||"")})},M))})]}),b.jsx(Ro,{$isEditable:s,contentEditable:s,suppressContentEditableWarning:!0,onBlur:E=>m(k,E.currentTarget.textContent||""),children:h.lines.join(`
1040
+ `)})]},h.id)})})},Nn=i.memo(Eo),Do=({checked:e,onChange:t,disabled:n=!1,className:a})=>{const r=s=>{t(s.target.checked)};return b.jsxs(wt,{className:a,children:[b.jsx(yt,{type:"checkbox",id:"continuous-play",className:"continuous-play",checked:e,onChange:r,disabled:n}),b.jsx(kt,{htmlFor:"continuous-play",children:"Continuous Play"})]})},Bo=({checked:e,onChange:t,disabled:n=!1,className:a})=>{const r=s=>{t(s.target.checked)};return b.jsxs(wt,{className:a,children:[b.jsx(yt,{type:"checkbox",id:"link-endpoints",className:"link-endpoints",checked:e,onChange:r,disabled:n}),b.jsx(kt,{htmlFor:"link-endpoints",children:"Link Endpoints"})]})},To=({checked:e,onChange:t,className:n})=>b.jsxs(wt,{className:n,children:[b.jsx(yt,{type:"checkbox",id:"editable-annotations",checked:e,onChange:a=>t(a.target.checked)}),b.jsx(kt,{htmlFor:"editable-annotations",children:"Editable Annotations"})]}),Wo=S.button`
1041
1041
  padding: 0.5rem 1rem;
1042
1042
  background: ${e=>e.theme?.surfaceColor||"#f5f5f5"};
1043
1043
  color: ${e=>e.theme?.textColor||"#333"};
@@ -1063,7 +1063,7 @@
1063
1063
  opacity: 0.6;
1064
1064
  cursor: not-allowed;
1065
1065
  }
1066
- `,Bo=({annotations:e,filename:t="annotations.json",disabled:n=!1,className:a,children:r="Download JSON"})=>{const s=()=>{if(e.length===0)return;const o=e.map(v=>uo(v)),l=JSON.stringify(o,null,2),c=new Blob([l],{type:"application/json"}),u=URL.createObjectURL(c),d=document.createElement("a");d.href=u,d.download=t,document.body.appendChild(d),d.click(),document.body.removeChild(d),URL.revokeObjectURL(u)};return b.jsx(Do,{onClick:s,disabled:n||e.length===0,className:a,title:e.length===0?"No annotations to download":"Download the annotations as JSON",children:r})};function Xn(){const[e,t]=i.useState("hh:mm:ss.uuu");return{timeFormat:e,setTimeFormat:t,formatTime:r=>tt(r,e),parseTime:r=>Mn(r,e)}}const To=[256,512,1024,2048,4096,8192];function Gn({initialSamplesPerPixel:e,zoomLevels:t=To}){const[n,a]=i.useState(()=>{const u=t.indexOf(e);return u!==-1?u:Math.floor(t.length/2)}),r=t[n],s=n>0,o=n<t.length-1,l=i.useCallback(()=>{a(u=>Math.max(0,u-1))},[]),c=i.useCallback(()=>{a(u=>Math.min(t.length-1,u+1))},[t.length]);return{samplesPerPixel:r,zoomIn:l,zoomOut:c,canZoomIn:s,canZoomOut:o}}function Nn({playoutRef:e,initialVolume:t=1,onVolumeChange:n}){const[a,r]=i.useState(t),s=i.useCallback(o=>{r(o),e.current&&e.current.setMasterGain(o),n?.(o)},[e,n]);return{masterVolume:a,setMasterVolume:s}}const Wo=(e=256)=>{const t=i.useRef(null),n=i.useCallback((a,r,s)=>{const o=new W.Analyser("fft",e);return a.connect(o),a.connect(r),t.current=o,function(){o.dispose(),t.current=null}},[e]);return{analyserRef:t,masterEffects:n}};function _t(e){const{audioBuffer:t,startSample:n,offsetSamples:a=0,gain:r=1,name:s,color:o,fadeIn:l,fadeOut:c,waveformData:u}=e,d=t?.sampleRate??e.sampleRate??u?.sample_rate,v=t?.length??e.sourceDurationSamples??(u&&d?Math.ceil(u.duration*d):void 0);if(d===void 0)throw new Error("createClip: sampleRate is required when audioBuffer is not provided (can use waveformData.sample_rate)");if(v===void 0)throw new Error("createClip: sourceDurationSamples is required when audioBuffer is not provided (can use waveformData.duration)");t&&u&&t.sampleRate!==u.sample_rate&&console.warn(`Sample rate mismatch: audioBuffer (${t.sampleRate}) vs waveformData (${u.sample_rate}). Using audioBuffer sample rate. Waveform visualization may be slightly off.`);const p=e.durationSamples??v;return{id:Ln(),audioBuffer:t,startSample:n,durationSamples:p,offsetSamples:a,sampleRate:d,sourceDurationSamples:v,gain:r,name:s,color:o,fadeIn:l,fadeOut:c,waveformData:u}}function _o(e){const{audioBuffer:t,startTime:n,offset:a=0,gain:r=1,name:s,color:o,fadeIn:l,fadeOut:c,waveformData:u}=e,d=t?.sampleRate??e.sampleRate??u?.sample_rate;if(d===void 0)throw new Error("createClipFromSeconds: sampleRate is required when audioBuffer is not provided (can use waveformData.sample_rate)");const v=t?.duration??e.sourceDuration??u?.duration;if(v===void 0)throw new Error("createClipFromSeconds: sourceDuration is required when audioBuffer is not provided (can use waveformData.duration)");t&&u&&t.sampleRate!==u.sample_rate&&console.warn(`Sample rate mismatch: audioBuffer (${t.sampleRate}) vs waveformData (${u.sample_rate}). Using audioBuffer sample rate. Waveform visualization may be slightly off.`);const p=e.duration??v;return _t({audioBuffer:t,startSample:Math.round(n*d),durationSamples:Math.round(p*d),offsetSamples:Math.round(a*d),sampleRate:d,sourceDurationSamples:Math.ceil(v*d),gain:r,name:s,color:o,fadeIn:l,fadeOut:c,waveformData:u})}function Fo(e){const{name:t,clips:n=[],muted:a=!1,soloed:r=!1,volume:s=1,pan:o=0,color:l,height:c}=e;return{id:Ln(),name:t,clips:n,muted:a,soloed:r,volume:s,pan:o,color:l,height:c}}function Ln(){return`${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function Zo(e,t={}){const{progressive:n=!1}=t,[a,r]=i.useState([]),[s,o]=i.useState(!0),[l,c]=i.useState(null),[u,d]=i.useState(0),v=e.length;return i.useEffect(()=>{if(e.length===0){r([]),o(!1),d(0);return}let p=!1;const f=new Map,C=(m,g,I)=>{const x=I??m.audioBuffer;if(!x&&!m.waveformData)throw new Error(`Track ${g+1}: Must provide src, audioBuffer, or waveformData`);const h=x?.duration??m.waveformData?.duration,w=_o({audioBuffer:x,startTime:m.startTime??0,duration:m.duration??h,offset:m.offset??0,name:m.name||`Track ${g+1}`,fadeIn:m.fadeIn,fadeOut:m.fadeOut,waveformData:m.waveformData});if(isNaN(w.startSample)||isNaN(w.durationSamples)||isNaN(w.offsetSamples))throw console.error("Invalid clip values:",w),new Error(`Invalid clip values for track ${g+1}`);return{...Fo({name:m.name||`Track ${g+1}`,clips:[w],muted:m.muted??!1,soloed:m.soloed??!1,volume:m.volume??1,pan:m.pan??0,color:m.color}),effects:m.effects}};return(async()=>{try{o(!0),c(null),d(0);const m=pn.getContext().rawContext,g=e.map(async(x,h)=>{if(x.audioBuffer){const $=C(x,h,x.audioBuffer);return n&&!p&&(f.set(h,$),d(E=>E+1),r(Array.from({length:e.length},(E,R)=>f.get(R)).filter(E=>E!==void 0))),$}if(!x.src&&x.waveformData){const $=C(x,h);return n&&!p&&(f.set(h,$),d(E=>E+1),r(Array.from({length:e.length},(E,R)=>f.get(R)).filter(E=>E!==void 0))),$}if(!x.src)throw new Error(`Track ${h+1}: Must provide src, audioBuffer, or waveformData`);const w=await fetch(x.src);if(!w.ok)throw new Error(`Failed to fetch ${x.src}: ${w.statusText}`);const k=await w.arrayBuffer(),A=await m.decodeAudioData(k);if(!A||!A.sampleRate||!A.duration)throw new Error(`Invalid audio buffer for ${x.src}`);const M=C(x,h,A);return n&&!p&&(f.set(h,M),d($=>$+1),r(Array.from({length:e.length},($,E)=>f.get(E)).filter($=>$!==void 0))),M}),I=await Promise.all(g);p||(n||(r(I),d(I.length)),o(!1))}catch(m){if(!p){const g=m instanceof Error?m.message:"Unknown error loading audio";c(g),o(!1),console.error("Error loading audio tracks:",m)}}})(),()=>{p=!0}},[e,n]),{tracks:a,loading:s,error:l,loadedCount:u,totalCount:v}}function Vo({tracks:e,onTracksChange:t,samplesPerPixel:n,sampleRate:a}){const r=i.useRef(null),s=i.useCallback(u=>{const{transform:d,active:v}=u;if(!v?.data?.current)return{...d,scaleX:1,scaleY:1};const{trackIndex:p,clipIndex:f,boundary:C}=v.data.current;if(C)return{...d,scaleX:1,scaleY:1};const y=e[p];if(!y)return{...d,scaleX:1,scaleY:1};const m=y.clips[f];if(!m)return{...d,scaleX:1,scaleY:1};const g=m.startSample/a,I=m.durationSamples/a,x=d.x*n/a;let h=g+x;const w=[...y.clips].sort((R,T)=>R.startSample-T.startSample),k=w.findIndex(R=>R===m);h=Math.max(0,h);const A=k>0?w[k-1]:null;if(A){const R=(A.startSample+A.durationSamples)/a;h=Math.max(h,R)}const M=k<w.length-1?w[k+1]:null;if(M){const R=h+I,T=M.startSample/a;R>T&&(h=T-I)}const E=(h-g)*a/n;return{...d,x:E,scaleX:1,scaleY:1}},[e,n,a]),o=i.useCallback(u=>{const{active:d}=u,{boundary:v}=d.data.current;if(!v){r.current=null;return}const{trackIndex:p,clipIndex:f}=d.data.current,y=e[p]?.clips[f];y&&(r.current={offsetSamples:y.offsetSamples,durationSamples:y.durationSamples,startSample:y.startSample})},[e]),l=i.useCallback(u=>{const{active:d,delta:v}=u,{boundary:p}=d.data.current;if(!p||!r.current)return;const{trackIndex:f,clipIndex:C}=d.data.current,y=v.x*n,m=Math.floor(.1*a),g=r.current,I=e.map((x,h)=>{if(h!==f)return x;const w=[...x.clips].sort((M,$)=>M.startSample-$.startSample),k=w.findIndex(M=>M===x.clips[C]),A=x.clips.map((M,$)=>{if($!==C)return M;const E=M.sourceDurationSamples;if(p==="left"){let R=Math.floor(y);const T=-g.startSample;R<T&&(R=T);const D=-g.offsetSamples;R<D&&(R=D);const P=k>0?w[k-1]:null;if(P){const U=P.startSample+P.durationSamples-g.startSample;R<U&&(R=U)}const V=g.durationSamples-m;R>V&&(R=V);const F=g.offsetSamples+R,N=g.durationSamples-R,H=g.startSample+R;return{...M,offsetSamples:F,durationSamples:N,startSample:H}}else{let R=Math.floor(g.durationSamples+y);R=Math.max(m,R),g.offsetSamples+R>E&&(R=E-g.offsetSamples);const T=k<w.length-1?w[k+1]:null;return T&&g.startSample+R>T.startSample&&(R=T.startSample-g.startSample,R=Math.max(m,R)),{...M,durationSamples:R}}});return{...x,clips:A}});t(I)},[e,t,n,a]),c=i.useCallback(u=>{const{active:d,delta:v}=u,{trackIndex:p,clipIndex:f,boundary:C}=d.data.current,y=v.x*n;if(C){r.current=null;return}const m=e.map((g,I)=>{if(I!==p)return g;const x=[...g.clips].sort((k,A)=>k.startSample-A.startSample),h=x.findIndex(k=>k===g.clips[f]),w=g.clips.map((k,A)=>{if(A!==f)return k;let M=Math.floor(k.startSample+y);M=Math.max(0,M);const $=h>0?x[h-1]:null;if($){const R=$.startSample+$.durationSamples;M=Math.max(M,R)}const E=h<x.length-1?x[h+1]:null;return E&&M+k.durationSamples>E.startSample&&(M=E.startSample-k.durationSamples),{...k,startSample:M}});return{...g,clips:w}});t(m)},[e,t,n,a]);return{onDragStart:o,onDragMove:l,onDragEnd:c,collisionModifier:s}}const Dt=.01;function Yn({annotations:e,onAnnotationsChange:t,samplesPerPixel:n,sampleRate:a,duration:r,linkEndpoints:s}){const o=i.useRef(null),l=i.useCallback(d=>{const{active:v}=d,p=v.data.current;if(!p||p.annotationIndex===void 0){o.current=null;return}const f=e[p.annotationIndex];f&&(o.current={start:f.start,end:f.end,annotationIndex:p.annotationIndex})},[e]),c=i.useCallback(d=>{const{active:v,delta:p}=d;if(!o.current)return;const f=v.data.current;if(!f)return;const{edge:C,annotationIndex:y}=f,m=o.current,g=p.x*n/a,I=C==="start"?m.start+g:m.end+g,x=Po({annotationIndex:y,newTime:I,isDraggingStart:C==="start",annotations:e,duration:r,linkEndpoints:s});t(x)},[e,t,n,a,r,s]),u=i.useCallback(()=>{o.current=null},[]);return{onDragStart:l,onDragMove:c,onDragEnd:u}}function Po({annotationIndex:e,newTime:t,isDraggingStart:n,annotations:a,duration:r,linkEndpoints:s}){const o=[...a],l=a[e];if(n){const c=Math.min(l.end-.1,Math.max(0,t)),u=c-l.start;if(o[e]={...l,start:c},s&&e>0){const d=o[e-1];Math.abs(d.end-l.start)<Dt?o[e-1]={...d,end:Math.max(d.start+.1,d.end+u)}:c<=d.end&&(o[e]={...o[e],start:d.end})}else!s&&e>0&&c<o[e-1].end&&(o[e-1]={...o[e-1],end:c})}else{const c=Math.max(l.start+.1,Math.min(t,r)),u=c-l.end;if(o[e]={...l,end:c},s&&e<o.length-1){const d=o[e+1];if(Math.abs(d.start-l.end)<Dt){const v=d.start+u;o[e+1]={...d,start:Math.min(d.end-.1,v)};let p=e+1;for(;p<o.length-1;){const f=o[p],C=o[p+1];if(Math.abs(C.start-f.end)<Dt){const y=f.end-a[p].end;o[p+1]={...C,start:Math.min(C.end-.1,C.start+y)},p++}else break}}else c>=d.start&&(o[e]={...o[e],end:d.start})}else if(!s&&e<o.length-1&&c>o[e+1].start){const d=o[e+1];o[e+1]={...d,start:c};let v=e+1;for(;v<o.length-1;){const p=o[v],f=o[v+1];if(p.end>f.start)o[v+1]={...f,start:p.end},v++;else break}}}return o}function zo(e={}){const{touchOptimized:t=!1,touchDelay:n=250,touchTolerance:a=5,mouseDistance:r=1}=e,s=Ee.useSensor(Ee.MouseSensor,{activationConstraint:{distance:r}}),o=Ee.useSensor(Ee.TouchSensor,{activationConstraint:t?{delay:n,tolerance:a}:{distance:r}}),l=Ee.useSensor(Ee.PointerSensor,{activationConstraint:{distance:r}});return Ee.useSensors(...t?[s,o]:[l])}const jo=e=>{const{tracks:t,onTracksChange:n,sampleRate:a}=e,{currentTimeRef:r}=$e(),{selectedTrackId:s}=Te(),o=i.useCallback((c,u,d)=>{const{sampleRate:v,samplesPerPixel:p}=e,f=t[c];if(!f)return!1;const C=f.clips[u];if(!C)return!1;const y=C.startSample/v,m=(C.startSample+C.durationSamples)/v;if(d<=y||d>=m)return console.warn("Split time is outside clip bounds"),!1;const g=Math.round(d*v),I=Math.floor(g/p),x=C.startSample+C.durationSamples,h=I*p,w=C.startSample,k=h-w,A=h,M=x-A,$=h-C.startSample,E=_t({audioBuffer:C.audioBuffer,startSample:w,durationSamples:k,offsetSamples:C.offsetSamples,sampleRate:C.sampleRate,sourceDurationSamples:C.sourceDurationSamples,gain:C.gain,name:C.name?`${C.name} (1)`:void 0,color:C.color,fadeIn:C.fadeIn,waveformData:C.waveformData}),R=_t({audioBuffer:C.audioBuffer,startSample:A,durationSamples:M,offsetSamples:C.offsetSamples+$,sampleRate:C.sampleRate,sourceDurationSamples:C.sourceDurationSamples,gain:C.gain,name:C.name?`${C.name} (2)`:void 0,color:C.color,waveformData:C.waveformData,fadeOut:C.fadeOut}),T=[...f.clips];T.splice(u,1,E,R);const D=[...t];return D[c]={...f,clips:T},n(D),!0},[t,n,e]);return{splitClipAtPlayhead:i.useCallback(()=>{if(!s)return console.log("No track selected - click a clip to select a track first"),!1;const c=t.findIndex(v=>v.id===s);if(c===-1)return console.warn("Selected track not found"),!1;const u=t[c],d=r.current??0;for(let v=0;v<u.clips.length;v++){const p=u.clips[v],f=p.startSample/a,C=(p.startSample+p.durationSamples)/a;if(d>f&&d<C)return console.log(`Splitting clip on track "${u.name}" at ${d}s`),o(c,v,d)}return console.log(`No clip found at playhead position on track "${u.name}"`),!1},[t,r,s,o,a]),splitClipAt:o}},vt=e=>{const{shortcuts:t,enabled:n=!0}=e,a=i.useCallback(r=>{if(!n)return;const s=r.target;if(s.tagName==="INPUT"||s.tagName==="TEXTAREA"||s.isContentEditable)return;const o=t.find(l=>{const c=r.key.toLowerCase()===l.key.toLowerCase()||r.key===l.key,u=l.ctrlKey===void 0||r.ctrlKey===l.ctrlKey,d=l.shiftKey===void 0||r.shiftKey===l.shiftKey,v=l.metaKey===void 0||r.metaKey===l.metaKey,p=l.altKey===void 0||r.altKey===l.altKey;return c&&u&&d&&v&&p});o&&(o.preventDefault!==!1&&r.preventDefault(),o.action())},[t,n]);i.useEffect(()=>{if(n)return window.addEventListener("keydown",a),()=>{window.removeEventListener("keydown",a)}},[a,n])},Ho=e=>{const t=[],n=typeof navigator<"u"&&navigator.platform.includes("Mac");return e.metaKey&&t.push(n?"Cmd":"Ctrl"),e.ctrlKey&&!e.metaKey&&t.push("Ctrl"),e.altKey&&t.push(n?"Option":"Alt"),e.shiftKey&&t.push("Shift"),t.push(e.key.toUpperCase()),t.join("+")},Xo=(e={})=>{const{enabled:t=!0,additionalShortcuts:n=[],shortcuts:a}=e,{isPlaying:r}=$e(),{setCurrentTime:s,play:o,pause:l,stop:c}=he(),{playoutRef:u}=ke(),d=i.useCallback(()=>{r?l():o()},[r,o,l]),v=i.useCallback(()=>{c()},[c]),p=i.useCallback(()=>{r&&u.current?(u.current.stop(),s(0),o(0)):s(0)},[r,u,s,o]),C=a??[...[{key:" ",action:d,description:"Play/Pause",preventDefault:!0},{key:"Escape",action:v,description:"Stop",preventDefault:!0},{key:"0",action:p,description:"Rewind to start",preventDefault:!0}],...n];return vt({shortcuts:C,enabled:t}),{rewindToStart:p,togglePlayPause:d,stopPlayback:v,shortcuts:C}},Bt=.01,ht=.01;function Go({annotations:e,activeAnnotationId:t,onAnnotationsChange:n,onActiveAnnotationChange:a,duration:r,linkEndpoints:s,continuousPlay:o=!1,enabled:l=!0,scrollContainerRef:c,samplesPerPixel:u,sampleRate:d,controlsWidth:v=0,onPlay:p}){const f=i.useMemo(()=>t?e.findIndex($=>$.id===t):-1,[e,t]),C=i.useCallback($=>{if(!c?.current||!u||!d)return;const E=e.find(Z=>Z.id===$);if(!E)return;const R=c.current,T=R.clientWidth,D=E.start*d/u+v,P=E.end*d/u+v,V=(D+P)/2,F=R.scrollLeft,N=F,H=F+T;if(D<N||P>H){const Z=Math.max(0,V-T/2);R.scrollTo({left:Z,behavior:"smooth"})}},[e,c,u,d,v]);i.useEffect(()=>{t&&c?.current&&u&&d&&C(t)},[t,C,c,u,d]);const y=i.useCallback($=>{if(f<0)return;const E=e[f],R=Math.max(0,Math.min(E.end-.1,E.start+$)),T=R-E.start,D=[...e];if(D[f]={...E,start:R},s&&f>0){const P=D[f-1];Math.abs(P.end-E.start)<Bt&&(D[f-1]={...P,end:Math.max(P.start+.1,P.end+T)})}else if(!s&&f>0){const P=D[f-1];R<P.end&&(D[f-1]={...P,end:R})}n(D)},[e,f,s,n]),m=i.useCallback($=>{if(f<0)return;const E=e[f],R=Math.max(E.start+.1,Math.min(r,E.end+$)),T=R-E.end,D=[...e];if(D[f]={...E,end:R},s&&f<e.length-1){const P=D[f+1];if(Math.abs(P.start-E.end)<Bt){const V=Math.min(P.end-.1,P.start+T);D[f+1]={...P,start:V};let F=f+1;for(;F<D.length-1;){const N=D[F],H=D[F+1];if(Math.abs(H.start-e[F].end)<Bt){const Z=N.end-e[F].end;D[F+1]={...H,start:Math.min(H.end-.1,H.start+Z)},F++}else break}}}else if(!s&&f<e.length-1){const P=D[f+1];if(R>P.start){D[f+1]={...P,start:R};let V=f+1;for(;V<D.length-1;){const F=D[V],N=D[V+1];if(F.end>N.start)D[V+1]={...N,start:F.end},V++;else break}}}n(D)},[e,f,r,s,n]),g=i.useCallback(()=>{!a||e.length===0||(f<=0?a(e[e.length-1].id):a(e[f-1].id))},[e,f,a]),I=i.useCallback(()=>{!a||e.length===0||(f<0||f>=e.length-1?a(e[0].id):a(e[f+1].id))},[e,f,a]),x=i.useCallback(()=>{!a||e.length===0||a(e[0].id)},[e,a]),h=i.useCallback(()=>{!a||e.length===0||a(e[e.length-1].id)},[e,a]),w=i.useCallback(()=>{a&&a(null)},[a]),k=i.useCallback(()=>{if(f<0||!p)return;const $=e[f],E=o?void 0:$.end-$.start;p($.start,E)},[e,f,o,p]),A=i.useMemo(()=>[{key:"[",action:()=>y(-ht),description:"Move annotation start earlier",preventDefault:!0},{key:"]",action:()=>y(ht),description:"Move annotation start later",preventDefault:!0},{key:"{",shiftKey:!0,action:()=>m(-ht),description:"Move annotation end earlier",preventDefault:!0},{key:"}",shiftKey:!0,action:()=>m(ht),description:"Move annotation end later",preventDefault:!0},{key:"Enter",action:k,description:"Play selected annotation",preventDefault:!0}],[y,m,k]),M=i.useMemo(()=>[{key:"ArrowUp",action:g,description:"Select previous annotation",preventDefault:!0},{key:"ArrowLeft",action:g,description:"Select previous annotation",preventDefault:!0},{key:"ArrowDown",action:I,description:"Select next annotation",preventDefault:!0},{key:"ArrowRight",action:I,description:"Select next annotation",preventDefault:!0},{key:"Home",action:x,description:"Select first annotation",preventDefault:!0},{key:"End",action:h,description:"Select last annotation",preventDefault:!0},{key:"Escape",action:w,description:"Deselect annotation",preventDefault:!0}],[g,I,x,h,w]);return vt({shortcuts:A,enabled:l&&f>=0}),vt({shortcuts:M,enabled:l&&e.length>0&&!!a}),{moveStartBoundary:y,moveEndBoundary:m,selectPrevious:g,selectNext:I,selectFirst:x,selectLast:h,clearSelection:w,scrollToAnnotation:C,playActiveAnnotation:k}}function No(e){const t=e.reduce((r,s)=>r+s.length,0),n=new Float32Array(t);let a=0;for(const r of e)n.set(r,a),a+=r.length;return n}function Lo(e,t,n,a=1){const r=e.createBuffer(a,t.length,n),s=new Float32Array(t);return r.copyToChannel(s,0),r}function cn(e,t,n=16){const a=Math.ceil(e.length/t),r=n===8?new Int8Array(a*2):new Int16Array(a*2),s=2**(n-1);for(let o=0;o<a;o++){const l=o*t,c=Math.min(l+t,e.length);let u=0,d=0;for(let v=l;v<c;v++){const p=e[v];p<u&&(u=p),p>d&&(d=p)}r[o*2]=Math.floor(u*s),r[o*2+1]=Math.floor(d*s)}return r}function Yo(e,t,n,a,r=16){const s=2**(r-1),o=a%n;let l=0;if(o>0&&e.length>0){const d=n-o,v=Math.min(d,t.length);let p=e[e.length-2]/s,f=e[e.length-1]/s;for(let g=0;g<v;g++){const I=t[g];I<p&&(p=I),I>f&&(f=I)}const C=new(r===8?Int8Array:Int16Array)(e.length);C.set(e),C[e.length-2]=Math.floor(p*s),C[e.length-1]=Math.floor(f*s),l=v;const y=cn(t.slice(l),n,r),m=new(r===8?Int8Array:Int16Array)(C.length+y.length);return m.set(C),m.set(y,C.length),m}const c=cn(t.slice(l),n,r),u=new(r===8?Int8Array:Int16Array)(e.length+c.length);return u.set(e),u.set(c,e.length),u}function Oo(e,t={}){const{channelCount:n=1,samplesPerPixel:a=1024}=t,[r,s]=i.useState(!1),[o,l]=i.useState(!1),[c,u]=i.useState(0),[d,v]=i.useState(new Int16Array(0)),[p,f]=i.useState(null),[C,y]=i.useState(null),[m,g]=i.useState(0),[I,x]=i.useState(0),h=16,w=i.useRef(!1),k=i.useRef(null),A=i.useRef(null),M=i.useRef([]),$=i.useRef(0),E=i.useRef(null),R=i.useRef(0),T=i.useRef(!1),D=i.useRef(!1),P=i.useCallback(async()=>{if(!w.current)try{const Z=W.getContext(),U=new URL("data:text/javascript;base64,InVzZSBzdHJpY3QiOwoKLy8gc3JjL3dvcmtsZXQvcmVjb3JkaW5nLXByb2Nlc3Nvci53b3JrbGV0LnRzCnZhciBSZWNvcmRpbmdQcm9jZXNzb3IgPSBjbGFzcyBleHRlbmRzIEF1ZGlvV29ya2xldFByb2Nlc3NvciB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlcigpOwogICAgdGhpcy5idWZmZXJTaXplID0gMDsKICAgIHRoaXMuYnVmZmVycyA9IFtdOwogICAgdGhpcy5zYW1wbGVzQ29sbGVjdGVkID0gMDsKICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTsKICAgIHRoaXMuY2hhbm5lbENvdW50ID0gMTsKICAgIHRoaXMucG9ydC5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgeyBjb21tYW5kLCBzYW1wbGVSYXRlOiBzYW1wbGVSYXRlMiwgY2hhbm5lbENvdW50IH0gPSBldmVudC5kYXRhOwogICAgICBpZiAoY29tbWFuZCA9PT0gInN0YXJ0IikgewogICAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSB0cnVlOwogICAgICAgIHRoaXMuY2hhbm5lbENvdW50ID0gY2hhbm5lbENvdW50IHx8IDE7CiAgICAgICAgdGhpcy5idWZmZXJTaXplID0gTWF0aC5mbG9vcigoc2FtcGxlUmF0ZTIgfHwgNDhlMykgKiAwLjAxNik7CiAgICAgICAgdGhpcy5idWZmZXJzID0gW107CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYW5uZWxDb3VudDsgaSsrKSB7CiAgICAgICAgICB0aGlzLmJ1ZmZlcnNbaV0gPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYnVmZmVyU2l6ZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2FtcGxlc0NvbGxlY3RlZCA9IDA7CiAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PT0gInN0b3AiKSB7CiAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlOwogICAgICAgIGlmICh0aGlzLnNhbXBsZXNDb2xsZWN0ZWQgPiAwKSB7CiAgICAgICAgICB0aGlzLmZsdXNoQnVmZmVycygpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9CiAgcHJvY2VzcyhpbnB1dHMsIG91dHB1dHMsIHBhcmFtZXRlcnMpIHsKICAgIGlmICghdGhpcy5pc1JlY29yZGluZykgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzWzBdOwogICAgaWYgKCFpbnB1dCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBjb25zdCBmcmFtZUNvdW50ID0gaW5wdXRbMF0ubGVuZ3RoOwogICAgZm9yIChsZXQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIHRoaXMuY2hhbm5lbENvdW50KTsgY2hhbm5lbCsrKSB7CiAgICAgIGNvbnN0IGlucHV0Q2hhbm5lbCA9IGlucHV0W2NoYW5uZWxdOwogICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmJ1ZmZlcnNbY2hhbm5lbF07CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVDb3VudDsgaSsrKSB7CiAgICAgICAgYnVmZmVyW3RoaXMuc2FtcGxlc0NvbGxlY3RlZCArIGldID0gaW5wdXRDaGFubmVsW2ldOwogICAgICB9CiAgICB9CiAgICB0aGlzLnNhbXBsZXNDb2xsZWN0ZWQgKz0gZnJhbWVDb3VudDsKICAgIGlmICh0aGlzLnNhbXBsZXNDb2xsZWN0ZWQgPj0gdGhpcy5idWZmZXJTaXplKSB7CiAgICAgIHRoaXMuZmx1c2hCdWZmZXJzKCk7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgZmx1c2hCdWZmZXJzKCkgewogICAgY29uc3Qgc2FtcGxlcyA9IHRoaXMuYnVmZmVyc1swXS5zbGljZSgwLCB0aGlzLnNhbXBsZXNDb2xsZWN0ZWQpOwogICAgdGhpcy5wb3J0LnBvc3RNZXNzYWdlKHsKICAgICAgc2FtcGxlcywKICAgICAgc2FtcGxlUmF0ZSwKICAgICAgY2hhbm5lbENvdW50OiB0aGlzLmNoYW5uZWxDb3VudAogICAgfSk7CiAgICB0aGlzLnNhbXBsZXNDb2xsZWN0ZWQgPSAwOwogIH0KfTsKcmVnaXN0ZXJQcm9jZXNzb3IoInJlY29yZGluZy1wcm9jZXNzb3IiLCBSZWNvcmRpbmdQcm9jZXNzb3IpOwovLyMgc291cmNlTWFwcGluZ1VSTD1yZWNvcmRpbmctcHJvY2Vzc29yLndvcmtsZXQuanMubWFw",typeof document>"u"?require("url").pathToFileURL(__filename).href:Rt&&Rt.tagName.toUpperCase()==="SCRIPT"&&Rt.src||new URL("index.js",document.baseURI).href).href;await Z.addAudioWorkletModule(U),w.current=!0}catch(Z){throw console.error("Failed to load AudioWorklet module:",Z),new Error("Failed to load recording processor")}},[]),V=i.useCallback(async()=>{if(!e){y(new Error("No microphone stream available"));return}try{y(null);const Z=W.getContext();Z.state==="suspended"&&await Z.resume(),await P();const U=Z.createMediaStreamSource(e);A.current=U;const re=Z.createAudioWorkletNode("recording-processor");k.current=re,U.connect(re),re.port.onmessage=q=>{const{samples:ae}=q.data;M.current.push(ae),$.current+=ae.length,v(be=>Yo(be,ae,a,$.current-ae.length,h))},re.port.postMessage({command:"start",sampleRate:Z.sampleRate,channelCount:n}),M.current=[],$.current=0,v(new Int16Array(0)),f(null),g(0),x(0),T.current=!0,D.current=!1,s(!0),l(!1),R.current=performance.now();const ne=()=>{if(T.current&&!D.current){const q=(performance.now()-R.current)/1e3;u(q),E.current=requestAnimationFrame(ne)}};ne()}catch(Z){console.error("Failed to start recording:",Z),y(Z instanceof Error?Z:new Error("Failed to start recording"))}},[e,n,a,P,r,o]),F=i.useCallback(async()=>{if(!r)return null;try{if(k.current){if(k.current.port.postMessage({command:"stop"}),A.current)try{A.current.disconnect(k.current)}catch{}k.current.disconnect()}E.current!==null&&(cancelAnimationFrame(E.current),E.current=null);const Z=No(M.current),re=W.getContext().rawContext,ne=Lo(re,Z,re.sampleRate,n);return f(ne),u(ne.duration),T.current=!1,D.current=!1,s(!1),l(!1),g(0),ne}catch(Z){return console.error("Failed to stop recording:",Z),y(Z instanceof Error?Z:new Error("Failed to stop recording")),null}},[r,n]),N=i.useCallback(()=>{r&&!o&&(E.current!==null&&(cancelAnimationFrame(E.current),E.current=null),D.current=!0,l(!0))},[r,o]),H=i.useCallback(()=>{if(r&&o){D.current=!1,l(!1),R.current=performance.now()-c*1e3;const Z=()=>{if(T.current&&!D.current){const U=(performance.now()-R.current)/1e3;u(U),E.current=requestAnimationFrame(Z)}};Z()}},[r,o,c]);return i.useEffect(()=>()=>{if(k.current){if(k.current.port.postMessage({command:"stop"}),A.current)try{A.current.disconnect(k.current)}catch{}k.current.disconnect()}E.current!==null&&cancelAnimationFrame(E.current)},[]),{isRecording:r,isPaused:o,duration:c,peaks:d,audioBuffer:p,level:m,peakLevel:I,startRecording:V,stopRecording:F,pauseRecording:N,resumeRecording:H,error:C}}function Ko(){const[e,t]=i.useState(null),[n,a]=i.useState([]),[r,s]=i.useState(!1),[o,l]=i.useState(!1),[c,u]=i.useState(null),d=i.useCallback(async()=>{try{const C=(await navigator.mediaDevices.enumerateDevices()).filter(y=>y.kind==="audioinput").map(y=>({deviceId:y.deviceId,label:y.label||`Microphone ${y.deviceId.slice(0,8)}`,groupId:y.groupId}));a(C)}catch(f){console.error("Failed to enumerate devices:",f),u(f instanceof Error?f:new Error("Failed to enumerate devices"))}},[]),v=i.useCallback(async(f,C)=>{l(!0),u(null);try{e&&e.getTracks().forEach(I=>I.stop());const m={audio:{echoCancellation:!1,noiseSuppression:!1,autoGainControl:!1,latency:0,...C,...f&&{deviceId:{exact:f}}},video:!1},g=await navigator.mediaDevices.getUserMedia(m);t(g),s(!0),await d()}catch(y){console.error("Failed to access microphone:",y),u(y instanceof Error?y:new Error("Failed to access microphone")),s(!1)}finally{l(!1)}},[e,d]),p=i.useCallback(()=>{e&&(e.getTracks().forEach(f=>f.stop()),t(null),s(!1))},[e]);return i.useEffect(()=>(d(),()=>{e&&e.getTracks().forEach(f=>f.stop())}),[]),{stream:e,devices:n,hasPermission:r,isLoading:o,requestAccess:v,stopStream:p,error:c}}function Uo(e,t={}){const{updateRate:n=60,smoothingTimeConstant:a=.8}=t,[r,s]=i.useState(0),[o,l]=i.useState(0),c=i.useRef(null),u=i.useRef(null),d=i.useRef(null),v=()=>l(0);return i.useEffect(()=>{if(!e){s(0),l(0);return}let p=!0;return(async()=>{if(!p)return;const C=W.getContext();if(C.state==="suspended"&&await C.resume(),!p)return;const y=new W.Meter({smoothing:a,context:C});c.current=y;const m=C.createMediaStreamSource(e);u.current=m,W.connect(m,y);const g=1e3/n;let I=0;const x=h=>{if(!(!p||!c.current)){if(h-I>=g){I=h;const w=c.current.getValue(),k=typeof w=="number"?w:w[0],A=Math.max(0,Math.min(1,(k+100)/100));s(A),l(M=>Math.max(M,A))}d.current=requestAnimationFrame(x)}};d.current=requestAnimationFrame(x)})(),()=>{if(p=!1,d.current&&(cancelAnimationFrame(d.current),d.current=null),u.current){try{u.current.disconnect()}catch{}u.current=null}c.current&&(c.current.dispose(),c.current=null)}},[e,a,n]),{level:r,peakLevel:o,resetPeak:v}}S.button`
1066
+ `,_o=({annotations:e,filename:t="annotations.json",disabled:n=!1,className:a,children:r="Download JSON"})=>{const s=()=>{if(e.length===0)return;const o=e.map(v=>ho(v)),l=JSON.stringify(o,null,2),c=new Blob([l],{type:"application/json"}),u=URL.createObjectURL(c),d=document.createElement("a");d.href=u,d.download=t,document.body.appendChild(d),d.click(),document.body.removeChild(d),URL.revokeObjectURL(u)};return b.jsx(Wo,{onClick:s,disabled:n||e.length===0,className:a,title:e.length===0?"No annotations to download":"Download the annotations as JSON",children:r})};function Ln(){const[e,t]=i.useState("hh:mm:ss.uuu");return{timeFormat:e,setTimeFormat:t,formatTime:r=>nt(r,e),parseTime:r=>Dn(r,e)}}const Fo=[256,512,1024,2048,4096,8192];function Yn({initialSamplesPerPixel:e,zoomLevels:t=Fo}){const[n,a]=i.useState(()=>{const u=t.indexOf(e);return u!==-1?u:Math.floor(t.length/2)}),r=t[n],s=n>0,o=n<t.length-1,l=i.useCallback(()=>{a(u=>Math.max(0,u-1))},[]),c=i.useCallback(()=>{a(u=>Math.min(t.length-1,u+1))},[t.length]);return{samplesPerPixel:r,zoomIn:l,zoomOut:c,canZoomIn:s,canZoomOut:o}}function On({playoutRef:e,initialVolume:t=1,onVolumeChange:n}){const[a,r]=i.useState(t),s=i.useCallback(o=>{r(o),e.current&&e.current.setMasterGain(o),n?.(o)},[e,n]);return{masterVolume:a,setMasterVolume:s}}const Zo=(e=256)=>{const t=i.useRef(null),n=i.useCallback((a,r,s)=>{const o=new W.Analyser("fft",e);return a.connect(o),a.connect(r),t.current=o,function(){o.dispose(),t.current=null}},[e]);return{analyserRef:t,masterEffects:n}};function Vt(e){const{audioBuffer:t,startSample:n,offsetSamples:a=0,gain:r=1,name:s,color:o,fadeIn:l,fadeOut:c,waveformData:u}=e,d=t?.sampleRate??e.sampleRate??u?.sample_rate,v=t?.length??e.sourceDurationSamples??(u&&d?Math.ceil(u.duration*d):void 0);if(d===void 0)throw new Error("createClip: sampleRate is required when audioBuffer is not provided (can use waveformData.sample_rate)");if(v===void 0)throw new Error("createClip: sourceDurationSamples is required when audioBuffer is not provided (can use waveformData.duration)");t&&u&&t.sampleRate!==u.sample_rate&&console.warn(`Sample rate mismatch: audioBuffer (${t.sampleRate}) vs waveformData (${u.sample_rate}). Using audioBuffer sample rate. Waveform visualization may be slightly off.`);const p=e.durationSamples??v;return{id:Kn(),audioBuffer:t,startSample:n,durationSamples:p,offsetSamples:a,sampleRate:d,sourceDurationSamples:v,gain:r,name:s,color:o,fadeIn:l,fadeOut:c,waveformData:u}}function Vo(e){const{audioBuffer:t,startTime:n,offset:a=0,gain:r=1,name:s,color:o,fadeIn:l,fadeOut:c,waveformData:u}=e,d=t?.sampleRate??e.sampleRate??u?.sample_rate;if(d===void 0)throw new Error("createClipFromSeconds: sampleRate is required when audioBuffer is not provided (can use waveformData.sample_rate)");const v=t?.duration??e.sourceDuration??u?.duration;if(v===void 0)throw new Error("createClipFromSeconds: sourceDuration is required when audioBuffer is not provided (can use waveformData.duration)");t&&u&&t.sampleRate!==u.sample_rate&&console.warn(`Sample rate mismatch: audioBuffer (${t.sampleRate}) vs waveformData (${u.sample_rate}). Using audioBuffer sample rate. Waveform visualization may be slightly off.`);const p=e.duration??v;return Vt({audioBuffer:t,startSample:Math.round(n*d),durationSamples:Math.round(p*d),offsetSamples:Math.round(a*d),sampleRate:d,sourceDurationSamples:Math.ceil(v*d),gain:r,name:s,color:o,fadeIn:l,fadeOut:c,waveformData:u})}function Po(e){const{name:t,clips:n=[],muted:a=!1,soloed:r=!1,volume:s=1,pan:o=0,color:l,height:c}=e;return{id:Kn(),name:t,clips:n,muted:a,soloed:r,volume:s,pan:o,color:l,height:c}}function Kn(){return`${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function zo(e,t={}){const{progressive:n=!1}=t,[a,r]=i.useState([]),[s,o]=i.useState(!0),[l,c]=i.useState(null),[u,d]=i.useState(0),v=e.length;return i.useEffect(()=>{if(e.length===0){r([]),o(!1),d(0);return}let p=!1;const f=new Map,C=(m,g,I)=>{const w=I??m.audioBuffer;if(!w&&!m.waveformData)throw new Error(`Track ${g+1}: Must provide src, audioBuffer, or waveformData`);const h=w?.duration??m.waveformData?.duration,k=Vo({audioBuffer:w,startTime:m.startTime??0,duration:m.duration??h,offset:m.offset??0,name:m.name||`Track ${g+1}`,fadeIn:m.fadeIn,fadeOut:m.fadeOut,waveformData:m.waveformData});if(isNaN(k.startSample)||isNaN(k.durationSamples)||isNaN(k.offsetSamples))throw console.error("Invalid clip values:",k),new Error(`Invalid clip values for track ${g+1}`);return{...Po({name:m.name||`Track ${g+1}`,clips:[k],muted:m.muted??!1,soloed:m.soloed??!1,volume:m.volume??1,pan:m.pan??0,color:m.color}),effects:m.effects}};return(async()=>{try{o(!0),c(null),d(0);const m=vn.getContext().rawContext,g=e.map(async(w,h)=>{if(w.audioBuffer){const M=C(w,h,w.audioBuffer);return n&&!p&&(f.set(h,M),d(A=>A+1),r(Array.from({length:e.length},(A,R)=>f.get(R)).filter(A=>A!==void 0))),M}if(!w.src&&w.waveformData){const M=C(w,h);return n&&!p&&(f.set(h,M),d(A=>A+1),r(Array.from({length:e.length},(A,R)=>f.get(R)).filter(A=>A!==void 0))),M}if(!w.src)throw new Error(`Track ${h+1}: Must provide src, audioBuffer, or waveformData`);const k=await fetch(w.src);if(!k.ok)throw new Error(`Failed to fetch ${w.src}: ${k.statusText}`);const x=await k.arrayBuffer(),$=await m.decodeAudioData(x);if(!$||!$.sampleRate||!$.duration)throw new Error(`Invalid audio buffer for ${w.src}`);const E=C(w,h,$);return n&&!p&&(f.set(h,E),d(M=>M+1),r(Array.from({length:e.length},(M,A)=>f.get(A)).filter(M=>M!==void 0))),E}),I=await Promise.all(g);p||(n||(r(I),d(I.length)),o(!1))}catch(m){if(!p){const g=m instanceof Error?m.message:"Unknown error loading audio";c(g),o(!1),console.error("Error loading audio tracks:",m)}}})(),()=>{p=!0}},[e,n]),{tracks:a,loading:s,error:l,loadedCount:u,totalCount:v}}function jo({tracks:e,onTracksChange:t,samplesPerPixel:n,sampleRate:a}){const r=i.useRef(null),s=i.useCallback(u=>{const{transform:d,active:v}=u;if(!v?.data?.current)return{...d,scaleX:1,scaleY:1};const{trackIndex:p,clipIndex:f,boundary:C}=v.data.current;if(C)return{...d,scaleX:1,scaleY:1};const y=e[p];if(!y)return{...d,scaleX:1,scaleY:1};const m=y.clips[f];if(!m)return{...d,scaleX:1,scaleY:1};const g=m.startSample/a,I=m.durationSamples/a,w=d.x*n/a;let h=g+w;const k=[...y.clips].sort((R,T)=>R.startSample-T.startSample),x=k.findIndex(R=>R===m);h=Math.max(0,h);const $=x>0?k[x-1]:null;if($){const R=($.startSample+$.durationSamples)/a;h=Math.max(h,R)}const E=x<k.length-1?k[x+1]:null;if(E){const R=h+I,T=E.startSample/a;R>T&&(h=T-I)}const A=(h-g)*a/n;return{...d,x:A,scaleX:1,scaleY:1}},[e,n,a]),o=i.useCallback(u=>{const{active:d}=u,{boundary:v}=d.data.current;if(!v){r.current=null;return}const{trackIndex:p,clipIndex:f}=d.data.current,y=e[p]?.clips[f];y&&(r.current={offsetSamples:y.offsetSamples,durationSamples:y.durationSamples,startSample:y.startSample})},[e]),l=i.useCallback(u=>{const{active:d,delta:v}=u,{boundary:p}=d.data.current;if(!p||!r.current)return;const{trackIndex:f,clipIndex:C}=d.data.current,y=v.x*n,m=Math.floor(.1*a),g=r.current,I=e.map((w,h)=>{if(h!==f)return w;const k=[...w.clips].sort((E,M)=>E.startSample-M.startSample),x=k.findIndex(E=>E===w.clips[C]),$=w.clips.map((E,M)=>{if(M!==C)return E;const A=E.sourceDurationSamples;if(p==="left"){let R=Math.floor(y);const T=-g.startSample;R<T&&(R=T);const D=-g.offsetSamples;R<D&&(R=D);const Z=x>0?k[x-1]:null;if(Z){const U=Z.startSample+Z.durationSamples-g.startSample;R<U&&(R=U)}const P=g.durationSamples-m;R>P&&(R=P);const V=g.offsetSamples+R,Y=g.durationSamples-R,j=g.startSample+R;return{...E,offsetSamples:V,durationSamples:Y,startSample:j}}else{let R=Math.floor(g.durationSamples+y);R=Math.max(m,R),g.offsetSamples+R>A&&(R=A-g.offsetSamples);const T=x<k.length-1?k[x+1]:null;return T&&g.startSample+R>T.startSample&&(R=T.startSample-g.startSample,R=Math.max(m,R)),{...E,durationSamples:R}}});return{...w,clips:$}});t(I)},[e,t,n,a]),c=i.useCallback(u=>{const{active:d,delta:v}=u,{trackIndex:p,clipIndex:f,boundary:C}=d.data.current,y=v.x*n;if(C){r.current=null;return}const m=e.map((g,I)=>{if(I!==p)return g;const w=[...g.clips].sort((x,$)=>x.startSample-$.startSample),h=w.findIndex(x=>x===g.clips[f]),k=g.clips.map((x,$)=>{if($!==f)return x;let E=Math.floor(x.startSample+y);E=Math.max(0,E);const M=h>0?w[h-1]:null;if(M){const R=M.startSample+M.durationSamples;E=Math.max(E,R)}const A=h<w.length-1?w[h+1]:null;return A&&E+x.durationSamples>A.startSample&&(E=A.startSample-x.durationSamples),{...x,startSample:E}});return{...g,clips:k}});t(m)},[e,t,n,a]);return{onDragStart:o,onDragMove:l,onDragEnd:c,collisionModifier:s}}const Wt=.01;function Un({annotations:e,onAnnotationsChange:t,samplesPerPixel:n,sampleRate:a,duration:r,linkEndpoints:s}){const o=i.useRef(null),l=i.useCallback(d=>{const{active:v}=d,p=v.data.current;if(!p||p.annotationIndex===void 0){o.current=null;return}const f=e[p.annotationIndex];f&&(o.current={start:f.start,end:f.end,annotationIndex:p.annotationIndex})},[e]),c=i.useCallback(d=>{const{active:v,delta:p}=d;if(!o.current)return;const f=v.data.current;if(!f)return;const{edge:C,annotationIndex:y}=f,m=o.current,g=p.x*n/a,I=C==="start"?m.start+g:m.end+g,w=Ho({annotationIndex:y,newTime:I,isDraggingStart:C==="start",annotations:e,duration:r,linkEndpoints:s});t(w)},[e,t,n,a,r,s]),u=i.useCallback(()=>{o.current=null},[]);return{onDragStart:l,onDragMove:c,onDragEnd:u}}function Ho({annotationIndex:e,newTime:t,isDraggingStart:n,annotations:a,duration:r,linkEndpoints:s}){const o=[...a],l=a[e];if(n){const c=Math.min(l.end-.1,Math.max(0,t)),u=c-l.start;if(o[e]={...l,start:c},s&&e>0){const d=o[e-1];Math.abs(d.end-l.start)<Wt?o[e-1]={...d,end:Math.max(d.start+.1,d.end+u)}:c<=d.end&&(o[e]={...o[e],start:d.end})}else!s&&e>0&&c<o[e-1].end&&(o[e-1]={...o[e-1],end:c})}else{const c=Math.max(l.start+.1,Math.min(t,r)),u=c-l.end;if(o[e]={...l,end:c},s&&e<o.length-1){const d=o[e+1];if(Math.abs(d.start-l.end)<Wt){const v=d.start+u;o[e+1]={...d,start:Math.min(d.end-.1,v)};let p=e+1;for(;p<o.length-1;){const f=o[p],C=o[p+1];if(Math.abs(C.start-f.end)<Wt){const y=f.end-a[p].end;o[p+1]={...C,start:Math.min(C.end-.1,C.start+y)},p++}else break}}else c>=d.start&&(o[e]={...o[e],end:d.start})}else if(!s&&e<o.length-1&&c>o[e+1].start){const d=o[e+1];o[e+1]={...d,start:c};let v=e+1;for(;v<o.length-1;){const p=o[v],f=o[v+1];if(p.end>f.start)o[v+1]={...f,start:p.end},v++;else break}}}return o}function Xo(e={}){const{touchOptimized:t=!1,touchDelay:n=250,touchTolerance:a=5,mouseDistance:r=1}=e,s=De.useSensor(De.MouseSensor,{activationConstraint:{distance:r}}),o=De.useSensor(De.TouchSensor,{activationConstraint:t?{delay:n,tolerance:a}:{distance:r}}),l=De.useSensor(De.PointerSensor,{activationConstraint:{distance:r}});return De.useSensors(...t?[s,o]:[l])}const Go=e=>{const{tracks:t,onTracksChange:n,sampleRate:a}=e,{currentTimeRef:r}=Ae(),{selectedTrackId:s}=We(),o=i.useCallback((c,u,d)=>{const{sampleRate:v,samplesPerPixel:p}=e,f=t[c];if(!f)return!1;const C=f.clips[u];if(!C)return!1;const y=C.startSample/v,m=(C.startSample+C.durationSamples)/v;if(d<=y||d>=m)return console.warn("Split time is outside clip bounds"),!1;const g=Math.round(d*v),I=Math.floor(g/p),w=C.startSample+C.durationSamples,h=I*p,k=C.startSample,x=h-k,$=h,E=w-$,M=h-C.startSample,A=Vt({audioBuffer:C.audioBuffer,startSample:k,durationSamples:x,offsetSamples:C.offsetSamples,sampleRate:C.sampleRate,sourceDurationSamples:C.sourceDurationSamples,gain:C.gain,name:C.name?`${C.name} (1)`:void 0,color:C.color,fadeIn:C.fadeIn,waveformData:C.waveformData}),R=Vt({audioBuffer:C.audioBuffer,startSample:$,durationSamples:E,offsetSamples:C.offsetSamples+M,sampleRate:C.sampleRate,sourceDurationSamples:C.sourceDurationSamples,gain:C.gain,name:C.name?`${C.name} (2)`:void 0,color:C.color,waveformData:C.waveformData,fadeOut:C.fadeOut}),T=[...f.clips];T.splice(u,1,A,R);const D=[...t];return D[c]={...f,clips:T},n(D),!0},[t,n,e]);return{splitClipAtPlayhead:i.useCallback(()=>{if(!s)return console.log("No track selected - click a clip to select a track first"),!1;const c=t.findIndex(v=>v.id===s);if(c===-1)return console.warn("Selected track not found"),!1;const u=t[c],d=r.current??0;for(let v=0;v<u.clips.length;v++){const p=u.clips[v],f=p.startSample/a,C=(p.startSample+p.durationSamples)/a;if(d>f&&d<C)return console.log(`Splitting clip on track "${u.name}" at ${d}s`),o(c,v,d)}return console.log(`No clip found at playhead position on track "${u.name}"`),!1},[t,r,s,o,a]),splitClipAt:o}},xt=e=>{const{shortcuts:t,enabled:n=!0}=e,a=i.useCallback(r=>{if(!n)return;const s=r.target;if(s.tagName==="INPUT"||s.tagName==="TEXTAREA"||s.isContentEditable)return;const o=t.find(l=>{const c=r.key.toLowerCase()===l.key.toLowerCase()||r.key===l.key,u=l.ctrlKey===void 0||r.ctrlKey===l.ctrlKey,d=l.shiftKey===void 0||r.shiftKey===l.shiftKey,v=l.metaKey===void 0||r.metaKey===l.metaKey,p=l.altKey===void 0||r.altKey===l.altKey;return c&&u&&d&&v&&p});o&&(o.preventDefault!==!1&&r.preventDefault(),o.action())},[t,n]);i.useEffect(()=>{if(n)return window.addEventListener("keydown",a),()=>{window.removeEventListener("keydown",a)}},[a,n])},No=e=>{const t=[],n=typeof navigator<"u"&&navigator.platform.includes("Mac");return e.metaKey&&t.push(n?"Cmd":"Ctrl"),e.ctrlKey&&!e.metaKey&&t.push("Ctrl"),e.altKey&&t.push(n?"Option":"Alt"),e.shiftKey&&t.push("Shift"),t.push(e.key.toUpperCase()),t.join("+")},Lo=(e={})=>{const{enabled:t=!0,additionalShortcuts:n=[],shortcuts:a}=e,{isPlaying:r}=Ae(),{setCurrentTime:s,play:o,pause:l,stop:c}=me(),{playoutRef:u}=ye(),d=i.useCallback(()=>{r?l():o()},[r,o,l]),v=i.useCallback(()=>{c()},[c]),p=i.useCallback(()=>{r&&u.current?(u.current.stop(),s(0),o(0)):s(0)},[r,u,s,o]),C=a??[...[{key:" ",action:d,description:"Play/Pause",preventDefault:!0},{key:"Escape",action:v,description:"Stop",preventDefault:!0},{key:"0",action:p,description:"Rewind to start",preventDefault:!0}],...n];return xt({shortcuts:C,enabled:t}),{rewindToStart:p,togglePlayPause:d,stopPlayback:v,shortcuts:C}},_t=.01,gt=.01;function Yo({annotations:e,activeAnnotationId:t,onAnnotationsChange:n,onActiveAnnotationChange:a,duration:r,linkEndpoints:s,continuousPlay:o=!1,enabled:l=!0,scrollContainerRef:c,samplesPerPixel:u,sampleRate:d,controlsWidth:v=0,onPlay:p}){const f=i.useMemo(()=>t?e.findIndex(M=>M.id===t):-1,[e,t]),C=i.useCallback(M=>{if(!c?.current||!u||!d)return;const A=e.find(F=>F.id===M);if(!A)return;const R=c.current,T=R.clientWidth,D=A.start*d/u+v,Z=A.end*d/u+v,P=(D+Z)/2,V=R.scrollLeft,Y=V,j=V+T;if(D<Y||Z>j){const F=Math.max(0,P-T/2);R.scrollTo({left:F,behavior:"smooth"})}},[e,c,u,d,v]);i.useEffect(()=>{t&&c?.current&&u&&d&&C(t)},[t,C,c,u,d]);const y=i.useCallback(M=>{if(f<0)return;const A=e[f],R=Math.max(0,Math.min(A.end-.1,A.start+M)),T=R-A.start,D=[...e];if(D[f]={...A,start:R},s&&f>0){const Z=D[f-1];Math.abs(Z.end-A.start)<_t&&(D[f-1]={...Z,end:Math.max(Z.start+.1,Z.end+T)})}else if(!s&&f>0){const Z=D[f-1];R<Z.end&&(D[f-1]={...Z,end:R})}n(D)},[e,f,s,n]),m=i.useCallback(M=>{if(f<0)return;const A=e[f],R=Math.max(A.start+.1,Math.min(r,A.end+M)),T=R-A.end,D=[...e];if(D[f]={...A,end:R},s&&f<e.length-1){const Z=D[f+1];if(Math.abs(Z.start-A.end)<_t){const P=Math.min(Z.end-.1,Z.start+T);D[f+1]={...Z,start:P};let V=f+1;for(;V<D.length-1;){const Y=D[V],j=D[V+1];if(Math.abs(j.start-e[V].end)<_t){const F=Y.end-e[V].end;D[V+1]={...j,start:Math.min(j.end-.1,j.start+F)},V++}else break}}}else if(!s&&f<e.length-1){const Z=D[f+1];if(R>Z.start){D[f+1]={...Z,start:R};let P=f+1;for(;P<D.length-1;){const V=D[P],Y=D[P+1];if(V.end>Y.start)D[P+1]={...Y,start:V.end},P++;else break}}}n(D)},[e,f,r,s,n]),g=i.useCallback(()=>{!a||e.length===0||(f<=0?a(e[e.length-1].id):a(e[f-1].id))},[e,f,a]),I=i.useCallback(()=>{!a||e.length===0||(f<0||f>=e.length-1?a(e[0].id):a(e[f+1].id))},[e,f,a]),w=i.useCallback(()=>{!a||e.length===0||a(e[0].id)},[e,a]),h=i.useCallback(()=>{!a||e.length===0||a(e[e.length-1].id)},[e,a]),k=i.useCallback(()=>{a&&a(null)},[a]),x=i.useCallback(()=>{if(f<0||!p)return;const M=e[f],A=o?void 0:M.end-M.start;p(M.start,A)},[e,f,o,p]),$=i.useMemo(()=>[{key:"[",action:()=>y(-gt),description:"Move annotation start earlier",preventDefault:!0},{key:"]",action:()=>y(gt),description:"Move annotation start later",preventDefault:!0},{key:"{",shiftKey:!0,action:()=>m(-gt),description:"Move annotation end earlier",preventDefault:!0},{key:"}",shiftKey:!0,action:()=>m(gt),description:"Move annotation end later",preventDefault:!0},{key:"Enter",action:x,description:"Play selected annotation",preventDefault:!0}],[y,m,x]),E=i.useMemo(()=>[{key:"ArrowUp",action:g,description:"Select previous annotation",preventDefault:!0},{key:"ArrowLeft",action:g,description:"Select previous annotation",preventDefault:!0},{key:"ArrowDown",action:I,description:"Select next annotation",preventDefault:!0},{key:"ArrowRight",action:I,description:"Select next annotation",preventDefault:!0},{key:"Home",action:w,description:"Select first annotation",preventDefault:!0},{key:"End",action:h,description:"Select last annotation",preventDefault:!0},{key:"Escape",action:k,description:"Deselect annotation",preventDefault:!0}],[g,I,w,h,k]);return xt({shortcuts:$,enabled:l&&f>=0}),xt({shortcuts:E,enabled:l&&e.length>0&&!!a}),{moveStartBoundary:y,moveEndBoundary:m,selectPrevious:g,selectNext:I,selectFirst:w,selectLast:h,clearSelection:k,scrollToAnnotation:C,playActiveAnnotation:x}}function Oo(e){const t=e.reduce((r,s)=>r+s.length,0),n=new Float32Array(t);let a=0;for(const r of e)n.set(r,a),a+=r.length;return n}function Ko(e,t,n,a=1){const r=e.createBuffer(a,t.length,n),s=new Float32Array(t);return r.copyToChannel(s,0),r}function fn(e,t,n=16){const a=Math.ceil(e.length/t),r=n===8?new Int8Array(a*2):new Int16Array(a*2),s=2**(n-1);for(let o=0;o<a;o++){const l=o*t,c=Math.min(l+t,e.length);let u=0,d=0;for(let v=l;v<c;v++){const p=e[v];p<u&&(u=p),p>d&&(d=p)}r[o*2]=Math.floor(u*s),r[o*2+1]=Math.floor(d*s)}return r}function Uo(e,t,n,a,r=16){const s=2**(r-1),o=a%n;let l=0;if(o>0&&e.length>0){const d=n-o,v=Math.min(d,t.length);let p=e[e.length-2]/s,f=e[e.length-1]/s;for(let g=0;g<v;g++){const I=t[g];I<p&&(p=I),I>f&&(f=I)}const C=new(r===8?Int8Array:Int16Array)(e.length);C.set(e),C[e.length-2]=Math.floor(p*s),C[e.length-1]=Math.floor(f*s),l=v;const y=fn(t.slice(l),n,r),m=new(r===8?Int8Array:Int16Array)(C.length+y.length);return m.set(C),m.set(y,C.length),m}const c=fn(t.slice(l),n,r),u=new(r===8?Int8Array:Int16Array)(e.length+c.length);return u.set(e),u.set(c,e.length),u}function Jo(e,t={}){const{channelCount:n=1,samplesPerPixel:a=1024}=t,[r,s]=i.useState(!1),[o,l]=i.useState(!1),[c,u]=i.useState(0),[d,v]=i.useState(new Int16Array(0)),[p,f]=i.useState(null),[C,y]=i.useState(null),[m,g]=i.useState(0),[I,w]=i.useState(0),h=16,k=i.useRef(!1),x=i.useRef(null),$=i.useRef(null),E=i.useRef([]),M=i.useRef(0),A=i.useRef(null),R=i.useRef(0),T=i.useRef(!1),D=i.useRef(!1),Z=i.useCallback(async()=>{if(!k.current)try{const F=W.getContext(),U=new URL("data:text/javascript;base64,InVzZSBzdHJpY3QiOwoKLy8gc3JjL3dvcmtsZXQvcmVjb3JkaW5nLXByb2Nlc3Nvci53b3JrbGV0LnRzCnZhciBSZWNvcmRpbmdQcm9jZXNzb3IgPSBjbGFzcyBleHRlbmRzIEF1ZGlvV29ya2xldFByb2Nlc3NvciB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlcigpOwogICAgdGhpcy5idWZmZXJTaXplID0gMDsKICAgIHRoaXMuYnVmZmVycyA9IFtdOwogICAgdGhpcy5zYW1wbGVzQ29sbGVjdGVkID0gMDsKICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTsKICAgIHRoaXMuY2hhbm5lbENvdW50ID0gMTsKICAgIHRoaXMucG9ydC5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgeyBjb21tYW5kLCBzYW1wbGVSYXRlOiBzYW1wbGVSYXRlMiwgY2hhbm5lbENvdW50IH0gPSBldmVudC5kYXRhOwogICAgICBpZiAoY29tbWFuZCA9PT0gInN0YXJ0IikgewogICAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSB0cnVlOwogICAgICAgIHRoaXMuY2hhbm5lbENvdW50ID0gY2hhbm5lbENvdW50IHx8IDE7CiAgICAgICAgdGhpcy5idWZmZXJTaXplID0gTWF0aC5mbG9vcigoc2FtcGxlUmF0ZTIgfHwgNDhlMykgKiAwLjAxNik7CiAgICAgICAgdGhpcy5idWZmZXJzID0gW107CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYW5uZWxDb3VudDsgaSsrKSB7CiAgICAgICAgICB0aGlzLmJ1ZmZlcnNbaV0gPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYnVmZmVyU2l6ZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2FtcGxlc0NvbGxlY3RlZCA9IDA7CiAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PT0gInN0b3AiKSB7CiAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlOwogICAgICAgIGlmICh0aGlzLnNhbXBsZXNDb2xsZWN0ZWQgPiAwKSB7CiAgICAgICAgICB0aGlzLmZsdXNoQnVmZmVycygpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9CiAgcHJvY2VzcyhpbnB1dHMsIG91dHB1dHMsIHBhcmFtZXRlcnMpIHsKICAgIGlmICghdGhpcy5pc1JlY29yZGluZykgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzWzBdOwogICAgaWYgKCFpbnB1dCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBjb25zdCBmcmFtZUNvdW50ID0gaW5wdXRbMF0ubGVuZ3RoOwogICAgZm9yIChsZXQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIHRoaXMuY2hhbm5lbENvdW50KTsgY2hhbm5lbCsrKSB7CiAgICAgIGNvbnN0IGlucHV0Q2hhbm5lbCA9IGlucHV0W2NoYW5uZWxdOwogICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmJ1ZmZlcnNbY2hhbm5lbF07CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVDb3VudDsgaSsrKSB7CiAgICAgICAgYnVmZmVyW3RoaXMuc2FtcGxlc0NvbGxlY3RlZCArIGldID0gaW5wdXRDaGFubmVsW2ldOwogICAgICB9CiAgICB9CiAgICB0aGlzLnNhbXBsZXNDb2xsZWN0ZWQgKz0gZnJhbWVDb3VudDsKICAgIGlmICh0aGlzLnNhbXBsZXNDb2xsZWN0ZWQgPj0gdGhpcy5idWZmZXJTaXplKSB7CiAgICAgIHRoaXMuZmx1c2hCdWZmZXJzKCk7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgZmx1c2hCdWZmZXJzKCkgewogICAgY29uc3Qgc2FtcGxlcyA9IHRoaXMuYnVmZmVyc1swXS5zbGljZSgwLCB0aGlzLnNhbXBsZXNDb2xsZWN0ZWQpOwogICAgdGhpcy5wb3J0LnBvc3RNZXNzYWdlKHsKICAgICAgc2FtcGxlcywKICAgICAgc2FtcGxlUmF0ZSwKICAgICAgY2hhbm5lbENvdW50OiB0aGlzLmNoYW5uZWxDb3VudAogICAgfSk7CiAgICB0aGlzLnNhbXBsZXNDb2xsZWN0ZWQgPSAwOwogIH0KfTsKcmVnaXN0ZXJQcm9jZXNzb3IoInJlY29yZGluZy1wcm9jZXNzb3IiLCBSZWNvcmRpbmdQcm9jZXNzb3IpOwovLyMgc291cmNlTWFwcGluZ1VSTD1yZWNvcmRpbmctcHJvY2Vzc29yLndvcmtsZXQuanMubWFw",typeof document>"u"?require("url").pathToFileURL(__filename).href:Bt&&Bt.tagName.toUpperCase()==="SCRIPT"&&Bt.src||new URL("index.js",document.baseURI).href).href;await F.addAudioWorkletModule(U),k.current=!0}catch(F){throw console.error("Failed to load AudioWorklet module:",F),new Error("Failed to load recording processor")}},[]),P=i.useCallback(async()=>{if(!e){y(new Error("No microphone stream available"));return}try{y(null);const F=W.getContext();F.state==="suspended"&&await F.resume(),await Z();const U=F.createMediaStreamSource(e);$.current=U;const oe=F.createAudioWorkletNode("recording-processor");x.current=oe,U.connect(oe),oe.port.onmessage=ee=>{const{samples:te}=ee.data;E.current.push(te),M.current+=te.length,v(be=>Uo(be,te,a,M.current-te.length,h))},oe.port.postMessage({command:"start",sampleRate:F.sampleRate,channelCount:n}),E.current=[],M.current=0,v(new Int16Array(0)),f(null),g(0),w(0),T.current=!0,D.current=!1,s(!0),l(!1),R.current=performance.now();const Q=()=>{if(T.current&&!D.current){const ee=(performance.now()-R.current)/1e3;u(ee),A.current=requestAnimationFrame(Q)}};Q()}catch(F){console.error("Failed to start recording:",F),y(F instanceof Error?F:new Error("Failed to start recording"))}},[e,n,a,Z,r,o]),V=i.useCallback(async()=>{if(!r)return null;try{if(x.current){if(x.current.port.postMessage({command:"stop"}),$.current)try{$.current.disconnect(x.current)}catch{}x.current.disconnect()}A.current!==null&&(cancelAnimationFrame(A.current),A.current=null);const F=Oo(E.current),oe=W.getContext().rawContext,Q=Ko(oe,F,oe.sampleRate,n);return f(Q),u(Q.duration),T.current=!1,D.current=!1,s(!1),l(!1),g(0),Q}catch(F){return console.error("Failed to stop recording:",F),y(F instanceof Error?F:new Error("Failed to stop recording")),null}},[r,n]),Y=i.useCallback(()=>{r&&!o&&(A.current!==null&&(cancelAnimationFrame(A.current),A.current=null),D.current=!0,l(!0))},[r,o]),j=i.useCallback(()=>{if(r&&o){D.current=!1,l(!1),R.current=performance.now()-c*1e3;const F=()=>{if(T.current&&!D.current){const U=(performance.now()-R.current)/1e3;u(U),A.current=requestAnimationFrame(F)}};F()}},[r,o,c]);return i.useEffect(()=>()=>{if(x.current){if(x.current.port.postMessage({command:"stop"}),$.current)try{$.current.disconnect(x.current)}catch{}x.current.disconnect()}A.current!==null&&cancelAnimationFrame(A.current)},[]),{isRecording:r,isPaused:o,duration:c,peaks:d,audioBuffer:p,level:m,peakLevel:I,startRecording:P,stopRecording:V,pauseRecording:Y,resumeRecording:j,error:C}}function qo(){const[e,t]=i.useState(null),[n,a]=i.useState([]),[r,s]=i.useState(!1),[o,l]=i.useState(!1),[c,u]=i.useState(null),d=i.useCallback(async()=>{try{const C=(await navigator.mediaDevices.enumerateDevices()).filter(y=>y.kind==="audioinput").map(y=>({deviceId:y.deviceId,label:y.label||`Microphone ${y.deviceId.slice(0,8)}`,groupId:y.groupId}));a(C)}catch(f){console.error("Failed to enumerate devices:",f),u(f instanceof Error?f:new Error("Failed to enumerate devices"))}},[]),v=i.useCallback(async(f,C)=>{l(!0),u(null);try{e&&e.getTracks().forEach(I=>I.stop());const m={audio:{echoCancellation:!1,noiseSuppression:!1,autoGainControl:!1,latency:0,...C,...f&&{deviceId:{exact:f}}},video:!1},g=await navigator.mediaDevices.getUserMedia(m);t(g),s(!0),await d()}catch(y){console.error("Failed to access microphone:",y),u(y instanceof Error?y:new Error("Failed to access microphone")),s(!1)}finally{l(!1)}},[e,d]),p=i.useCallback(()=>{e&&(e.getTracks().forEach(f=>f.stop()),t(null),s(!1))},[e]);return i.useEffect(()=>(d(),()=>{e&&e.getTracks().forEach(f=>f.stop())}),[]),{stream:e,devices:n,hasPermission:r,isLoading:o,requestAccess:v,stopStream:p,error:c}}function Qo(e,t={}){const{updateRate:n=60,smoothingTimeConstant:a=.8}=t,[r,s]=i.useState(0),[o,l]=i.useState(0),c=i.useRef(null),u=i.useRef(null),d=i.useRef(null),v=()=>l(0);return i.useEffect(()=>{if(!e){s(0),l(0);return}let p=!0;return(async()=>{if(!p)return;const C=W.getContext();if(C.state==="suspended"&&await C.resume(),!p)return;const y=new W.Meter({smoothing:a,context:C});c.current=y;const m=C.createMediaStreamSource(e);u.current=m,W.connect(m,y);const g=1e3/n;let I=0;const w=h=>{if(!(!p||!c.current)){if(h-I>=g){I=h;const k=c.current.getValue(),x=typeof k=="number"?k:k[0],$=Math.max(0,Math.min(1,(x+100)/100));s($),l(E=>Math.max(E,$))}d.current=requestAnimationFrame(w)}};d.current=requestAnimationFrame(w)})(),()=>{if(p=!1,d.current&&(cancelAnimationFrame(d.current),d.current=null),u.current){try{u.current.disconnect()}catch{}u.current=null}c.current&&(c.current.dispose(),c.current=null)}},[e,a,n]),{level:r,peakLevel:o,resetPeak:v}}S.button`
1067
1067
  padding: 0.5rem 1rem;
1068
1068
  font-size: 0.875rem;
1069
1069
  font-weight: 500;
@@ -1111,9 +1111,9 @@
1111
1111
  opacity: 0.3;
1112
1112
  }
1113
1113
  }
1114
- `;S(Vt)`
1114
+ `;S(jt)`
1115
1115
  min-width: 200px;
1116
- `;S(xn)`
1116
+ `;S(kn)`
1117
1117
  display: flex;
1118
1118
  flex-direction: column;
1119
1119
  gap: 0.25rem;
@@ -1156,7 +1156,7 @@
1156
1156
  font-weight: 500;
1157
1157
  color: ${e=>e.$isPaused?"#ffc107":"#dc3545"};
1158
1158
  text-transform: uppercase;
1159
- `;var Jo=S.div`
1159
+ `;var es=S.div`
1160
1160
  position: relative;
1161
1161
  width: ${e=>e.$width}px;
1162
1162
  height: ${e=>e.$height}px;
@@ -1164,39 +1164,39 @@
1164
1164
  border-radius: 4px;
1165
1165
  overflow: hidden;
1166
1166
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3);
1167
- `,qo=e=>e<.6?"linear-gradient(90deg, #27ae60, #2ecc71)":e<.85?"linear-gradient(90deg, #f39c12, #f1c40f)":"linear-gradient(90deg, #c0392b, #e74c3c)",Qo=S.div.attrs(e=>({style:{width:`${e.$level*100}%`,height:`${e.$height}px`,background:qo(e.$level),boxShadow:e.$level>.01?"0 0 8px rgba(255, 255, 255, 0.3)":"none"}}))`
1167
+ `,ts=e=>e<.6?"linear-gradient(90deg, #27ae60, #2ecc71)":e<.85?"linear-gradient(90deg, #f39c12, #f1c40f)":"linear-gradient(90deg, #c0392b, #e74c3c)",ns=S.div.attrs(e=>({style:{width:`${e.$level*100}%`,height:`${e.$height}px`,background:ts(e.$level),boxShadow:e.$level>.01?"0 0 8px rgba(255, 255, 255, 0.3)":"none"}}))`
1168
1168
  position: absolute;
1169
1169
  left: 0;
1170
1170
  top: 0;
1171
1171
  transition: width 0.05s ease-out, background 0.1s ease-out;
1172
- `,es=S.div.attrs(e=>({style:{left:`${e.$peakLevel*100}%`,height:`${e.$height}px`}}))`
1172
+ `,as=S.div.attrs(e=>({style:{left:`${e.$peakLevel*100}%`,height:`${e.$height}px`}}))`
1173
1173
  position: absolute;
1174
1174
  top: 0;
1175
1175
  width: 2px;
1176
1176
  background: #ecf0f1;
1177
1177
  box-shadow: 0 0 4px rgba(236, 240, 241, 0.8);
1178
1178
  transition: left 0.1s ease-out;
1179
- `,ts=S.div`
1179
+ `,rs=S.div`
1180
1180
  position: absolute;
1181
1181
  top: 0;
1182
1182
  left: 0;
1183
1183
  width: 100%;
1184
1184
  height: ${e=>e.$height}px;
1185
1185
  pointer-events: none;
1186
- `,un=S.div`
1186
+ `,mn=S.div`
1187
1187
  position: absolute;
1188
1188
  left: ${e=>e.$position}%;
1189
1189
  top: 0;
1190
1190
  width: 1px;
1191
1191
  height: ${e=>e.$height}px;
1192
1192
  background: rgba(255, 255, 255, 0.2);
1193
- `,ns=({level:e,peakLevel:t,width:n=200,height:a=20,className:r})=>{const s=Math.max(0,Math.min(1,e)),o=t!==void 0?Math.max(0,Math.min(1,t)):0;return b.jsxs(Jo,{$width:n,$height:a,className:r,children:[b.jsx(Qo,{$level:s,$height:a}),t!==void 0&&o>0&&b.jsx(es,{$peakLevel:o,$height:a}),b.jsxs(ts,{$height:a,children:[b.jsx(un,{$position:60,$height:a}),b.jsx(un,{$position:85,$height:a})]})]})};i.memo(ns);function as(e,t,n,a={}){const{currentTime:r=0,audioConstraints:s,...o}=a,[l,c]=i.useState(!1),[u,d]=i.useState(null),{stream:v,devices:p,hasPermission:f,requestAccess:C,error:y}=Ko(),{level:m,peakLevel:g}=Uo(v),{isRecording:I,isPaused:x,duration:h,peaks:w,startRecording:k,stopRecording:A,pauseRecording:M,resumeRecording:$,error:E}=Oo(v,o),R=i.useCallback(async()=>{n&&(l||(await Et(),c(!0)),await k())},[n,l,k]),T=i.useCallback(async()=>{const V=await A();if(V&&n){const F=e.findIndex(q=>q.id===n);if(F===-1)return;const N=e[F],H=Math.floor(r*V.sampleRate);let Z=0;if(N.clips.length>0){const q=N.clips.map(ae=>ae.startSample+ae.durationSamples);Z=Math.max(...q)}const U=Math.max(H,Z),re={id:`clip-${Date.now()}`,audioBuffer:V,startSample:U,durationSamples:V.length,offsetSamples:0,sampleRate:V.sampleRate,sourceDurationSamples:V.length,gain:1,name:`Recording ${new Date().toLocaleTimeString()}`},ne=e.map((q,ae)=>ae===F?{...q,clips:[...q.clips,re]}:q);t(ne)}},[n,e,t,r,A]);i.useEffect(()=>{f&&p.length>0&&u===null&&d(p[0].deviceId)},[f,p.length]);const D=i.useCallback(async()=>{await C(void 0,s),await Et(),c(!0)},[C,s]),P=i.useCallback(async V=>{d(V),await C(V,s),await Et(),c(!0)},[C,s]);return{isRecording:I,isPaused:x,duration:h,level:m,peakLevel:g,error:y||E,stream:v,devices:p,hasPermission:f,selectedDevice:u,startRecording:R,stopRecording:T,pauseRecording:M,resumeRecording:$,requestMicAccess:D,changeDevice:P,recordingPeaks:w}}const lt=[{id:"reverb",name:"Reverb",category:"reverb",description:"Simple convolution reverb with adjustable decay time",parameters:[{name:"decay",label:"Decay",type:"number",min:.1,max:10,step:.1,default:1.5,unit:"s"},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"freeverb",name:"Freeverb",category:"reverb",description:"Classic Schroeder/Moorer reverb with room size and dampening",parameters:[{name:"roomSize",label:"Room Size",type:"number",min:0,max:1,step:.01,default:.7},{name:"dampening",label:"Dampening",type:"number",min:0,max:1e4,step:100,default:3e3,unit:"Hz"},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"jcReverb",name:"JC Reverb",category:"reverb",description:"Attempt at Roland JC-120 chorus reverb emulation",parameters:[{name:"roomSize",label:"Room Size",type:"number",min:0,max:1,step:.01,default:.5},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"feedbackDelay",name:"Feedback Delay",category:"delay",description:"Delay line with feedback for echo effects",parameters:[{name:"delayTime",label:"Delay Time",type:"number",min:0,max:1,step:.01,default:.25,unit:"s"},{name:"feedback",label:"Feedback",type:"number",min:0,max:.95,step:.01,default:.5},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"pingPongDelay",name:"Ping Pong Delay",category:"delay",description:"Stereo delay bouncing between left and right channels",parameters:[{name:"delayTime",label:"Delay Time",type:"number",min:0,max:1,step:.01,default:.25,unit:"s"},{name:"feedback",label:"Feedback",type:"number",min:0,max:.95,step:.01,default:.5},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"chorus",name:"Chorus",category:"modulation",description:"Creates thickness by layering detuned copies of the signal",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:10,step:.1,default:1.5,unit:"Hz"},{name:"delayTime",label:"Delay",type:"number",min:0,max:20,step:.5,default:3.5,unit:"ms"},{name:"depth",label:"Depth",type:"number",min:0,max:1,step:.01,default:.7},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"phaser",name:"Phaser",category:"modulation",description:"Classic phaser effect using allpass filters",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:10,step:.1,default:.5,unit:"Hz"},{name:"octaves",label:"Octaves",type:"number",min:1,max:6,step:1,default:3},{name:"baseFrequency",label:"Base Freq",type:"number",min:100,max:2e3,step:10,default:350,unit:"Hz"},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"tremolo",name:"Tremolo",category:"modulation",description:"Rhythmic volume modulation",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:20,step:.1,default:4,unit:"Hz"},{name:"depth",label:"Depth",type:"number",min:0,max:1,step:.01,default:.5},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"vibrato",name:"Vibrato",category:"modulation",description:"Pitch modulation effect",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:20,step:.1,default:5,unit:"Hz"},{name:"depth",label:"Depth",type:"number",min:0,max:1,step:.01,default:.1},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"autoPanner",name:"Auto Panner",category:"modulation",description:"Automatic left-right panning",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:10,step:.1,default:1,unit:"Hz"},{name:"depth",label:"Depth",type:"number",min:0,max:1,step:.01,default:1},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"autoFilter",name:"Auto Filter",category:"filter",description:"Automated filter sweep with LFO",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:10,step:.1,default:1,unit:"Hz"},{name:"baseFrequency",label:"Base Freq",type:"number",min:20,max:2e3,step:10,default:200,unit:"Hz"},{name:"octaves",label:"Octaves",type:"number",min:.5,max:8,step:.5,default:2.6},{name:"depth",label:"Depth",type:"number",min:0,max:1,step:.01,default:1},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"autoWah",name:"Auto Wah",category:"filter",description:"Envelope follower filter effect",parameters:[{name:"baseFrequency",label:"Base Freq",type:"number",min:20,max:500,step:10,default:100,unit:"Hz"},{name:"octaves",label:"Octaves",type:"number",min:1,max:8,step:1,default:6},{name:"sensitivity",label:"Sensitivity",type:"number",min:-40,max:0,step:1,default:0,unit:"dB"},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"eq3",name:"3-Band EQ",category:"filter",description:"Three band equalizer with low, mid, and high controls",parameters:[{name:"low",label:"Low",type:"number",min:-24,max:24,step:.5,default:0,unit:"dB"},{name:"mid",label:"Mid",type:"number",min:-24,max:24,step:.5,default:0,unit:"dB"},{name:"high",label:"High",type:"number",min:-24,max:24,step:.5,default:0,unit:"dB"},{name:"lowFrequency",label:"Low Freq",type:"number",min:20,max:500,step:10,default:400,unit:"Hz"},{name:"highFrequency",label:"High Freq",type:"number",min:1e3,max:1e4,step:100,default:2500,unit:"Hz"}]},{id:"distortion",name:"Distortion",category:"distortion",description:"Wave shaping distortion effect",parameters:[{name:"distortion",label:"Drive",type:"number",min:0,max:1,step:.01,default:.4},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"bitCrusher",name:"Bit Crusher",category:"distortion",description:"Reduces bit depth for lo-fi digital texture",parameters:[{name:"bits",label:"Bits",type:"number",min:1,max:16,step:1,default:4},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"chebyshev",name:"Chebyshev",category:"distortion",description:"Waveshaping distortion using Chebyshev polynomials",parameters:[{name:"order",label:"Order",type:"number",min:1,max:100,step:1,default:50},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"compressor",name:"Compressor",category:"dynamics",description:"Dynamic range compressor",parameters:[{name:"threshold",label:"Threshold",type:"number",min:-60,max:0,step:1,default:-24,unit:"dB"},{name:"ratio",label:"Ratio",type:"number",min:1,max:20,step:.5,default:4},{name:"attack",label:"Attack",type:"number",min:0,max:1,step:.001,default:.003,unit:"s"},{name:"release",label:"Release",type:"number",min:0,max:1,step:.01,default:.25,unit:"s"},{name:"knee",label:"Knee",type:"number",min:0,max:40,step:1,default:30,unit:"dB"}]},{id:"limiter",name:"Limiter",category:"dynamics",description:"Hard limiter to prevent clipping",parameters:[{name:"threshold",label:"Threshold",type:"number",min:-12,max:0,step:.5,default:-6,unit:"dB"}]},{id:"gate",name:"Gate",category:"dynamics",description:"Noise gate to silence signal below threshold",parameters:[{name:"threshold",label:"Threshold",type:"number",min:-100,max:0,step:1,default:-40,unit:"dB"},{name:"attack",label:"Attack",type:"number",min:0,max:.3,step:.001,default:.001,unit:"s"},{name:"release",label:"Release",type:"number",min:0,max:.5,step:.01,default:.1,unit:"s"}]},{id:"stereoWidener",name:"Stereo Widener",category:"spatial",description:"Expands or narrows the stereo image",parameters:[{name:"width",label:"Width",type:"number",min:0,max:1,step:.01,default:.5}]}],Ht=e=>lt.find(t=>t.id===e),rs=e=>lt.filter(t=>t.category===e),os=[{id:"reverb",name:"Reverb"},{id:"delay",name:"Delay"},{id:"modulation",name:"Modulation"},{id:"filter",name:"Filter"},{id:"distortion",name:"Distortion"},{id:"dynamics",name:"Dynamics"},{id:"spatial",name:"Spatial"}],ss={reverb:W.Reverb,freeverb:W.Freeverb,jcReverb:W.JCReverb,feedbackDelay:W.FeedbackDelay,pingPongDelay:W.PingPongDelay,chorus:W.Chorus,phaser:W.Phaser,tremolo:W.Tremolo,vibrato:W.Vibrato,autoPanner:W.AutoPanner,autoFilter:W.AutoFilter,autoWah:W.AutoWah,eq3:W.EQ3,distortion:W.Distortion,bitCrusher:W.BitCrusher,chebyshev:W.Chebyshev,compressor:W.Compressor,limiter:W.Limiter,gate:W.Gate,stereoWidener:W.StereoWidener};let is=0;const ls=()=>`effect_${Date.now()}_${++is}`;function ot(e,t){const n=ss[e.id];if(!n)throw new Error(`Unknown effect type: ${e.id}`);const a={};e.parameters.forEach(o=>{const l=t?.[o.name]??o.default;a[o.name]=l});const r=new n(a),s=ls();return{effect:r,id:e.id,instanceId:s,dispose(){try{r.disconnect(),r.dispose()}catch{}},setParameter(o,l){o==="wet"&&r.wet?r.wet.value=l:r[o]!==void 0&&(r[o]?.value!==void 0?r[o].value=l:r[o]=l)},getParameter(o){if(o==="wet"&&r.wet)return r.wet.value;if(r[o]!==void 0)return r[o]?.value!==void 0?r[o].value:r[o]},connect(o){r.connect(o)},disconnect(){try{r.disconnect()}catch{}}}}function cs(e){if(e.length===0)throw new Error("Cannot create effect chain with no effects");for(let t=0;t<e.length-1;t++)e[t].effect.connect(e[t+1].effect);return{input:e[0].effect,output:e[e.length-1].effect,dispose(){e.forEach(t=>t.dispose())}}}function us(e=256){const[t,n]=i.useState([]),a=i.useRef(t);a.current=t;const r=i.useRef(new Map),s=i.useRef(null),o=i.useRef(null),l=i.useCallback(m=>{const g=o.current;if(!g)return;const{masterGainNode:I,destination:x,analyserNode:h}=g;try{I.disconnect()}catch{}const w=m.map(k=>r.current.get(k.instanceId)).filter(k=>k!==void 0);if(w.length===0)I.connect(h),h.connect(x);else{let k=I;w.forEach(A=>{try{A.disconnect()}catch{}k.connect(A.effect),k=A.effect}),k.connect(h),h.connect(x)}},[]),c=i.useCallback(m=>{const g=Ht(m);if(!g){console.error(`Unknown effect: ${m}`);return}const I={};g.parameters.forEach(w=>{I[w.name]=w.default});const x=ot(g,I);r.current.set(x.instanceId,x);const h={instanceId:x.instanceId,effectId:g.id,definition:g,params:I,bypassed:!1};n(w=>[...w,h])},[]),u=i.useCallback(m=>{const g=r.current.get(m);g&&(g.dispose(),r.current.delete(m)),n(I=>I.filter(x=>x.instanceId!==m))},[]),d=i.useCallback((m,g,I)=>{const x=r.current.get(m);x&&x.setParameter(g,I),n(h=>h.map(w=>w.instanceId===m?{...w,params:{...w.params,[g]:I}}:w))},[]),v=i.useCallback(m=>{const g=a.current.find(h=>h.instanceId===m);if(!g)return;const I=!g.bypassed,x=r.current.get(m);if(x){const h=g.params.wet??1;x.setParameter("wet",I?0:h)}n(h=>h.map(w=>w.instanceId===m?{...w,bypassed:I}:w))},[]),p=i.useCallback((m,g)=>{n(I=>{const x=[...I],[h]=x.splice(m,1);return x.splice(g,0,h),x})},[]),f=i.useCallback(()=>{r.current.forEach(m=>m.dispose()),r.current.clear(),n([])},[]);i.useEffect(()=>{l(t)},[t,l]);const C=i.useCallback((m,g,I)=>{const x=new W.Analyser("fft",e);s.current=x,o.current={masterGainNode:m,destination:g,analyserNode:x};const w=a.current.map(k=>r.current.get(k.instanceId)).filter(k=>k!==void 0);if(w.length===0)m.connect(x),x.connect(g);else{let k=m;w.forEach(A=>{k.connect(A.effect),k=A.effect}),k.connect(x),x.connect(g)}return function(){x.dispose(),s.current=null,o.current=null}},[e]);i.useEffect(()=>()=>{r.current.forEach(m=>m.dispose()),r.current.clear()},[]);const y=i.useCallback(()=>{const m=t.filter(g=>!g.bypassed);if(m.length!==0)return(g,I,x)=>{const h=[];for(const w of m){const k=ot(w.definition,w.params);h.push(k)}if(h.length===0)g.connect(I);else{let w=g;h.forEach(k=>{w.connect(k.effect),w=k.effect}),w.connect(I)}return function(){h.forEach(k=>k.dispose())}}},[t]);return{activeEffects:t,availableEffects:lt,addEffect:c,removeEffect:u,updateParameter:d,toggleBypass:v,reorderEffects:p,clearAllEffects:f,masterEffects:C,createOfflineEffectsFunction:y,analyserRef:s}}function ds(){const[e,t]=i.useState(new Map),n=i.useRef(new Map),a=i.useRef(new Map),r=i.useCallback((f,C)=>{const y=a.current.get(f);if(!y)return;const{graphEnd:m,masterGainNode:g}=y,I=n.current.get(f);try{m.disconnect()}catch{}const x=C.map(h=>I?.get(h.instanceId)).filter(h=>h!==void 0);if(x.length===0)m.connect(g);else{let h=m;x.forEach(w=>{try{w.disconnect()}catch{}h.connect(w.effect),h=w.effect}),h.connect(g)}},[]),s=i.useCallback((f,C)=>{const y=Ht(C);if(!y){console.error(`Unknown effect: ${C}`);return}const m={};y.parameters.forEach(x=>{m[x.name]=x.default});const g=ot(y,m);n.current.has(f)||n.current.set(f,new Map),n.current.get(f).set(g.instanceId,g);const I={instanceId:g.instanceId,effectId:y.id,definition:y,params:m,bypassed:!1};t(x=>{const h=new Map(x),w=h.get(f)||[];return h.set(f,[...w,I]),h})},[]),o=i.useCallback((f,C)=>{const y=n.current.get(f),m=y?.get(C);m&&(m.dispose(),y?.delete(C)),t(g=>{const I=new Map(g),x=I.get(f)||[];return I.set(f,x.filter(h=>h.instanceId!==C)),I})},[]),l=i.useCallback((f,C,y,m)=>{const I=n.current.get(f)?.get(C);I&&I.setParameter(y,m),t(x=>{const h=new Map(x),w=h.get(f)||[];return h.set(f,w.map(k=>k.instanceId===C?{...k,params:{...k.params,[y]:m}}:k)),h})},[]),c=i.useCallback((f,C)=>{const m=(d.current.get(f)||[]).find(h=>h.instanceId===C);if(!m)return;const g=!m.bypassed,x=n.current.get(f)?.get(C);if(x){const h=m.params.wet??1;x.setParameter("wet",g?0:h)}t(h=>{const w=new Map(h),k=w.get(f)||[];return w.set(f,k.map(A=>A.instanceId===C?{...A,bypassed:g}:A)),w})},[]),u=i.useCallback(f=>{const C=n.current.get(f);C&&(C.forEach(y=>y.dispose()),C.clear()),t(y=>{const m=new Map(y);return m.set(f,[]),m})},[]),d=i.useRef(e);d.current=e;const v=i.useCallback(f=>(C,y,m)=>{a.current.set(f,{graphEnd:C,masterGainNode:y});const g=d.current.get(f)||[],I=n.current.get(f),x=g.map(h=>I?.get(h.instanceId)).filter(h=>h!==void 0);if(x.length===0)C.connect(y);else{let h=C;x.forEach(w=>{h.connect(w.effect),h=w.effect}),h.connect(y)}return function(){a.current.delete(f)}},[]);i.useEffect(()=>{e.forEach((f,C)=>{r(C,f)})},[e,r]),i.useEffect(()=>()=>{n.current.forEach(f=>{f.forEach(C=>C.dispose()),f.clear()}),n.current.clear()},[]);const p=i.useCallback(f=>{const y=(e.get(f)||[]).filter(m=>!m.bypassed);if(y.length!==0)return(m,g,I)=>{const x=[];for(const h of y){const w=ot(h.definition,h.params);x.push(w)}if(x.length===0)m.connect(g);else{let h=m;x.forEach(w=>{h.connect(w.effect),h=w.effect}),h.connect(g)}return function(){x.forEach(w=>w.dispose())}}},[e]);return{trackEffectsState:e,addEffectToTrack:s,removeEffectFromTrack:o,updateTrackEffectParameter:l,toggleBypass:c,clearTrackEffects:u,getTrackEffectsFunction:v,createOfflineTrackEffectsFunction:p,availableEffects:lt}}function fs(e,t={}){const{bitDepth:n=16}=t,a=e.numberOfChannels,r=e.sampleRate,s=e.length,o=n/8,l=a*o,c=r*l,u=s*l,d=44,v=d+u,p=new ArrayBuffer(v),f=new DataView(p);pt(f,0,"RIFF"),f.setUint32(4,v-8,!0),pt(f,8,"WAVE"),pt(f,12,"fmt "),f.setUint32(16,16,!0),f.setUint16(20,n===32?3:1,!0),f.setUint16(22,a,!0),f.setUint32(24,r,!0),f.setUint32(28,c,!0),f.setUint16(32,l,!0),f.setUint16(34,n,!0),pt(f,36,"data"),f.setUint32(40,u,!0);const C=[];for(let m=0;m<a;m++)C.push(e.getChannelData(m));let y=d;if(n===16)for(let m=0;m<s;m++)for(let g=0;g<a;g++){const I=C[g][m],x=Math.max(-1,Math.min(1,I)),h=x<0?x*32768:x*32767;f.setInt16(y,h,!0),y+=2}else for(let m=0;m<s;m++)for(let g=0;g<a;g++)f.setFloat32(y,C[g][m],!0),y+=4;return new Blob([p],{type:"audio/wav"})}function pt(e,t,n){for(let a=0;a<n.length;a++)e.setUint8(t+a,n.charCodeAt(a))}function ms(e,t){const n=URL.createObjectURL(e),a=document.createElement("a");a.href=n,a.download=t,a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(n)}function On(){const[e,t]=i.useState(!1),[n,a]=i.useState(0),[r,s]=i.useState(null);return{exportWav:i.useCallback(async(l,c,u={})=>{const{filename:d="export",mode:v="master",trackIndex:p,autoDownload:f=!0,applyEffects:C=!0,effectsFunction:y,createOfflineTrackEffects:m,bitDepth:g=16,onProgress:I}=u;t(!0),a(0),s(null);try{if(l.length===0)throw new Error("No tracks to export");if(v==="individual"&&(p===void 0||p<0||p>=l.length))throw new Error("Invalid track index for individual export");const x=l[0].clips[0]?.sampleRate||44100;let h=0;for(const R of l)for(const T of R.clips){const D=T.startSample+T.durationSamples;h=Math.max(h,D)}h+=Math.round(x*.1);const w=h/x,k=v==="individual"?[{track:l[p],state:c[p],index:p}]:l.map((R,T)=>({track:R,state:c[T],index:T})),A=c.some(R=>R.soloed),M=!!m;let $;if((y||M)&&C)$=await hs(k,c,A,w,x,y,m,R=>{a(R),I?.(R)});else{const R=new OfflineAudioContext(2,h,x);let T=0;const D=k.reduce((P,{track:V})=>P+V.clips.length,0);for(const{track:P,state:V}of k)if(!(V.muted&&!V.soloed)&&!(A&&!V.soloed))for(const F of P.clips){await gs(R,F,V,x,C),T++;const N=T/D*.5;a(N),I?.(N)}a(.5),I?.(.5),$=await R.startRendering()}a(.9),I?.(.9);const E=fs($,{bitDepth:g});if(a(1),I?.(1),f){const R=v==="individual"?`${d}_${l[p].name}`:d;ms(E,`${R}.wav`)}return{audioBuffer:$,blob:E,duration:w}}catch(x){const h=x instanceof Error?x.message:"Export failed";throw s(h),x}finally{t(!1)}},[]),isExporting:e,progress:n,error:r}}async function hs(e,t,n,a,r,s,o,l){const{Offline:c,Volume:u,Gain:d,Panner:v,Player:p,ToneAudioBuffer:f}=await import("tone");l(.1);let C;try{C=await c(async({transport:y,destination:m})=>{const g=new u(0);let I;s?I=s(g,m,!0):g.connect(m);for(const{track:x,state:h}of e){if(h.muted&&!h.soloed||n&&!h.soloed)continue;const w=new u(ps(h.volume)),k=new v(h.pan),A=new d(h.muted?0:1),M=o?.(x.id);M?M(A,g,!0):A.connect(g),k.connect(A),w.connect(k);for(const $ of x.clips){const{audioBuffer:E,startSample:R,durationSamples:T,offsetSamples:D,gain:P,fadeIn:V,fadeOut:F}=$,N=R/r,H=T/r,Z=D/r,U=new f(E),re=new p(U),ne=new d(P);if(re.connect(ne),ne.connect(w),V){const q=N,ae=N+V.duration,be=ne.gain._param;be.setValueAtTime(0,q),be.linearRampToValueAtTime(P,ae)}if(F){const q=N+H-F.duration,ae=N+H,be=ne.gain._param;be.setValueAtTime(P,q),be.linearRampToValueAtTime(0,ae)}re.start(N,Z,H)}}y.start(0)},a,2,r)}catch(y){throw y instanceof Error?y:new Error(`Tone.Offline rendering failed: ${String(y)}`)}return l(.9),C.get()}function ps(e){return 20*Math.log10(Math.max(e,1e-4))}async function gs(e,t,n,a,r){const{audioBuffer:s,startSample:o,durationSamples:l,offsetSamples:c,gain:u,fadeIn:d,fadeOut:v}=t;if(!s){console.warn(`Skipping clip "${t.name||t.id}" - no audioBuffer for export`);return}const p=o/a,f=l/a,C=c/a,y=e.createBufferSource();y.buffer=s;const m=e.createGain(),g=u*n.volume,I=e.createStereoPanner();if(I.pan.value=n.pan,y.connect(m),m.connect(I),I.connect(e.destination),r){if(d?m.gain.setValueAtTime(0,p):m.gain.setValueAtTime(g,p),d){const x=p,h=p+d.duration;dn(m.gain,x,h,0,g,d.type||"linear")}if(v){const x=p+f-v.duration,h=p+f;(!d||d.duration<f-v.duration)&&m.gain.setValueAtTime(g,x),dn(m.gain,x,h,g,0,v.type||"linear")}}else m.gain.setValueAtTime(g,p);y.start(p,C,f)}function dn(e,t,n,a,r,s){const o=n-t;if(!(o<=0))switch(s){case"linear":e.setValueAtTime(a,t),e.linearRampToValueAtTime(r,n);break;case"exponential":const l=Math.max(a,1e-4),c=Math.max(r,1e-4);e.setValueAtTime(l,t),e.exponentialRampToValueAtTime(c,n),r===0&&e.setValueAtTime(0,n);break;case"logarithmic":const u=fn(a,r,256,"logarithmic");e.setValueCurveAtTime(u,t,o);break;case"sCurve":const d=fn(a,r,256,"sCurve");e.setValueCurveAtTime(d,t,o);break;default:e.setValueAtTime(a,t),e.linearRampToValueAtTime(r,n)}}function fn(e,t,n,a){const r=new Float32Array(n),s=t-e;for(let o=0;o<n;o++){const l=o/(n-1);let c;a==="logarithmic"?s>0?c=Math.log10(1+l*9)/Math.log10(10):c=1-Math.log10(1+(1-l)*9)/Math.log10(10):c=l*l*(3-2*l),r[o]=e+s*c}return r}const Kn=i.createContext(null),Un=i.createContext(null),Jn=i.createContext(null),qn=i.createContext(null),Qn=i.createContext(null),bs=({tracks:e,timescale:t=!1,mono:n=!1,waveHeight:a=80,samplesPerPixel:r=1024,zoomLevels:s,automaticScroll:o=!1,theme:l,controls:c={show:!1,width:0},annotationList:u,effects:d,onReady:v,onAnnotationUpdate:p,barWidth:f=1,barGap:C=0,progressBarWidth:y,children:m})=>{const g=y??f+C,[I,x]=i.useState([]),[h,w]=i.useState(null),[k,A]=i.useState(!1),[M,$]=i.useState(0),[E,R]=i.useState(0),[T,D]=i.useState([]),[P,V]=i.useState([]),[F,N]=i.useState([]),[H,Z]=i.useState(0),[U,re]=i.useState(0),[ne,q]=i.useState(null),[ae,be]=i.useState(o),[pe,He]=i.useState(u?.isContinuousPlay??!1),[Ve,we]=i.useState(u?.linkEndpoints??!0),[Xe,L]=i.useState(u?.editable??!1),[ce,ee]=i.useState(!1),[J,ue]=i.useState(0),[ve,te]=i.useState(0),_=i.useRef(null),Ae=i.useRef(0),ge=i.useRef(0),de=i.useRef(null),Oe=i.useRef(F),K=i.useRef(0),Q=i.useRef(0),le=i.useRef(null),fe=i.useRef(null),Ge=i.useRef(!1),Ne=i.useRef(u?.isContinuousPlay??!1),Pe=i.useRef(null),Ke=i.useRef(r),ct=i.useRef(!1),At=i.useRef(0),X=i.useRef(0),O=i.useRef(0),se=i.useRef(0),{timeFormat:ye,setTimeFormat:Ie,formatTime:We}=Xn(),oe=Gn({initialSamplesPerPixel:r,zoomLevels:s}),Se=oe.samplesPerPixel,{masterVolume:ze,setMasterVolume:Le}=Nn({playoutRef:_,initialVolume:1}),Ye=i.useCallback(B=>{Ne.current=B,He(B)},[]),_e=i.useCallback(B=>{Pe.current=B,w(B)},[]),nt=i.useCallback(B=>{ct.current=B,ee(B)},[]),Ue=i.useCallback((B,j)=>{O.current=B,se.current=j,ue(B),te(j)},[]),sa=i.useCallback(()=>{const B=At.current,j=X.current;B!==j&&j>B&&Ue(B,j)},[Ue]),ia=i.useCallback(()=>{Ue(0,0)},[Ue]);i.useEffect(()=>{Ge.current=ae},[ae]),i.useEffect(()=>{Oe.current=F},[F]),i.useEffect(()=>{At.current=H,X.current=U},[H,U]),i.useEffect(()=>{if(!fe.current||!T.length)return;const B=fe.current,j=Ke.current,Y=Se;if(j===Y)return;const ie=c.show?c.width:0,z=B.clientWidth,Ze=B.scrollLeft+z/2-ie,me=T[0].sampleRate,Me=Ze*j/me*me/Y,je=Math.max(0,Me+ie-z/2);B.scrollLeft=je,Ke.current=Y},[Se,T,c]);const ut=i.useRef(null);i.useEffect(()=>{if(e.length===0){D([]),R(0),N([]),V([]),_.current&&(_.current.dispose(),_.current=null);return}const B=k,j=ge.current;return _.current&&B&&(_.current.stop(),de.current&&(cancelAnimationFrame(de.current),de.current=null),ut.current={position:j}),(async()=>{try{const ie=[];e.forEach(me=>{me.clips.length>0&&me.clips[0].audioBuffer&&ie.push(me.clips[0].audioBuffer)});let z=0;e.forEach(me=>{me.clips.forEach(xe=>{const Me=xe.sampleRate,dt=(xe.startSample+xe.durationSamples)/Me;z=Math.max(z,dt)})}),D(ie),R(z),N(me=>me.length===e.length?me.map((xe,Me)=>({...xe,name:e[Me].name})):e.map(xe=>({name:xe.name,muted:xe.muted,soloed:xe.soloed,volume:xe.volume,pan:xe.pan}))),_.current&&_.current.dispose();const Ce=new Fa({effects:d}),Ze=Oe.current;e.forEach((me,xe)=>{const Me=me.clips.filter(je=>je.audioBuffer);if(Me.length>0){const je=Me[0].sampleRate,dt=Math.min(...Me.map(Re=>Re.startSample/je)),wa=Math.max(...Me.map(Re=>(Re.startSample+Re.durationSamples)/je)),ft=Ze[xe],ya={id:`track-${xe}`,name:me.name,gain:ft?.volume??me.volume,muted:ft?.muted??me.muted,soloed:ft?.soloed??me.soloed,stereoPan:ft?.pan??me.pan,startTime:dt,endTime:wa},ka=Me.map(Re=>{const Mt=Re.sampleRate;return{buffer:Re.audioBuffer,startTime:Re.startSample/Mt-dt,duration:Re.durationSamples/Mt,offset:Re.offsetSamples/Mt,fadeIn:Re.fadeIn,fadeOut:Re.fadeOut,gain:Re.gain}});Ce.addTrack({clips:ka,track:ya,effects:me.effects})}}),Ce.applyInitialSoloState(),_.current=Ce,v?.()}catch(ie){console.error("Error loading audio:",ie)}})(),()=>{de.current&&cancelAnimationFrame(de.current),_.current&&_.current.dispose()}},[e,v,k]),i.useEffect(()=>{if(e.length===0)return;const B=16,j=e.map(Y=>Y.clips.map(z=>{if(z.waveformData){const Ze=Vn(z.waveformData,Se,0,z.offsetSamples,z.durationSamples);return{clipId:z.id,trackName:Y.name,peaks:{length:Ze.length,data:[Ze.data],bits:Ze.bits},startSample:z.startSample,durationSamples:z.durationSamples,fadeIn:z.fadeIn,fadeOut:z.fadeOut}}if(!z.audioBuffer)return console.warn(`Clip "${z.name||z.id}" has neither waveformData nor audioBuffer - rendering empty`),{clipId:z.id,trackName:Y.name,peaks:{length:0,data:[],bits:B},startSample:z.startSample,durationSamples:z.durationSamples,fadeIn:z.fadeIn,fadeOut:z.fadeOut};const Ce=Nr(z.audioBuffer,Se,n,B,z.offsetSamples,z.durationSamples);return{clipId:z.id,trackName:Y.name,peaks:Ce,startSample:z.startSample,durationSamples:z.durationSamples,fadeIn:z.fadeIn,fadeOut:z.fadeOut}}));V(j)},[e,Se,n]),i.useEffect(()=>{if(u?.annotations){const B=u.annotations.map(j=>typeof j.start=="number"?j:Pn(j));x(B)}},[u]);const Je=i.useCallback(()=>{de.current&&(cancelAnimationFrame(de.current),de.current=null);const B=()=>{const j=W.getContext().currentTime-K.current,Y=Q.current+j;if(ge.current=Y,$(Y),I.length>0){const z=I.find(Ce=>Y>=Ce.start&&Y<Ce.end);if(Ne.current)z&&z.id!==Pe.current?_e(z.id):!z&&Pe.current!==null&&_e(null);else if(Pe.current){const Ce=I.find(Ze=>Ze.id===Pe.current);if(Ce&&Y>=Ce.end){_.current&&_.current.stop(),A(!1),ge.current=Ae.current,$(Ae.current);return}}else z&&_e(z.id)}if(Ge.current&&fe.current&&T.length>0){const z=fe.current,Ce=T[0].sampleRate,Ze=Y*Ce/Ke.current,me=z.clientWidth,xe=c.show?c.width:0,Me=Ze+xe,je=Math.max(0,Me-me/2);z.scrollLeft=je}if(le.current!==null&&Y>=le.current){_.current&&_.current.stop(),A(!1),ge.current=le.current,$(le.current),le.current=null;return}const ie=O.current!==se.current&&se.current>O.current;if(ct.current&&ie&&Y>=se.current){_.current?.stop();const Ce=W.getContext().currentTime;K.current=Ce,Q.current=O.current,ge.current=O.current,_.current?.play(Ce,O.current),de.current=requestAnimationFrame(B);return}if(Y>=E){_.current&&_.current.stop(),A(!1),ge.current=Ae.current,$(Ae.current),_e(null);return}de.current=requestAnimationFrame(B)};de.current=requestAnimationFrame(B)},[E,T,Se,I,pe]),Fe=i.useCallback(()=>{de.current&&(cancelAnimationFrame(de.current),de.current=null)},[]);i.useEffect(()=>{(async()=>{if(k&&de.current&&_.current)if(pe){const j=ge.current;_.current.stop(),Fe(),await _.current.init(),_.current.setOnPlaybackComplete(()=>{});const ie=W.getContext().currentTime;K.current=ie,Q.current=j,_.current.play(ie,j),Je()}else Fe(),Je()})()},[pe,k,Je,Fe]),i.useEffect(()=>{(async()=>{if(ut.current&&_.current){const{position:j}=ut.current;ut.current=null,await _.current.init(),_.current.setOnPlaybackComplete(()=>{});const ie=W.getContext().currentTime;K.current=ie,Q.current=j,_.current.play(ie,j),A(!0),Je()}})()},[e,Je]);const $t=i.useCallback(async(B,j)=>{if(!_.current||T.length===0)return;await _.current.init(),await W.start();const Y=B??ge.current;Ae.current=Y,ge.current=Y,_.current.setOnPlaybackComplete(()=>{}),_.current.stop(),Fe();const z=W.getContext().currentTime;K.current=z,Q.current=Y,le.current=j!==void 0?Y+j:null,_.current.play(z,Y,j),A(!0),Je()},[T.length,Je,Fe]),la=i.useCallback(()=>{if(!_.current)return;const B=W.getContext().currentTime-K.current,j=Q.current+B;_.current.pause(),A(!1),Fe(),ge.current=j,$(j)},[Fe]),ca=i.useCallback(()=>{_.current&&(_.current.stop(),A(!1),Fe(),ge.current=Ae.current,$(Ae.current),_e(null))},[Fe]),ua=i.useCallback(B=>{const j=Math.max(0,Math.min(B,E));ge.current=j,$(j),k&&_.current&&(_.current.stop(),Fe(),$t(j))},[E,k,$t,Fe]),da=i.useCallback((B,j)=>{const Y=[...F];if(Y[B]={...Y[B],muted:j},N(Y),_.current){const ie=`track-${B}`;_.current.setMute(ie,j)}},[F]),fa=i.useCallback((B,j)=>{const Y=[...F];if(Y[B]={...Y[B],soloed:j},N(Y),_.current){const ie=`track-${B}`;_.current.setSolo(ie,j)}},[F]),ma=i.useCallback((B,j)=>{const Y=[...F];if(Y[B]={...Y[B],volume:j},N(Y),_.current){const ie=`track-${B}`,z=_.current.getTrack(ie);z&&z.setVolume(j)}},[F]),ha=i.useCallback((B,j)=>{const Y=[...F];if(Y[B]={...Y[B],pan:j},N(Y),_.current){const ie=`track-${B}`,z=_.current.getTrack(ie);z&&z.setPan(j)}},[F]),pa=i.useCallback((B,j)=>{Z(B),re(j),ge.current=B,$(B),k&&_.current&&(_.current.stop(),_.current.play(W.getContext().currentTime,B))},[k]),ga=i.useCallback(B=>{fe.current=B},[]),ba=T[0]?.sampleRate||44100,Xt=t?30:0,va=e.length*a+Xt,Gt={isPlaying:k,currentTime:M,currentTimeRef:ge,playbackStartTimeRef:K,audioStartPositionRef:Q},Nt={continuousPlay:pe,linkEndpoints:Ve,annotationsEditable:Xe,isAutomaticScroll:ae,isLoopEnabled:ce,annotations:I,activeAnnotationId:h,selectionStart:H,selectionEnd:U,selectedTrackId:ne,loopStart:J,loopEnd:ve},Lt={play:$t,pause:la,stop:ca,seekTo:ua,setCurrentTime:B=>{ge.current=B,$(B)},setTrackMute:da,setTrackSolo:fa,setTrackVolume:ma,setTrackPan:ha,setSelection:pa,setSelectedTrackId:q,setTimeFormat:Ie,formatTime:We,zoomIn:oe.zoomIn,zoomOut:oe.zoomOut,setMasterVolume:Le,setAutomaticScroll:B=>{be(B)},setScrollContainer:ga,scrollContainerRef:fe,setContinuousPlay:Ye,setLinkEndpoints:we,setAnnotationsEditable:L,setAnnotations:x,setActiveAnnotationId:_e,setLoopEnabled:nt,setLoopRegion:Ue,setLoopRegionFromSelection:sa,clearLoopRegion:ia},Yt={duration:E,audioBuffers:T,peaksDataArray:P,trackStates:F,tracks:e,sampleRate:ba,waveHeight:a,timeScaleHeight:Xt,minimumPlaylistHeight:va,controls:c,playoutRef:_,samplesPerPixel:Se,timeFormat:ye,masterVolume:ze,canZoomIn:oe.canZoomIn,canZoomOut:oe.canZoomOut,barWidth:f,barGap:C,progressBarWidth:g},Ca={...Gt,...Nt,...Lt,...Yt},xa={...kn,...l};return b.jsx(S.ThemeProvider,{theme:xa,children:b.jsx(Kn.Provider,{value:Gt,children:b.jsx(Un.Provider,{value:Nt,children:b.jsx(Jn.Provider,{value:Lt,children:b.jsx(qn.Provider,{value:Yt,children:b.jsx(Qn.Provider,{value:Ca,children:m})})})})})})},$e=()=>{const e=i.useContext(Kn);if(!e)throw new Error("usePlaybackAnimation must be used within WaveformPlaylistProvider");return e},Te=()=>{const e=i.useContext(Un);if(!e)throw new Error("usePlaylistState must be used within WaveformPlaylistProvider");return e},he=()=>{const e=i.useContext(Jn);if(!e)throw new Error("usePlaylistControls must be used within WaveformPlaylistProvider");return e},ke=()=>{const e=i.useContext(qn);if(!e)throw new Error("usePlaylistData must be used within WaveformPlaylistProvider");return e},vs=()=>{const e=i.useContext(Qn);if(!e)throw new Error("useWaveformPlaylist must be used within WaveformPlaylistProvider");return e};var Cs=class{constructor(e){this._playbackRate=1,this.handleEnded=()=>{this.onStopCallback&&this.onStopCallback()},this.handleTimeUpdate=()=>{this.onTimeUpdateCallback&&this.onTimeUpdateCallback(this.audioElement.currentTime)},this._peaks=e.peaks,this._id=e.id??`track-${Date.now()}`,this._name=e.name??"Track",this._playbackRate=e.playbackRate??1,typeof e.source=="string"?(this.audioElement=new Audio(e.source),this.ownsElement=!0):(this.audioElement=e.source,this.ownsElement=!1),this.audioElement.preload="auto",this.audioElement.volume=e.volume??1,this.audioElement.playbackRate=this._playbackRate,"preservesPitch"in this.audioElement?this.audioElement.preservesPitch=!0:"mozPreservesPitch"in this.audioElement?this.audioElement.mozPreservesPitch=!0:"webkitPreservesPitch"in this.audioElement&&(this.audioElement.webkitPreservesPitch=!0),this.audioElement.addEventListener("ended",this.handleEnded),this.audioElement.addEventListener("timeupdate",this.handleTimeUpdate)}play(e=0){this.audioElement.currentTime=e,this.audioElement.play().catch(t=>{console.warn("MediaElementTrack: play() failed:",t)})}pause(){this.audioElement.pause()}stop(){this.audioElement.pause(),this.audioElement.currentTime=0}seekTo(e){this.audioElement.currentTime=Math.max(0,Math.min(e,this.duration))}setVolume(e){this.audioElement.volume=Math.max(0,Math.min(1,e))}setPlaybackRate(e){const t=Math.max(.5,Math.min(2,e));this._playbackRate=t,this.audioElement.playbackRate=t}setMuted(e){this.audioElement.muted=e}setOnStopCallback(e){this.onStopCallback=e}setOnTimeUpdateCallback(e){this.onTimeUpdateCallback=e}dispose(){this.audioElement.removeEventListener("ended",this.handleEnded),this.audioElement.removeEventListener("timeupdate",this.handleTimeUpdate),this.audioElement.pause(),this.ownsElement&&(this.audioElement.src="",this.audioElement.load())}get id(){return this._id}get name(){return this._name}get peaks(){return this._peaks}get currentTime(){return this.audioElement.currentTime}get duration(){return this.audioElement.duration||this._peaks.duration}get isPlaying(){return!this.audioElement.paused&&!this.audioElement.ended}get volume(){return this.audioElement.volume}get playbackRate(){return this._playbackRate}get muted(){return this.audioElement.muted}get element(){return this.audioElement}},xs=class{constructor(e={}){this.track=null,this._isPlaying=!1,this._masterVolume=e.masterVolume??1,this._playbackRate=e.playbackRate??1}async init(){}addTrack(e){return this.track&&(console.warn("MediaElementPlayout: Only one track is supported. Disposing previous track. For multi-track, use TonePlayout."),this.track.dispose()),this.track=new Cs({...e,volume:this._masterVolume*(e.volume??1),playbackRate:this._playbackRate}),this.track.setOnStopCallback(()=>{this._isPlaying=!1,this.onPlaybackCompleteCallback&&this.onPlaybackCompleteCallback()}),this.track}removeTrack(e){this.track&&this.track.id===e&&(this.track.dispose(),this.track=null)}getTrack(e){if(this.track&&this.track.id===e)return this.track}play(e,t,n){if(!this.track){console.warn("MediaElementPlayout: No track to play");return}const a=t??0;if(this._isPlaying=!0,this.track.play(a),n!==void 0){const r=n/this._playbackRate;setTimeout(()=>{this._isPlaying&&(this.pause(),this.onPlaybackCompleteCallback&&this.onPlaybackCompleteCallback())},r*1e3)}}pause(){this.track&&this.track.pause(),this._isPlaying=!1}stop(){this.track&&this.track.stop(),this._isPlaying=!1}seekTo(e){this.track&&this.track.seekTo(e)}getCurrentTime(){return this.track?this.track.currentTime:0}setMasterVolume(e){this._masterVolume=Math.max(0,Math.min(1,e)),this.track&&this.track.setVolume(this._masterVolume)}setPlaybackRate(e){this._playbackRate=Math.max(.5,Math.min(2,e)),this.track&&this.track.setPlaybackRate(this._playbackRate)}setMute(e,t){const n=this.getTrack(e);n&&n.setMuted(t)}setSolo(e,t){console.warn("MediaElementPlayout: Solo is not applicable for single-track playback")}setOnPlaybackComplete(e){this.onPlaybackCompleteCallback=e}dispose(){this.track&&(this.track.dispose(),this.track=null)}get isPlaying(){return this._isPlaying}get masterVolume(){return this._masterVolume}get playbackRate(){return this._playbackRate}get duration(){return this.track?.duration??0}get sampleRate(){return this.track?.peaks.sample_rate??44100}};const ea=i.createContext(null),ta=i.createContext(null),na=i.createContext(null),aa=i.createContext(null),ws=({track:e,samplesPerPixel:t=1024,waveHeight:n=100,timescale:a=!1,playbackRate:r=1,automaticScroll:s=!1,theme:o,controls:l={show:!1,width:0},annotationList:c,barWidth:u=1,barGap:d=0,progressBarWidth:v,onReady:p,children:f})=>{const C=v??u+d,[y,m]=i.useState(!1),[g,I]=i.useState(0),[x,h]=i.useState(0),[w,k]=i.useState([]),[A,M]=i.useState(r),[$,E]=i.useState([]),[R,T]=i.useState(null),[D,P]=i.useState(c?.isContinuousPlay??!1),[V]=i.useState(t),[F,N]=i.useState(s),H=i.useRef(null),Z=i.useRef(0),U=i.useRef(null),re=i.useRef(D),ne=i.useRef(null),q=i.useRef(null),ae=i.useRef(s),be=i.useRef(t);i.useEffect(()=>{re.current=D},[D]),i.useEffect(()=>{ae.current=F},[F]);const pe=i.useCallback(K=>{ne.current=K,T(K)},[]),He=i.useCallback(K=>{re.current=K,P(K)},[]),Ve=i.useCallback(K=>{q.current=K},[]),we=e.waveformData.sample_rate;i.useEffect(()=>{const K=new xs({playbackRate:r});K.addTrack({source:e.source,peaks:e.waveformData,name:e.name});const Q=K.getTrack(K.track?.id??"");return Q&&Q.setOnTimeUpdateCallback(le=>{Z.current=le}),K.setOnPlaybackComplete(()=>{m(!1)}),H.current=K,h(e.waveformData.duration),p?.(),()=>{U.current&&cancelAnimationFrame(U.current),K.dispose()}},[e.source,e.waveformData,e.name,r,p]),i.useEffect(()=>{const K=Vn(e.waveformData,V,0,0,Math.ceil(e.waveformData.duration*we)),Q={clipId:"media-element-clip",trackName:e.name??"Track",peaks:{length:K.length,data:[K.data],bits:K.bits},startSample:0,durationSamples:Math.ceil(e.waveformData.duration*we)};k([[Q]])},[e.waveformData,e.name,V,we]),i.useEffect(()=>{if(c?.annotations){const K=c.annotations.map(Q=>typeof Q.start=="number"?Q:Pn(Q));E(K)}},[c]);const Xe=i.useCallback(()=>{U.current&&cancelAnimationFrame(U.current);const K=()=>{const Q=H.current?.getCurrentTime()??0;if(Z.current=Q,I(Q),$.length>0){const le=$.find(fe=>Q>=fe.start&&Q<fe.end);if(re.current)le&&le.id!==ne.current?pe(le.id):!le&&ne.current!==null&&pe(null);else if(ne.current){const fe=$.find(Ge=>Ge.id===ne.current);if(fe&&Q>=fe.end){H.current?.stop(),m(!1);return}}else le&&pe(le.id)}if(ae.current&&q.current){const le=q.current,fe=Q*we/be.current,Ge=le.clientWidth,Ne=l.show?l.width:0,Pe=fe+Ne,Ke=Math.max(0,Pe-Ge/2);le.scrollLeft=Ke}if(Q>=x){H.current?.stop(),m(!1),pe(null);return}U.current=requestAnimationFrame(K)};U.current=requestAnimationFrame(K)},[x,$,pe,we,l]),L=i.useCallback(()=>{U.current&&(cancelAnimationFrame(U.current),U.current=null)},[]),ce=i.useCallback(K=>{if(!H.current)return;const Q=K??Z.current;H.current.play(void 0,Q),m(!0),Xe()},[Xe]),ee=i.useCallback(()=>{H.current&&(H.current.pause(),m(!1),L(),I(H.current.getCurrentTime()))},[L]),J=i.useCallback(()=>{H.current&&(H.current.stop(),m(!1),L(),Z.current=0,I(0),pe(null))},[L,pe]),ue=i.useCallback(K=>{const Q=Math.max(0,Math.min(K,x));Z.current=Q,I(Q),H.current&&H.current.seekTo(Q)},[x]),ve=i.useCallback(K=>{const Q=Math.max(.5,Math.min(2,K));M(Q),H.current&&H.current.setPlaybackRate(Q)},[]),te=a?30:0,_=i.useMemo(()=>({isPlaying:y,currentTime:g,currentTimeRef:Z}),[y,g]),Ae=i.useMemo(()=>({continuousPlay:D,annotations:$,activeAnnotationId:R,playbackRate:A,isAutomaticScroll:F}),[D,$,R,A,F]),ge=i.useMemo(()=>({play:ce,pause:ee,stop:J,seekTo:ue,setPlaybackRate:ve,setContinuousPlay:He,setAnnotations:E,setActiveAnnotationId:pe,setAutomaticScroll:K=>{N(K)},setScrollContainer:Ve,scrollContainerRef:q}),[ce,ee,J,ue,ve,He,pe,Ve]),de=i.useMemo(()=>({duration:x,peaksDataArray:w,sampleRate:we,waveHeight:n,timeScaleHeight:te,samplesPerPixel:V,playoutRef:H,controls:l,barWidth:u,barGap:d,progressBarWidth:C}),[x,w,we,n,te,V,l,u,d,C]),Oe={...kn,...o};return b.jsx(S.ThemeProvider,{theme:Oe,children:b.jsx(ea.Provider,{value:_,children:b.jsx(ta.Provider,{value:Ae,children:b.jsx(na.Provider,{value:ge,children:b.jsx(aa.Provider,{value:de,children:f})})})})})},It=()=>{const e=i.useContext(ea);if(!e)throw new Error("useMediaElementAnimation must be used within MediaElementPlaylistProvider");return e},ra=()=>{const e=i.useContext(ta);if(!e)throw new Error("useMediaElementState must be used within MediaElementPlaylistProvider");return e},oa=()=>{const e=i.useContext(na);if(!e)throw new Error("useMediaElementControls must be used within MediaElementPlaylistProvider");return e},St=()=>{const e=i.useContext(aa);if(!e)throw new Error("useMediaElementData must be used within MediaElementPlaylistProvider");return e},ys=({className:e})=>{const{isPlaying:t,currentTimeRef:n}=$e(),{selectionStart:a,selectionEnd:r,isLoopEnabled:s}=Te(),{play:o}=he(),l=async()=>{if(a!==r&&r>a)if(s)await o(a);else{const u=r-a;await o(a,u)}else await o(n.current??0)};return b.jsx(Be,{onClick:l,disabled:t,className:e,children:"Play"})},ks=({className:e})=>{const{isPlaying:t}=$e(),{pause:n}=he();return b.jsx(Be,{onClick:n,disabled:!t,className:e,children:"Pause"})},Is=({className:e})=>{const{isPlaying:t}=$e(),{stop:n}=he();return b.jsx(Be,{onClick:n,disabled:!t,className:e,children:"Stop"})},Ss=({className:e})=>{const{isPlaying:t}=$e(),{play:n,setCurrentTime:a}=he(),{playoutRef:r}=ke(),s=()=>{a(0),t&&r.current&&(r.current.stop(),n(0))};return b.jsx(Be,{onClick:s,className:e,children:"Rewind"})},As=({className:e})=>{const{isPlaying:t}=$e(),{play:n,setCurrentTime:a}=he(),{duration:r,playoutRef:s}=ke(),o=()=>{a(r),t&&s.current&&(s.current.stop(),n(r))};return b.jsx(Be,{onClick:o,className:e,children:"Fast Forward"})},$s=({skipAmount:e=5,className:t})=>{const{currentTimeRef:n,isPlaying:a}=$e(),{play:r,setCurrentTime:s}=he(),{playoutRef:o}=ke(),l=()=>{const c=Math.max(0,(n.current??0)-e);s(c),a&&o.current&&(o.current.stop(),r(c))};return b.jsx(Be,{onClick:l,className:t,children:"Skip Backward"})},Ms=({skipAmount:e=5,className:t})=>{const{currentTimeRef:n,isPlaying:a}=$e(),{play:r,setCurrentTime:s}=he(),{duration:o,playoutRef:l}=ke(),c=()=>{const u=Math.min(o,(n.current??0)+e);s(u),a&&l.current&&(l.current.stop(),r(u))};return b.jsx(Be,{onClick:c,className:t,children:"Skip Forward"})},Rs=({className:e})=>{const{isLoopEnabled:t,loopStart:n,loopEnd:a}=Te(),{setLoopEnabled:r,setLoopRegion:s}=he(),{duration:o}=ke(),l=n!==a&&a>n,c=()=>{if(!t&&!l){const u=Math.min(10,o*.25);s(0,Math.max(1,u))}r(!t)};return b.jsx(Be,{onClick:c,className:e,title:t?"Disable loop":"Enable loop",children:t?"Loop On":"Loop Off"})},Es=({className:e})=>{const{selectionStart:t,selectionEnd:n,loopStart:a,loopEnd:r}=Te(),{setLoopRegionFromSelection:s,clearLoopRegion:o}=he(),l=t!==n&&n>t,c=a!==r&&r>a,u=()=>{c?o():s()};return b.jsx(Be,{onClick:u,disabled:!l&&!c,className:e,title:c?"Clear loop region":l?"Set loop region from selection":"Create a selection first",children:c?"Clear Loop":"Set Loop"})},Ds=({className:e,disabled:t})=>{const{zoomIn:n}=he(),{canZoomIn:a}=ke();return b.jsx(Be,{variant:"success",onClick:n,disabled:t||!a,className:e,children:"Zoom In"})},Bs=({className:e,disabled:t})=>{const{zoomOut:n}=he(),{canZoomOut:a}=ke();return b.jsx(Be,{variant:"success",onClick:n,disabled:t||!a,className:e,children:"Zoom Out"})},Ts=({className:e})=>{const{masterVolume:t}=ke(),{setMasterVolume:n}=he();return b.jsx(ir,{volume:t,onChange:n,className:e})},Ws=({className:e})=>{const{timeFormat:t}=ke(),{setTimeFormat:n}=he();return b.jsx(Tr,{value:t,onChange:n,className:e})},_s=S.span`
1193
+ `,os=({level:e,peakLevel:t,width:n=200,height:a=20,className:r})=>{const s=Math.max(0,Math.min(1,e)),o=t!==void 0?Math.max(0,Math.min(1,t)):0;return b.jsxs(es,{$width:n,$height:a,className:r,children:[b.jsx(ns,{$level:s,$height:a}),t!==void 0&&o>0&&b.jsx(as,{$peakLevel:o,$height:a}),b.jsxs(rs,{$height:a,children:[b.jsx(mn,{$position:60,$height:a}),b.jsx(mn,{$position:85,$height:a})]})]})};i.memo(os);function ss(e,t,n,a={}){const{currentTime:r=0,audioConstraints:s,...o}=a,[l,c]=i.useState(!1),[u,d]=i.useState(null),{stream:v,devices:p,hasPermission:f,requestAccess:C,error:y}=qo(),{level:m,peakLevel:g}=Qo(v),{isRecording:I,isPaused:w,duration:h,peaks:k,startRecording:x,stopRecording:$,pauseRecording:E,resumeRecording:M,error:A}=Jo(v,o),R=i.useCallback(async()=>{n&&(l||(await Tt(),c(!0)),await x())},[n,l,x]),T=i.useCallback(async()=>{const P=await $();if(P&&n){const V=e.findIndex(ee=>ee.id===n);if(V===-1)return;const Y=e[V],j=Math.floor(r*P.sampleRate);let F=0;if(Y.clips.length>0){const ee=Y.clips.map(te=>te.startSample+te.durationSamples);F=Math.max(...ee)}const U=Math.max(j,F),oe={id:`clip-${Date.now()}`,audioBuffer:P,startSample:U,durationSamples:P.length,offsetSamples:0,sampleRate:P.sampleRate,sourceDurationSamples:P.length,gain:1,name:`Recording ${new Date().toLocaleTimeString()}`},Q=e.map((ee,te)=>te===V?{...ee,clips:[...ee.clips,oe]}:ee);t(Q)}},[n,e,t,r,$]);i.useEffect(()=>{f&&p.length>0&&u===null&&d(p[0].deviceId)},[f,p.length]);const D=i.useCallback(async()=>{await C(void 0,s),await Tt(),c(!0)},[C,s]),Z=i.useCallback(async P=>{d(P),await C(P,s),await Tt(),c(!0)},[C,s]);return{isRecording:I,isPaused:w,duration:h,level:m,peakLevel:g,error:y||A,stream:v,devices:p,hasPermission:f,selectedDevice:u,startRecording:R,stopRecording:T,pauseRecording:E,resumeRecording:M,requestMicAccess:D,changeDevice:Z,recordingPeaks:k}}const dt=[{id:"reverb",name:"Reverb",category:"reverb",description:"Simple convolution reverb with adjustable decay time",parameters:[{name:"decay",label:"Decay",type:"number",min:.1,max:10,step:.1,default:1.5,unit:"s"},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"freeverb",name:"Freeverb",category:"reverb",description:"Classic Schroeder/Moorer reverb with room size and dampening",parameters:[{name:"roomSize",label:"Room Size",type:"number",min:0,max:1,step:.01,default:.7},{name:"dampening",label:"Dampening",type:"number",min:0,max:1e4,step:100,default:3e3,unit:"Hz"},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"jcReverb",name:"JC Reverb",category:"reverb",description:"Attempt at Roland JC-120 chorus reverb emulation",parameters:[{name:"roomSize",label:"Room Size",type:"number",min:0,max:1,step:.01,default:.5},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"feedbackDelay",name:"Feedback Delay",category:"delay",description:"Delay line with feedback for echo effects",parameters:[{name:"delayTime",label:"Delay Time",type:"number",min:0,max:1,step:.01,default:.25,unit:"s"},{name:"feedback",label:"Feedback",type:"number",min:0,max:.95,step:.01,default:.5},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"pingPongDelay",name:"Ping Pong Delay",category:"delay",description:"Stereo delay bouncing between left and right channels",parameters:[{name:"delayTime",label:"Delay Time",type:"number",min:0,max:1,step:.01,default:.25,unit:"s"},{name:"feedback",label:"Feedback",type:"number",min:0,max:.95,step:.01,default:.5},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"chorus",name:"Chorus",category:"modulation",description:"Creates thickness by layering detuned copies of the signal",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:10,step:.1,default:1.5,unit:"Hz"},{name:"delayTime",label:"Delay",type:"number",min:0,max:20,step:.5,default:3.5,unit:"ms"},{name:"depth",label:"Depth",type:"number",min:0,max:1,step:.01,default:.7},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"phaser",name:"Phaser",category:"modulation",description:"Classic phaser effect using allpass filters",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:10,step:.1,default:.5,unit:"Hz"},{name:"octaves",label:"Octaves",type:"number",min:1,max:6,step:1,default:3},{name:"baseFrequency",label:"Base Freq",type:"number",min:100,max:2e3,step:10,default:350,unit:"Hz"},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:.5}]},{id:"tremolo",name:"Tremolo",category:"modulation",description:"Rhythmic volume modulation",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:20,step:.1,default:4,unit:"Hz"},{name:"depth",label:"Depth",type:"number",min:0,max:1,step:.01,default:.5},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"vibrato",name:"Vibrato",category:"modulation",description:"Pitch modulation effect",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:20,step:.1,default:5,unit:"Hz"},{name:"depth",label:"Depth",type:"number",min:0,max:1,step:.01,default:.1},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"autoPanner",name:"Auto Panner",category:"modulation",description:"Automatic left-right panning",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:10,step:.1,default:1,unit:"Hz"},{name:"depth",label:"Depth",type:"number",min:0,max:1,step:.01,default:1},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"autoFilter",name:"Auto Filter",category:"filter",description:"Automated filter sweep with LFO",parameters:[{name:"frequency",label:"Rate",type:"number",min:.1,max:10,step:.1,default:1,unit:"Hz"},{name:"baseFrequency",label:"Base Freq",type:"number",min:20,max:2e3,step:10,default:200,unit:"Hz"},{name:"octaves",label:"Octaves",type:"number",min:.5,max:8,step:.5,default:2.6},{name:"depth",label:"Depth",type:"number",min:0,max:1,step:.01,default:1},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"autoWah",name:"Auto Wah",category:"filter",description:"Envelope follower filter effect",parameters:[{name:"baseFrequency",label:"Base Freq",type:"number",min:20,max:500,step:10,default:100,unit:"Hz"},{name:"octaves",label:"Octaves",type:"number",min:1,max:8,step:1,default:6},{name:"sensitivity",label:"Sensitivity",type:"number",min:-40,max:0,step:1,default:0,unit:"dB"},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"eq3",name:"3-Band EQ",category:"filter",description:"Three band equalizer with low, mid, and high controls",parameters:[{name:"low",label:"Low",type:"number",min:-24,max:24,step:.5,default:0,unit:"dB"},{name:"mid",label:"Mid",type:"number",min:-24,max:24,step:.5,default:0,unit:"dB"},{name:"high",label:"High",type:"number",min:-24,max:24,step:.5,default:0,unit:"dB"},{name:"lowFrequency",label:"Low Freq",type:"number",min:20,max:500,step:10,default:400,unit:"Hz"},{name:"highFrequency",label:"High Freq",type:"number",min:1e3,max:1e4,step:100,default:2500,unit:"Hz"}]},{id:"distortion",name:"Distortion",category:"distortion",description:"Wave shaping distortion effect",parameters:[{name:"distortion",label:"Drive",type:"number",min:0,max:1,step:.01,default:.4},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"bitCrusher",name:"Bit Crusher",category:"distortion",description:"Reduces bit depth for lo-fi digital texture",parameters:[{name:"bits",label:"Bits",type:"number",min:1,max:16,step:1,default:4},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"chebyshev",name:"Chebyshev",category:"distortion",description:"Waveshaping distortion using Chebyshev polynomials",parameters:[{name:"order",label:"Order",type:"number",min:1,max:100,step:1,default:50},{name:"wet",label:"Mix",type:"number",min:0,max:1,step:.01,default:1}]},{id:"compressor",name:"Compressor",category:"dynamics",description:"Dynamic range compressor",parameters:[{name:"threshold",label:"Threshold",type:"number",min:-60,max:0,step:1,default:-24,unit:"dB"},{name:"ratio",label:"Ratio",type:"number",min:1,max:20,step:.5,default:4},{name:"attack",label:"Attack",type:"number",min:0,max:1,step:.001,default:.003,unit:"s"},{name:"release",label:"Release",type:"number",min:0,max:1,step:.01,default:.25,unit:"s"},{name:"knee",label:"Knee",type:"number",min:0,max:40,step:1,default:30,unit:"dB"}]},{id:"limiter",name:"Limiter",category:"dynamics",description:"Hard limiter to prevent clipping",parameters:[{name:"threshold",label:"Threshold",type:"number",min:-12,max:0,step:.5,default:-6,unit:"dB"}]},{id:"gate",name:"Gate",category:"dynamics",description:"Noise gate to silence signal below threshold",parameters:[{name:"threshold",label:"Threshold",type:"number",min:-100,max:0,step:1,default:-40,unit:"dB"},{name:"attack",label:"Attack",type:"number",min:0,max:.3,step:.001,default:.001,unit:"s"},{name:"release",label:"Release",type:"number",min:0,max:.5,step:.01,default:.1,unit:"s"}]},{id:"stereoWidener",name:"Stereo Widener",category:"spatial",description:"Expands or narrows the stereo image",parameters:[{name:"width",label:"Width",type:"number",min:0,max:1,step:.01,default:.5}]}],Nt=e=>dt.find(t=>t.id===e),is=e=>dt.filter(t=>t.category===e),ls=[{id:"reverb",name:"Reverb"},{id:"delay",name:"Delay"},{id:"modulation",name:"Modulation"},{id:"filter",name:"Filter"},{id:"distortion",name:"Distortion"},{id:"dynamics",name:"Dynamics"},{id:"spatial",name:"Spatial"}],cs={reverb:W.Reverb,freeverb:W.Freeverb,jcReverb:W.JCReverb,feedbackDelay:W.FeedbackDelay,pingPongDelay:W.PingPongDelay,chorus:W.Chorus,phaser:W.Phaser,tremolo:W.Tremolo,vibrato:W.Vibrato,autoPanner:W.AutoPanner,autoFilter:W.AutoFilter,autoWah:W.AutoWah,eq3:W.EQ3,distortion:W.Distortion,bitCrusher:W.BitCrusher,chebyshev:W.Chebyshev,compressor:W.Compressor,limiter:W.Limiter,gate:W.Gate,stereoWidener:W.StereoWidener};let us=0;const ds=()=>`effect_${Date.now()}_${++us}`;function lt(e,t){const n=cs[e.id];if(!n)throw new Error(`Unknown effect type: ${e.id}`);const a={};e.parameters.forEach(o=>{const l=t?.[o.name]??o.default;a[o.name]=l});const r=new n(a),s=ds();return{effect:r,id:e.id,instanceId:s,dispose(){try{r.disconnect(),r.dispose()}catch{}},setParameter(o,l){o==="wet"&&r.wet?r.wet.value=l:r[o]!==void 0&&(r[o]?.value!==void 0?r[o].value=l:r[o]=l)},getParameter(o){if(o==="wet"&&r.wet)return r.wet.value;if(r[o]!==void 0)return r[o]?.value!==void 0?r[o].value:r[o]},connect(o){r.connect(o)},disconnect(){try{r.disconnect()}catch{}}}}function fs(e){if(e.length===0)throw new Error("Cannot create effect chain with no effects");for(let t=0;t<e.length-1;t++)e[t].effect.connect(e[t+1].effect);return{input:e[0].effect,output:e[e.length-1].effect,dispose(){e.forEach(t=>t.dispose())}}}function ms(e=256){const[t,n]=i.useState([]),a=i.useRef(t);a.current=t;const r=i.useRef(new Map),s=i.useRef(null),o=i.useRef(null),l=i.useCallback(m=>{const g=o.current;if(!g)return;const{masterGainNode:I,destination:w,analyserNode:h}=g;try{I.disconnect()}catch{}const k=m.map(x=>r.current.get(x.instanceId)).filter(x=>x!==void 0);if(k.length===0)I.connect(h),h.connect(w);else{let x=I;k.forEach($=>{try{$.disconnect()}catch{}x.connect($.effect),x=$.effect}),x.connect(h),h.connect(w)}},[]),c=i.useCallback(m=>{const g=Nt(m);if(!g){console.error(`Unknown effect: ${m}`);return}const I={};g.parameters.forEach(k=>{I[k.name]=k.default});const w=lt(g,I);r.current.set(w.instanceId,w);const h={instanceId:w.instanceId,effectId:g.id,definition:g,params:I,bypassed:!1};n(k=>[...k,h])},[]),u=i.useCallback(m=>{const g=r.current.get(m);g&&(g.dispose(),r.current.delete(m)),n(I=>I.filter(w=>w.instanceId!==m))},[]),d=i.useCallback((m,g,I)=>{const w=r.current.get(m);w&&w.setParameter(g,I),n(h=>h.map(k=>k.instanceId===m?{...k,params:{...k.params,[g]:I}}:k))},[]),v=i.useCallback(m=>{const g=a.current.find(h=>h.instanceId===m);if(!g)return;const I=!g.bypassed,w=r.current.get(m);if(w){const h=g.params.wet??1;w.setParameter("wet",I?0:h)}n(h=>h.map(k=>k.instanceId===m?{...k,bypassed:I}:k))},[]),p=i.useCallback((m,g)=>{n(I=>{const w=[...I],[h]=w.splice(m,1);return w.splice(g,0,h),w})},[]),f=i.useCallback(()=>{r.current.forEach(m=>m.dispose()),r.current.clear(),n([])},[]);i.useEffect(()=>{l(t)},[t,l]);const C=i.useCallback((m,g,I)=>{const w=new W.Analyser("fft",e);s.current=w,o.current={masterGainNode:m,destination:g,analyserNode:w};const k=a.current.map(x=>r.current.get(x.instanceId)).filter(x=>x!==void 0);if(k.length===0)m.connect(w),w.connect(g);else{let x=m;k.forEach($=>{x.connect($.effect),x=$.effect}),x.connect(w),w.connect(g)}return function(){w.dispose(),s.current=null,o.current=null}},[e]);i.useEffect(()=>()=>{r.current.forEach(m=>m.dispose()),r.current.clear()},[]);const y=i.useCallback(()=>{const m=t.filter(g=>!g.bypassed);if(m.length!==0)return(g,I,w)=>{const h=[];for(const k of m){const x=lt(k.definition,k.params);h.push(x)}if(h.length===0)g.connect(I);else{let k=g;h.forEach(x=>{k.connect(x.effect),k=x.effect}),k.connect(I)}return function(){h.forEach(x=>x.dispose())}}},[t]);return{activeEffects:t,availableEffects:dt,addEffect:c,removeEffect:u,updateParameter:d,toggleBypass:v,reorderEffects:p,clearAllEffects:f,masterEffects:C,createOfflineEffectsFunction:y,analyserRef:s}}function hs(){const[e,t]=i.useState(new Map),n=i.useRef(new Map),a=i.useRef(new Map),r=i.useCallback((f,C)=>{const y=a.current.get(f);if(!y)return;const{graphEnd:m,masterGainNode:g}=y,I=n.current.get(f);try{m.disconnect()}catch{}const w=C.map(h=>I?.get(h.instanceId)).filter(h=>h!==void 0);if(w.length===0)m.connect(g);else{let h=m;w.forEach(k=>{try{k.disconnect()}catch{}h.connect(k.effect),h=k.effect}),h.connect(g)}},[]),s=i.useCallback((f,C)=>{const y=Nt(C);if(!y){console.error(`Unknown effect: ${C}`);return}const m={};y.parameters.forEach(w=>{m[w.name]=w.default});const g=lt(y,m);n.current.has(f)||n.current.set(f,new Map),n.current.get(f).set(g.instanceId,g);const I={instanceId:g.instanceId,effectId:y.id,definition:y,params:m,bypassed:!1};t(w=>{const h=new Map(w),k=h.get(f)||[];return h.set(f,[...k,I]),h})},[]),o=i.useCallback((f,C)=>{const y=n.current.get(f),m=y?.get(C);m&&(m.dispose(),y?.delete(C)),t(g=>{const I=new Map(g),w=I.get(f)||[];return I.set(f,w.filter(h=>h.instanceId!==C)),I})},[]),l=i.useCallback((f,C,y,m)=>{const I=n.current.get(f)?.get(C);I&&I.setParameter(y,m),t(w=>{const h=new Map(w),k=h.get(f)||[];return h.set(f,k.map(x=>x.instanceId===C?{...x,params:{...x.params,[y]:m}}:x)),h})},[]),c=i.useCallback((f,C)=>{const m=(d.current.get(f)||[]).find(h=>h.instanceId===C);if(!m)return;const g=!m.bypassed,w=n.current.get(f)?.get(C);if(w){const h=m.params.wet??1;w.setParameter("wet",g?0:h)}t(h=>{const k=new Map(h),x=k.get(f)||[];return k.set(f,x.map($=>$.instanceId===C?{...$,bypassed:g}:$)),k})},[]),u=i.useCallback(f=>{const C=n.current.get(f);C&&(C.forEach(y=>y.dispose()),C.clear()),t(y=>{const m=new Map(y);return m.set(f,[]),m})},[]),d=i.useRef(e);d.current=e;const v=i.useCallback(f=>(C,y,m)=>{a.current.set(f,{graphEnd:C,masterGainNode:y});const g=d.current.get(f)||[],I=n.current.get(f),w=g.map(h=>I?.get(h.instanceId)).filter(h=>h!==void 0);if(w.length===0)C.connect(y);else{let h=C;w.forEach(k=>{h.connect(k.effect),h=k.effect}),h.connect(y)}return function(){a.current.delete(f)}},[]);i.useEffect(()=>{e.forEach((f,C)=>{r(C,f)})},[e,r]),i.useEffect(()=>()=>{n.current.forEach(f=>{f.forEach(C=>C.dispose()),f.clear()}),n.current.clear()},[]);const p=i.useCallback(f=>{const y=(e.get(f)||[]).filter(m=>!m.bypassed);if(y.length!==0)return(m,g,I)=>{const w=[];for(const h of y){const k=lt(h.definition,h.params);w.push(k)}if(w.length===0)m.connect(g);else{let h=m;w.forEach(k=>{h.connect(k.effect),h=k.effect}),h.connect(g)}return function(){w.forEach(k=>k.dispose())}}},[e]);return{trackEffectsState:e,addEffectToTrack:s,removeEffectFromTrack:o,updateTrackEffectParameter:l,toggleBypass:c,clearTrackEffects:u,getTrackEffectsFunction:v,createOfflineTrackEffectsFunction:p,availableEffects:dt}}function ps(e,t={}){const{bitDepth:n=16}=t,a=e.numberOfChannels,r=e.sampleRate,s=e.length,o=n/8,l=a*o,c=r*l,u=s*l,d=44,v=d+u,p=new ArrayBuffer(v),f=new DataView(p);bt(f,0,"RIFF"),f.setUint32(4,v-8,!0),bt(f,8,"WAVE"),bt(f,12,"fmt "),f.setUint32(16,16,!0),f.setUint16(20,n===32?3:1,!0),f.setUint16(22,a,!0),f.setUint32(24,r,!0),f.setUint32(28,c,!0),f.setUint16(32,l,!0),f.setUint16(34,n,!0),bt(f,36,"data"),f.setUint32(40,u,!0);const C=[];for(let m=0;m<a;m++)C.push(e.getChannelData(m));let y=d;if(n===16)for(let m=0;m<s;m++)for(let g=0;g<a;g++){const I=C[g][m],w=Math.max(-1,Math.min(1,I)),h=w<0?w*32768:w*32767;f.setInt16(y,h,!0),y+=2}else for(let m=0;m<s;m++)for(let g=0;g<a;g++)f.setFloat32(y,C[g][m],!0),y+=4;return new Blob([p],{type:"audio/wav"})}function bt(e,t,n){for(let a=0;a<n.length;a++)e.setUint8(t+a,n.charCodeAt(a))}function gs(e,t){const n=URL.createObjectURL(e),a=document.createElement("a");a.href=n,a.download=t,a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(n)}function Jn(){const[e,t]=i.useState(!1),[n,a]=i.useState(0),[r,s]=i.useState(null);return{exportWav:i.useCallback(async(l,c,u={})=>{const{filename:d="export",mode:v="master",trackIndex:p,autoDownload:f=!0,applyEffects:C=!0,effectsFunction:y,createOfflineTrackEffects:m,bitDepth:g=16,onProgress:I}=u;t(!0),a(0),s(null);try{if(l.length===0)throw new Error("No tracks to export");if(v==="individual"&&(p===void 0||p<0||p>=l.length))throw new Error("Invalid track index for individual export");const w=l[0].clips[0]?.sampleRate||44100;let h=0;for(const R of l)for(const T of R.clips){const D=T.startSample+T.durationSamples;h=Math.max(h,D)}h+=Math.round(w*.1);const k=h/w,x=v==="individual"?[{track:l[p],state:c[p],index:p}]:l.map((R,T)=>({track:R,state:c[T],index:T})),$=c.some(R=>R.soloed),E=!!m;let M;if((y||E)&&C)M=await bs(x,c,$,k,w,y,m,R=>{a(R),I?.(R)});else{const R=new OfflineAudioContext(2,h,w);let T=0;const D=x.reduce((Z,{track:P})=>Z+P.clips.length,0);for(const{track:Z,state:P}of x)if(!(P.muted&&!P.soloed)&&!($&&!P.soloed))for(const V of Z.clips){await Cs(R,V,P,w,C),T++;const Y=T/D*.5;a(Y),I?.(Y)}a(.5),I?.(.5),M=await R.startRendering()}a(.9),I?.(.9);const A=ps(M,{bitDepth:g});if(a(1),I?.(1),f){const R=v==="individual"?`${d}_${l[p].name}`:d;gs(A,`${R}.wav`)}return{audioBuffer:M,blob:A,duration:k}}catch(w){const h=w instanceof Error?w.message:"Export failed";throw s(h),w}finally{t(!1)}},[]),isExporting:e,progress:n,error:r}}async function bs(e,t,n,a,r,s,o,l){const{Offline:c,Volume:u,Gain:d,Panner:v,Player:p,ToneAudioBuffer:f}=await import("tone");l(.1);let C;try{C=await c(async({transport:y,destination:m})=>{const g=new u(0);let I;s?I=s(g,m,!0):g.connect(m);for(const{track:w,state:h}of e){if(h.muted&&!h.soloed||n&&!h.soloed)continue;const k=new u(vs(h.volume)),x=new v(h.pan),$=new d(h.muted?0:1),E=o?.(w.id);E?E($,g,!0):$.connect(g),x.connect($),k.connect(x);for(const M of w.clips){const{audioBuffer:A,startSample:R,durationSamples:T,offsetSamples:D,gain:Z,fadeIn:P,fadeOut:V}=M,Y=R/r,j=T/r,F=D/r,U=new f(A),oe=new p(U),Q=new d(Z);if(oe.connect(Q),Q.connect(k),P){const ee=Y,te=Y+P.duration,be=Q.gain._param;be.setValueAtTime(0,ee),be.linearRampToValueAtTime(Z,te)}if(V){const ee=Y+j-V.duration,te=Y+j,be=Q.gain._param;be.setValueAtTime(Z,ee),be.linearRampToValueAtTime(0,te)}oe.start(Y,F,j)}}y.start(0)},a,2,r)}catch(y){throw y instanceof Error?y:new Error(`Tone.Offline rendering failed: ${String(y)}`)}return l(.9),C.get()}function vs(e){return 20*Math.log10(Math.max(e,1e-4))}async function Cs(e,t,n,a,r){const{audioBuffer:s,startSample:o,durationSamples:l,offsetSamples:c,gain:u,fadeIn:d,fadeOut:v}=t;if(!s){console.warn(`Skipping clip "${t.name||t.id}" - no audioBuffer for export`);return}const p=o/a,f=l/a,C=c/a,y=e.createBufferSource();y.buffer=s;const m=e.createGain(),g=u*n.volume,I=e.createStereoPanner();if(I.pan.value=n.pan,y.connect(m),m.connect(I),I.connect(e.destination),r){if(d?m.gain.setValueAtTime(0,p):m.gain.setValueAtTime(g,p),d){const w=p,h=p+d.duration;hn(m.gain,w,h,0,g,d.type||"linear")}if(v){const w=p+f-v.duration,h=p+f;(!d||d.duration<f-v.duration)&&m.gain.setValueAtTime(g,w),hn(m.gain,w,h,g,0,v.type||"linear")}}else m.gain.setValueAtTime(g,p);y.start(p,C,f)}function hn(e,t,n,a,r,s){const o=n-t;if(!(o<=0))switch(s){case"linear":e.setValueAtTime(a,t),e.linearRampToValueAtTime(r,n);break;case"exponential":const l=Math.max(a,1e-4),c=Math.max(r,1e-4);e.setValueAtTime(l,t),e.exponentialRampToValueAtTime(c,n),r===0&&e.setValueAtTime(0,n);break;case"logarithmic":const u=pn(a,r,256,"logarithmic");e.setValueCurveAtTime(u,t,o);break;case"sCurve":const d=pn(a,r,256,"sCurve");e.setValueCurveAtTime(d,t,o);break;default:e.setValueAtTime(a,t),e.linearRampToValueAtTime(r,n)}}function pn(e,t,n,a){const r=new Float32Array(n),s=t-e;for(let o=0;o<n;o++){const l=o/(n-1);let c;a==="logarithmic"?s>0?c=Math.log10(1+l*9)/Math.log10(10):c=1-Math.log10(1+(1-l)*9)/Math.log10(10):c=l*l*(3-2*l),r[o]=e+s*c}return r}const qn=i.createContext(null),Qn=i.createContext(null),ea=i.createContext(null),ta=i.createContext(null),na=i.createContext(null),xs=({tracks:e,timescale:t=!1,mono:n=!1,waveHeight:a=80,samplesPerPixel:r=1024,zoomLevels:s,automaticScroll:o=!1,theme:l,controls:c={show:!1,width:0},annotationList:u,effects:d,onReady:v,onAnnotationUpdate:p,barWidth:f=1,barGap:C=0,progressBarWidth:y,children:m})=>{const g=y??f+C,[I,w]=i.useState([]),[h,k]=i.useState(null),[x,$]=i.useState(!1),[E,M]=i.useState(0),[A,R]=i.useState(0),[T,D]=i.useState([]),[Z,P]=i.useState([]),[V,Y]=i.useState([]),[j,F]=i.useState(0),[U,oe]=i.useState(0),[Q,ee]=i.useState(null),[te,be]=i.useState(o),[he,He]=i.useState(u?.isContinuousPlay??!1),[je,we]=i.useState(u?.linkEndpoints??!1),[Xe,Se]=i.useState(u?.editable??!1),[q,O]=i.useState(!1),[ne,le]=i.useState(0),[ce,K]=i.useState(0),[$e,Ge]=i.useState(!1),_=i.useRef(null),_e=i.useRef(0),ue=i.useRef(0),H=i.useRef(null),ae=i.useRef(V),de=i.useRef(0),fe=i.useRef(0),Ce=i.useRef(null),Pe=i.useRef(null),Ne=i.useRef(!1),qe=i.useRef(u?.isContinuousPlay??!1),Oe=i.useRef(null),at=i.useRef(r),Mt=i.useRef(!1),G=i.useRef(0),J=i.useRef(0),re=i.useRef(0),pe=i.useRef(0),{timeFormat:ke,setTimeFormat:Fe,formatTime:se}=Ln(),Me=Yn({initialSamplesPerPixel:r,zoomLevels:s}),Ie=Me.samplesPerPixel,{masterVolume:Le,setMasterVolume:Ye}=On({playoutRef:_,initialVolume:1}),Qe=i.useCallback(B=>{qe.current=B,He(B)},[]),ze=i.useCallback(B=>{Oe.current=B,k(B)},[]),Rt=i.useCallback(B=>{Mt.current=B,O(B)},[]),rt=i.useCallback((B,X)=>{re.current=B,pe.current=X,le(B),K(X)},[]),ca=i.useCallback(()=>{const B=G.current,X=J.current;B!==X&&X>B&&rt(B,X)},[rt]),ua=i.useCallback(()=>{rt(0,0)},[rt]);i.useEffect(()=>{Ne.current=te},[te]),i.useEffect(()=>{ae.current=V},[V]),i.useEffect(()=>{G.current=j,J.current=U},[j,U]),i.useEffect(()=>{if(!Pe.current||!T.length)return;const B=Pe.current,X=at.current,L=Ie;if(X===L)return;const ie=c.show?c.width:0,z=B.clientWidth,Ve=B.scrollLeft+z/2-ie,et=T[0].sampleRate,ve=Ve*X/et*et/L,Re=Math.max(0,ve+ie-z/2);B.scrollLeft=Re,at.current=L},[Ie,T,c]);const ft=i.useRef(null);i.useEffect(()=>{if(Ge(!1),e.length===0){D([]),R(0),Y([]),P([]),_.current&&(_.current.dispose(),_.current=null);return}const B=x,X=ue.current;return _.current&&B&&(_.current.stop(),H.current&&(cancelAnimationFrame(H.current),H.current=null),ft.current={position:X}),(async()=>{try{const ie=[];e.forEach(ge=>{ge.clips.length>0&&ge.clips[0].audioBuffer&&ie.push(ge.clips[0].audioBuffer)});let z=0;e.forEach(ge=>{ge.clips.forEach(ve=>{const Re=ve.sampleRate,mt=(ve.startSample+ve.durationSamples)/Re;z=Math.max(z,mt)})}),D(ie),R(z),Y(ge=>ge.length===e.length?ge.map((ve,Re)=>({...ve,name:e[Re].name})):e.map(ve=>({name:ve.name,muted:ve.muted,soloed:ve.soloed,volume:ve.volume,pan:ve.pan}))),_.current&&_.current.dispose();const xe=new Pa({effects:d}),Ve=ae.current;e.forEach((ge,ve)=>{const Re=ge.clips.filter(ot=>ot.audioBuffer);if(Re.length>0){const ot=Re[0].sampleRate,mt=Math.min(...Re.map(Ee=>Ee.startSample/ot)),Ia=Math.max(...Re.map(Ee=>(Ee.startSample+Ee.durationSamples)/ot)),ht=Ve[ve],Sa={id:`track-${ve}`,name:ge.name,gain:ht?.volume??ge.volume,muted:ht?.muted??ge.muted,soloed:ht?.soloed??ge.soloed,stereoPan:ht?.pan??ge.pan,startTime:mt,endTime:Ia},Aa=Re.map(Ee=>{const Dt=Ee.sampleRate;return{buffer:Ee.audioBuffer,startTime:Ee.startSample/Dt-mt,duration:Ee.durationSamples/Dt,offset:Ee.offsetSamples/Dt,fadeIn:Ee.fadeIn,fadeOut:Ee.fadeOut,gain:Ee.gain}});xe.addTrack({clips:Aa,track:Sa,effects:ge.effects})}}),xe.applyInitialSoloState(),_.current=xe,Ge(!0);const et=new CustomEvent("waveform-playlist:ready",{detail:{trackCount:e.length,duration:z}});window.dispatchEvent(et),v?.()}catch(ie){console.error("Error loading audio:",ie)}})(),()=>{H.current&&cancelAnimationFrame(H.current),_.current&&_.current.dispose()}},[e,v,x]),i.useEffect(()=>{if(e.length===0)return;const B=16,X=e.map(L=>L.clips.map(z=>{if(z.waveformData){const Ve=jn(z.waveformData,Ie,0,z.offsetSamples,z.durationSamples);return{clipId:z.id,trackName:L.name,peaks:{length:Ve.length,data:[Ve.data],bits:Ve.bits},startSample:z.startSample,durationSamples:z.durationSamples,fadeIn:z.fadeIn,fadeOut:z.fadeOut}}if(!z.audioBuffer)return console.warn(`Clip "${z.name||z.id}" has neither waveformData nor audioBuffer - rendering empty`),{clipId:z.id,trackName:L.name,peaks:{length:0,data:[],bits:B},startSample:z.startSample,durationSamples:z.durationSamples,fadeIn:z.fadeIn,fadeOut:z.fadeOut};const xe=Or(z.audioBuffer,Ie,n,B,z.offsetSamples,z.durationSamples);return{clipId:z.id,trackName:L.name,peaks:xe,startSample:z.startSample,durationSamples:z.durationSamples,fadeIn:z.fadeIn,fadeOut:z.fadeOut}}));P(X)},[e,Ie,n]),i.useEffect(()=>{if(u?.annotations){const B=u.annotations.map(X=>typeof X.start=="number"?X:Hn(X));w(B)}},[u]);const Ke=i.useCallback(()=>{H.current&&(cancelAnimationFrame(H.current),H.current=null);const B=()=>{const X=W.getContext().currentTime-de.current,L=fe.current+X;if(ue.current=L,M(L),I.length>0){const z=I.find(xe=>L>=xe.start&&L<xe.end);if(qe.current)z&&z.id!==Oe.current?ze(z.id):!z&&Oe.current!==null&&ze(null);else if(Oe.current){const xe=I.find(Ve=>Ve.id===Oe.current);if(xe&&L>=xe.end){_.current&&_.current.stop(),$(!1),ue.current=_e.current,M(_e.current);return}}else z&&ze(z.id)}if(Ne.current&&Pe.current&&T.length>0){const z=Pe.current,xe=T[0].sampleRate,Ve=L*xe/at.current,et=z.clientWidth,ge=c.show?c.width:0,ve=Ve+ge,Re=Math.max(0,ve-et/2);z.scrollLeft=Re}if(Ce.current!==null&&L>=Ce.current){_.current&&_.current.stop(),$(!1),ue.current=Ce.current,M(Ce.current),Ce.current=null;return}const ie=re.current!==pe.current&&pe.current>re.current;if(Mt.current&&ie&&L>=pe.current){_.current?.stop();const xe=W.getContext().currentTime;de.current=xe,fe.current=re.current,ue.current=re.current,_.current?.play(xe,re.current),H.current=requestAnimationFrame(B);return}if(L>=A){_.current&&_.current.stop(),$(!1),ue.current=_e.current,M(_e.current),ze(null);return}H.current=requestAnimationFrame(B)};H.current=requestAnimationFrame(B)},[A,T,Ie,I,he]),Ze=i.useCallback(()=>{H.current&&(cancelAnimationFrame(H.current),H.current=null)},[]);i.useEffect(()=>{(async()=>{if(x&&H.current&&_.current)if(he){const X=ue.current;_.current.stop(),Ze(),await _.current.init(),_.current.setOnPlaybackComplete(()=>{});const ie=W.getContext().currentTime;de.current=ie,fe.current=X,_.current.play(ie,X),Ke()}else Ze(),Ke()})()},[he,x,Ke,Ze]),i.useEffect(()=>{(async()=>{if(ft.current&&_.current){const{position:X}=ft.current;ft.current=null,await _.current.init(),_.current.setOnPlaybackComplete(()=>{});const ie=W.getContext().currentTime;de.current=ie,fe.current=X,_.current.play(ie,X),$(!0),Ke()}})()},[e,Ke]);const Et=i.useCallback(async(B,X)=>{if(!_.current||T.length===0)return;await _.current.init(),await W.start();const L=B??ue.current;_e.current=L,ue.current=L,_.current.setOnPlaybackComplete(()=>{}),_.current.stop(),Ze();const z=W.getContext().currentTime;de.current=z,fe.current=L,Ce.current=X!==void 0?L+X:null,_.current.play(z,L,X),$(!0),Ke()},[T.length,Ke,Ze]),da=i.useCallback(()=>{if(!_.current)return;const B=W.getContext().currentTime-de.current,X=fe.current+B;_.current.pause(),$(!1),Ze(),ue.current=X,M(X)},[Ze]),fa=i.useCallback(()=>{_.current&&(_.current.stop(),$(!1),Ze(),ue.current=_e.current,M(_e.current),ze(null))},[Ze]),ma=i.useCallback(B=>{const X=Math.max(0,Math.min(B,A));ue.current=X,M(X),x&&_.current&&(_.current.stop(),Ze(),Et(X))},[A,x,Et,Ze]),ha=i.useCallback((B,X)=>{const L=[...V];if(L[B]={...L[B],muted:X},Y(L),_.current){const ie=`track-${B}`;_.current.setMute(ie,X)}},[V]),pa=i.useCallback((B,X)=>{const L=[...V];if(L[B]={...L[B],soloed:X},Y(L),_.current){const ie=`track-${B}`;_.current.setSolo(ie,X)}},[V]),ga=i.useCallback((B,X)=>{const L=[...V];if(L[B]={...L[B],volume:X},Y(L),_.current){const ie=`track-${B}`,z=_.current.getTrack(ie);z&&z.setVolume(X)}},[V]),ba=i.useCallback((B,X)=>{const L=[...V];if(L[B]={...L[B],pan:X},Y(L),_.current){const ie=`track-${B}`,z=_.current.getTrack(ie);z&&z.setPan(X)}},[V]),va=i.useCallback((B,X)=>{F(B),oe(X),ue.current=B,M(B),x&&_.current&&(_.current.stop(),_.current.play(W.getContext().currentTime,B))},[x]),Ca=i.useCallback(B=>{Pe.current=B},[]),xa=T[0]?.sampleRate||44100,Lt=t?30:0,wa=e.length*a+Lt,Yt={isPlaying:x,currentTime:E,currentTimeRef:ue,playbackStartTimeRef:de,audioStartPositionRef:fe},Ot={continuousPlay:he,linkEndpoints:je,annotationsEditable:Xe,isAutomaticScroll:te,isLoopEnabled:q,annotations:I,activeAnnotationId:h,selectionStart:j,selectionEnd:U,selectedTrackId:Q,loopStart:ne,loopEnd:ce},Kt={play:Et,pause:da,stop:fa,seekTo:ma,setCurrentTime:B=>{ue.current=B,M(B)},setTrackMute:ha,setTrackSolo:pa,setTrackVolume:ga,setTrackPan:ba,setSelection:va,setSelectedTrackId:ee,setTimeFormat:Fe,formatTime:se,zoomIn:Me.zoomIn,zoomOut:Me.zoomOut,setMasterVolume:Ye,setAutomaticScroll:B=>{be(B)},setScrollContainer:Ca,scrollContainerRef:Pe,setContinuousPlay:Qe,setLinkEndpoints:we,setAnnotationsEditable:Se,setAnnotations:w,setActiveAnnotationId:ze,setLoopEnabled:Rt,setLoopRegion:rt,setLoopRegionFromSelection:ca,clearLoopRegion:ua},Ut={duration:A,audioBuffers:T,peaksDataArray:Z,trackStates:V,tracks:e,sampleRate:xa,waveHeight:a,timeScaleHeight:Lt,minimumPlaylistHeight:wa,controls:c,playoutRef:_,samplesPerPixel:Ie,timeFormat:ke,masterVolume:Le,canZoomIn:Me.canZoomIn,canZoomOut:Me.canZoomOut,barWidth:f,barGap:C,progressBarWidth:g,isReady:$e},ya={...Yt,...Ot,...Kt,...Ut},ka={...An,...l};return b.jsx(S.ThemeProvider,{theme:ka,children:b.jsx(qn.Provider,{value:Yt,children:b.jsx(Qn.Provider,{value:Ot,children:b.jsx(ea.Provider,{value:Kt,children:b.jsx(ta.Provider,{value:Ut,children:b.jsx(na.Provider,{value:ya,children:m})})})})})})},Ae=()=>{const e=i.useContext(qn);if(!e)throw new Error("usePlaybackAnimation must be used within WaveformPlaylistProvider");return e},We=()=>{const e=i.useContext(Qn);if(!e)throw new Error("usePlaylistState must be used within WaveformPlaylistProvider");return e},me=()=>{const e=i.useContext(ea);if(!e)throw new Error("usePlaylistControls must be used within WaveformPlaylistProvider");return e},ye=()=>{const e=i.useContext(ta);if(!e)throw new Error("usePlaylistData must be used within WaveformPlaylistProvider");return e},ws=()=>{const e=i.useContext(na);if(!e)throw new Error("useWaveformPlaylist must be used within WaveformPlaylistProvider");return e};var ys=class{constructor(e){this._playbackRate=1,this.handleEnded=()=>{this.onStopCallback&&this.onStopCallback()},this.handleTimeUpdate=()=>{this.onTimeUpdateCallback&&this.onTimeUpdateCallback(this.audioElement.currentTime)},this._peaks=e.peaks,this._id=e.id??`track-${Date.now()}`,this._name=e.name??"Track",this._playbackRate=e.playbackRate??1,typeof e.source=="string"?(this.audioElement=new Audio(e.source),this.ownsElement=!0):(this.audioElement=e.source,this.ownsElement=!1),this.audioElement.preload="auto",this.audioElement.volume=e.volume??1,this.audioElement.playbackRate=this._playbackRate,"preservesPitch"in this.audioElement?this.audioElement.preservesPitch=!0:"mozPreservesPitch"in this.audioElement?this.audioElement.mozPreservesPitch=!0:"webkitPreservesPitch"in this.audioElement&&(this.audioElement.webkitPreservesPitch=!0),this.audioElement.addEventListener("ended",this.handleEnded),this.audioElement.addEventListener("timeupdate",this.handleTimeUpdate)}play(e=0){this.audioElement.currentTime=e,this.audioElement.play().catch(t=>{console.warn("MediaElementTrack: play() failed:",t)})}pause(){this.audioElement.pause()}stop(){this.audioElement.pause(),this.audioElement.currentTime=0}seekTo(e){this.audioElement.currentTime=Math.max(0,Math.min(e,this.duration))}setVolume(e){this.audioElement.volume=Math.max(0,Math.min(1,e))}setPlaybackRate(e){const t=Math.max(.5,Math.min(2,e));this._playbackRate=t,this.audioElement.playbackRate=t}setMuted(e){this.audioElement.muted=e}setOnStopCallback(e){this.onStopCallback=e}setOnTimeUpdateCallback(e){this.onTimeUpdateCallback=e}dispose(){this.audioElement.removeEventListener("ended",this.handleEnded),this.audioElement.removeEventListener("timeupdate",this.handleTimeUpdate),this.audioElement.pause(),this.ownsElement&&(this.audioElement.src="",this.audioElement.load())}get id(){return this._id}get name(){return this._name}get peaks(){return this._peaks}get currentTime(){return this.audioElement.currentTime}get duration(){return this.audioElement.duration||this._peaks.duration}get isPlaying(){return!this.audioElement.paused&&!this.audioElement.ended}get volume(){return this.audioElement.volume}get playbackRate(){return this._playbackRate}get muted(){return this.audioElement.muted}get element(){return this.audioElement}},ks=class{constructor(e={}){this.track=null,this._isPlaying=!1,this._masterVolume=e.masterVolume??1,this._playbackRate=e.playbackRate??1}async init(){}addTrack(e){return this.track&&(console.warn("MediaElementPlayout: Only one track is supported. Disposing previous track. For multi-track, use TonePlayout."),this.track.dispose()),this.track=new ys({...e,volume:this._masterVolume*(e.volume??1),playbackRate:this._playbackRate}),this.track.setOnStopCallback(()=>{this._isPlaying=!1,this.onPlaybackCompleteCallback&&this.onPlaybackCompleteCallback()}),this.track}removeTrack(e){this.track&&this.track.id===e&&(this.track.dispose(),this.track=null)}getTrack(e){if(this.track&&this.track.id===e)return this.track}play(e,t,n){if(!this.track){console.warn("MediaElementPlayout: No track to play");return}const a=t??0;if(this._isPlaying=!0,this.track.play(a),n!==void 0){const r=n/this._playbackRate;setTimeout(()=>{this._isPlaying&&(this.pause(),this.onPlaybackCompleteCallback&&this.onPlaybackCompleteCallback())},r*1e3)}}pause(){this.track&&this.track.pause(),this._isPlaying=!1}stop(){this.track&&this.track.stop(),this._isPlaying=!1}seekTo(e){this.track&&this.track.seekTo(e)}getCurrentTime(){return this.track?this.track.currentTime:0}setMasterVolume(e){this._masterVolume=Math.max(0,Math.min(1,e)),this.track&&this.track.setVolume(this._masterVolume)}setPlaybackRate(e){this._playbackRate=Math.max(.5,Math.min(2,e)),this.track&&this.track.setPlaybackRate(this._playbackRate)}setMute(e,t){const n=this.getTrack(e);n&&n.setMuted(t)}setSolo(e,t){console.warn("MediaElementPlayout: Solo is not applicable for single-track playback")}setOnPlaybackComplete(e){this.onPlaybackCompleteCallback=e}dispose(){this.track&&(this.track.dispose(),this.track=null)}get isPlaying(){return this._isPlaying}get masterVolume(){return this._masterVolume}get playbackRate(){return this._playbackRate}get duration(){return this.track?.duration??0}get sampleRate(){return this.track?.peaks.sample_rate??44100}};const aa=i.createContext(null),ra=i.createContext(null),oa=i.createContext(null),sa=i.createContext(null),Is=({track:e,samplesPerPixel:t=1024,waveHeight:n=100,timescale:a=!1,playbackRate:r=1,automaticScroll:s=!1,theme:o,controls:l={show:!1,width:0},annotationList:c,barWidth:u=1,barGap:d=0,progressBarWidth:v,onReady:p,children:f})=>{const C=v??u+d,[y,m]=i.useState(!1),[g,I]=i.useState(0),[w,h]=i.useState(0),[k,x]=i.useState([]),[$,E]=i.useState(r),[M,A]=i.useState([]),[R,T]=i.useState(null),[D,Z]=i.useState(c?.isContinuousPlay??!1),[P]=i.useState(t),[V,Y]=i.useState(s),j=i.useRef(null),F=i.useRef(0),U=i.useRef(null),oe=i.useRef(D),Q=i.useRef(null),ee=i.useRef(null),te=i.useRef(s),be=i.useRef(t);i.useEffect(()=>{oe.current=D},[D]),i.useEffect(()=>{te.current=V},[V]);const he=i.useCallback(H=>{Q.current=H,T(H)},[]),He=i.useCallback(H=>{oe.current=H,Z(H)},[]),je=i.useCallback(H=>{ee.current=H},[]),we=e.waveformData.sample_rate;i.useEffect(()=>{const H=new ks({playbackRate:r});H.addTrack({source:e.source,peaks:e.waveformData,name:e.name});const ae=H.getTrack(H.track?.id??"");return ae&&ae.setOnTimeUpdateCallback(de=>{F.current=de}),H.setOnPlaybackComplete(()=>{m(!1)}),j.current=H,h(e.waveformData.duration),p?.(),()=>{U.current&&cancelAnimationFrame(U.current),H.dispose()}},[e.source,e.waveformData,e.name,r,p]),i.useEffect(()=>{const H=jn(e.waveformData,P,0,0,Math.ceil(e.waveformData.duration*we)),ae={clipId:"media-element-clip",trackName:e.name??"Track",peaks:{length:H.length,data:[H.data],bits:H.bits},startSample:0,durationSamples:Math.ceil(e.waveformData.duration*we)};x([[ae]])},[e.waveformData,e.name,P,we]),i.useEffect(()=>{if(c?.annotations){const H=c.annotations.map(ae=>typeof ae.start=="number"?ae:Hn(ae));A(H)}},[c]);const Xe=i.useCallback(()=>{U.current&&cancelAnimationFrame(U.current);const H=()=>{const ae=j.current?.getCurrentTime()??0;if(F.current=ae,I(ae),M.length>0){const de=M.find(fe=>ae>=fe.start&&ae<fe.end);if(oe.current)de&&de.id!==Q.current?he(de.id):!de&&Q.current!==null&&he(null);else if(Q.current){const fe=M.find(Ce=>Ce.id===Q.current);if(fe&&ae>=fe.end){j.current?.stop(),m(!1);return}}else de&&he(de.id)}if(te.current&&ee.current){const de=ee.current,fe=ae*we/be.current,Ce=de.clientWidth,Pe=l.show?l.width:0,Ne=fe+Pe,qe=Math.max(0,Ne-Ce/2);de.scrollLeft=qe}if(ae>=w){j.current?.stop(),m(!1),he(null);return}U.current=requestAnimationFrame(H)};U.current=requestAnimationFrame(H)},[w,M,he,we,l]),Se=i.useCallback(()=>{U.current&&(cancelAnimationFrame(U.current),U.current=null)},[]),q=i.useCallback(H=>{if(!j.current)return;const ae=H??F.current;j.current.play(void 0,ae),m(!0),Xe()},[Xe]),O=i.useCallback(()=>{j.current&&(j.current.pause(),m(!1),Se(),I(j.current.getCurrentTime()))},[Se]),ne=i.useCallback(()=>{j.current&&(j.current.stop(),m(!1),Se(),F.current=0,I(0),he(null))},[Se,he]),le=i.useCallback(H=>{const ae=Math.max(0,Math.min(H,w));F.current=ae,I(ae),j.current&&j.current.seekTo(ae)},[w]),ce=i.useCallback(H=>{const ae=Math.max(.5,Math.min(2,H));E(ae),j.current&&j.current.setPlaybackRate(ae)},[]),K=a?30:0,$e=i.useMemo(()=>({isPlaying:y,currentTime:g,currentTimeRef:F}),[y,g]),Ge=i.useMemo(()=>({continuousPlay:D,annotations:M,activeAnnotationId:R,playbackRate:$,isAutomaticScroll:V}),[D,M,R,$,V]),_=i.useMemo(()=>({play:q,pause:O,stop:ne,seekTo:le,setPlaybackRate:ce,setContinuousPlay:He,setAnnotations:A,setActiveAnnotationId:he,setAutomaticScroll:H=>{Y(H)},setScrollContainer:je,scrollContainerRef:ee}),[q,O,ne,le,ce,He,he,je]),_e=i.useMemo(()=>({duration:w,peaksDataArray:k,sampleRate:we,waveHeight:n,timeScaleHeight:K,samplesPerPixel:P,playoutRef:j,controls:l,barWidth:u,barGap:d,progressBarWidth:C}),[w,k,we,n,K,P,l,u,d,C]),ue={...An,...o};return b.jsx(S.ThemeProvider,{theme:ue,children:b.jsx(aa.Provider,{value:$e,children:b.jsx(ra.Provider,{value:Ge,children:b.jsx(oa.Provider,{value:_,children:b.jsx(sa.Provider,{value:_e,children:f})})})})})},At=()=>{const e=i.useContext(aa);if(!e)throw new Error("useMediaElementAnimation must be used within MediaElementPlaylistProvider");return e},ia=()=>{const e=i.useContext(ra);if(!e)throw new Error("useMediaElementState must be used within MediaElementPlaylistProvider");return e},la=()=>{const e=i.useContext(oa);if(!e)throw new Error("useMediaElementControls must be used within MediaElementPlaylistProvider");return e},$t=()=>{const e=i.useContext(sa);if(!e)throw new Error("useMediaElementData must be used within MediaElementPlaylistProvider");return e},Ss=({className:e})=>{const{isPlaying:t,currentTimeRef:n}=Ae(),{selectionStart:a,selectionEnd:r,isLoopEnabled:s}=We(),{play:o}=me(),l=async()=>{if(a!==r&&r>a)if(s)await o(a);else{const u=r-a;await o(a,u)}else await o(n.current??0)};return b.jsx(Te,{onClick:l,disabled:t,className:e,children:"Play"})},As=({className:e})=>{const{isPlaying:t}=Ae(),{pause:n}=me();return b.jsx(Te,{onClick:n,disabled:!t,className:e,children:"Pause"})},$s=({className:e})=>{const{isPlaying:t}=Ae(),{stop:n}=me();return b.jsx(Te,{onClick:n,disabled:!t,className:e,children:"Stop"})},Ms=({className:e})=>{const{isPlaying:t}=Ae(),{play:n,setCurrentTime:a}=me(),{playoutRef:r}=ye(),s=()=>{a(0),t&&r.current&&(r.current.stop(),n(0))};return b.jsx(Te,{onClick:s,className:e,children:"Rewind"})},Rs=({className:e})=>{const{isPlaying:t}=Ae(),{play:n,setCurrentTime:a}=me(),{duration:r,playoutRef:s}=ye(),o=()=>{a(r),t&&s.current&&(s.current.stop(),n(r))};return b.jsx(Te,{onClick:o,className:e,children:"Fast Forward"})},Es=({skipAmount:e=5,className:t})=>{const{currentTimeRef:n,isPlaying:a}=Ae(),{play:r,setCurrentTime:s}=me(),{playoutRef:o}=ye(),l=()=>{const c=Math.max(0,(n.current??0)-e);s(c),a&&o.current&&(o.current.stop(),r(c))};return b.jsx(Te,{onClick:l,className:t,children:"Skip Backward"})},Ds=({skipAmount:e=5,className:t})=>{const{currentTimeRef:n,isPlaying:a}=Ae(),{play:r,setCurrentTime:s}=me(),{duration:o,playoutRef:l}=ye(),c=()=>{const u=Math.min(o,(n.current??0)+e);s(u),a&&l.current&&(l.current.stop(),r(u))};return b.jsx(Te,{onClick:c,className:t,children:"Skip Forward"})},Bs=({className:e})=>{const{isLoopEnabled:t,loopStart:n,loopEnd:a}=We(),{setLoopEnabled:r,setLoopRegion:s}=me(),{duration:o}=ye(),l=n!==a&&a>n,c=()=>{if(!t&&!l){const u=Math.min(10,o*.25);s(0,Math.max(1,u))}r(!t)};return b.jsx(Te,{onClick:c,className:e,title:t?"Disable loop":"Enable loop",children:t?"Loop On":"Loop Off"})},Ts=({className:e})=>{const{selectionStart:t,selectionEnd:n,loopStart:a,loopEnd:r}=We(),{setLoopRegionFromSelection:s,clearLoopRegion:o}=me(),l=t!==n&&n>t,c=a!==r&&r>a,u=()=>{c?o():s()};return b.jsx(Te,{onClick:u,disabled:!l&&!c,className:e,title:c?"Clear loop region":l?"Set loop region from selection":"Create a selection first",children:c?"Clear Loop":"Set Loop"})},Ws=({className:e,disabled:t})=>{const{zoomIn:n}=me(),{canZoomIn:a}=ye();return b.jsx(Te,{variant:"success",onClick:n,disabled:t||!a,className:e,children:"Zoom In"})},_s=({className:e,disabled:t})=>{const{zoomOut:n}=me(),{canZoomOut:a}=ye();return b.jsx(Te,{variant:"success",onClick:n,disabled:t||!a,className:e,children:"Zoom Out"})},Fs=({className:e})=>{const{masterVolume:t}=ye(),{setMasterVolume:n}=me();return b.jsx(ur,{volume:t,onChange:n,className:e})},Zs=({className:e})=>{const{timeFormat:t}=ye(),{setTimeFormat:n}=me();return b.jsx(Fr,{value:t,onChange:n,className:e})},Vs=S.span`
1194
1194
  font-family: 'Courier New', Monaco, monospace;
1195
1195
  font-size: 1rem;
1196
1196
  font-weight: 600;
1197
1197
  color: ${e=>e.theme?.textColor||"#333"};
1198
1198
  user-select: none;
1199
- `,Fs=({className:e})=>{const t=i.useRef(null),n=i.useRef(null),{isPlaying:a,currentTimeRef:r,playbackStartTimeRef:s,audioStartPositionRef:o}=$e(),{timeFormat:l}=ke(),c=l;return i.useEffect(()=>{const u=()=>{if(t.current){let d;if(a){const v=W.getContext().currentTime-(s.current??0);d=(o.current??0)+v}else d=r.current??0;t.current.textContent=tt(d,c)}a&&(n.current=requestAnimationFrame(u))};return a?n.current=requestAnimationFrame(u):u(),()=>{n.current&&(cancelAnimationFrame(n.current),n.current=null)}},[a,c,r,s,o]),i.useEffect(()=>{!a&&t.current&&(t.current.textContent=tt(r.current??0,c))}),b.jsx(_s,{ref:t,className:e,"aria-label":"Audio position",children:tt(r.current??0,c)})},Zs=({className:e})=>{const{selectionStart:t,selectionEnd:n}=Te(),{setSelection:a}=he();return b.jsx(vr,{selectionStart:t,selectionEnd:n,onSelectionChange:a,className:e})},Vs=({className:e})=>{const{isAutomaticScroll:t}=Te(),{setAutomaticScroll:n}=he();return b.jsx(Ha,{checked:t,onChange:n,className:e})},Ps=({className:e})=>{const{continuousPlay:t}=Te(),{setContinuousPlay:n}=he();return b.jsx(Mo,{checked:t,onChange:n,className:e})},zs=({className:e})=>{const{linkEndpoints:t}=Te(),{setLinkEndpoints:n}=he();return b.jsx(Ro,{checked:t,onChange:n,className:e})},js=({className:e})=>{const{annotationsEditable:t}=Te(),{setAnnotationsEditable:n}=he();return b.jsx(Eo,{checked:t,onChange:n,className:e})},Hs=({filename:e,className:t})=>{const{annotations:n}=Te();return b.jsx(Bo,{annotations:n,filename:e,className:t})},Xs=({label:e="Export WAV",filename:t="export",mode:n="master",trackIndex:a,bitDepth:r=16,applyEffects:s=!0,effectsFunction:o,createOfflineTrackEffects:l,className:c,onExportComplete:u,onExportError:d})=>{const{tracks:v,trackStates:p}=ke(),{exportWav:f,isExporting:C,progress:y}=On(),m=async()=>{try{const I=await f(v,p,{filename:t,mode:n,trackIndex:a,bitDepth:r,applyEffects:s,effectsFunction:o,createOfflineTrackEffects:l,autoDownload:!0});u?.(I.blob)}catch(I){d?.(I instanceof Error?I:new Error("Export failed"))}},g=C?`Exporting ${Math.round(y*100)}%`:e;return b.jsx(Be,{onClick:m,disabled:C||v.length===0,className:c,children:g})},Gs=S.div`
1199
+ `,Ps=({className:e})=>{const t=i.useRef(null),n=i.useRef(null),{isPlaying:a,currentTimeRef:r,playbackStartTimeRef:s,audioStartPositionRef:o}=Ae(),{timeFormat:l}=ye(),c=l;return i.useEffect(()=>{const u=()=>{if(t.current){let d;if(a){const v=W.getContext().currentTime-(s.current??0);d=(o.current??0)+v}else d=r.current??0;t.current.textContent=nt(d,c)}a&&(n.current=requestAnimationFrame(u))};return a?n.current=requestAnimationFrame(u):u(),()=>{n.current&&(cancelAnimationFrame(n.current),n.current=null)}},[a,c,r,s,o]),i.useEffect(()=>{!a&&t.current&&(t.current.textContent=nt(r.current??0,c))}),b.jsx(Vs,{ref:t,className:e,"aria-label":"Audio position",children:nt(r.current??0,c)})},zs=({className:e})=>{const{selectionStart:t,selectionEnd:n}=We(),{setSelection:a}=me();return b.jsx(wr,{selectionStart:t,selectionEnd:n,onSelectionChange:a,className:e})},js=({className:e})=>{const{isAutomaticScroll:t}=We(),{setAutomaticScroll:n}=me();return b.jsx(Na,{checked:t,onChange:n,className:e})},Hs=({className:e})=>{const{continuousPlay:t}=We(),{setContinuousPlay:n}=me();return b.jsx(Do,{checked:t,onChange:n,className:e})},Xs=({className:e})=>{const{linkEndpoints:t}=We(),{setLinkEndpoints:n}=me();return b.jsx(Bo,{checked:t,onChange:n,className:e})},Gs=({className:e})=>{const{annotationsEditable:t}=We(),{setAnnotationsEditable:n}=me();return b.jsx(To,{checked:t,onChange:n,className:e})},Ns=({filename:e,className:t})=>{const{annotations:n}=We();return b.jsx(_o,{annotations:n,filename:e,className:t})},Ls=({label:e="Export WAV",filename:t="export",mode:n="master",trackIndex:a,bitDepth:r=16,applyEffects:s=!0,effectsFunction:o,createOfflineTrackEffects:l,className:c,onExportComplete:u,onExportError:d})=>{const{tracks:v,trackStates:p}=ye(),{exportWav:f,isExporting:C,progress:y}=Jn(),m=async()=>{try{const I=await f(v,p,{filename:t,mode:n,trackIndex:a,bitDepth:r,applyEffects:s,effectsFunction:o,createOfflineTrackEffects:l,autoDownload:!0});u?.(I.blob)}catch(I){d?.(I instanceof Error?I:new Error("Export failed"))}},g=C?`Exporting ${Math.round(y*100)}%`:e;return b.jsx(Te,{onClick:m,disabled:C||v.length===0,className:c,children:g})},Ys=S.div`
1200
1200
  position: absolute;
1201
1201
  top: 0;
1202
1202
  left: 0;
@@ -1206,9 +1206,9 @@
1206
1206
  z-index: 100; /* Below sticky controls (z-index: 101) so playhead is hidden when scrolled behind controls */
1207
1207
  pointer-events: none;
1208
1208
  will-change: transform;
1209
- `,Ns=({color:e="#ff0000",controlsOffset:t=0})=>{const n=i.useRef(null),a=i.useRef(null),{isPlaying:r,currentTimeRef:s,playbackStartTimeRef:o,audioStartPositionRef:l}=$e(),{samplesPerPixel:c,sampleRate:u,progressBarWidth:d}=ke();return i.useEffect(()=>{const v=()=>{if(n.current){let p;if(r){const C=W.getContext().currentTime-(o.current??0);p=(l.current??0)+C}else p=s.current??0;const f=p*u/c+t;n.current.style.transform=`translate3d(${f}px, 0, 0)`}r&&(a.current=requestAnimationFrame(v))};return r?a.current=requestAnimationFrame(v):v(),()=>{a.current&&(cancelAnimationFrame(a.current),a.current=null)}},[r,u,c,t,s,o,l]),i.useEffect(()=>{if(!r&&n.current){const p=(s.current??0)*u/c+t;n.current.style.transform=`translate3d(${p}px, 0, 0)`}}),b.jsx(Gs,{ref:n,$color:e,$width:d,"data-playhead":!0})},Ls=S.div`
1209
+ `,Os=({color:e="#ff0000",controlsOffset:t=0})=>{const n=i.useRef(null),a=i.useRef(null),{isPlaying:r,currentTimeRef:s,playbackStartTimeRef:o,audioStartPositionRef:l}=Ae(),{samplesPerPixel:c,sampleRate:u,progressBarWidth:d}=ye();return i.useEffect(()=>{const v=()=>{if(n.current){let p;if(r){const C=W.getContext().currentTime-(o.current??0);p=(l.current??0)+C}else p=s.current??0;const f=p*u/c+t;n.current.style.transform=`translate3d(${f}px, 0, 0)`}r&&(a.current=requestAnimationFrame(v))};return r?a.current=requestAnimationFrame(v):v(),()=>{a.current&&(cancelAnimationFrame(a.current),a.current=null)}},[r,u,c,t,s,o,l]),i.useEffect(()=>{if(!r&&n.current){const p=(s.current??0)*u/c+t;n.current.style.transform=`translate3d(${p}px, 0, 0)`}}),b.jsx(Ys,{ref:n,$color:e,$width:d,"data-playhead":!0})},Ks=S.div`
1210
1210
  position: relative;
1211
- `,Ys=S.div`
1211
+ `,Us=S.div`
1212
1212
  position: absolute;
1213
1213
  top: ${e=>e.$top}px;
1214
1214
  left: 0;
@@ -1220,7 +1220,7 @@
1220
1220
  transform: translateZ(0);
1221
1221
  backface-visibility: hidden;
1222
1222
  will-change: transform;
1223
- `,Os=S.div`
1223
+ `,Js=S.div`
1224
1224
  position: absolute;
1225
1225
  top: ${e=>e.$top}px;
1226
1226
  left: 0;
@@ -1229,10 +1229,10 @@
1229
1229
  pointer-events: none;
1230
1230
  z-index: 1;
1231
1231
  will-change: width;
1232
- `,Ks=S.div`
1232
+ `,qs=S.div`
1233
1233
  position: relative;
1234
1234
  z-index: 2;
1235
- `,mn=({clipStartSample:e,clipDurationSamples:t,...n})=>{const a=i.useRef(null),r=i.useRef(null),s=it(),{waveHeight:o}=st(),{isPlaying:l,currentTimeRef:c,playbackStartTimeRef:u,audioStartPositionRef:d}=$e(),{samplesPerPixel:v,sampleRate:p}=ke(),f=s?.waveProgressColor||"rgba(0, 0, 0, 0.1)";i.useEffect(()=>{const g=()=>{if(a.current){let I;if(l){const k=W.getContext().currentTime-(u.current??0);I=(d.current??0)+k}else I=c.current??0;const x=I*p,h=e+t;let w=0;if(x<=e)w=0;else if(x>=h)w=n.length;else{const k=x-e;w=Math.floor(k/v)}a.current.style.width=`${w}px`}l&&(r.current=requestAnimationFrame(g))};return l?r.current=requestAnimationFrame(g):g(),()=>{r.current&&(cancelAnimationFrame(r.current),r.current=null)}},[l,p,v,e,t,n.length,c,u,d]),i.useEffect(()=>{if(!l&&a.current){const I=(c.current??0)*p,x=e+t;let h=0;if(I<=e)h=0;else if(I>=x)h=n.length;else{const w=I-e;h=Math.floor(w/v)}a.current.style.width=`${h}px`}});const C=s?.waveformDrawMode||"inverted";let y;C==="inverted"?y=n.isSelected&&s?s.selectedWaveFillColor:s?.waveFillColor||"white":y=n.isSelected&&s?s.selectedWaveOutlineColor:s?.waveOutlineColor||"grey";const m=qe(y);return b.jsxs(Ls,{children:[b.jsx(Ys,{$color:m,$height:o,$top:n.index*o,$width:n.length}),b.jsx(Os,{ref:a,$color:f,$height:o,$top:n.index*o}),b.jsx(Ks,{children:b.jsx(Bn,{...n,transparentBackground:!0})})]})},Us=60,Js=({renderTrackControls:e,renderTimestamp:t,renderPlayhead:n,annotationControls:a,annotationListConfig:r,annotationTextHeight:s,renderAnnotationItem:o,getAnnotationBoxLabel:l,scrollActivePosition:c="center",scrollActiveContainer:u="nearest",className:d,showClipHeaders:v=!1,interactiveClips:p=!1,showFades:f=!1,touchOptimized:C=!1,recordingState:y})=>{const m=it(),{isPlaying:g,currentTimeRef:I,playbackStartTimeRef:x,audioStartPositionRef:h}=$e(),{selectionStart:w,selectionEnd:k,annotations:A,activeAnnotationId:M,annotationsEditable:$,linkEndpoints:E,continuousPlay:R,selectedTrackId:T,loopStart:D,loopEnd:P,isLoopEnabled:V}=Te(),{setAnnotations:F,setActiveAnnotationId:N,setTrackMute:H,setTrackSolo:Z,setTrackVolume:U,setTrackPan:re,setSelection:ne,play:q,setScrollContainer:ae,setSelectedTrackId:be,setCurrentTime:pe,setLoopRegion:He}=he(),{audioBuffers:Ve,peaksDataArray:we,trackStates:Xe,tracks:L,duration:ce,samplesPerPixel:ee,sampleRate:J,waveHeight:ue,timeScaleHeight:ve,controls:te,playoutRef:_,barWidth:Ae,barGap:ge}=ke(),[de,Oe]=i.useState(!1),K=i.useRef(null),Q=i.useCallback(X=>{K.current=X,ae(X)},[ae]);let le=Ve.length>0?ce:Us;if(y?.isRecording){const O=(y.startSample+y.durationSamples)/J;le=Math.max(le,O+10)}const fe=Math.floor(le*J/ee),Ge=async X=>{console.log("Annotation clicked:",X.id),N(X.id);const O=R?void 0:X.end-X.start;await q(X.start,O)},Ne=i.useCallback(X=>{if(X>=0&&X<L.length){const O=L[X];be(O.id)}},[L,be]),Pe=X=>{const O=X.currentTarget.getBoundingClientRect(),se=te.show?te.width:0,Ie=(X.clientX-O.left-se)*ee/J,oe=X.clientY-O.top;let Se=0,ze=-1;for(let Le=0;Le<we.length;Le++){const Ye=we[Le],nt=(Ye.length>0?Math.max(...Ye.map(Ue=>Ue.peaks.data.length)):1)*ue+(v?22:0);if(oe>=Se&&oe<Se+nt){ze=Le;break}Se+=nt}ze!==-1&&Ne(ze),Oe(!0),pe(Ie),ne(Ie,Ie)},Ke=X=>{if(!de)return;const O=X.currentTarget.getBoundingClientRect(),se=te.show?te.width:0,Ie=(X.clientX-O.left-se)*ee/J,We=Math.min(w,Ie),oe=Math.max(w,Ie);ne(We,oe)},ct=X=>{if(!de)return;Oe(!1);const O=X.currentTarget.getBoundingClientRect(),se=te.show?te.width:0,Ie=(X.clientX-O.left-se)*ee/J,We=Math.min(w,Ie),oe=Math.max(w,Ie);Math.abs(oe-We)<.1?(pe(We),g&&_.current?(_.current.stop(),q(We)):_.current&&_.current.stop()):ne(We,oe)};return L.some(X=>X.clips.length>0)&&(Ve.length===0||we.length===0)?b.jsx("div",{className:d,children:"Loading waveform..."}):b.jsx(En,{children:b.jsxs(yt.Provider,{value:{samplesPerPixel:ee,sampleRate:J,zoomLevels:[ee],waveHeight:ue,timeScaleHeight:ve,duration:le,controls:te,barWidth:Ae,barGap:ge},children:[b.jsx(Pt,{theme:m,backgroundColor:qe(m.waveOutlineColor),timescaleBackgroundColor:m.timescaleBackgroundColor,scrollContainerWidth:fe+(te.show?te.width:0),timescaleWidth:fe,tracksWidth:fe,controlsWidth:te.show?te.width:0,onTracksMouseDown:Pe,onTracksMouseMove:Ke,onTracksMouseUp:ct,scrollContainerRef:Q,isSelecting:de,timescale:ve>0?b.jsxs(b.Fragment,{children:[b.jsx(Tn,{duration:le*1e3,marker:1e4,bigStep:5e3,secondStep:1e3,renderTimestamp:t}),V&&b.jsx(br,{startPosition:Math.min(D,P)*J/ee,endPosition:Math.max(D,P)*J/ee,markerColor:m.loopMarkerColor,regionColor:m.loopRegionColor,minPosition:0,maxPosition:fe,controlsOffset:te.show?te.width:0,onLoopRegionChange:(X,O)=>{const se=X*ee/J,ye=O*ee/J;He(se,ye)}})]}):void 0,children:b.jsxs(b.Fragment,{children:[we.map((X,O)=>{const se=L[O];if(!se)return null;const ye=Xe[O]||{name:`Track ${O+1}`,muted:!1,soloed:!1,volume:1,pan:0},Ie=e?e(O):b.jsxs(Vr,{onClick:()=>Ne(O),children:[b.jsx(Pr,{style:{justifyContent:"center"},children:ye.name||`Track ${O+1}`}),b.jsxs(Zr,{children:[b.jsx(nn,{$variant:ye.muted?"danger":"outline",onClick:()=>H(O,!ye.muted),children:"Mute"}),b.jsx(nn,{$variant:ye.soloed?"info":"outline",onClick:()=>Z(O,!ye.soloed),children:"Solo"})]}),b.jsxs(rn,{children:[b.jsx(zr,{}),b.jsx(an,{min:"0",max:"1",step:"0.01",value:ye.volume,onChange:oe=>U(O,parseFloat(oe.target.value))}),b.jsx(jr,{})]}),b.jsxs(rn,{children:[b.jsx("span",{children:"L"}),b.jsx(an,{min:"-1",max:"1",step:"0.01",value:ye.pan,onChange:oe=>re(O,parseFloat(oe.target.value))}),b.jsx("span",{children:"R"})]})]}),We=X.length>0?Math.max(...X.map(oe=>oe.peaks.data.length)):1;return b.jsx(zt.Provider,{value:Ie,children:b.jsxs(Wn,{numChannels:We,backgroundColor:qe(m.waveOutlineColor),offset:0,width:fe,hasClipHeaders:v,trackId:se.id,isSelected:se.id===T,children:[X.map((oe,Se)=>{const ze=oe.peaks,Le=ze.length;return b.jsx(Wt,{clipId:oe.clipId,trackIndex:O,clipIndex:Se,trackName:oe.trackName,startSample:oe.startSample,durationSamples:oe.durationSamples,samplesPerPixel:ee,showHeader:v,disableHeaderDrag:!p,isSelected:se.id===T,trackId:se.id,fadeIn:oe.fadeIn,fadeOut:oe.fadeOut,sampleRate:J,showFades:f,touchOptimized:C,onMouseDown:Ye=>{Ye.target.closest('[role="button"][aria-roledescription="draggable"]')||Ne(O)},children:ze.data.map((Ye,_e)=>b.jsx(mn,{index:_e,data:Ye,bits:ze.bits,length:Le,isSelected:se.id===T,clipStartSample:oe.startSample,clipDurationSamples:oe.durationSamples},`${O}-${Se}-${_e}`))},`${O}-${Se}`)}),y?.isRecording&&y.trackId===se.id&&y.peaks.length>0&&b.jsx(Wt,{clipId:"recording-preview",trackIndex:O,clipIndex:X.length,trackName:"Recording...",startSample:y.startSample,durationSamples:y.durationSamples,samplesPerPixel:ee,showHeader:v,disableHeaderDrag:!0,isSelected:se.id===T,trackId:se.id,children:b.jsx(mn,{index:0,data:y.peaks,bits:16,length:Math.floor(y.peaks.length/2),isSelected:se.id===T,clipStartSample:y.startSample,clipDurationSamples:y.durationSamples},`${O}-recording-0`)},`${O}-recording`)]})},se.id)}),A.length>0&&b.jsx(jn,{height:30,width:fe,children:A.map((X,O)=>{const se=X.start*J/ee,ye=X.end*J/ee,Ie=l?l(X,O):X.id;return b.jsx(zn,{annotationId:X.id,annotationIndex:O,startPosition:se,endPosition:ye,label:Ie,color:"#ff9800",isActive:X.id===M,onClick:()=>Ge(X),editable:$},X.id)})}),w!==k&&b.jsx($n,{startPosition:Math.min(w,k)*J/ee+(te.show?te.width:0),endPosition:Math.max(w,k)*J/ee+(te.show?te.width:0),color:m.selectionColor}),(g||w===k)&&(n?n({position:(I.current??0)*J/ee+(te.show?te.width:0),color:m.playheadColor,isPlaying:g,currentTimeRef:I,playbackStartTimeRef:x,audioStartPositionRef:h,samplesPerPixel:ee,sampleRate:J,controlsOffset:te.show?te.width:0,getAudioContextTime:()=>W.getContext().currentTime}):b.jsx(Ns,{color:m.playheadColor,controlsOffset:te.show?te.width:0}))]})}),A.length>0&&b.jsx(Hn,{annotations:A,activeAnnotationId:M??void 0,shouldScrollToActive:!0,scrollActivePosition:c,scrollActiveContainer:u,editable:$,controls:$?a:void 0,annotationListConfig:{linkEndpoints:E,continuousPlay:R},height:s,renderAnnotationItem:o,onAnnotationUpdate:X=>{F(X)}})]})})},qs=S.div`
1235
+ `,gn=({clipStartSample:e,clipDurationSamples:t,...n})=>{const a=i.useRef(null),r=i.useRef(null),s=ut(),{waveHeight:o}=ct(),{isPlaying:l,currentTimeRef:c,playbackStartTimeRef:u,audioStartPositionRef:d}=Ae(),{samplesPerPixel:v,sampleRate:p}=ye(),f=s?.waveProgressColor||"rgba(0, 0, 0, 0.1)";i.useEffect(()=>{const g=()=>{if(a.current){let I;if(l){const x=W.getContext().currentTime-(u.current??0);I=(d.current??0)+x}else I=c.current??0;const w=I*p,h=e+t;let k=0;if(w<=e)k=0;else if(w>=h)k=n.length;else{const x=w-e;k=Math.floor(x/v)}a.current.style.width=`${k}px`}l&&(r.current=requestAnimationFrame(g))};return l?r.current=requestAnimationFrame(g):g(),()=>{r.current&&(cancelAnimationFrame(r.current),r.current=null)}},[l,p,v,e,t,n.length,c,u,d]),i.useEffect(()=>{if(!l&&a.current){const I=(c.current??0)*p,w=e+t;let h=0;if(I<=e)h=0;else if(I>=w)h=n.length;else{const k=I-e;h=Math.floor(k/v)}a.current.style.width=`${h}px`}});const C=s?.waveformDrawMode||"inverted";let y;C==="inverted"?y=n.isSelected&&s?s.selectedWaveFillColor:s?.waveFillColor||"white":y=n.isSelected&&s?s.selectedWaveOutlineColor:s?.waveOutlineColor||"grey";const m=Ue(y);return b.jsxs(Ks,{children:[b.jsx(Us,{$color:m,$height:o,$top:n.index*o,$width:n.length}),b.jsx(Js,{ref:a,$color:f,$height:o,$top:n.index*o}),b.jsx(qs,{children:b.jsx(_n,{...n,transparentBackground:!0})})]})},Qs=60,ei=({renderTrackControls:e,renderTimestamp:t,renderPlayhead:n,annotationControls:a,annotationListConfig:r,annotationTextHeight:s,renderAnnotationItem:o,getAnnotationBoxLabel:l,scrollActivePosition:c="center",scrollActiveContainer:u="nearest",className:d,showClipHeaders:v=!1,interactiveClips:p=!1,showFades:f=!1,touchOptimized:C=!1,recordingState:y})=>{const m=ut(),{isPlaying:g,currentTimeRef:I,playbackStartTimeRef:w,audioStartPositionRef:h}=Ae(),{selectionStart:k,selectionEnd:x,annotations:$,activeAnnotationId:E,annotationsEditable:M,linkEndpoints:A,continuousPlay:R,selectedTrackId:T,loopStart:D,loopEnd:Z,isLoopEnabled:P}=We(),{setAnnotations:V,setActiveAnnotationId:Y,setTrackMute:j,setTrackSolo:F,setTrackVolume:U,setTrackPan:oe,setSelection:Q,play:ee,setScrollContainer:te,setSelectedTrackId:be,setCurrentTime:he,setLoopRegion:He}=me(),{audioBuffers:je,peaksDataArray:we,trackStates:Xe,tracks:Se,duration:q,samplesPerPixel:O,sampleRate:ne,waveHeight:le,timeScaleHeight:ce,controls:K,playoutRef:$e,barWidth:Ge,barGap:_,isReady:_e}=ye(),[ue,H]=i.useState(!1),ae=i.useRef(null),de=i.useCallback(G=>{ae.current=G,te(G)},[te]);let fe=je.length>0?q:Qs;if(y?.isRecording){const J=(y.startSample+y.durationSamples)/ne;fe=Math.max(fe,J+10)}const Ce=Math.floor(fe*ne/O),Pe=async G=>{console.log("Annotation clicked:",G.id),Y(G.id);const J=R?void 0:G.end-G.start;await ee(G.start,J)},Ne=i.useCallback(G=>{if(G>=0&&G<Se.length){const J=Se[G];be(J.id)}},[Se,be]),qe=G=>{const J=G.currentTarget.getBoundingClientRect(),re=K.show?K.width:0,ke=(G.clientX-J.left-re)*O/ne,se=G.clientY-J.top;let Me=0,Ie=-1;for(let Le=0;Le<we.length;Le++){const Ye=we[Le],ze=(Ye.length>0?Math.max(...Ye.map(Rt=>Rt.peaks.data.length)):1)*le+(v?22:0);if(se>=Me&&se<Me+ze){Ie=Le;break}Me+=ze}Ie!==-1&&Ne(Ie),H(!0),he(ke),Q(ke,ke)},Oe=G=>{if(!ue)return;const J=G.currentTarget.getBoundingClientRect(),re=K.show?K.width:0,ke=(G.clientX-J.left-re)*O/ne,Fe=Math.min(k,ke),se=Math.max(k,ke);Q(Fe,se)},at=G=>{if(!ue)return;H(!1);const J=G.currentTarget.getBoundingClientRect(),re=K.show?K.width:0,ke=(G.clientX-J.left-re)*O/ne,Fe=Math.min(k,ke),se=Math.max(k,ke);Math.abs(se-Fe)<.1?(he(Fe),g&&$e.current?($e.current.stop(),ee(Fe)):$e.current&&$e.current.stop()):Q(Fe,se)};return Se.some(G=>G.clips.length>0)&&(je.length===0||we.length===0)?b.jsx("div",{className:d,children:"Loading waveform..."}):b.jsx(Tn,{children:b.jsxs(It.Provider,{value:{samplesPerPixel:O,sampleRate:ne,zoomLevels:[O],waveHeight:le,timeScaleHeight:ce,duration:fe,controls:K,barWidth:Ge,barGap:_},children:[b.jsx(Ht,{theme:m,backgroundColor:Ue(m.waveOutlineColor),timescaleBackgroundColor:m.timescaleBackgroundColor,scrollContainerWidth:Ce+(K.show?K.width:0),timescaleWidth:Ce,tracksWidth:Ce,controlsWidth:K.show?K.width:0,onTracksMouseDown:qe,onTracksMouseMove:Oe,onTracksMouseUp:at,scrollContainerRef:de,isSelecting:ue,"data-playlist-state":_e?"ready":"loading",timescale:ce>0?b.jsxs(b.Fragment,{children:[b.jsx(Fn,{duration:fe*1e3,marker:1e4,bigStep:5e3,secondStep:1e3,renderTimestamp:t}),P&&b.jsx(xr,{startPosition:Math.min(D,Z)*ne/O,endPosition:Math.max(D,Z)*ne/O,markerColor:m.loopMarkerColor,regionColor:m.loopRegionColor,minPosition:0,maxPosition:Ce,controlsOffset:K.show?K.width:0,onLoopRegionChange:(G,J)=>{const re=G*O/ne,pe=J*O/ne;He(re,pe)}})]}):void 0,children:b.jsxs(b.Fragment,{children:[we.map((G,J)=>{const re=Se[J];if(!re)return null;const pe=Xe[J]||{name:`Track ${J+1}`,muted:!1,soloed:!1,volume:1,pan:0},ke=e?e(J):b.jsxs(jr,{onClick:()=>Ne(J),children:[b.jsx(Hr,{style:{justifyContent:"center"},children:pe.name||`Track ${J+1}`}),b.jsxs(zr,{children:[b.jsx(on,{$variant:pe.muted?"danger":"outline",onClick:()=>j(J,!pe.muted),children:"Mute"}),b.jsx(on,{$variant:pe.soloed?"info":"outline",onClick:()=>F(J,!pe.soloed),children:"Solo"})]}),b.jsxs(ln,{children:[b.jsx(Xr,{}),b.jsx(sn,{min:"0",max:"1",step:"0.01",value:pe.volume,onChange:se=>U(J,parseFloat(se.target.value))}),b.jsx(Gr,{})]}),b.jsxs(ln,{children:[b.jsx("span",{children:"L"}),b.jsx(sn,{min:"-1",max:"1",step:"0.01",value:pe.pan,onChange:se=>oe(J,parseFloat(se.target.value))}),b.jsx("span",{children:"R"})]})]}),Fe=G.length>0?Math.max(...G.map(se=>se.peaks.data.length)):1;return b.jsx(Xt.Provider,{value:ke,children:b.jsxs(Zn,{numChannels:Fe,backgroundColor:Ue(m.waveOutlineColor),offset:0,width:Ce,hasClipHeaders:v,trackId:re.id,isSelected:re.id===T,children:[G.map((se,Me)=>{const Ie=se.peaks,Le=Ie.length;return b.jsx(Zt,{clipId:se.clipId,trackIndex:J,clipIndex:Me,trackName:se.trackName,startSample:se.startSample,durationSamples:se.durationSamples,samplesPerPixel:O,showHeader:v,disableHeaderDrag:!p,isSelected:re.id===T,trackId:re.id,fadeIn:se.fadeIn,fadeOut:se.fadeOut,sampleRate:ne,showFades:f,touchOptimized:C,onMouseDown:Ye=>{Ye.target.closest('[role="button"][aria-roledescription="draggable"]')||Ne(J)},children:Ie.data.map((Ye,Qe)=>b.jsx(gn,{index:Qe,data:Ye,bits:Ie.bits,length:Le,isSelected:re.id===T,clipStartSample:se.startSample,clipDurationSamples:se.durationSamples},`${J}-${Me}-${Qe}`))},`${J}-${Me}`)}),y?.isRecording&&y.trackId===re.id&&y.peaks.length>0&&b.jsx(Zt,{clipId:"recording-preview",trackIndex:J,clipIndex:G.length,trackName:"Recording...",startSample:y.startSample,durationSamples:y.durationSamples,samplesPerPixel:O,showHeader:v,disableHeaderDrag:!0,isSelected:re.id===T,trackId:re.id,children:b.jsx(gn,{index:0,data:y.peaks,bits:16,length:Math.floor(y.peaks.length/2),isSelected:re.id===T,clipStartSample:y.startSample,clipDurationSamples:y.durationSamples},`${J}-recording-0`)},`${J}-recording`)]})},re.id)}),$.length>0&&b.jsx(Gn,{height:30,width:Ce,children:$.map((G,J)=>{const re=G.start*ne/O,pe=G.end*ne/O,ke=l?l(G,J):G.id;return b.jsx(Xn,{annotationId:G.id,annotationIndex:J,startPosition:re,endPosition:pe,label:ke,color:"#ff9800",isActive:G.id===E,onClick:()=>Pe(G),editable:M},G.id)})}),k!==x&&b.jsx(En,{startPosition:Math.min(k,x)*ne/O+(K.show?K.width:0),endPosition:Math.max(k,x)*ne/O+(K.show?K.width:0),color:m.selectionColor}),(g||k===x)&&(n?n({position:(I.current??0)*ne/O+(K.show?K.width:0),color:m.playheadColor,isPlaying:g,currentTimeRef:I,playbackStartTimeRef:w,audioStartPositionRef:h,samplesPerPixel:O,sampleRate:ne,controlsOffset:K.show?K.width:0,getAudioContextTime:()=>W.getContext().currentTime}):b.jsx(Os,{color:m.playheadColor,controlsOffset:K.show?K.width:0}))]})}),$.length>0&&b.jsx(Nn,{annotations:$,activeAnnotationId:E??void 0,shouldScrollToActive:!0,scrollActivePosition:c,scrollActiveContainer:u,editable:M,controls:M?a:void 0,annotationListConfig:{linkEndpoints:A,continuousPlay:R},height:s,renderAnnotationItem:o,onAnnotationUpdate:G=>{V(G)}})]})})},ti=S.div`
1236
1236
  position: absolute;
1237
1237
  top: 0;
1238
1238
  left: 0;
@@ -1242,9 +1242,9 @@
1242
1242
  z-index: 100;
1243
1243
  pointer-events: none;
1244
1244
  will-change: transform;
1245
- `,Qs=({color:e="#ff0000",controlsOffset:t=0})=>{const n=i.useRef(null),a=i.useRef(null),{isPlaying:r,currentTimeRef:s}=It(),{samplesPerPixel:o,sampleRate:l,progressBarWidth:c}=St();return i.useEffect(()=>{const u=()=>{if(n.current){const v=(s.current??0)*l/o+t;n.current.style.transform=`translate3d(${v}px, 0, 0)`}r&&(a.current=requestAnimationFrame(u))};return r?a.current=requestAnimationFrame(u):u(),()=>{a.current&&(cancelAnimationFrame(a.current),a.current=null)}},[r,l,o,t,s]),i.useEffect(()=>{if(!r&&n.current){const d=(s.current??0)*l/o+t;n.current.style.transform=`translate3d(${d}px, 0, 0)`}}),b.jsx(qs,{ref:n,$color:e,$width:c,"data-playhead":!0})},ei=S.div`
1245
+ `,ni=({color:e="#ff0000",controlsOffset:t=0})=>{const n=i.useRef(null),a=i.useRef(null),{isPlaying:r,currentTimeRef:s}=At(),{samplesPerPixel:o,sampleRate:l,progressBarWidth:c}=$t();return i.useEffect(()=>{const u=()=>{if(n.current){const v=(s.current??0)*l/o+t;n.current.style.transform=`translate3d(${v}px, 0, 0)`}r&&(a.current=requestAnimationFrame(u))};return r?a.current=requestAnimationFrame(u):u(),()=>{a.current&&(cancelAnimationFrame(a.current),a.current=null)}},[r,l,o,t,s]),i.useEffect(()=>{if(!r&&n.current){const d=(s.current??0)*l/o+t;n.current.style.transform=`translate3d(${d}px, 0, 0)`}}),b.jsx(ti,{ref:n,$color:e,$width:c,"data-playhead":!0})},ai=S.div`
1246
1246
  position: relative;
1247
- `,ti=S.div`
1247
+ `,ri=S.div`
1248
1248
  position: absolute;
1249
1249
  top: ${e=>e.$top}px;
1250
1250
  left: 0;
@@ -1255,7 +1255,7 @@
1255
1255
  transform: translateZ(0);
1256
1256
  backface-visibility: hidden;
1257
1257
  will-change: transform;
1258
- `,ni=S.div`
1258
+ `,oi=S.div`
1259
1259
  position: absolute;
1260
1260
  top: ${e=>e.$top}px;
1261
1261
  left: 0;
@@ -1264,8 +1264,8 @@
1264
1264
  pointer-events: none;
1265
1265
  z-index: 1;
1266
1266
  will-change: width;
1267
- `,ai=S.div`
1267
+ `,si=S.div`
1268
1268
  position: relative;
1269
1269
  z-index: 2;
1270
- `,ri=({clipStartSample:e,clipDurationSamples:t,...n})=>{const a=i.useRef(null),r=i.useRef(null),s=it(),{waveHeight:o}=st(),{isPlaying:l,currentTimeRef:c}=It(),{samplesPerPixel:u,sampleRate:d}=St(),v=s?.waveProgressColor||"rgba(0, 0, 0, 0.1)";i.useEffect(()=>{const y=()=>{if(a.current){const g=(c.current??0)*d,I=e+t;let x=0;if(g<=e)x=0;else if(g>=I)x=n.length;else{const h=g-e;x=Math.floor(h/u)}a.current.style.width=`${x}px`}l&&(r.current=requestAnimationFrame(y))};return l?r.current=requestAnimationFrame(y):y(),()=>{r.current&&(cancelAnimationFrame(r.current),r.current=null)}},[l,d,u,e,t,n.length,c]),i.useEffect(()=>{if(!l&&a.current){const m=(c.current??0)*d,g=e+t;let I=0;if(m<=e)I=0;else if(m>=g)I=n.length;else{const x=m-e;I=Math.floor(x/u)}a.current.style.width=`${I}px`}});const p=s?.waveformDrawMode||"inverted";let f;p==="inverted"?f=s?.selectedWaveFillColor||s?.waveFillColor||"white":f=s?.selectedWaveOutlineColor||s?.waveOutlineColor||"grey";const C=qe(f);return b.jsxs(ei,{children:[b.jsx(ti,{$color:C,$height:o,$top:n.index*o,$width:n.length}),b.jsx(ni,{ref:a,$color:v,$height:o,$top:n.index*o}),b.jsx(ai,{children:b.jsx(Bn,{...n,isSelected:!0,transparentBackground:!0})})]})},oi=({annotationTextHeight:e,getAnnotationBoxLabel:t,renderAnnotationItem:n,editable:a=!1,onAnnotationUpdate:r,scrollActivePosition:s="center",scrollActiveContainer:o="nearest",className:l})=>{const c=it(),{isPlaying:u,currentTimeRef:d}=It(),{annotations:v,activeAnnotationId:p,continuousPlay:f}=ra(),{play:C,seekTo:y,setActiveAnnotationId:m,setAnnotations:g,setScrollContainer:I}=oa(),{duration:x,peaksDataArray:h,sampleRate:w,waveHeight:k,timeScaleHeight:A,samplesPerPixel:M,controls:$,playoutRef:E,barWidth:R,barGap:T}=St(),[D,P]=i.useState(0),[V,F]=i.useState(0),[N,H]=i.useState(!1),Z=i.useRef(null),U=i.useCallback(L=>{Z.current=L,I(L)},[I]),re=Math.floor(x*w/M),ne=i.useCallback(async L=>{m(L.id),C(L.start)},[m,C]),q=i.useCallback(L=>{g(L),r?.(L)},[g,r]),{onDragStart:ae,onDragMove:be,onDragEnd:pe}=Yn({annotations:v,onAnnotationsChange:q,samplesPerPixel:M,sampleRate:w,duration:x,linkEndpoints:!0}),He=i.useCallback(L=>{const ce=L.currentTarget.getBoundingClientRect(),ee=$.show?$.width:0,ue=(L.clientX-ce.left-ee)*M/w;H(!0),P(ue),F(ue)},[$,M,w]),Ve=i.useCallback(L=>{if(!N)return;const ce=L.currentTarget.getBoundingClientRect(),ee=$.show?$.width:0,ue=(L.clientX-ce.left-ee)*M/w;F(ue)},[N,$,M,w]),we=i.useCallback(L=>{if(!N)return;H(!1);const ce=L.currentTarget.getBoundingClientRect(),ee=$.show?$.width:0,ue=(L.clientX-ce.left-ee)*M/w,ve=Math.min(D,ue),te=Math.max(D,ue);Math.abs(te-ve)<.1?(y(ve),P(ve),F(ve),u&&E.current&&(E.current.stop(),C(ve))):(P(ve),F(te))},[N,D,M,w,$,y,u,E,C]);if(h.length===0)return b.jsx("div",{className:l,children:"Loading waveform..."});const Xe=null;return b.jsx(En,{children:b.jsxs(yt.Provider,{value:{samplesPerPixel:M,sampleRate:w,zoomLevels:[M],waveHeight:k,timeScaleHeight:A,duration:x,controls:$,barWidth:R,barGap:T},children:[b.jsx(Pt,{theme:c,backgroundColor:qe(c.waveOutlineColor),timescaleBackgroundColor:c.timescaleBackgroundColor,scrollContainerWidth:re+($.show?$.width:0),timescaleWidth:re,tracksWidth:re,controlsWidth:$.show?$.width:0,onTracksMouseDown:He,onTracksMouseMove:Ve,onTracksMouseUp:we,scrollContainerRef:U,isSelecting:N,timescale:A>0?b.jsx(Tn,{duration:x*1e3,marker:1e4,bigStep:5e3,secondStep:1e3}):void 0,children:b.jsxs(b.Fragment,{children:[h.map((L,ce)=>{const ee=L.length>0?Math.max(...L.map(J=>J.peaks.data.length)):1;return b.jsx(zt.Provider,{value:Xe,children:b.jsx(Wn,{numChannels:ee,backgroundColor:qe(c.waveOutlineColor),offset:0,width:re,hasClipHeaders:!1,trackId:`media-element-track-${ce}`,isSelected:!0,children:L.map((J,ue)=>{const ve=J.peaks,te=ve.length;return b.jsx(Wt,{clipId:J.clipId,trackIndex:ce,clipIndex:ue,trackName:J.trackName,startSample:J.startSample,durationSamples:J.durationSamples,samplesPerPixel:M,showHeader:!1,disableHeaderDrag:!0,isSelected:!0,trackId:`media-element-track-${ce}`,children:ve.data.map((_,Ae)=>b.jsx(ri,{index:Ae,data:_,bits:ve.bits,length:te,clipStartSample:J.startSample,clipDurationSamples:J.durationSamples},`${ce}-${ue}-${Ae}`))},`${ce}-${ue}`)})})},ce)}),v.length>0&&b.jsx(Ee.DndContext,{onDragStart:ae,onDragMove:be,onDragEnd:pe,modifiers:a?[Da.restrictToHorizontalAxis]:[],children:b.jsx(jn,{height:30,width:re,children:v.map((L,ce)=>{const ee=L.start*w/M,J=L.end*w/M,ue=t?t(L,ce):L.id;return b.jsx(zn,{annotationId:L.id,annotationIndex:ce,startPosition:ee,endPosition:J,label:ue,color:"#ff9800",isActive:L.id===p,onClick:()=>ne(L),editable:a},L.id)})})}),D!==V&&b.jsx($n,{startPosition:Math.min(D,V)*w/M+($.show?$.width:0),endPosition:Math.max(D,V)*w/M+($.show?$.width:0),color:c.selectionColor}),b.jsx(Qs,{color:c.playheadColor,controlsOffset:$.show?$.width:0})]})}),v.length>0&&b.jsx(Hn,{annotations:v,activeAnnotationId:p??void 0,shouldScrollToActive:!0,scrollActivePosition:s,scrollActiveContainer:o,editable:a,annotationListConfig:{linkEndpoints:!0,continuousPlay:f},height:e,onAnnotationUpdate:q,renderAnnotationItem:n})]})})};exports.Tone=pn;exports.AudioPosition=Fs;exports.AutomaticScrollCheckbox=Vs;exports.ContinuousPlayCheckbox=Ps;exports.DownloadAnnotationsButton=Hs;exports.EditableCheckbox=js;exports.ExportWavButton=Xs;exports.FastForwardButton=As;exports.LinkEndpointsCheckbox=zs;exports.LoopButton=Rs;exports.MasterVolumeControl=Ts;exports.MediaElementPlaylistProvider=ws;exports.MediaElementWaveform=oi;exports.PauseButton=ks;exports.PlayButton=ys;exports.RewindButton=Ss;exports.SelectionTimeInputs=Zs;exports.SetLoopRegionButton=Es;exports.SkipBackwardButton=$s;exports.SkipForwardButton=Ms;exports.StopButton=Is;exports.TimeFormatSelect=Ws;exports.Waveform=Js;exports.WaveformPlaylistProvider=bs;exports.ZoomInButton=Ds;exports.ZoomOutButton=Bs;exports.createEffectChain=cs;exports.createEffectInstance=ot;exports.effectCategories=os;exports.effectDefinitions=lt;exports.getEffectDefinition=Ht;exports.getEffectsByCategory=rs;exports.getShortcutLabel=Ho;exports.getWaveformDataMetadata=co;exports.loadPeaksFromWaveformData=lo;exports.loadWaveformData=jt;exports.useAnnotationDragHandlers=Yn;exports.useAnnotationKeyboardControls=Go;exports.useAudioTracks=Zo;exports.useClipDragHandlers=Vo;exports.useClipSplitting=jo;exports.useDragSensors=zo;exports.useDynamicEffects=us;exports.useExportWav=On;exports.useIntegratedRecording=as;exports.useKeyboardShortcuts=vt;exports.useMasterAnalyser=Wo;exports.useMasterVolume=Nn;exports.useMediaElementAnimation=It;exports.useMediaElementControls=oa;exports.useMediaElementData=St;exports.useMediaElementState=ra;exports.usePlaybackAnimation=$e;exports.usePlaybackShortcuts=Xo;exports.usePlaylistControls=he;exports.usePlaylistData=ke;exports.usePlaylistState=Te;exports.useTimeFormat=Xn;exports.useTrackDynamicEffects=ds;exports.useWaveformPlaylist=vs;exports.useZoomControls=Gn;exports.waveformDataToPeaks=Zn;
1270
+ `,ii=({clipStartSample:e,clipDurationSamples:t,...n})=>{const a=i.useRef(null),r=i.useRef(null),s=ut(),{waveHeight:o}=ct(),{isPlaying:l,currentTimeRef:c}=At(),{samplesPerPixel:u,sampleRate:d}=$t(),v=s?.waveProgressColor||"rgba(0, 0, 0, 0.1)";i.useEffect(()=>{const y=()=>{if(a.current){const g=(c.current??0)*d,I=e+t;let w=0;if(g<=e)w=0;else if(g>=I)w=n.length;else{const h=g-e;w=Math.floor(h/u)}a.current.style.width=`${w}px`}l&&(r.current=requestAnimationFrame(y))};return l?r.current=requestAnimationFrame(y):y(),()=>{r.current&&(cancelAnimationFrame(r.current),r.current=null)}},[l,d,u,e,t,n.length,c]),i.useEffect(()=>{if(!l&&a.current){const m=(c.current??0)*d,g=e+t;let I=0;if(m<=e)I=0;else if(m>=g)I=n.length;else{const w=m-e;I=Math.floor(w/u)}a.current.style.width=`${I}px`}});const p=s?.waveformDrawMode||"inverted";let f;p==="inverted"?f=s?.selectedWaveFillColor||s?.waveFillColor||"white":f=s?.selectedWaveOutlineColor||s?.waveOutlineColor||"grey";const C=Ue(f);return b.jsxs(ai,{children:[b.jsx(ri,{$color:C,$height:o,$top:n.index*o,$width:n.length}),b.jsx(oi,{ref:a,$color:v,$height:o,$top:n.index*o}),b.jsx(si,{children:b.jsx(_n,{...n,isSelected:!0,transparentBackground:!0})})]})},li=({annotationTextHeight:e,getAnnotationBoxLabel:t,renderAnnotationItem:n,editable:a=!1,linkEndpoints:r=!1,onAnnotationUpdate:s,scrollActivePosition:o="center",scrollActiveContainer:l="nearest",className:c})=>{const u=ut(),{isPlaying:d,currentTimeRef:v}=At(),{annotations:p,activeAnnotationId:f,continuousPlay:C}=ia(),{play:y,seekTo:m,setActiveAnnotationId:g,setAnnotations:I,setScrollContainer:w}=la(),{duration:h,peaksDataArray:k,sampleRate:x,waveHeight:$,timeScaleHeight:E,samplesPerPixel:M,controls:A,playoutRef:R,barWidth:T,barGap:D}=$t(),[Z,P]=i.useState(0),[V,Y]=i.useState(0),[j,F]=i.useState(!1),U=i.useRef(null),oe=i.useCallback(q=>{U.current=q,w(q)},[w]),Q=Math.floor(h*x/M),ee=i.useCallback(async q=>{g(q.id),y(q.start)},[g,y]),te=i.useCallback(q=>{I(q),s?.(q)},[I,s]),{onDragStart:be,onDragMove:he,onDragEnd:He}=Un({annotations:p,onAnnotationsChange:te,samplesPerPixel:M,sampleRate:x,duration:h,linkEndpoints:r}),je=i.useCallback(q=>{const O=q.currentTarget.getBoundingClientRect(),ne=A.show?A.width:0,ce=(q.clientX-O.left-ne)*M/x;F(!0),P(ce),Y(ce)},[A,M,x]),we=i.useCallback(q=>{if(!j)return;const O=q.currentTarget.getBoundingClientRect(),ne=A.show?A.width:0,ce=(q.clientX-O.left-ne)*M/x;Y(ce)},[j,A,M,x]),Xe=i.useCallback(q=>{if(!j)return;F(!1);const O=q.currentTarget.getBoundingClientRect(),ne=A.show?A.width:0,ce=(q.clientX-O.left-ne)*M/x,K=Math.min(Z,ce),$e=Math.max(Z,ce);Math.abs($e-K)<.1?(m(K),P(K),Y(K),d&&R.current&&(R.current.stop(),y(K))):(P(K),Y($e))},[j,Z,M,x,A,m,d,R,y]);if(k.length===0)return b.jsx("div",{className:c,children:"Loading waveform..."});const Se=null;return b.jsx(Tn,{children:b.jsxs(It.Provider,{value:{samplesPerPixel:M,sampleRate:x,zoomLevels:[M],waveHeight:$,timeScaleHeight:E,duration:h,controls:A,barWidth:T,barGap:D},children:[b.jsx(Ht,{theme:u,backgroundColor:Ue(u.waveOutlineColor),timescaleBackgroundColor:u.timescaleBackgroundColor,scrollContainerWidth:Q+(A.show?A.width:0),timescaleWidth:Q,tracksWidth:Q,controlsWidth:A.show?A.width:0,onTracksMouseDown:je,onTracksMouseMove:we,onTracksMouseUp:Xe,scrollContainerRef:oe,isSelecting:j,timescale:E>0?b.jsx(Fn,{duration:h*1e3,marker:1e4,bigStep:5e3,secondStep:1e3}):void 0,children:b.jsxs(b.Fragment,{children:[k.map((q,O)=>{const ne=q.length>0?Math.max(...q.map(le=>le.peaks.data.length)):1;return b.jsx(Xt.Provider,{value:Se,children:b.jsx(Zn,{numChannels:ne,backgroundColor:Ue(u.waveOutlineColor),offset:0,width:Q,hasClipHeaders:!1,trackId:`media-element-track-${O}`,isSelected:!0,children:q.map((le,ce)=>{const K=le.peaks,$e=K.length;return b.jsx(Zt,{clipId:le.clipId,trackIndex:O,clipIndex:ce,trackName:le.trackName,startSample:le.startSample,durationSamples:le.durationSamples,samplesPerPixel:M,showHeader:!1,disableHeaderDrag:!0,isSelected:!0,trackId:`media-element-track-${O}`,children:K.data.map((Ge,_)=>b.jsx(ii,{index:_,data:Ge,bits:K.bits,length:$e,clipStartSample:le.startSample,clipDurationSamples:le.durationSamples},`${O}-${ce}-${_}`))},`${O}-${ce}`)})})},O)}),p.length>0&&b.jsx(De.DndContext,{onDragStart:be,onDragMove:he,onDragEnd:He,modifiers:a?[Wa.restrictToHorizontalAxis]:[],children:b.jsx(Gn,{height:30,width:Q,children:p.map((q,O)=>{const ne=q.start*x/M,le=q.end*x/M,ce=t?t(q,O):q.id;return b.jsx(Xn,{annotationId:q.id,annotationIndex:O,startPosition:ne,endPosition:le,label:ce,color:"#ff9800",isActive:q.id===f,onClick:()=>ee(q),editable:a},q.id)})})}),Z!==V&&b.jsx(En,{startPosition:Math.min(Z,V)*x/M+(A.show?A.width:0),endPosition:Math.max(Z,V)*x/M+(A.show?A.width:0),color:u.selectionColor}),b.jsx(ni,{color:u.playheadColor,controlsOffset:A.show?A.width:0})]})}),p.length>0&&b.jsx(Nn,{annotations:p,activeAnnotationId:f??void 0,shouldScrollToActive:!0,scrollActivePosition:o,scrollActiveContainer:l,editable:a,annotationListConfig:{linkEndpoints:r,continuousPlay:C},height:e,onAnnotationUpdate:te,renderAnnotationItem:n})]})})};exports.Tone=vn;exports.AudioPosition=Ps;exports.AutomaticScrollCheckbox=js;exports.ContinuousPlayCheckbox=Hs;exports.DownloadAnnotationsButton=Ns;exports.EditableCheckbox=Gs;exports.ExportWavButton=Ls;exports.FastForwardButton=Rs;exports.LinkEndpointsCheckbox=Xs;exports.LoopButton=Bs;exports.MasterVolumeControl=Fs;exports.MediaElementPlaylistProvider=Is;exports.MediaElementWaveform=li;exports.PauseButton=As;exports.PlayButton=Ss;exports.RewindButton=Ms;exports.SelectionTimeInputs=zs;exports.SetLoopRegionButton=Ts;exports.SkipBackwardButton=Es;exports.SkipForwardButton=Ds;exports.StopButton=$s;exports.TimeFormatSelect=Zs;exports.Waveform=ei;exports.WaveformPlaylistProvider=xs;exports.ZoomInButton=Ws;exports.ZoomOutButton=_s;exports.createEffectChain=fs;exports.createEffectInstance=lt;exports.effectCategories=ls;exports.effectDefinitions=dt;exports.getEffectDefinition=Nt;exports.getEffectsByCategory=is;exports.getShortcutLabel=No;exports.getWaveformDataMetadata=mo;exports.loadPeaksFromWaveformData=fo;exports.loadWaveformData=Gt;exports.useAnnotationDragHandlers=Un;exports.useAnnotationKeyboardControls=Yo;exports.useAudioTracks=zo;exports.useClipDragHandlers=jo;exports.useClipSplitting=Go;exports.useDragSensors=Xo;exports.useDynamicEffects=ms;exports.useExportWav=Jn;exports.useIntegratedRecording=ss;exports.useKeyboardShortcuts=xt;exports.useMasterAnalyser=Zo;exports.useMasterVolume=On;exports.useMediaElementAnimation=At;exports.useMediaElementControls=la;exports.useMediaElementData=$t;exports.useMediaElementState=ia;exports.usePlaybackAnimation=Ae;exports.usePlaybackShortcuts=Lo;exports.usePlaylistControls=me;exports.usePlaylistData=ye;exports.usePlaylistState=We;exports.useTimeFormat=Ln;exports.useTrackDynamicEffects=hs;exports.useWaveformPlaylist=ws;exports.useZoomControls=Yn;exports.waveformDataToPeaks=zn;
1271
1271
  //# sourceMappingURL=index.js.map