@web-noise/core 0.0.8 → 0.0.10-fix

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/module.js CHANGED
@@ -1,10 +1,10 @@
1
- let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{withTheme as i,ThemeProvider as l,Global as a,css as s,useTheme as d}from"@emotion/react";import c from"@emotion/styled";import{nanoid as p}from"nanoid";import{useState as h,useEffect as u,useMemo as g,useCallback as f,useRef as m}from"react";import{FaPlus as v}from"react-icons/fa6";import{MdClose as y,MdDragHandle as x,MdSettings as b,MdInfoOutline as w}from"react-icons/md";import"reactflow/dist/style.css";import C,{getConnectedEdges as $,addEdge as k,applyNodeChanges as N,applyEdgeChanges as P,useOnViewportChange as z,Background as A,BackgroundVariant as j,MiniMap as E,Controls as M,ReactFlowProvider as F,useReactFlow as S,Position as T,Handle as D,ControlButton as H,getBezierPath as O}from"reactflow";import{create as _}from"zustand";import{reverse as I,patch as W,create as L}from"jsondiffpatch";import{injectGlobal as R}from"@emotion/css";import{useContextMenu as B,Item as V,Menu as G,Separator as U}from"react-contexify";import"react-contexify/dist/ReactContexify.css";import J from"js-file-download";import X from"hotkeys-js";import{createPortal as Y}from"react-dom";import{FileDrop as q}from"react-file-drop";import{FaFileUpload as K,FaQuestion as Q,FaVolumeOff as Z,FaMap as ee,FaRegMap as eo}from"react-icons/fa";import{Resizable as et}from"re-resizable";import er from"react-grid-layout";import"react-grid-layout/css/styles.css";import{AiFillLock as en,AiFillUnlock as ei}from"react-icons/ai";import{RxDashboard as el}from"react-icons/rx";import ea from"react-modern-drawer";import"react-modern-drawer/dist/index.css";import{marked as es}from"marked";function ed(e){return e&&e.__esModule?e.default:e}let ec=[],ep={};let eh=new URL(ed("data:application/javascript,class%20e%20extends%20AudioWorkletProcessor%7Bprocess%28%29%7Breturn%210%7D%7DregisterProcessor%28%22dump-node-processor%22%2Ce%29%3Bexport%7Be%20as%20DumpNodeProcessor%7D%3B"),"file:///packages/patch/src/createPatch.ts"),eu="web-noise-drag-handle",eg=`.${eu}`,ef=10;(eb=ew||(ew={})).Gate="gate",eb.Number="number",eb.Audio="audio",eb.Any="any";let em=e=>JSON.parse(JSON.stringify(e)),ev=(e,o)=>{let t=new Set(e.map(e=>e.id)),r=new Set(o.map(e=>e.id));return{added:o.filter(e=>!t.has(e.id)),removed:e.filter(e=>!r.has(e.id))}},ey=e=>!("type"in e)||"patch"===e.type,ex=e=>"audio"===e.type;var eb,ew,eC=_((e=(...e)=>{let[o,t]=e;return{...((e,o)=>({nodes:[],edges:[],onNodesChange:o=>{e(({nodes:e})=>({nodes:N(o,e).map(e=>({dragHandle:eg,...e}))}))},onEdgesChange:o=>{e(({edges:e})=>({edges:P(o,e)}))},onConnect:o=>{e(({edges:e})=>({edges:k(o,e)}))},addNode:o=>{e(({nodes:e})=>({nodes:e.concat(o)}))},setNodes:o=>{e({nodes:o})},setEdges:o=>{e({edges:o})},setNodesAndEdges:({nodes:o,edges:t})=>{e({nodes:o,edges:t})},getNodesAndEdges:()=>{let{nodes:e,edges:t}=o();return{nodes:e,edges:t}},clearElements:()=>{e({nodes:[],edges:[]})},getNode:e=>{let{nodes:t}=o();return t.find(o=>o.id===e)||null},updateNodeData:(o,t)=>{e(({nodes:e})=>({nodes:e.map(e=>e.id===o?{...e,data:{...e.data,...t}}:e)}))},nodeTypes:{},setNodeTypes:o=>e({nodeTypes:o})}))(...e),...((e,o)=>({history:{maxHistoryLength:5,buffer:[],pointer:0,skipCollect:!1,push:t=>{let{history:r}=o(),{maxHistoryLength:n,skipCollect:i}=r;if(i)return void e({history:{...r,skipCollect:!1}});e(({history:e})=>{if(!e)return{};let{buffer:o,pointer:r}=e,i=o.slice(Math.max(r-n+1,0),r);return{history:{...e,buffer:[...i,t],pointer:Math.min(r+1,n)}}})},back:()=>{let{nodes:t,edges:r,controlPanel:n,history:i}=o(),{buffer:l,pointer:a}=i,s=l[a-1];if(!s)return;let d=I(s);d&&e({...W(em({nodes:t,edges:r,controlPanel:n}),d),history:{...i,pointer:a-1,skipCollect:!0}})},forward:()=>{let{nodes:t,edges:r,controlPanel:n,history:i}=o(),{buffer:l,pointer:a}=i,s=l[a];s&&e({...W(em({nodes:t,edges:r,controlPanel:n}),s),history:{...i,pointer:a+1,skipCollect:!0}})},clear:()=>{let{history:t}=o();e({history:{...t,buffer:[],pointer:0,skipCollect:!0}})}}}))(...e),...((e,o)=>({patch:((e=new AudioContext)=>{let o=e.audioWorklet.addModule(eh).then(()=>new AudioWorkletNode(e,"dump-node-processor")),t=new Map,r=new Map,n=async r=>{let{id:n,type:i,data:l}=r;if(!i)return void t.set(n,{loading:!1,error:Error(`Node: ${n} has no type`),node:null});let a=ep[i];if(!1!==a){if(!a)return void t.set(n,{loading:!1,error:Error(`Could not find handler for audio type ${i}`),node:null});t.set(n,{loading:!0,error:null,node:null});try{let r=await a(e,l),i=await o;t.set(n,{loading:!1,error:null,node:r}),Object.values(r.outputs||[]).forEach(({port:e})=>{i&&(e instanceof AudioWorkletNode&&e.connect(i),Array.isArray(e)&&e[0]instanceof AudioWorkletNode&&e[0].connect(i,e[1]))})}catch(e){t.set(n,{loading:!1,error:e,node:null})}}},i=async e=>Promise.all(e.map(n)),l=e=>{let{id:o,data:r}=e,n=t.get(o);if(!n)return void console.error(`Audio node #${o} does not exist`);let{loading:i,error:l,node:a}=n;return i?void console.error(`Audio node #${o} is yet not loaded`):l?void console.error(`Audio node #${o} is in error state: ${l.toString()}`):void(a.destroy&&a.destroy(),Object.values(a.inputs||{}).forEach(({port:e})=>e instanceof AudioNode&&e.disconnect&&e.disconnect()),Object.values(a.outputs||{}).forEach(({port:e})=>e instanceof AudioNode&&e.disconnect&&e.disconnect()),t.delete(o))},a=e=>{let{source:o,sourceHandle:n,target:i,targetHandle:l,id:a}=e,{node:s}=t.get(o)||{};if(!s)return void console.error(`can't find source node ${o}`);if(!n)return void console.error(`source handle is not defined in node ${o}`);let d=s.outputs?.[n],c=d?.port,{node:p}=t.get(i)||{};if(!p)return void console.error(`can't find target node ${p}`);if(!l)return void console.error(`source handle is not defined in node ${s}`);let h=p.inputs?.[l],u=h?.port;if(!c)return void console.error(`Can't find output port: ${o}:${n}`);if(!u)return void console.error(`Can't find input port: ${i}:${l}`);let g=u instanceof AudioNode,f=u instanceof AudioParam,m=u instanceof Array,v=g||f,y=c instanceof AudioNode,x=c instanceof Array;y&&v?c.connect(u):y&&m?c.connect(u[0],0,u[1]):x&&v?c[0].connect(u,c[1]):x&&m?c[0].connect(u[0],c[1],u[1]):(console.log(c,u),console.error("ports can be only AudioNode or AudioNodeChannel")),r.set(a,{output:d,input:h})},s=e=>{let{id:o,data:t}=e,n=r.get(o);if(!n)return void console.error(`can't find connection with id: ${o}`);let{input:{port:i},output:{port:l}}=n,a=i instanceof AudioNode,s=i instanceof AudioParam,d=i instanceof Array,c=a||s,p=l instanceof AudioNode,h=l instanceof Array;if(p&&c)l.disconnect(i);else if(p&&d)l.disconnect(i[0],0,i[1]);else if(h&&c)l[0].disconnect(i,l[1]);else if(h&&d)l[0].disconnect(i[0],l[1],i[1]);else throw console.log(l,i),Error("output port can not be only AudioNode or AudioNodeChannel");r.delete(o)};return{audioContext:e,audioNodes:t,registerAudioNode:n,registerAudioNodes:i,unregisterAudioNode:l,unregisterAudioNodes:e=>e.map(l),audioConnections:r,registerAudioConnection:a,registerAudioConnections:e=>e.map(a),unregisterAudioConnection:s,unregisterAudioConnections:e=>e.map(s)}})(),nodesState:{}}))(...e),...((e,o)=>({project:{files:[]},setProject(o){e({project:o,currentFileIndex:0})},getProject:()=>o().project,pullEditorChanges(){let{getEditorState:e,currentFileIndex:t,updateFileContent:r,project:n}=o(),i=n.files[t];ex(i)||r(t,{...i,file:e()})},syncEditorWithCurrentFile:()=>{let{currentFileIndex:e,setEditorState:t,project:r}=o(),n=r.files[e];if("audio"===n.type)return void console.log("audio file. skipping");t(n.file)},currentFileIndex:0,setCurrentFileIndex(t){let{currentFileIndex:r}=o();t!==r&&e({currentFileIndex:t})},updateFileContent(t,r){let{project:n}=o();e({project:{...n,files:n.files.map((e,o)=>o===t?{...e,...r}:e)}})},updateFileName(t,r){let{project:n}=o();e({project:{...n,files:n.files.map((e,o)=>o===t?{...e,name:r}:e)}})},addFile(t){let{project:r}=o(),n=[...r.files,t];e({project:{...r,files:n}})},deleteFile:t=>{let{project:r,currentFileIndex:n}=o();e({project:{...r,files:r.files.filter((e,o)=>t!==o)}}),t<=n&&e({currentFileIndex:n-1})}}))(...e),setGraph:async({nodes:e,edges:o})=>{let{patch:r,createNodes:n,createEdges:i,setNodesAndEdges:l,nodes:a,edges:s}=t();l({nodes:[],edges:[]}),await n(e),i(o)},clearGraph:()=>{let{setGraph:e}=t();e({nodes:[],edges:[]})},createNodes:async e=>{let{createNode:o}=t();await Promise.all(e.map(e=>o(e)))},createNode:e=>{let{addNode:o,nodesConfiguration:r}=t(),{type:n,id:i,data:l}=e;if(void 0===n)throw Error(`node type is not defined for node: ${i}`);o({...e,data:{...l,config:{...r[n]?.defaultConfig,...l?.config}}})},removeNode:e=>t().removeNodes([e]),removeNodes:e=>{let{edges:r,nodes:n,onNodesDelete:i,removeEdges:l,removeNodesFromControlPanel:a}=t(),s=e.map(({id:e})=>e),d=[...e,...n.filter(({parentNode:e})=>e&&s.includes(e))];a(d),l($(d,r)),i(d);let c=d.map(({id:e})=>e);o({nodes:n.filter(({id:e})=>!c.includes(e))})},removeEdges:e=>{let{edges:r,onEdgesDelete:n}=t(),i=e.map(({id:e})=>e);n(e),o({edges:r.filter(({id:e})=>!i.includes(e))})},createEdges:e=>{let{patch:o,edges:r,setEdges:n}=t();n(e)},onConnect:async e=>{let{edges:o,createEdges:r}=t();r(k(e,o))},onEdgesDelete:e=>{let{patch:o}=t()},onNodesDelete:async e=>{let{removeNodesFromControlPanel:o,patch:r}=t();o(e)},plugins:[],setPlugins:async e=>{let{setNodeTypes:r}=t();o({plugins:e});let n=e.reduce((e,o)=>({...e,...o.components.reduce((e,o)=>({...e,[o.type]:o}),{})}),{}),i=Object.keys(n).reduce((e,o)=>({...e,[o]:n[o].node}),{});Object.assign(ep,Object.keys(n).reduce((e,o)=>({...e,[o]:n[o].audioNode}),{})),r(i),o(({nodesConfiguration:e})=>({nodesConfiguration:{...e,...n}}))},nodesConfiguration:{},config:{showMinimap:!1},setConfig:e=>{o(({config:o})=>({config:{...o,...e}}))},getEditorState:()=>{let{getNodesAndEdges:e,controlPanel:o,viewport:r}=t();return{...e(),controlPanel:o,viewport:r}},setEditorState:async({nodes:e,edges:r,controlPanel:n,viewport:i})=>{let{setGraph:l}=t();await l({nodes:e,edges:r}),await new Promise(e=>setTimeout(e,1e3)),o({controlPanel:n,viewport:i})},isHelpShown:!1,toggleHelp:()=>{let{isHelpShown:e}=t();o({isHelpShown:!e})},copyBuffer:{nodes:[],edges:[]},copy:e=>{o({copyBuffer:e})},copySelectedItems:()=>{let{nodes:e,edges:o,copy:r}=t(),n=e.filter(({selected:e})=>e),i=o.filter(({selected:e})=>e);n.length&&r({nodes:n,edges:i})},pasteBuffer:(e=0,r=0)=>{let{copyBuffer:n,createNodes:i,setEdges:l,nodes:a,edges:s}=t(),{nodes:d,edges:c}=n;if(!d.length)return;o({nodes:a.map(e=>({...e,selected:!1}))});let p=d.reduce((e,o)=>!e||o.position.x<e.position.x&&o.position.y<e.position.y?o:e),h=p.position.x-e,u=p.position.y-r,{nodes:g,mapping:f}=d.reduce((e,o)=>{let t=(e=>{let o=+new Date+Math.floor(1e3*Math.random());return e?.type?`${e.type}-${o}`:o.toString()})(o);return{nodes:[...e.nodes,{...o,id:t,position:{x:o.position.x-h,y:o.position.y-u},selected:!0}],mapping:{...e.mapping,[o.id]:t}}},{nodes:[],mapping:{}});i(g);let m=c.map(e=>{let o=f[e.source]||e.source,t=f[e.target]||e.target;return{...e,id:e.id.replace(e.source,o).replace(e.target,t),source:o,target:t,selected:!0}});l([...s.map(e=>({...e,selected:!1})),...m])},getControlPanelNode:e=>{let{nodesConfiguration:o}=t(),{type:r}=e;if(!r)return null;let n=o[r]?.controlPanelNode;return n||(console.error(`could not find node for type ${r}`),null)},controlPanel:{show:!0,nodes:[],size:{width:200,height:100}},showControlPanel:()=>o(({controlPanel:e})=>({controlPanel:{...e,show:!0}})),hideControlPanel:()=>o(({controlPanel:e})=>({controlPanel:{...e,show:!1}})),addNodeToControlPanel:e=>{let{nodesConfiguration:r}=t(),n=e.type?r[e.type]?.defaultConfig:{},{height:i}=n?.size||{},l={id:e.id,...i?{height:i/ef}:{}};o(({controlPanel:e})=>({controlPanel:{...e,nodes:[...e.nodes,l]}}))},removeNodeFromControlPanel:e=>t().removeNodesFromControlPanel([e]),removeNodesFromControlPanel:e=>{let t=e.map(({id:e})=>e);o(({controlPanel:e})=>{let o=e.nodes.filter(({id:e})=>!t.includes(e));return{controlPanel:{...e,nodes:o}}})},setControlPanelNodes:e=>{o(({controlPanel:o})=>({controlPanel:{...o,nodes:e}}))},setControlPanelSize:e=>{o(({controlPanel:o})=>({controlPanel:{...o,size:e}}))},viewport:{x:0,y:0,zoom:1},setViewport:e=>o({viewport:e})}},o=(o,t,r)=>{let n=((e,o)=>{let t,r=L({propertyFilter:(e,o)=>!!(o.parent?.parent?.childName==="controlPanel"||["data","position","controlPanel"].includes(o.parent?.childName))||["controlPanel","size","edges","nodes","data","label","config","values","position","x","y"].includes(e)}),n=o();return(e,i)=>{e.currentFileIndex!==i.currentFileIndex&&o().history.clear(),clearTimeout(t),n||(n=i),t=setTimeout(()=>{let t=r.diff(n,e);n=null,t&&o().history.push(t)},500)}})(0,t);return r.subscribe(n),e((...e)=>o(...e),t,r)},(e,t,r)=>{r.subscribe(async(e,o)=>{});let n=new Set,i={...t(),nodes:[],edges:[]};return o(async(...o)=>{let r=t(),[l]=o,a={...i,..."function"==typeof l?l({...i}):l},s=ev(i.nodes,a.nodes),d=ev(i.edges,a.edges);i=a;let c=s.added,p=d.added,h=d.removed,u=s.removed,{patch:g}=r;if(c.length){let e=g.registerAudioNodes(c);n.add(e),await e,n.delete(e)}if(!(p.length||h.length||u.length))return void e(...o);if(n.size)try{await Promise.all([...n.values()])}catch(e){console.log("some error",e)}p.length&&g.registerAudioConnections(p),h.length&&g.unregisterAudioConnections(h),u.length&&g.unregisterAudioNodes(u),e(...o)},t,r)})),e$={colors:{elevation1:"#292d39",elevation2:"#181c20",elevation3:"#373c4b",accent1:"#0066dc",accent2:"#007bff",accent3:"#3c93ff",highlight1:"#535760",highlight2:"#8c92a4",highlight3:"#fefefe",vivid1:"#14df42",whitePrimary:"#ffffff",error:"#db5353"},zIndex:{modal:9998,controlPanel:9999,resumeContextLayout:10003}};R`
1
+ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{withTheme as i,ThemeProvider as l,Global as a,css as s,useTheme as d}from"@emotion/react";import c from"@emotion/styled";import{nanoid as p}from"nanoid";import{useState as h,useEffect as g,useMemo as u,useCallback as m,useRef as f}from"react";import{FaPlus as v}from"react-icons/fa6";import{MdClose as y,MdDragHandle as w,MdSettings as x,MdInfoOutline as b}from"react-icons/md";import"reactflow/dist/style.css";import{registerFetcher as C}from"@web-noise/fetch";import $,{getConnectedEdges as k,addEdge as P,applyNodeChanges as N,applyEdgeChanges as z,useOnViewportChange as j,Background as E,BackgroundVariant as F,MiniMap as S,Controls as T,ReactFlowProvider as D,useReactFlow as M,Position as A,Handle as O,ControlButton as _,getBezierPath as I}from"reactflow";import{create as L}from"zustand";import{setAudioNodeTypes as H,createPatch as R}from"@web-noise/patch";import{reverse as W,patch as B,create as G}from"jsondiffpatch";import{injectGlobal as V}from"@emotion/css";import{useContextMenu as U,Item as J,Menu as X,Separator as Y}from"react-contexify";import"react-contexify/dist/ReactContexify.css";import q from"js-file-download";import K from"hotkeys-js";import{createPortal as Q}from"react-dom";import{FileDrop as Z}from"react-file-drop";import{FaFileUpload as ee,FaQuestion as eo,FaVolumeOff as et,FaMap as er,FaRegMap as en}from"react-icons/fa";import{Resizable as ei}from"re-resizable";import el from"react-grid-layout";import"react-grid-layout/css/styles.css";import{AiFillLock as ea,AiFillUnlock as es}from"react-icons/ai";import{RxDashboard as ed}from"react-icons/rx";import ec from"react-modern-drawer";import"react-modern-drawer/dist/index.css";import{marked as ep}from"marked";let eh="web-noise-drag-handle",eg=`.${eh}`,eu=10;(ew=ex||(ex={})).Gate="gate",ew.Number="number",ew.Audio="audio",ew.Any="any";let em=e=>JSON.parse(JSON.stringify(e)),ef=(e,o)=>{let t=new Set(e.map(e=>e.id)),r=new Set(o.map(e=>e.id));return{added:o.filter(e=>!t.has(e.id)),removed:e.filter(e=>!r.has(e.id))}},ev=e=>!("type"in e)||"patch"===e.type,ey=e=>"audio"===e.type;var ew,ex,eb=L((e=(...e)=>{let[o,t]=e;return{...((e,o)=>({nodes:[],edges:[],onNodesChange:o=>{e(({nodes:e})=>({nodes:N(o,e).map(e=>({dragHandle:eg,...e}))}))},onEdgesChange:o=>{e(({edges:e})=>({edges:z(o,e)}))},onConnect:o=>{e(({edges:e})=>({edges:P(o,e)}))},addNode:o=>{e(({nodes:e})=>({nodes:e.concat(o)}))},setNodes:o=>{e({nodes:o})},setEdges:o=>{e({edges:o})},setNodesAndEdges:({nodes:o,edges:t})=>{e({nodes:o,edges:t})},getNodesAndEdges:()=>{let{nodes:e,edges:t}=o();return{nodes:e,edges:t}},clearElements:()=>{e({nodes:[],edges:[]})},getNode:e=>{let{nodes:t}=o();return t.find(o=>o.id===e)||null},updateNodeData:(o,t)=>{e(({nodes:e})=>({nodes:e.map(e=>e.id===o?{...e,data:{...e.data,...t}}:e)}))},nodeTypes:{},setNodeTypes:o=>e({nodeTypes:o})}))(...e),...((e,o)=>({history:{maxHistoryLength:5,buffer:[],pointer:0,skipCollect:!1,push:t=>{let{history:r}=o(),{maxHistoryLength:n,skipCollect:i}=r;if(i)return void e({history:{...r,skipCollect:!1}});e(({history:e})=>{if(!e)return{};let{buffer:o,pointer:r}=e,i=o.slice(Math.max(r-n+1,0),r);return{history:{...e,buffer:[...i,t],pointer:Math.min(r+1,n)}}})},back:()=>{let{nodes:t,edges:r,controlPanel:n,history:i}=o(),{buffer:l,pointer:a}=i,s=l[a-1];if(!s)return;let d=W(s);d&&e({...B(em({nodes:t,edges:r,controlPanel:n}),d),history:{...i,pointer:a-1,skipCollect:!0}})},forward:()=>{let{nodes:t,edges:r,controlPanel:n,history:i}=o(),{buffer:l,pointer:a}=i,s=l[a];s&&e({...B(em({nodes:t,edges:r,controlPanel:n}),s),history:{...i,pointer:a+1,skipCollect:!0}})},clear:()=>{let{history:t}=o();e({history:{...t,buffer:[],pointer:0,skipCollect:!0}})}}}))(...e),...((e,o)=>({patch:R(),nodesState:{}}))(...e),...((e,o)=>({project:{files:[]},setProject(o){e({project:o,currentFileIndex:0})},getProject:()=>o().project,pullEditorChanges(){let{getEditorState:e,currentFileIndex:t,updateFileContent:r,project:n}=o(),i=n.files[t];ey(i)||r(t,{...i,file:e()})},syncEditorWithCurrentFile:()=>{let{currentFileIndex:e,setEditorState:t,project:r}=o(),n=r.files[e];if("audio"===n.type)return void console.log("audio file. skipping");t(n.file)},currentFileIndex:0,setCurrentFileIndex(t){let{currentFileIndex:r}=o();t!==r&&e({currentFileIndex:t})},updateFileContent(t,r){let{project:n}=o();e({project:{...n,files:n.files.map((e,o)=>o===t?{...e,...r}:e)}})},updateFileName(t,r){let{project:n}=o();e({project:{...n,files:n.files.map((e,o)=>o===t?{...e,name:r}:e)}})},addFile(t){let{project:r}=o(),n=[...r.files,t];e({project:{...r,files:n}})},deleteFile:t=>{let{project:r,currentFileIndex:n}=o();e({project:{...r,files:r.files.filter((e,o)=>t!==o)}}),t<=n&&e({currentFileIndex:n-1})}}))(...e),setGraph:async({nodes:e,edges:o})=>{let{patch:r,createNodes:n,createEdges:i,setNodesAndEdges:l,nodes:a,edges:s}=t();l({nodes:[],edges:[]}),await n(e),i(o)},clearGraph:()=>{let{setGraph:e}=t();e({nodes:[],edges:[]})},createNodes:async e=>{let{createNode:o}=t();await Promise.all(e.map(e=>o(e)))},createNode:e=>{let{addNode:o,nodesConfiguration:r}=t(),{type:n,id:i,data:l}=e;if(void 0===n)throw Error(`node type is not defined for node: ${i}`);o({...e,data:{...l,config:{...r[n]?.defaultConfig,...l?.config}}})},removeNode:e=>t().removeNodes([e]),removeNodes:e=>{let{edges:r,nodes:n,onNodesDelete:i,removeEdges:l,removeNodesFromControlPanel:a}=t(),s=e.map(({id:e})=>e),d=[...e,...n.filter(({parentNode:e})=>e&&s.includes(e))];a(d),l(k(d,r)),i(d);let c=d.map(({id:e})=>e);o({nodes:n.filter(({id:e})=>!c.includes(e))})},removeEdges:e=>{let{edges:r,onEdgesDelete:n}=t(),i=e.map(({id:e})=>e);n(e),o({edges:r.filter(({id:e})=>!i.includes(e))})},createEdges:e=>{let{patch:o,edges:r,setEdges:n}=t();n(e)},onConnect:async e=>{let{edges:o,createEdges:r}=t();r(P(e,o))},onEdgesDelete:e=>{let{patch:o}=t()},onNodesDelete:async e=>{let{removeNodesFromControlPanel:o,patch:r}=t();o(e)},plugins:[],setPlugins:async e=>{let{setNodeTypes:r}=t();o({plugins:e});let n=e.reduce((e,o)=>({...e,...o.components.reduce((e,o)=>({...e,[o.type]:o}),{})}),{}),i=Object.keys(n).reduce((e,o)=>({...e,[o]:n[o].node}),{});H(Object.keys(n).reduce((e,o)=>({...e,[o]:n[o].audioNode}),{})),r(i),o(({nodesConfiguration:e})=>({nodesConfiguration:{...e,...n}}))},nodesConfiguration:{},config:{showMinimap:!1},setConfig:e=>{o(({config:o})=>({config:{...o,...e}}))},getEditorState:()=>{let{getNodesAndEdges:e,controlPanel:o,viewport:r}=t();return{...e(),controlPanel:o,viewport:r}},setEditorState:async({nodes:e,edges:r,controlPanel:n,viewport:i})=>{let{setGraph:l}=t();await l({nodes:e,edges:r}),await new Promise(e=>setTimeout(e,1e3)),o({controlPanel:n,viewport:i})},isHelpShown:!1,toggleHelp:()=>{let{isHelpShown:e}=t();o({isHelpShown:!e})},copyBuffer:{nodes:[],edges:[]},copy:e=>{o({copyBuffer:e})},copySelectedItems:()=>{let{nodes:e,edges:o,copy:r}=t(),n=e.filter(({selected:e})=>e),i=o.filter(({selected:e})=>e);n.length&&r({nodes:n,edges:i})},pasteBuffer:(e=0,r=0)=>{let{copyBuffer:n,createNodes:i,setEdges:l,nodes:a,edges:s}=t(),{nodes:d,edges:c}=n;if(!d.length)return;o({nodes:a.map(e=>({...e,selected:!1}))});let p=d.reduce((e,o)=>!e||o.position.x<e.position.x&&o.position.y<e.position.y?o:e),h=p.position.x-e,g=p.position.y-r,{nodes:u,mapping:m}=d.reduce((e,o)=>{let t=(e=>{let o=+new Date+Math.floor(1e3*Math.random());return e?.type?`${e.type}-${o}`:o.toString()})(o);return{nodes:[...e.nodes,{...o,id:t,position:{x:o.position.x-h,y:o.position.y-g},selected:!0}],mapping:{...e.mapping,[o.id]:t}}},{nodes:[],mapping:{}});i(u);let f=c.map(e=>{let o=m[e.source]||e.source,t=m[e.target]||e.target;return{...e,id:e.id.replace(e.source,o).replace(e.target,t),source:o,target:t,selected:!0}});l([...s.map(e=>({...e,selected:!1})),...f])},getControlPanelNode:e=>{let{nodesConfiguration:o}=t(),{type:r}=e;if(!r)return null;let n=o[r]?.controlPanelNode;return n||(console.error(`could not find node for type ${r}`),null)},controlPanel:{show:!0,nodes:[],size:{width:200,height:100}},showControlPanel:()=>o(({controlPanel:e})=>({controlPanel:{...e,show:!0}})),hideControlPanel:()=>o(({controlPanel:e})=>({controlPanel:{...e,show:!1}})),addNodeToControlPanel:e=>{let{nodesConfiguration:r}=t(),n=e.type?r[e.type]?.defaultConfig:{},{height:i}=n?.size||{},l={id:e.id,...i?{height:i/eu}:{}};o(({controlPanel:e})=>({controlPanel:{...e,nodes:[...e.nodes,l]}}))},removeNodeFromControlPanel:e=>t().removeNodesFromControlPanel([e]),removeNodesFromControlPanel:e=>{let t=e.map(({id:e})=>e);o(({controlPanel:e})=>{let o=e.nodes.filter(({id:e})=>!t.includes(e));return{controlPanel:{...e,nodes:o}}})},setControlPanelNodes:e=>{o(({controlPanel:o})=>({controlPanel:{...o,nodes:e}}))},setControlPanelSize:e=>{o(({controlPanel:o})=>({controlPanel:{...o,size:e}}))},viewport:{x:0,y:0,zoom:1},setViewport:e=>o({viewport:e})}},o=(o,t,r)=>{let n=((e,o)=>{let t,r=G({propertyFilter:(e,o)=>!!(o.parent?.parent?.childName==="controlPanel"||["data","position","controlPanel"].includes(o.parent?.childName))||["controlPanel","size","edges","nodes","data","label","config","values","position","x","y"].includes(e)}),n=o();return(e,i)=>{e.currentFileIndex!==i.currentFileIndex&&o().history.clear(),clearTimeout(t),n||(n=i),t=setTimeout(()=>{let t=r.diff(n,e);n=null,t&&o().history.push(t)},500)}})(0,t);return r.subscribe(n),e((...e)=>o(...e),t,r)},(e,t,r)=>{r.subscribe(async(e,o)=>{});let n=new Set,i={...t(),nodes:[],edges:[]};return o(async(...o)=>{let r=t(),[l]=o,a={...i,..."function"==typeof l?l({...i}):l},s=ef(i.nodes,a.nodes),d=ef(i.edges,a.edges);i=a;let c=s.added,p=d.added,h=d.removed,g=s.removed,{patch:u}=r;if(c.length){let e=u.registerAudioNodes(c);n.add(e),await e,n.delete(e)}if(!(p.length||h.length||g.length))return void e(...o);if(n.size)try{await Promise.all([...n.values()])}catch(e){console.log("some error",e)}p.length&&u.registerAudioConnections(p),h.length&&u.unregisterAudioConnections(h),g.length&&u.unregisterAudioNodes(g),e(...o)},t,r)})),eC={colors:{elevation1:"#292d39",elevation2:"#181c20",elevation3:"#373c4b",accent1:"#0066dc",accent2:"#007bff",accent3:"#3c93ff",highlight1:"#535760",highlight2:"#8c92a4",highlight3:"#fefefe",vivid1:"#14df42",whitePrimary:"#ffffff",error:"#db5353"},zIndex:{modal:9998,controlPanel:9999,resumeContextLayout:10003}};V`
2
2
  .react-flow {
3
3
  .react-flow__pane {
4
4
  /* background: rgb(106 106 106); */
5
5
  /* background: "white"; */
6
6
  // background: #292d39;
7
- background: ${e$.colors.elevation3};
7
+ background: ${eC.colors.elevation3};
8
8
  }
9
9
 
10
10
  .react-flow__background {
@@ -25,28 +25,28 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
25
25
  }
26
26
 
27
27
  .react-flow__edge-path {
28
- stroke: ${e$.colors.accent2};
28
+ stroke: ${eC.colors.accent2};
29
29
  }
30
30
 
31
31
  .react-flow__node.selected {
32
- border: 1px solid ${e$.colors.accent2};
33
- box-shadow: 0 0 0 0.5px #${e$.colors.accent2};
32
+ border: 1px solid ${eC.colors.accent2};
33
+ box-shadow: 0 0 0 0.5px #${eC.colors.accent2};
34
34
  }
35
35
 
36
36
  .react-flow__node-default.selected, .react-flow__node-default.selected:hover {
37
- box-shadow: 0 0 0 0.5px #${e$.colors.accent2};
37
+ box-shadow: 0 0 0 0.5px #${eC.colors.accent2};
38
38
  }
39
39
 
40
40
  /* .react-flow__minimap-mask {
41
- fill: ${e$.colors.elevation1}
41
+ fill: ${eC.colors.elevation1}
42
42
  }
43
43
 
44
44
  .react-flow__minimap-node {
45
- fill:${e$.colors.accent2}
45
+ fill:${eC.colors.accent2}
46
46
  } */
47
47
  }
48
48
 
49
- `;var ek=()=>d();let eN=c(V)``,eP=c(G)`
49
+ `;var e$=()=>d();let ek=c(J)``,eP=c(X)`
50
50
  background: ${({colors:e})=>e.elevation2};
51
51
  padding: 0;
52
52
  border-radius: 0;
@@ -59,7 +59,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
59
59
  background-color: ${({colors:e})=>e.elevation1};
60
60
  margin: 0;
61
61
  }
62
- `,ez="editor-edge-menu";var eA=()=>{let e=ek(),o=eC(e=>e.removeEdges);return t(n,{children:t(eP,{id:ez,animation:!1,colors:e.colors,children:t(eN,{onClick:e=>o([e.props.edge]),children:"Delete Edge (DEL)"})})})};let ej=c.div`
62
+ `,eN="editor-edge-menu";var ez=()=>{let e=e$(),o=eb(e=>e.removeEdges);return t(n,{children:t(eP,{id:eN,animation:!1,colors:e.colors,children:t(ek,{onClick:e=>o([e.props.edge]),children:"Delete Edge (DEL)"})})})};let ej=c.div`
63
63
  position: fixed;
64
64
  z-index: ${({theme:e})=>e.zIndex.modal};
65
65
  width: 100%;
@@ -78,19 +78,19 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
78
78
  height: 80%;
79
79
  overflow-y: scroll;
80
80
  position: relative;
81
- `,eM=c(y)`
81
+ `,eF=c(y)`
82
82
  position: absolute;
83
83
  top: 0.2rem;
84
84
  right: 0.2rem;
85
85
  cursor: pointer;
86
- `;var eF=({children:e,onClose:o,...n})=>{let i=ek();return u(()=>{let e=e=>{"Escape"===e.key&&o?.()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[o]),Y(t(ej,{theme:i,onClick:o,children:r(eE,{...n,onClick:e=>{e.stopPropagation()},theme:i,children:[e,t(eM,{theme:i,onClick:o})]})}),document.body)};let eS=i(c.div`
86
+ `;var eS=({children:e,onClose:o,...n})=>{let i=e$();return g(()=>{let e=e=>{"Escape"===e.key&&o?.()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[o]),Q(t(ej,{theme:i,onClick:o,children:r(eE,{...n,onClick:e=>{e.stopPropagation()},theme:i,children:[e,t(eF,{theme:i,onClick:o})]})}),document.body)};let eT=i(c.div`
87
87
  width: 100%;
88
- `),eT=i(c.div`
88
+ `),eD=i(c.div`
89
89
  padding: 1rem;
90
90
  display: flex;
91
91
  flex-direction: column;
92
92
  gap: 1rem;
93
- `),eD=i(c.ul`
93
+ `),eM=i(c.ul`
94
94
  list-style: none;
95
95
  margin: 0;
96
96
  padding: 0;
@@ -111,7 +111,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
111
111
  cursor: pointer;
112
112
  }
113
113
  }
114
- `),eH=i(c.div`
114
+ `),eA=i(c.div`
115
115
  white-space: nowrap;
116
116
  overflow: hidden;
117
117
  text-overflow: ellipsis;
@@ -133,14 +133,14 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
133
133
  &:hover {
134
134
  border-color: ${({theme:e})=>e.colors.accent2};
135
135
  }
136
- `),eW=i(c.div``),eL=i(c.div`
136
+ `),eL=i(c.div``),eH=i(c.div`
137
137
  font-size: 1.1rem;
138
138
  padding: 0.25rem 0;
139
139
  color: ${({theme:e})=>e.colors.highlight3};
140
140
  `),eR=i(c.div`
141
141
  color: ${({theme:e})=>e.colors.highlight2};
142
142
  font-size: 12px;
143
- `);var eB=({onComponentClick:e,filters:{plugin:o,search:n="",tags:i},onTagClick:l})=>{let a=eC(({plugins:e})=>e),s=g(()=>o?a.filter(({name:e})=>e===o):a,[a,o]);return t(eS,{children:g(()=>n||i?.length?s.map(e=>({...e,components:i?.length?e.components.filter(e=>i?.every(o=>e.tags?.includes(o))):e.components})).map(e=>({...e,components:e.components.filter(({type:e,name:o})=>e.toLocaleLowerCase().includes(n.toLocaleLowerCase())||o?.toLocaleLowerCase().includes(n.toLocaleLowerCase()))})):s,[s,n,i]).map(({name:o,description:n,components:a},s)=>a.length?r(eT,{children:[r(eW,{children:[t(eL,{children:o}),t(eR,{children:n})]}),t(eD,{children:a.sort((e,o)=>e.type.toLowerCase()>o.type.toLowerCase()?1:-1).map((o,n)=>r("li",{onClick:()=>e(o),children:[t(eH,{children:o.name||o.type}),o.description&&t(eO,{children:o.description}),t(e_,{children:o.tags?.map((e,o)=>t(eI,{isActive:i?.includes(e),onClickCapture:o=>{o.stopPropagation(),l(e)},children:e},o))})]},n))})]},s):null)})};let eV=c.div`
143
+ `);var eW=({onComponentClick:e,filters:{plugin:o,search:n="",tags:i},onTagClick:l})=>{let a=eb(({plugins:e})=>e),s=u(()=>o?a.filter(({name:e})=>e===o):a,[a,o]);return t(eT,{children:u(()=>n||i?.length?s.map(e=>({...e,components:i?.length?e.components.filter(e=>i?.every(o=>e.tags?.includes(o))):e.components})).map(e=>({...e,components:e.components.filter(({type:e,name:o})=>e.toLocaleLowerCase().includes(n.toLocaleLowerCase())||o?.toLocaleLowerCase().includes(n.toLocaleLowerCase()))})):s,[s,n,i]).map(({name:o,description:n,components:a},s)=>a.length?r(eD,{children:[r(eL,{children:[t(eH,{children:o}),t(eR,{children:n})]}),t(eM,{children:a.sort((e,o)=>e.type.toLowerCase()>o.type.toLowerCase()?1:-1).map((o,n)=>r("li",{onClick:()=>e(o),children:[t(eA,{children:o.name||o.type}),o.description&&t(eO,{children:o.description}),t(e_,{children:o.tags?.map((e,o)=>t(eI,{isActive:i?.includes(e),onClickCapture:o=>{o.stopPropagation(),l(e)},children:e},o))})]},n))})]},s):null)})};let eB=c.div`
144
144
  display: flex;
145
145
  position: relative;
146
146
  `,eG=c.input`
@@ -174,14 +174,14 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
174
174
  -webkit-appearance: none;
175
175
  margin-right: 1rem;
176
176
  }
177
- `,eU=c.div`
177
+ `,eV=c.div`
178
178
  display: flex;
179
179
  flex-direction: column;
180
180
  padding: 0.6rem;
181
181
  gap: 0.6rem;
182
182
  border-right: 1px solid ${({theme:e})=>e.colors.elevation3};
183
183
  min-width: 14rem;
184
- `,eJ=c.label`
184
+ `,eU=c.label`
185
185
  user-select: none;
186
186
  input {
187
187
  display: none;
@@ -193,7 +193,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
193
193
  color: ${({theme:e})=>e.colors.accent3};
194
194
  cursor: pointer;
195
195
  }
196
- `,eX=i(c(eI)`
196
+ `,eJ=i(c(eI)`
197
197
  font-size: 12px;
198
198
  padding: 0.2rem 0.4rem;
199
199
  &:hover {
@@ -202,16 +202,16 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
202
202
  content: "×";
203
203
  margin-left: 0.4rem;
204
204
  }
205
- `);var eY=({onChange:e,value:o})=>{let n=ek(),i=eC(({plugins:e})=>e),l=m(null);return u(()=>{l.current&&l.current.focus()},[l]),r(eU,{theme:n,children:[t(eV,{children:t(eG,{ref:l,theme:n,value:o.search||"",placeholder:"search...",onChange:t=>e({...o,search:t.target.value})})}),t(e_,{children:o.tags?.map((r,n)=>t(eX,{isActive:!0,onClick:()=>{let t=o.tags?.filter(e=>e!==r)||[];e({...o,tags:t})},children:r},n))}),i.map(({name:i,components:l},a)=>i?r(eJ,{theme:n,children:[t("input",{type:"checkbox",name:"plugin",value:i,checked:i===o.plugin,onChange:()=>{e({...o,plugin:i===o.plugin?null:i})}}),t("span",{children:i})]},a):null)]})};let eq=c.div`
205
+ `);var eX=({onChange:e,value:o})=>{let n=e$(),i=eb(({plugins:e})=>e),l=f(null);return g(()=>{l.current&&l.current.focus()},[l]),r(eV,{theme:n,children:[t(eB,{children:t(eG,{ref:l,theme:n,value:o.search||"",placeholder:"search...",onChange:t=>e({...o,search:t.target.value})})}),t(e_,{children:o.tags?.map((r,n)=>t(eJ,{isActive:!0,onClick:()=>{let t=o.tags?.filter(e=>e!==r)||[];e({...o,tags:t})},children:r},n))}),i.map(({name:i,components:l},a)=>i?r(eU,{theme:n,children:[t("input",{type:"checkbox",name:"plugin",value:i,checked:i===o.plugin,onChange:()=>{e({...o,plugin:i===o.plugin?null:i})}}),t("span",{children:i})]},a):null)]})};let eY=c.div`
206
206
  height: 100%;
207
207
  width: 100%;
208
208
  display: flex;
209
209
  gap: 1rem;
210
- `,eK=c.div`
210
+ `,eq=c.div`
211
211
  flex-grow: 1;
212
212
  height: 100%;
213
213
  overflow-y: scroll;
214
- `;var eQ=({isOpen:e,closeMenu:o,mousePosition:n})=>{let i=ek(),{screenToFlowPosition:l}=S(),{createNode:a}=eC(({createNode:e})=>({createNode:e})),[s,d]=h({}),c=f(({type:e})=>{let{x:t,y:r}=l(n);a({id:`${e}-${+new Date}`,type:e,data:{label:e},position:{x:t,y:r},targetPosition:T.Left,sourcePosition:T.Right}),o()},[n,l,a,o,n]);return e?t(eF,{onClose:()=>{o(),d({})},children:r(eq,{theme:i,children:[t(eY,{onChange:d,value:s}),t(eK,{theme:i,children:t(eB,{filters:s,onTagClick:e=>{d(o=>({...o,tags:o.tags?.includes(e)?o.tags.filter(o=>o!==e):[...o.tags||[],e]}))},onComponentClick:e=>{c(e),d({})}})})]})}):null};let eZ=c.div`
214
+ `;var eK=({isOpen:e,closeMenu:o,mousePosition:n})=>{let i=e$(),{screenToFlowPosition:l}=M(),{createNode:a}=eb(({createNode:e})=>({createNode:e})),[s,d]=h({}),c=m(({type:e})=>{let{x:t,y:r}=l(n);a({id:`${e}-${+new Date}`,type:e,data:{label:e},position:{x:t,y:r},targetPosition:A.Left,sourcePosition:A.Right}),o()},[n,l,a,o,n]);return e?t(eS,{onClose:()=>{o(),d({})},children:r(eY,{theme:i,children:[t(eX,{onChange:d,value:s}),t(eq,{theme:i,children:t(eW,{filters:s,onTagClick:e=>{d(o=>({...o,tags:o.tags?.includes(e)?o.tags.filter(o=>o!==e):[...o.tags||[],e]}))},onComponentClick:e=>{c(e),d({})}})})]})}):null};let eQ=c.div`
215
215
  display: flex;
216
216
  align-items: center;
217
217
  justify-content: center;
@@ -237,19 +237,19 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
237
237
  .drop-zone-drag-over {
238
238
  opacity: 1;
239
239
  }
240
- `,e0=c.div`
240
+ `,eZ=c.div`
241
241
  display: flex;
242
242
  flex-wrap: wrap;
243
243
  align-items: center;
244
244
  justify-content: center;
245
245
  height: 100%;
246
246
  width: 100%;
247
- `,e1=c(K)`
247
+ `,e0=c(ee)`
248
248
  width: 100%;
249
249
  height: 8rem;
250
- `,e2=c.div`
250
+ `,e1=c.div`
251
251
  font-size: 2rem;
252
- `;var e3=({isOpen:e,closeMenu:o})=>{let n=ek(),i=eC(({setGraph:e})=>e),l=eC(e=>e.setEditorState),a=m(null),s=f(e=>{let[t]=e||[];t.text().then(JSON.parse).then(e=>{l(e),o()}).catch(console.error)},[i,o]);return e?t(eF,{onClose:o,children:r(eZ,{theme:n,children:[t("input",{onChange:({target:{files:e}})=>s(e),ref:a,type:"file",className:"hidden",style:{display:"none"},accept:".json"}),t(q,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{a.current?.click()},onDrop:e=>s(e),children:r(e0,{theme:n,children:[t(e1,{}),t(e2,{children:"click or drop file here"})]})})]})}):null};let e9=c.div`
252
+ `;var e2=({isOpen:e,closeMenu:o})=>{let n=e$(),i=eb(({setGraph:e})=>e),l=eb(e=>e.setEditorState),a=f(null),s=m(e=>{let[t]=e||[];t.text().then(JSON.parse).then(e=>{l(e),o()}).catch(console.error)},[i,o]);return e?t(eS,{onClose:o,children:r(eQ,{theme:n,children:[t("input",{onChange:({target:{files:e}})=>s(e),ref:a,type:"file",className:"hidden",style:{display:"none"},accept:".json"}),t(Z,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{a.current?.click()},onDrop:e=>s(e),children:r(eZ,{theme:n,children:[t(e0,{}),t(e1,{children:"click or drop file here"})]})})]})}):null};let e3=c.div`
253
253
  display: flex;
254
254
  align-items: center;
255
255
  justify-content: center;
@@ -282,12 +282,50 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
282
282
  justify-content: center;
283
283
  height: 100%;
284
284
  width: 100%;
285
- `,e5=c(K)`
285
+ `,e6=c(ee)`
286
286
  width: 100%;
287
287
  height: 8rem;
288
- `,e4=c.div`
288
+ `,e9=c.div`
289
289
  font-size: 2rem;
290
- `;var e6=({isOpen:e,closeMenu:o})=>{let n=ek(),i=eC(e=>e.setProject),l=m(null),a=f(e=>{let[t]=e||[];t.text().then(JSON.parse).then(e=>{i(e),o()}).catch(console.error)},[i,o]);return e?t(eF,{onClose:o,children:r(e9,{theme:n,children:[t("input",{onChange:({target:{files:e}})=>a(e),ref:l,type:"file",className:"hidden",style:{display:"none"},accept:".json"}),t(q,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{l.current?.click()},onDrop:e=>a(e),children:r(e8,{theme:n,children:[t(e5,{}),t(e4,{children:"click or drop file here"})]})})]})}):null};let e7="editor-menu";var oe=({editorContextMenu:e=[]})=>{let o=ek(),[i,l]=h({x:0,y:0}),[a,s]=h(!1),[d,c]=h(!1),[p,m]=h(!1),v=f((e,o)=>{l({x:e,y:o}),s(!0)},[s]),y=eC(e=>e.pasteBuffer),{screenToFlowPosition:x}=S(),b=f(e=>{let{x:o,y:t}=x(e);y(o,t)},[s,x]),w=eC(({clearGraph:e})=>e),C=eC(e=>e.getEditorState),$=eC(e=>e.getProject),k=f(()=>{w()},[w]),N=eC(e=>e.toggleHelp),P=eC(e=>e.history.back),z=eC(e=>e.history.forward),A=eC(e=>e.history.pointer),j=eC(e=>e.history.buffer),E=eC(e=>e.copySelectedItems),M=eC(e=>e.nodes),F=g(()=>M.filter(({selected:e})=>e),[M]),T=eC(e=>e.copyBuffer),D=S(),H=f(()=>{J(JSON.stringify({...C()},null,2),"web-noise-patch.json")},[C,D]),O=f(()=>{J(JSON.stringify({...$()},null,2),"web-noise-project.json")},[C,D]);return u(()=>(X("command+shift+a",()=>(v(200,50),!1)),X("shift+/",()=>(N(),!1)),X("command+z",()=>(P(),!1)),X("command+shift+z",()=>(z(),!1)),X("command+c",()=>(E(),!1)),X("command+v",()=>(b({x:200,y:50}),!1)),()=>{X.unbind()}),[v,b]),r(n,{children:[t(eQ,{isOpen:a,closeMenu:()=>s(!1),mousePosition:i}),t(e3,{isOpen:d,closeMenu:()=>c(!1)}),t(e6,{isOpen:p,closeMenu:()=>m(!1)}),r(eP,{id:e7,animation:!1,colors:o.colors,children:[t(eN,{onClick:({triggerEvent:{clientX:e,clientY:o}})=>v(e,o),children:"Add Node (⌘+⇧+A)"}),t(U,{}),t(eN,{onClick:k,children:"Delete All"}),t(U,{}),t(eN,{onClick:H,children:"Download patch"}),t(eN,{onClick:()=>c(!0),children:"Upload patch"}),t(U,{}),t(eN,{onClick:O,children:"Download project"}),t(eN,{onClick:()=>m(!0),children:"Upload project"}),t(U,{}),t(eN,{disabled:0===A,onClick:P,children:"Undo (⌘+z)"}),t(eN,{disabled:A===j.length,onClick:z,children:"Redo (⌘+⇧+Z)"}),t(U,{}),t(eN,{disabled:!F.length,onClick:E,children:"Copy Selected (⌘+c)"}),t(eN,{disabled:!T.nodes.length,onClick:({triggerEvent:{clientX:e,clientY:o}})=>b({x:e,y:o}),children:"Paste (⌘+v)"}),t(U,{}),e.map((e,o)=>t(eN,{children:e},o)),t(U,{}),t(eN,{onClick:N,children:"Help (⇧+?)"})]})]})};let oo="editor-node-menu";var ot=e=>{let o=ek(),i=eC(e=>e.removeNodes),l=eC(e=>e.addNodeToControlPanel),a=eC(e=>e.removeNodeFromControlPanel),s=eC(e=>e.copy),d=eC(e=>e.nodesConfiguration),c=eC(e=>e.controlPanel.nodes),p=f(({props:e})=>!!e?.node.type&&!!c.find(({id:o})=>o===e.node.id),[c]),h=f(({props:e})=>{if(!e?.node.type)return!1;let o=d[e.node.type];return!!o?.controlPanelNode},[d]);return t(n,{children:r(eP,{id:oo,animation:!1,colors:o.colors,children:[t(eN,{onClick:e=>i([e.props.node]),children:"Delete Node (DEL)"}),t(eN,{hidden:(...e)=>!h(...e)||p(...e),onClick:e=>l(e.props.node),children:"Add To Control Panel"}),t(eN,{hidden:(...e)=>!h(...e)||!p(...e),onClick:e=>a(e.props.node),children:"Remove From Control Panel"}),t(eN,{onClick:e=>s({nodes:[e.props.node],edges:[]}),children:"Copy (⌘+c)"})]})})},or=e=>eC(({patch:e})=>e).audioNodes.get(e),on=e=>{let o=eC(({updateNodeData:e})=>e),t=f(t=>o(e,{values:t}),[e,o]);return{updateNodeValues:t,updateNodeConfig:f(t=>o(e,{config:t}),[e,o]),updateNodeLabel:f(t=>o(e,{label:t}),[e,o])}};let oi=c.input`
290
+ `;var e4=({isOpen:e,closeMenu:o})=>{let n=e$(),i=eb(e=>e.setProject),l=f(null),a=m(e=>{let[t]=e||[];t.text().then(JSON.parse).then(e=>{i(e),o()}).catch(console.error)},[i,o]);return e?t(eS,{onClose:o,children:r(e3,{theme:n,children:[t("input",{onChange:({target:{files:e}})=>a(e),ref:l,type:"file",className:"hidden",style:{display:"none"},accept:".json"}),t(Z,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{l.current?.click()},onDrop:e=>a(e),children:r(e8,{theme:n,children:[t(e6,{}),t(e9,{children:"click or drop file here"})]})})]})}):null};let e7=e=>new Promise((o,t)=>{let r=new FileReader;r.readAsDataURL(e),r.onload=()=>o(r.result?.toString()||""),r.onerror=e=>t(e)}),e5=c.div`
291
+ display: flex;
292
+ align-items: center;
293
+ justify-content: center;
294
+ height: 100%;
295
+ width: 100%;
296
+
297
+ .drop-zone-wrapper {
298
+ width: 80%;
299
+ height: 80%;
300
+ }
301
+
302
+ .drop-zone {
303
+ height: 100%;
304
+ width: 100%;
305
+ border-style: dashed;
306
+ border-width: 2px;
307
+ border-color: ${({theme:e})=>e.colors.highlight2};
308
+ opacity: 0.5;
309
+ cursor: pointer;
310
+ }
311
+
312
+ .drop-zone:hover,
313
+ .drop-zone-drag-over {
314
+ opacity: 1;
315
+ }
316
+ `,oe=c.div`
317
+ display: flex;
318
+ flex-wrap: wrap;
319
+ align-items: center;
320
+ justify-content: center;
321
+ height: 100%;
322
+ width: 100%;
323
+ `,oo=c(ee)`
324
+ width: 100%;
325
+ height: 8rem;
326
+ `,ot=c.div`
327
+ font-size: 2rem;
328
+ `;var or=({isOpen:e,closeMenu:o})=>{let n=e$();eb(({setGraph:e})=>e),eb(e=>e.setEditorState);let i=eb(e=>e.addFile),l=f(null),a=m(async e=>{let[t]=e||[],r=await e7(t);i({type:"audio",id:`audio-file-${+new Date}`,name:t.name,file:r}),o()},[i,o]);return e?t(eS,{onClose:o,children:r(e5,{theme:n,children:[t("input",{onChange:({target:{files:e}})=>a(e),ref:l,type:"file",className:"hidden",style:{display:"none"},accept:".wav,.mp3,.ogg"}),t(Z,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{l.current?.click()},onDrop:e=>a(e),children:r(oe,{theme:n,children:[t(oo,{}),t(ot,{children:"click or drop file here"})]})})]})}):null};let on="editor-menu";var oi=({editorContextMenu:e=[]})=>{let o=e$(),[i,l]=h({x:0,y:0}),[a,s]=h(!1),[d,c]=h(!1),[p,f]=h(!1),[v,y]=h(!1),w=m((e,o)=>{l({x:e,y:o}),s(!0)},[s]),x=eb(e=>e.pasteBuffer),{screenToFlowPosition:b}=M(),C=m(e=>{let{x:o,y:t}=b(e);x(o,t)},[s,b]),$=eb(({clearGraph:e})=>e),k=eb(e=>e.getEditorState),P=eb(e=>e.getProject),N=m(()=>{$()},[$]),z=eb(e=>e.toggleHelp),j=eb(e=>e.history.back),E=eb(e=>e.history.forward),F=eb(e=>e.history.pointer),S=eb(e=>e.history.buffer),T=eb(e=>e.copySelectedItems),D=eb(e=>e.nodes),A=u(()=>D.filter(({selected:e})=>e),[D]),O=eb(e=>e.copyBuffer),_=M(),I=m(()=>{q(JSON.stringify({...k()},null,2),"web-noise-patch.json")},[k,_]),L=m(()=>{q(JSON.stringify({...P()},null,2),"web-noise-project.json")},[k,_]);return g(()=>(K("command+shift+a",()=>(w(200,50),!1)),K("shift+/",()=>(z(),!1)),K("command+z",()=>(j(),!1)),K("command+shift+z",()=>(E(),!1)),K("command+c",()=>(T(),!1)),K("command+v",()=>(C({x:200,y:50}),!1)),()=>{K.unbind()}),[w,C]),r(n,{children:[t(eK,{isOpen:a,closeMenu:()=>s(!1),mousePosition:i}),t(e2,{isOpen:d,closeMenu:()=>c(!1)}),t(e4,{isOpen:p,closeMenu:()=>f(!1)}),t(or,{isOpen:v,closeMenu:()=>y(!1)}),r(eP,{id:on,animation:!1,colors:o.colors,children:[t(ek,{onClick:({triggerEvent:{clientX:e,clientY:o}})=>w(e,o),children:"Add Node (⌘+⇧+A)"}),t(Y,{}),t(ek,{onClick:N,children:"Delete All"}),t(Y,{}),t(ek,{onClick:I,children:"Download patch"}),t(ek,{onClick:()=>c(!0),children:"Upload patch"}),t(Y,{}),t(ek,{onClick:L,children:"Download project"}),t(ek,{onClick:()=>f(!0),children:"Upload project"}),t(Y,{}),t(ek,{onClick:()=>y(!0),children:"Upload Audio File"}),t(Y,{}),t(ek,{disabled:0===F,onClick:j,children:"Undo (⌘+z)"}),t(ek,{disabled:F===S.length,onClick:E,children:"Redo (⌘+⇧+Z)"}),t(Y,{}),t(ek,{disabled:!A.length,onClick:T,children:"Copy Selected (⌘+c)"}),t(ek,{disabled:!O.nodes.length,onClick:({triggerEvent:{clientX:e,clientY:o}})=>C({x:e,y:o}),children:"Paste (⌘+v)"}),t(Y,{}),e.map((e,o)=>t(ek,{children:e},o)),t(Y,{}),t(ek,{onClick:z,children:"Help (⇧+?)"})]})]})};let ol="editor-node-menu";var oa=e=>{let o=e$(),i=eb(e=>e.removeNodes),l=eb(e=>e.addNodeToControlPanel),a=eb(e=>e.removeNodeFromControlPanel),s=eb(e=>e.copy),d=eb(e=>e.nodesConfiguration),c=eb(e=>e.controlPanel.nodes),p=m(({props:e})=>!!e?.node.type&&!!c.find(({id:o})=>o===e.node.id),[c]),h=m(({props:e})=>{if(!e?.node.type)return!1;let o=d[e.node.type];return!!o?.controlPanelNode},[d]);return t(n,{children:r(eP,{id:ol,animation:!1,colors:o.colors,children:[t(ek,{onClick:e=>i([e.props.node]),children:"Delete Node (DEL)"}),t(ek,{hidden:(...e)=>!h(...e)||p(...e),onClick:e=>l(e.props.node),children:"Add To Control Panel"}),t(ek,{hidden:(...e)=>!h(...e)||!p(...e),onClick:e=>a(e.props.node),children:"Remove From Control Panel"}),t(ek,{onClick:e=>s({nodes:[e.props.node],edges:[]}),children:"Copy (⌘+c)"})]})})},os=e=>eb(({patch:e})=>e).audioNodes.get(e),od=e=>{let o=eb(({updateNodeData:e})=>e),t=m(t=>o(e,{values:t}),[e,o]);return{updateNodeValues:t,updateNodeConfig:m(t=>o(e,{config:t}),[e,o]),updateNodeLabel:m(t=>o(e,{label:t}),[e,o])}};let oc=c.input`
291
329
  width: 100%;
292
330
  background: none;
293
331
  border: none;
@@ -316,7 +354,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
316
354
  padding: 0.3rem;
317
355
  border-radius: 0.2rem;
318
356
  }
319
- `;var ol=({onChange:e,value:o="",className:r})=>{let n=m(null),[i,l]=h(!1),a=f(e=>{e.target?.select(),l(!0)},[l]),s=f(()=>{window.getSelection()?.collapseToEnd(),l(!1)},[l]),d=f(()=>{s(),n.current&&e(n.current.value)},[n,s,e]),c=f(()=>{s(),n.current&&o&&(n.current.value=o)},[n,s,o]);return u(()=>{n.current&&(n.current.value=o)},[o,n]),t(oi,{ref:n,type:"text",readOnly:!i,onDoubleClick:e=>a(e),onBlur:d,onKeyDown:e=>{switch(e.key){case"Escape":c();break;case"Enter":d()}},className:r})};let oa=i(c.div`
357
+ `;var op=({onChange:e,value:o="",className:r})=>{let n=f(null),[i,l]=h(!1),a=m(e=>{e.target?.select(),l(!0)},[l]),s=m(()=>{window.getSelection()?.collapseToEnd(),l(!1)},[l]),d=m(()=>{s(),n.current&&e(n.current.value)},[n,s,e]),c=m(()=>{s(),n.current&&o&&(n.current.value=o)},[n,s,o]);return g(()=>{n.current&&(n.current.value=o)},[o,n]),t(oc,{ref:n,type:"text",readOnly:!i,onDoubleClick:e=>a(e),onBlur:d,onKeyDown:e=>{switch(e.key){case"Escape":c();break;case"Enter":d()}},className:r})};let oh=i(c.div`
320
358
  height: 100%;
321
359
  width: 100%;
322
360
  overflow: scroll;
@@ -344,13 +382,13 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
344
382
  a {
345
383
  color: ${({theme:e})=>e.colors.accent1};
346
384
  }
347
- `);var os=({isOpen:e,onClose:o,type:r,node:n})=>{let{info:i,portsDescription:l}=eC(e=>e.nodesConfiguration[r]),a=g(()=>{let e=[],o=n.inputs;if(o)for(let t in e.push("## Inputs"),o){let r=o[t];e.push(`### *${t}*`);let n=l?.inputs?.[t];n&&e.push(n),Array.isArray(r.type)?e.push(`**Types**: \`${r.type.join(", ")}\``):e.push(`**Type**: \`${r.type||"unknown"}\``),r.range&&e.push(`**Range**: \`[${r.range[0]}, ${r.range[1]}]\``),void 0!==r.defaultValue&&e.push(`**Default**: \`${r.defaultValue}\``)}let t=n.outputs;if(t)for(let o in e.push("## Outputs"),t){let r=t[o];e.push(`### *${o}*`);let n=l?.outputs?.[o];n&&e.push(n),Array.isArray(r.type)?e.push(`**Types**: \`${r.type.join(", ")}\``):e.push(`**Type**: \`${r.type||"unknown"}\``),r.range&&e.push(`**Range**: \`[${r.range[0]}, ${r.range[1]}]\``),void 0!==r.defaultValue&&e.push(`**Default**: \`${r.defaultValue}\``)}return e.join("\n\n")},[n,l]);return e?t(eF,{onClose:o,children:t(oa,{dangerouslySetInnerHTML:{__html:es((i||"")+"\n\n"+a||"")}})}):null};let od=c.div`
385
+ `);var og=({isOpen:e,onClose:o,type:r,node:n})=>{let{info:i,portsDescription:l}=eb(e=>e.nodesConfiguration[r]),a=u(()=>{let e=[],o=n.inputs;if(o)for(let t in e.push("## Inputs"),o){let r=o[t];e.push(`### *${t}*`);let n=l?.inputs?.[t];n&&e.push(n),Array.isArray(r.type)?e.push(`**Types**: \`${r.type.join(", ")}\``):e.push(`**Type**: \`${r.type||"unknown"}\``),r.range&&e.push(`**Range**: \`[${r.range[0]}, ${r.range[1]}]\``),void 0!==r.defaultValue&&e.push(`**Default**: \`${r.defaultValue}\``)}let t=n.outputs;if(t)for(let o in e.push("## Outputs"),t){let r=t[o];e.push(`### *${o}*`);let n=l?.outputs?.[o];n&&e.push(n),Array.isArray(r.type)?e.push(`**Types**: \`${r.type.join(", ")}\``):e.push(`**Type**: \`${r.type||"unknown"}\``),r.range&&e.push(`**Range**: \`[${r.range[0]}, ${r.range[1]}]\``),void 0!==r.defaultValue&&e.push(`**Default**: \`${r.defaultValue}\``)}return e.join("\n\n")},[n,l]);return e?t(eS,{onClose:o,children:t(oh,{dangerouslySetInnerHTML:{__html:ep((i||"")+"\n\n"+a||"")}})}):null};let ou=c.div`
348
386
  background-color: var(--leva-colors-elevation1);
349
- `,oc=c(od)`
387
+ `,om=c(ou)`
350
388
  padding: 2rem 5rem;
351
- `,op=c(od)`
389
+ `,of=c(ou)`
352
390
  padding: 1rem 2rem;
353
- `,oh=c(b)`
391
+ `,ov=c(x)`
354
392
  font-size: 1.2rem;
355
393
  opacity: 0.4;
356
394
  width: 1rem;
@@ -358,7 +396,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
358
396
  opacity: 1;
359
397
  cursor: pointer;
360
398
  }
361
- `,ou=c(w)`
399
+ `,oy=c(b)`
362
400
  font-size: 1.2rem;
363
401
  opacity: 0.4;
364
402
  width: 1rem;
@@ -366,12 +404,12 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
366
404
  opacity: 1;
367
405
  cursor: pointer;
368
406
  }
369
- `,og=c.div`
407
+ `,ow=c.div`
370
408
  position: relative;
371
409
  font-family: var(--leva-fonts-mono);
372
410
  font-size: var(--leva-fontSizes-root);
373
411
  background-color: var(--leva-colors-elevation1);
374
- `,of=c(og)`
412
+ `,ox=c(ow)`
375
413
  display: flex;
376
414
  height: var(--leva-sizes-titleBarHeight);
377
415
  touch-action: none;
@@ -381,38 +419,38 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
381
419
  color: var(--leva-colors-highlight1);
382
420
  padding: 0 0.4rem;
383
421
  gap: 0.3rem;
384
- `,om=c(og)(({theme:e})=>`
422
+ `,ob=c(ow)(({theme:e})=>`
385
423
  display: grid;
386
424
  grid-template-areas: "inputs outputs";
387
425
  background: ${e.colors.elevation2};
388
426
  border-bottom: 1px solid ${e.colors.elevation1};
389
427
  color: ${e.colors.highlight3};
390
428
  font-size: 0.6rem;
391
- `),ov=c.div`
429
+ `),oC=c.div`
392
430
  grid-area: inputs;
393
431
  text-align: left;
394
- `,oy=c.div`
432
+ `,o$=c.div`
395
433
  grid-area: outputs;
396
434
  text-align: right;
397
- `,ox=c.div`
435
+ `,ok=c.div`
398
436
  position: relative;
399
437
  padding: 5px 10px;
400
- `,ob={[ew.Audio]:"#4ade80",[ew.Gate]:"#c084fc",[ew.Number]:"#38bdf8",[ew.Any]:"#ffffff"},ow=i(c(D,{shouldForwardProp:e=>"portType"!==e})`
401
- --port-color: ${e=>{if(!e.portType)return e.theme.colors.highlight2;if(!Array.isArray(e.portType))return ob[e.portType];{let o=e.portType.map(e=>ob[e]);return`linear-gradient(0.25turn, ${o.join(", ")});`}}};
438
+ `,oP={[ex.Audio]:"#4ade80",[ex.Gate]:"#c084fc",[ex.Number]:"#38bdf8",[ex.Any]:"#ffffff"},oN=i(c(O,{shouldForwardProp:e=>"portType"!==e})`
439
+ --port-color: ${e=>{if(!e.portType)return e.theme.colors.highlight2;if(!Array.isArray(e.portType))return oP[e.portType];{let o=e.portType.map(e=>oP[e]);return`linear-gradient(0.25turn, ${o.join(", ")});`}}};
402
440
  border-color: var(--port-color);
403
441
  background: var(--port-color);
404
442
  box-shadow: 0px 0px 0px 1px ${({theme:e})=>e.colors.elevation2} inset;
405
- `),oC=i(c(ow)`
443
+ `),oz=i(c(oN)`
406
444
  left: -3px;
407
- `),o$=({...e})=>t(oC,{...e,type:"target",position:T.Left}),ok=i(c(ow)`
445
+ `),oj=({...e})=>t(oz,{...e,type:"target",position:A.Left}),oE=i(c(oN)`
408
446
  right: -3px;
409
- `),oN=e=>t(ok,{...e,type:"source",position:T.Right}),oP=({className:e,...o})=>t(of,{...o,className:[e,eu].join(" ")}),oz=e=>eC(o=>o.nodesConfiguration[e]),oA=e=>{let{id:o,children:n,selected:i,...l}=e,a=ek(),s=eC(({getNode:e})=>e),d=eC(e=>e.nodesConfiguration),[c,p]=h(!1),{info:u}=oz(e.type),f=g(()=>d[e.type].resizable??!1,[d,e.type]),{updateNodeLabel:m,updateNodeConfig:v}=on(o),{data:y}=s(o)||{},x=or(o),{ConfigNode:b}=(e=>{let{configNode:o}=oz(e);return{ConfigNode:o}})(l.type),[w,C]=h(!1);if(!x)return t(oc,{className:eu,children:"can't find audio node"});if(x.loading)return t(oc,{className:eu,children:"loading"});if(x.error)return r(op,{className:eu,children:["error: ",x.error.toString()]});if(!x.node)return t(oc,{className:eu,children:"can't find audio node"});let $=y?.config?.size,{node:{inputs:k,outputs:N}}=x;return r(od,{children:[r(oP,{children:[u&&t(ou,{onClickCapture:()=>p(!0)}),t(ol,{value:y?.label??"No Name",onChange:m}),b&&t(oh,{onClickCapture:()=>C(e=>!e)})]}),r(om,{theme:a,children:[t(ov,{children:k?Object.keys(k).map((e,o)=>r(ox,{children:[t(o$,{id:e,portType:k[e].type}),t("span",{children:e})]},o)):null}),t(oy,{children:N?Object.keys(N).map((e,o)=>r(ox,{children:[t(oN,{id:e,portType:N[e].type}),t("span",{children:e})]},o)):null})]}),b&&w&&i?t(b,{...e}):f?t(et,{size:$,minWidth:180,minHeight:30,enable:{bottom:!0,bottomRight:!0,right:!0},onResizeStop:(e,o,t,r)=>{let n=$?{width:$.width+r.width,height:$.height+r.height}:t.getBoundingClientRect();v({...y?.config,size:n})},children:n}):n,t(os,{isOpen:c,type:e.type,onClose:()=>p(!1),node:x.node})]})},oj=c.div`
447
+ `),oF=e=>t(oE,{...e,type:"source",position:A.Right}),oS=({className:e,...o})=>t(ox,{...o,className:[e,eh].join(" ")}),oT=e=>eb(o=>o.nodesConfiguration[e]),oD=e=>{let{id:o,children:n,selected:i,...l}=e,a=e$(),s=eb(({getNode:e})=>e),d=eb(e=>e.nodesConfiguration),[c,p]=h(!1),{info:g}=oT(e.type),m=u(()=>d[e.type].resizable??!1,[d,e.type]),{updateNodeLabel:f,updateNodeConfig:v}=od(o),{data:y}=s(o)||{},w=os(o),{ConfigNode:x}=(e=>{let{configNode:o}=oT(e);return{ConfigNode:o}})(l.type),[b,C]=h(!1);if(!w)return t(om,{className:eh,children:"can't find audio node"});if(w.loading)return t(om,{className:eh,children:"loading"});if(w.error)return r(of,{className:eh,children:["error: ",w.error.toString()]});if(!w.node)return t(om,{className:eh,children:"can't find audio node"});let $=y?.config?.size,{node:{inputs:k,outputs:P}}=w;return r(ou,{children:[r(oS,{children:[g&&t(oy,{onClickCapture:()=>p(!0)}),t(op,{value:y?.label??"No Name",onChange:f}),x&&t(ov,{onClickCapture:()=>C(e=>!e)})]}),r(ob,{theme:a,children:[t(oC,{children:k?Object.keys(k).map((e,o)=>r(ok,{children:[t(oj,{id:e,portType:k[e].type}),t("span",{children:e})]},o)):null}),t(o$,{children:P?Object.keys(P).map((e,o)=>r(ok,{children:[t(oF,{id:e,portType:P[e].type}),t("span",{children:e})]},o)):null})]}),x&&b&&i?t(x,{...e}):m?t(ei,{size:$,minWidth:180,minHeight:30,enable:{bottom:!0,bottomRight:!0,right:!0},onResizeStop:(e,o,t,r)=>{let n=$?{width:$.width+r.width,height:$.height+r.height}:t.getBoundingClientRect();v({...y?.config,size:n})},children:n}):n,t(og,{isOpen:c,type:e.type,onClose:()=>p(!1),node:w.node})]})},oM=c.div`
410
448
  width: 100%;
411
449
  padding: 0.4rem 0;
412
450
  white-space: nowrap;
413
451
  overflow: hidden;
414
452
  text-overflow: ellipsis;
415
- `,oE=c(oP)`
453
+ `,oA=c(oS)`
416
454
  display: flex;
417
455
  gap: 0.1rem;
418
456
  padding: 0 0.4rem;
@@ -420,13 +458,13 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
420
458
  font-size: 0.6rem;
421
459
  height: auto;
422
460
  min-width: 0;
423
- `,oM=c.div`
461
+ `,oO=c.div`
424
462
  display: flex;
425
463
  align-items: center;
426
464
  height: 70%;
427
465
  width: auto;
428
466
  gap: 0.4rem;
429
- `,oF=c.span`
467
+ `,o_=c.span`
430
468
  width: auto;
431
469
  height: 100%;
432
470
  cursor: pointer;
@@ -438,11 +476,11 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
438
476
  color: ${({theme:e})=>e.colors.highlight2};
439
477
  cursor: pointer;
440
478
  }
441
- `,oS=c.div`
479
+ `,oI=c.div`
442
480
  height: 100%;
443
481
  display: grid;
444
482
  grid-template-rows: auto 1fr;
445
- `,oT=e=>{let{node:o}=e,r=eC(e=>e.getControlPanelNode),n=g(()=>r(o),[o]);return n?t(n,{...e}):null};var oD=e=>{let{node:o,showControls:n,onDelete:i}=e,l=ek(),{id:a}=o,{node:s}=or(a)||{},{updateNodeValues:d}=on(a);return r(oS,{theme:l,children:[r(oE,{theme:l,children:[t(oj,{children:o.data.label}),n&&r(oM,{children:[t(oF,{theme:l,children:t(x,{className:"grid-item-handle"})}),t(oF,{theme:l,children:t(y,{onClick:()=>i(o)})})]})]}),t(oT,{node:o,audioNode:s,updateNodeValues:d})]})};let oH=c.div`
483
+ `,oL=e=>{let{node:o}=e,r=eb(e=>e.getControlPanelNode),n=u(()=>r(o),[o]);return n?t(n,{...e}):null};var oH=e=>{let{node:o,showControls:n,onDelete:i}=e,l=e$(),{id:a}=o,{node:s}=os(a)||{},{updateNodeValues:d}=od(a);return r(oI,{theme:l,children:[r(oA,{theme:l,children:[t(oM,{children:o.data.label}),n&&r(oO,{children:[t(o_,{theme:l,children:t(w,{className:"grid-item-handle"})}),t(o_,{theme:l,children:t(y,{onClick:()=>i(o)})})]})]}),t(oL,{node:o,audioNode:s,updateNodeValues:d})]})};let oR=c.div`
446
484
  position: fixed;
447
485
  z-index: 5;
448
486
  box-shadow: 0px 1px 2px ${({theme:e})=>e.colors.elevation2};
@@ -462,34 +500,34 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
462
500
  color: ${({theme:e})=>e.colors.highlight2};
463
501
  cursor: pointer;
464
502
  }
465
- `,oO=c(oM)`
503
+ `,oW=c(oO)`
466
504
  height: 80%;
467
- `,o_=c(oF)`
505
+ `,oB=c(o_)`
468
506
  font-size: 1rem;
469
507
  display: flex;
470
508
  align-items: center;
471
- `,oI=c(oE)`
509
+ `,oG=c(oA)`
472
510
  grid-template-columns: 1fr auto;
473
511
  border-bottom: 1px solid ${({theme:e})=>e.colors.elevation3};
474
512
  font-size: 0.7rem;
475
- `,oW=c(oj)`
513
+ `,oV=c(oM)`
476
514
  text-align: center;
477
- `,oL=c.div`
515
+ `,oU=c.div`
478
516
  height: 100%;
479
517
  width: 100%;
480
518
  padding: 0.3rem 0.4rem;
481
519
  box-sizing: border-box;
482
- `,oR=c.div`
520
+ `,oJ=c.div`
483
521
  height: auto;
484
522
  padding: 0;
485
523
  max-height: 95vh;
486
524
  overflow-y: scroll;
487
525
  border: 1px solid ${({theme:e})=>e.colors.elevation3};
488
- `,oB=c.div`
526
+ `,oX=c.div`
489
527
  padding: 1rem 0;
490
528
  font-family: var(--leva-fonts-mono);
491
529
  font-size: 0.8rem;
492
- `,oV=c.div`
530
+ `,oY=c.div`
493
531
  display: flex;
494
532
  align-items: center;
495
533
  gap: 0.5rem;
@@ -498,7 +536,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
498
536
  &:hover {
499
537
  color: ${({theme:e})=>e.colors.highlight2};
500
538
  }
501
- `,oG=c.div`
539
+ `,oq=c.div`
502
540
  position: absolute;
503
541
  height: 1rem;
504
542
  top: 0;
@@ -506,14 +544,14 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
506
544
  margin: auto;
507
545
  left: 0.5rem;
508
546
  border-right: 1px solid ${({theme:e})=>e.colors.whitePrimary};
509
- `,oU=c.div`
547
+ `,oK=c.div`
510
548
  box-sizing: border-box;
511
549
  overflow: hidden;
512
550
  .react-resizable-handle:after {
513
551
  border-color: ${({theme:e})=>e.colors.whitePrimary};
514
552
  border-width: 1px;
515
553
  }
516
- `;var oJ=()=>{let e=ek(),o=m(null),i=eC(e=>e.nodes),{show:l,nodes:a,size:s}=eC(e=>e.controlPanel),{width:d=200,height:c}=s,p=g(()=>{let e=a.map(({id:e})=>e);return i.filter(({id:o})=>e.includes(o))},[i,a]),u=eC(e=>e.showControlPanel),f=eC(e=>e.hideControlPanel),v=eC(e=>e.setControlPanelNodes),x=eC(e=>e.setControlPanelSize),b=eC(e=>e.removeNodeFromControlPanel),[w,C]=h(!0),$=g(()=>{let e=a.reduce((e,{height:o=ef,x:t,y:r=0})=>{let n=r+o;return n>e?n:e},0);return a.map(({id:o,width:t,height:r,x:n,y:i})=>({i:o,w:t||4,h:r||6,x:n??0,y:i??e}))},[a]);return p.length?r(n,{children:[t(oH,{theme:e,ref:o,onClick:u,children:t(el,{})}),r(ea,{open:l,onClose:f,direction:"left",className:"",size:"auto",enableOverlay:!1,style:{background:e.colors.elevation1,position:"absolute"},children:[r(oI,{theme:e,children:[t(oW,{children:"Control Panel"}),t(oO,{children:t(o_,{onClick:f,theme:e,children:t(y,{})})})]}),r(oL,{children:[t(oB,{children:w?r(oV,{theme:e,onClick:()=>C(!1),children:[t(en,{}),"Unlock grid"]}):r(oV,{theme:e,onClick:()=>C(!0),children:[t(ei,{}),"Lock grid"]})}),t(et,{enable:{top:!1,right:!w,bottom:!1,left:!1,topRight:!1,bottomRight:!1,bottomLeft:!1,topLeft:!1},handleComponent:{right:t(oG,{theme:e})},minWidth:120,size:{width:d,height:"auto"},onResizeStop:(e,o,t,r)=>{x({width:d+r.width,height:c+r.height})},children:t(oR,{theme:e,children:t(er,{layout:$,className:"layout",cols:4,rowHeight:ef,width:d,margin:[0,0],isResizable:!w,draggableHandle:".grid-item-handle",onLayoutChange:e=>{requestAnimationFrame(()=>{v(e.map(({i:e,w:o,h:t,x:r,y:n})=>({id:e,width:o,height:t,x:r,y:n})))})},children:p.map(o=>t(oU,{theme:e,children:t(oD,{node:o,showControls:!w,onDelete:b})},o.id))})})})]})]})]}):null},oX={};oX="# Quick start\n\n## Add node\n - Mouse right click\n - Select **'Add Node'** from context menu\n\n ### &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or\n\n - Press `CMD+SHIFT+A`\n\n<br/>\n\n## Connect nodes\n - Mouse left click and hold on source port\n - Drop on target port\n\n<br/>\n\n## Delete Node or Connection\n - Mouse right click on node/connection\n - Select **'Delete Node'**/**'Delete Connection'** from context menu\n\n ### &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or\n\n - Mouse left click on node/connection, then press `Backspace`\n\n<br/>\n\n\n## Move node\n - Drag and Drop\n\n";let oY=i(c.div`
554
+ `;var oQ=()=>{let e=e$(),o=f(null),i=eb(e=>e.nodes),{show:l,nodes:a,size:s}=eb(e=>e.controlPanel),{width:d=200,height:c}=s,p=u(()=>{let e=a.map(({id:e})=>e);return i.filter(({id:o})=>e.includes(o))},[i,a]),g=eb(e=>e.showControlPanel),m=eb(e=>e.hideControlPanel),v=eb(e=>e.setControlPanelNodes),w=eb(e=>e.setControlPanelSize),x=eb(e=>e.removeNodeFromControlPanel),[b,C]=h(!0),$=u(()=>{let e=a.reduce((e,{height:o=eu,x:t,y:r=0})=>{let n=r+o;return n>e?n:e},0);return a.map(({id:o,width:t,height:r,x:n,y:i})=>({i:o,w:t||4,h:r||6,x:n??0,y:i??e}))},[a]);return p.length?r(n,{children:[t(oR,{theme:e,ref:o,onClick:g,children:t(ed,{})}),r(ec,{open:l,onClose:m,direction:"left",className:"",size:"auto",enableOverlay:!1,style:{background:e.colors.elevation1,position:"absolute"},children:[r(oG,{theme:e,children:[t(oV,{children:"Control Panel"}),t(oW,{children:t(oB,{onClick:m,theme:e,children:t(y,{})})})]}),r(oU,{children:[t(oX,{children:b?r(oY,{theme:e,onClick:()=>C(!1),children:[t(ea,{}),"Unlock grid"]}):r(oY,{theme:e,onClick:()=>C(!0),children:[t(es,{}),"Lock grid"]})}),t(ei,{enable:{top:!1,right:!b,bottom:!1,left:!1,topRight:!1,bottomRight:!1,bottomLeft:!1,topLeft:!1},handleComponent:{right:t(oq,{theme:e})},minWidth:120,size:{width:d,height:"auto"},onResizeStop:(e,o,t,r)=>{w({width:d+r.width,height:c+r.height})},children:t(oJ,{theme:e,children:t(el,{layout:$,className:"layout",cols:4,rowHeight:eu,width:d,margin:[0,0],isResizable:!b,draggableHandle:".grid-item-handle",onLayoutChange:e=>{requestAnimationFrame(()=>{v(e.map(({i:e,w:o,h:t,x:r,y:n})=>({id:e,width:o,height:t,x:r,y:n})))})},children:p.map(o=>t(oK,{theme:e,children:t(oH,{node:o,showControls:!b,onDelete:x})},o.id))})})})]})]})]}):null},oZ={};oZ="# Quick start\n\n## Add node\n - Mouse right click\n - Select **'Add Node'** from context menu\n\n ### &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or\n\n - Press `CMD+SHIFT+A`\n\n<br/>\n\n## Connect nodes\n - Mouse left click and hold on source port\n - Drop on target port\n\n<br/>\n\n## Delete Node or Connection\n - Mouse right click on node/connection\n - Select **'Delete Node'**/**'Delete Connection'** from context menu\n\n ### &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or\n\n - Mouse left click on node/connection, then press `Backspace`\n\n<br/>\n\n\n## Move node\n - Drag and Drop\n\n<br/>\n\n## Upload file\n - Drag and drop audio or patch files onto the application\n - Uploaded file appears as a new tab in the tabs bar at the top\n - Click on the tab to view or edit the file\n\n\n";let o0=i(c.div`
517
555
  font-family: var(--leva-fonts-mono);
518
556
  font-size: 0.7rem;
519
557
  box-sizing: border-box;
@@ -527,13 +565,13 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
527
565
  color: ${({theme:e})=>e.colors.accent3};
528
566
  filter: hue-rotate(180deg);
529
567
  }
530
- `),oq=i(c.div`
568
+ `),o1=i(c.div`
531
569
  padding: 1rem;
532
570
  height: 100%;
533
571
  width: 100%;
534
572
  box-sizing: border-box;
535
573
  overflow: hidden;
536
- `);var oK=()=>{let e=eC(e=>e.isHelpShown),o=eC(e=>e.toggleHelp);return e?t(eF,{onClose:()=>{o()},children:t(oq,{children:t(oY,{dangerouslySetInnerHTML:{__html:es(ed(oX))},onWheelCapture:e=>e.stopPropagation()})})}):null};let oQ=()=>t(n,{children:t(H,{onClick:eC(e=>e.toggleHelp),children:t(Q,{})})}),oZ=c.div`
574
+ `);var o2=()=>{var e;let o=eb(e=>e.isHelpShown),r=eb(e=>e.toggleHelp);return o?t(eS,{onClose:()=>{r()},children:t(o1,{children:t(o0,{dangerouslySetInnerHTML:{__html:ep((e=oZ)&&e.__esModule?e.default:e)},onWheelCapture:e=>e.stopPropagation()})})}):null};let o3=()=>t(n,{children:t(_,{onClick:eb(e=>e.toggleHelp),children:t(eo,{})})}),o8=c.div`
537
575
  position: fixed;
538
576
  z-index: ${({theme:e})=>e.zIndex.resumeContextLayout};
539
577
  width: 100%;
@@ -547,34 +585,44 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
547
585
  justify-content: center;
548
586
  color: ${({theme:e})=>e.colors.whitePrimary};
549
587
  cursor: pointer;
550
- `,o0=c.div`
588
+ `,o6=c.div`
551
589
  display: flex;
552
590
  width: 100%;
553
591
  align-items: center;
554
592
  justify-content: center;
555
- `,o1=c.div`
593
+ `,o9=c.div`
556
594
  font-family: var(--leva-fonts-mono);
557
595
  font-size: 2rem;
558
- `,o2=c(Z)`
596
+ `,o4=c(et)`
559
597
  width: 7rem;
560
598
  height: 7rem;
561
- `;var o3=()=>{let e=ek(),o=eC(({patch:e})=>e).audioContext,[n,i]=h("running"===o.state);return n?null:r(oZ,{theme:e,onClick:()=>{o.resume(),i(!0)},children:[t(o0,{children:t(o1,{theme:e,children:"Click anywhere to resume audio context"})}),t(o0,{children:t(o2,{})})]})},o9=()=>{let e=eC(({setConfig:e})=>e),{showMinimap:o}=eC(({config:e})=>e);return t(H,{onClick:()=>e({showMinimap:!o}),children:o?t(ee,{}):t(eo,{})})},o8=({id:e,sourceX:o,sourceY:i,targetX:l,targetY:a,sourcePosition:s,targetPosition:d,style:c={},data:p,markerStart:h,markerEnd:g,source:f,target:m,sourceHandleId:v,targetHandleId:y,selected:x})=>{let b=ek(),w=eC(({getNode:e})=>e),C=w(f),$=w(m),k=C?.selected||$?.selected;u(()=>{if(v&&y)return console.log(`connected ${f} to ${m}`),()=>{console.log(`disconnected ${f} from ${m}`)}},[f,v,m,y]);let[N]=O({targetX:l,targetY:a,targetPosition:d,sourceX:o,sourceY:i,sourcePosition:s});return r(n,{children:[t("path",{id:e,style:{...c,stroke:x?b.colors.accent2:k?b.colors.highlight3:b.colors.highlight2},className:"react-flow__edge-path Wire",d:N,markerEnd:g}),t("path",{style:{...c,strokeWidth:8,color:"transparent",opacity:0,cursor:"pointer"},d:N,markerEnd:g})]})};let o5=(e,o)=>console.log("drag stop",o),o4=(e,o)=>console.log("click",o),o6=[20,20],o7=({editorState:e,plugins:o=[],editorContextMenu:n=[],onChange:i=()=>{},...l})=>{let a=g(()=>({wire:o8}),[]),{nodes:s,edges:d,controlPanel:c,onNodesChange:p,onNodesDelete:m,onEdgesChange:v,onEdgesDelete:y,onConnect:x,setPlugins:b,setViewport:w,viewport:$}=eC(),k=eC(({config:e})=>e),N=eC(({nodeTypes:e})=>e);u(()=>{b(o)},[o]);let[P,F]=h(null);u(()=>{P&&i({nodes:s,edges:d,controlPanel:c,viewport:$})},[s,d,c,$]);let S=f(e=>{P||(F(e),console.log("flow loaded:",e))},[P]),{onContextMenu:T}=(()=>{let{show:e}=B({id:e7});return{onContextMenu:e}})(),{onContextMenu:D}=(()=>{let{show:e}=B({id:oo});return{onContextMenu:f((o,t)=>{o.stopPropagation(),e(o,{props:{node:t}})},[])}})(),{onContextMenu:H}=(()=>{let{show:e}=B({id:ez});return{onContextMenu:f((o,t)=>{o.stopPropagation(),e(o,{props:{edge:t}})},[e])}})();return u(()=>{$&&P?.setViewport($)},[$,P]),z({onEnd:w}),r(C,{nodes:s,edges:d,onNodesChange:p,onNodesDelete:m,onEdgesChange:v,onConnect:x,onNodeDragStop:o5,onEdgesDelete:y,onInit:S,onNodeClick:o4,onContextMenu:T,onNodeContextMenu:D,onEdgeContextMenu:H,nodeTypes:N,edgeTypes:a,snapGrid:o6,defaultViewport:e?.viewport,defaultEdgeOptions:{type:"wire"},snapToGrid:!0,fitView:!0,disableKeyboardA11y:!0,children:[t(A,{variant:j.Dots,gap:12}),k.showMinimap?t(E,{}):null,r(M,{style:{right:"1rem",left:"initial",bottom:"40%",top:"initial"},showInteractive:!1,children:[t(o9,{}),t(oQ,{})]}),t(o3,{}),t(oJ,{}),t(oK,{}),t(oe,{editorContextMenu:n}),t(ot,{}),t(eA,{})]})},te=e=>t(F,{children:t(o7,{...e})}),to={nodes:[],edges:[],controlPanel:{nodes:[],show:!1,size:{width:200,height:100}},viewport:{x:0,y:0,zoom:1.5}},tt=i(c.div`
599
+ `;var o7=()=>{let e=e$(),o=eb(({patch:e})=>e).audioContext,[n,i]=h("running"===o.state);return n?null:r(o8,{theme:e,onClick:()=>{o.resume(),i(!0)},children:[t(o6,{children:t(o9,{theme:e,children:"Click anywhere to resume audio context"})}),t(o6,{children:t(o4,{})})]})},o5=()=>{let e=eb(({setConfig:e})=>e),{showMinimap:o}=eb(({config:e})=>e);return t(_,{onClick:()=>e({showMinimap:!o}),children:o?t(er,{}):t(en,{})})},te=({id:e,sourceX:o,sourceY:i,targetX:l,targetY:a,sourcePosition:s,targetPosition:d,style:c={},data:p,markerStart:h,markerEnd:u,source:m,target:f,sourceHandleId:v,targetHandleId:y,selected:w})=>{let x=e$(),b=eb(({getNode:e})=>e),C=b(m),$=b(f),k=C?.selected||$?.selected;g(()=>{if(v&&y)return console.log(`connected ${m} to ${f}`),()=>{console.log(`disconnected ${m} from ${f}`)}},[m,v,f,y]);let[P]=I({targetX:l,targetY:a,targetPosition:d,sourceX:o,sourceY:i,sourcePosition:s});return r(n,{children:[t("path",{id:e,style:{...c,stroke:w?x.colors.accent2:k?x.colors.highlight3:x.colors.highlight2},className:"react-flow__edge-path Wire",d:P,markerEnd:u}),t("path",{style:{...c,strokeWidth:8,color:"transparent",opacity:0,cursor:"pointer"},d:P,markerEnd:u})]})};let to=(e,o)=>console.log("drag stop",o),tt=(e,o)=>console.log("click",o),tr=[20,20],tn=({editorState:e,plugins:o=[],editorContextMenu:n=[],onChange:i=()=>{},...l})=>{let a=u(()=>({wire:te}),[]),{nodes:s,edges:d,controlPanel:c,onNodesChange:p,onNodesDelete:f,onEdgesChange:v,onEdgesDelete:y,onConnect:w,setPlugins:x,setViewport:b,viewport:C}=eb(),k=eb(({config:e})=>e),P=eb(({nodeTypes:e})=>e);g(()=>{x(o)},[o]);let[N,z]=h(null);g(()=>{N&&i({nodes:s,edges:d,controlPanel:c,viewport:C})},[s,d,c,C]);let D=m(e=>{N||(z(e),console.log("flow loaded:",e))},[N]),{onContextMenu:M}=(()=>{let{show:e}=U({id:on});return{onContextMenu:e}})(),{onContextMenu:A}=(()=>{let{show:e}=U({id:ol});return{onContextMenu:m((o,t)=>{o.stopPropagation(),e(o,{props:{node:t}})},[])}})(),{onContextMenu:O}=(()=>{let{show:e}=U({id:eN});return{onContextMenu:m((o,t)=>{o.stopPropagation(),e(o,{props:{edge:t}})},[e])}})();return g(()=>{C&&N?.setViewport(C)},[C,N]),j({onEnd:b}),r($,{nodes:s,edges:d,onNodesChange:p,onNodesDelete:f,onEdgesChange:v,onConnect:w,onNodeDragStop:to,onEdgesDelete:y,onInit:D,onNodeClick:tt,onContextMenu:M,onNodeContextMenu:A,onEdgeContextMenu:O,nodeTypes:P,edgeTypes:a,snapGrid:tr,defaultViewport:e?.viewport,defaultEdgeOptions:{type:"wire"},snapToGrid:!0,fitView:!0,disableKeyboardA11y:!0,children:[t(E,{variant:F.Dots,gap:12}),k.showMinimap?t(S,{}):null,r(T,{style:{right:"1rem",left:"initial",bottom:"40%",top:"initial"},showInteractive:!1,children:[t(o5,{}),t(o3,{})]}),t(o7,{}),t(oQ,{}),t(o2,{}),t(oi,{editorContextMenu:n}),t(oa,{}),t(ez,{})]})},ti=e=>t(D,{children:t(tn,{...e})}),tl={nodes:[],edges:[],controlPanel:{nodes:[],show:!1,size:{width:200,height:100}},viewport:{x:0,y:0,zoom:1.5}},ta=i(c.div`
562
600
  display: flex;
563
601
  flex-direction: column;
564
602
  height: 100%;
565
603
  width: 100%;
566
- `),tr=i(c.div`
604
+ `),ts=i(c.div`
605
+ position: fixed;
606
+ height: 100%;
607
+ width: 100%;
608
+ background: rgba(0, 0, 0, 0.7);
609
+ color: white;
610
+ display: flex;
611
+ justify-content: center;
612
+ align-items: center;
613
+ font-size: 2rem;
614
+ `),td=i(c.div`
567
615
  height: 100%;
568
616
  width: 100%;
569
617
  display: flex;
570
618
  position: relative;
571
- `),tn=i(c.div`
619
+ `),tc=i(c.div`
572
620
  display: flex;
573
621
  flex: 1;
574
622
  align-items: center;
575
623
  justify-content: center;
576
624
  background: ${({theme:e})=>e.colors.elevation3};
577
- `),ti=i(c.div`
625
+ `),tp=i(c.div`
578
626
  background: ${({theme:e})=>e.colors.elevation2};
579
627
  opacity: 0.7;
580
628
  position: absolute;
@@ -589,12 +637,12 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
589
637
  align-items: center;
590
638
  justify-content: center;
591
639
  font-size: 6rem;
592
- `),tl=e=>{let o=eC(e=>e.pullEditorChanges),i=eC(e=>e.currentFileIndex),[l,a]=h(!0);u(()=>{a(!0),setTimeout(()=>{a(!1)},1600)},[i]);let{file:s}=e;return s?"audio"===s.type?t(tn,{children:t("audio",{src:s.file,controls:!0})}):r(n,{children:[t(te,{...e,onChange:e=>{o()},editorState:s.file||to}),t(ti,{show:l,children:"Loading..."})]}):null},ta=i(c.div`
640
+ `),th=e=>{let o=eb(e=>e.pullEditorChanges),i=eb(e=>e.currentFileIndex),[l,a]=h(!0);g(()=>{a(!0),setTimeout(()=>{a(!1)},1600)},[i]);let{file:s}=e;return s?"audio"===s.type?t(tc,{children:t("audio",{src:s.file,controls:!0})}):r(n,{children:[t(ti,{...e,onChange:e=>{o()},editorState:s.file||tl}),t(tp,{show:l,children:"Loading..."})]}):null},tg=i(c.div`
593
641
  height: 2rem;
594
642
  display: flex;
595
643
  align-items: center;
596
644
  background: ${({theme:e})=>e.colors.elevation2};
597
- `),ts=i(c.div`
645
+ `),tu=i(c.div`
598
646
  display: flex;
599
647
  align-items: center;
600
648
  cursor: pointer;
@@ -611,7 +659,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
611
659
  background-color: ${({theme:e})=>e.colors.elevation1};
612
660
  }
613
661
  }
614
- `),td=i(c.div`
662
+ `),tm=i(c.div`
615
663
  display: flex;
616
664
  align-items: center;
617
665
  height: 100%;
@@ -622,10 +670,10 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
622
670
  &:hover {
623
671
  color: ${({theme:e})=>e.colors.whitePrimary};
624
672
  }
625
- `),tc=i(c(v)`
673
+ `),tf=i(c(v)`
626
674
  height: 40%;
627
675
  width: auto;
628
- `),tp=i(c(y)`
676
+ `),tv=i(c(y)`
629
677
  height: 70%;
630
678
  width: auto;
631
679
  cursor: pointer;
@@ -633,7 +681,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
633
681
  &:hover {
634
682
  color: ${({theme:e})=>e.colors.whitePrimary};
635
683
  }
636
- `),th=()=>({file:to,name:"Unnamed",type:"patch",id:p()});var tu=({...e})=>{let{projectState:o,theme:n}=e,i=eC(e=>e.currentFileIndex),d=eC(e=>e.project.files[e.currentFileIndex]),c=eC(e=>e.setCurrentFileIndex),p=eC(e=>e.project),h=eC(e=>e.setProject),g=eC(e=>e.getProject),f=eC(e=>e.updateFileName),m=eC(e=>e.addFile),v=eC(e=>e.deleteFile),y=eC(e=>e.syncEditorWithCurrentFile),x=eC(e=>e.setEditorState);return eC(e=>e.pullEditorChanges),u(()=>{h(o||{files:[th()]});let e=o?.files[0];e?.file&&e?.type!=="audio"&&x(e.file)},[o]),u(()=>{var e;return e=async(...e)=>{let o=new Request(...e),t=g().files,r=o.url.replace("project://",""),n=t.find(({id:e})=>e===r);return n?ey(n)?new Response(JSON.stringify(n.file??null)):ex(n)?fetch(n.file):new Response(null):new Response(`File not found: ${o.url}`,{status:404})},ec.push(["project://*",e]),()=>{}},[g]),u(()=>{y()},[i,y]),r(l,{theme:n||e$,children:[t(a,{styles:s`
684
+ `),ty=()=>({file:tl,name:"Unnamed",type:"patch",id:p()});var tw=({...e})=>{let{projectState:o,theme:n}=e,i=eb(e=>e.currentFileIndex),d=eb(e=>e.project.files[e.currentFileIndex]),c=eb(e=>e.setCurrentFileIndex),p=eb(e=>e.project),u=eb(e=>e.setProject),m=eb(e=>e.getProject),f=eb(e=>e.updateFileName),v=eb(e=>e.addFile),y=eb(e=>e.deleteFile),w=eb(e=>e.syncEditorWithCurrentFile),x=eb(e=>e.setEditorState);eb(e=>e.pullEditorChanges);let[b,$]=h(!1);return g(()=>{u(o||{files:[ty()]});let e=o?.files[0];e?.file&&e?.type!=="audio"&&x(e.file)},[o]),g(()=>(C("project://*",async(...e)=>{let o=new Request(...e),t=m().files,r=o.url.replace("project://",""),n=t.find(({id:e})=>e===r);return n?ev(n)?new Response(JSON.stringify(n.file??null)):ey(n)?fetch(n.file):new Response(null):new Response(`File not found: ${o.url}`,{status:404})}),()=>{}),[m]),g(()=>{w()},[i,w]),r(l,{theme:n||eC,children:[t(a,{styles:s`
637
685
  :root {
638
686
  --leva-colors-elevation1: #292d39;
639
687
  --leva-colors-elevation2: #181c20;
@@ -690,5 +738,5 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
690
738
  --leva-fontWeights-folder: normal;
691
739
  --leva-fontWeights-button: normal;
692
740
  }
693
- `}),r(tt,{children:[r(ta,{children:[p.files.map((e,o)=>r(ts,{onClick:()=>{c(o)},active:o===i,children:[t(ol,{onChange:e=>f(o,e),value:e.name||"Unnamed"}),t(tp,{onClick:e=>{e.stopPropagation(),window.confirm("Do you really want to delete this file?")&&v(o)}})]},o)),t(td,{onClick:()=>{m(th()),c(p.files.length)},children:t(tc,{})})]}),t(tr,{children:t(tl,{file:d,...e})})]})]})};export{tu as Editor,to as EDITOR_DEFAULTS,o8 as Wire,oA as WNNode,oP as TitleBar,om as PortsPanel,oy as OutputPorts,oN as OutputHandle,ov as InputPorts,o$ as InputHandle,ox as Port,eF as Modal,ol as EditableLabel,or as useAudioNode,on as useNode,ek as useTheme,eC as useStore,e$ as theme,ex as isAudio,ey as isPatch,ew as PortType};
741
+ `}),r(ta,{onDragOver:e=>{e.preventDefault(),e.stopPropagation(),$(!0)},onDragLeave:e=>{e.preventDefault(),e.stopPropagation(),$(!1)},onDrop:e=>{e.preventDefault(),e.stopPropagation(),$(!1),Array.from(e.dataTransfer.files).forEach(async e=>{if("application/json"===e.type){let o=JSON.parse(await e.text());if(o.files&&o.files.length){if(!window.confirm("This action will replace your current project. Continue?"))return;u(o),c(0),w();return}v({...ty(),file:{...o,controlPanel:{...tl.controlPanel,...o.controlPanel}},name:e.name},e.name);return}if(e.type.match(/^audio\//)){let o=await e7(e);v({type:"audio",id:`audio-file-${+new Date}`,name:e.name,file:o});return}console.error("Unsupported file type",e)})},children:[r(tg,{children:[p.files.map((e,o)=>r(tu,{onClick:()=>{c(o)},active:o===i,children:[t(op,{onChange:e=>f(o,e),value:e.name||"Unnamed"}),t(tv,{onClick:e=>{e.stopPropagation(),window.confirm("Do you really want to delete this file?")&&y(o)}})]},o)),t(tm,{onClick:()=>{v(ty()),c(p.files.length)},children:t(tf,{})})]}),t(td,{children:t(th,{file:d,...e})}),b&&t(ts,{children:"Drop file(s) to upload to the project"})]})]})};export{tw as Editor,tl as EDITOR_DEFAULTS,te as Wire,oD as WNNode,oS as TitleBar,ob as PortsPanel,o$ as OutputPorts,oF as OutputHandle,oC as InputPorts,oj as InputHandle,ok as Port,eS as Modal,op as EditableLabel,os as useAudioNode,od as useNode,e$ as useTheme,eb as useStore,eC as theme,ey as isAudio,ev as isPatch,ex as PortType};
694
742
  //# sourceMappingURL=module.js.map