@web-noise/core 0.0.5 → 0.0.6

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{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{withTheme as i,ThemeProvider as l,Global as a,css as d,useTheme as s}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 m,useRef as f}from"react";import{FaPlus as v}from"react-icons/fa6";import{MdClose as y,MdDragHandle as b,MdSettings as x,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 S,useReactFlow as F,Position as T,Handle as D,ControlButton as H,getBezierPath as O}from"reactflow";import{create as _}from"zustand";import{reverse as L,patch as I,create as W}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 ed}from"marked";function es(e){return e&&e.__esModule?e.default:e}let ec=[],ep={};let eh=new URL(es("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}`,em=10;(ey=eb||(eb={})).Gate="gate",ey.Number="number",ey.Audio="audio",ey.Any="any";let ef=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))}};var ey,eb,ex=_((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,d=l[a-1];if(!d)return;let s=L(d);s&&e({...I(ef({nodes:t,edges:r,controlPanel:n}),s),history:{...i,pointer:a-1,skipCollect:!0}})},forward:()=>{let{nodes:t,edges:r,controlPanel:n,history:i}=o(),{buffer:l,pointer:a}=i,d=l[a];d&&e({...I(ef({nodes:t,edges:r,controlPanel:n}),d),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:d}=t.get(o)||{};if(!d)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 s=d.outputs?.[n],c=s?.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 ${d}`);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,m=u instanceof AudioParam,f=u instanceof Array,v=g||m,y=c instanceof AudioNode,b=c instanceof Array;y&&v?c.connect(u):y&&f?c.connect(u[0],0,u[1]):b&&v?c[0].connect(u,c[1]):b&&f?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:s,input:h})},d=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,d=i instanceof AudioParam,s=i instanceof Array,c=a||d,p=l instanceof AudioNode,h=l instanceof Array;if(p&&c)l.disconnect(i);else if(p&&s)l.disconnect(i[0],0,i[1]);else if(h&&c)l[0].disconnect(i,l[1]);else if(h&&s)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:d,unregisterAudioConnections:e=>e.map(d)}})(),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];r(t,{...i,file:e()})},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},currentFileIndex:n.length-1})},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:d}=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(),d=e.map(({id:e})=>e),s=[...e,...n.filter(({parentNode:e})=>e&&d.includes(e))];a(s),l($(s,r)),i(s);let c=s.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:d}=t(),{nodes:s,edges:c}=n;if(!s.length)return;o({nodes:a.map(e=>({...e,selected:!1}))});let p=s.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:m}=s.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 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([...d.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/em}:{}};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=W({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},d=ev(i.nodes,a.nodes),s=ev(i.edges,a.edges);i=a;let c=d.added,p=s.added,h=s.removed,u=d.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)})),ew={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 d,useTheme as s}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 b,MdSettings as x,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 j,BackgroundVariant as A,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 ed}from"marked";function es(e){return e&&e.__esModule?e.default:e}let ec=[],ep={};let eh=new URL(es("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;(ex=ew||(ew={})).Gate="gate",ex.Number="number",ex.Audio="audio",ex.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,eb=e=>"audio"===e.type;var ex,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,d=l[a-1];if(!d)return;let s=I(d);s&&e({...W(em({nodes:t,edges:r,controlPanel:n}),s),history:{...i,pointer:a-1,skipCollect:!0}})},forward:()=>{let{nodes:t,edges:r,controlPanel:n,history:i}=o(),{buffer:l,pointer:a}=i,d=l[a];d&&e({...W(em({nodes:t,edges:r,controlPanel:n}),d),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:d}=t.get(o)||{};if(!d)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 s=d.outputs?.[n],c=s?.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 ${d}`);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,b=c instanceof Array;y&&v?c.connect(u):y&&m?c.connect(u[0],0,u[1]):b&&v?c[0].connect(u,c[1]):b&&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:s,input:h})},d=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,d=i instanceof AudioParam,s=i instanceof Array,c=a||d,p=l instanceof AudioNode,h=l instanceof Array;if(p&&c)l.disconnect(i);else if(p&&s)l.disconnect(i[0],0,i[1]);else if(h&&c)l[0].disconnect(i,l[1]);else if(h&&s)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:d,unregisterAudioConnections:e=>e.map(d)}})(),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];eb(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:d}=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(),d=e.map(({id:e})=>e),s=[...e,...n.filter(({parentNode:e})=>e&&d.includes(e))];a(s),l($(s,r)),i(s);let c=s.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:d}=t(),{nodes:s,edges:c}=n;if(!s.length)return;o({nodes:a.map(e=>({...e,selected:!1}))});let p=s.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}=s.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([...d.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},d=ev(i.nodes,a.nodes),s=ev(i.edges,a.edges);i=a;let c=d.added,p=s.added,h=s.removed,u=d.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`
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: ${ew.colors.elevation3};
7
+ background: ${e$.colors.elevation3};
8
8
  }
9
9
 
10
10
  .react-flow__background {
@@ -25,28 +25,28 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
25
25
  }
26
26
 
27
27
  .react-flow__edge-path {
28
- stroke: ${ew.colors.accent2};
28
+ stroke: ${e$.colors.accent2};
29
29
  }
30
30
 
31
31
  .react-flow__node.selected {
32
- border: 1px solid ${ew.colors.accent2};
33
- box-shadow: 0 0 0 0.5px #${ew.colors.accent2};
32
+ border: 1px solid ${e$.colors.accent2};
33
+ box-shadow: 0 0 0 0.5px #${e$.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 #${ew.colors.accent2};
37
+ box-shadow: 0 0 0 0.5px #${e$.colors.accent2};
38
38
  }
39
39
 
40
40
  /* .react-flow__minimap-mask {
41
- fill: ${ew.colors.elevation1}
41
+ fill: ${e$.colors.elevation1}
42
42
  }
43
43
 
44
44
  .react-flow__minimap-node {
45
- fill:${ew.colors.accent2}
45
+ fill:${e$.colors.accent2}
46
46
  } */
47
47
  }
48
48
 
49
- `;var eC=()=>s();let e$=c(V)``,ek=c(G)`
49
+ `;var ek=()=>s();let eN=c(V)``,eP=c(G)`
50
50
  background: ${({colors:e})=>e.elevation2};
51
51
  padding: 0;
52
52
  border-radius: 0;
@@ -59,7 +59,7 @@ let e,o;import{jsxs as t,jsx 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
- `,eN="editor-edge-menu";var eP=()=>{let e=eC(),o=ex(e=>e.removeEdges);return r(n,{children:r(ek,{id:eN,animation:!1,colors:e.colors,children:r(e$,{onClick:e=>o([e.props.edge]),children:"Delete Edge (DEL)"})})})};let ez=c.div`
62
+ `,ez="editor-edge-menu";var ej=()=>{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 eA=c.div`
63
63
  position: fixed;
64
64
  z-index: ${({theme:e})=>e.zIndex.modal};
65
65
  width: 100%;
@@ -70,7 +70,7 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
70
70
  display: flex;
71
71
  align-items: center;
72
72
  justify-content: center;
73
- `,eA=c.div`
73
+ `,eE=c.div`
74
74
  background: ${({theme:e})=>e.colors.elevation2};
75
75
  box-shadow: 1px 1px 1px 1px ${({theme:e})=>e.colors.elevation1};
76
76
  color: white;
@@ -78,15 +78,15 @@ let e,o;import{jsxs as t,jsx 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
- `,ej=c(y)`
81
+ `,eM=c(y)`
82
82
  position: absolute;
83
83
  top: 0.2rem;
84
84
  right: 0.2rem;
85
85
  cursor: pointer;
86
- `;var eE=({children:e,onClose:o,...n})=>{let i=eC();return u(()=>{let e=e=>{"Escape"===e.key&&o?.()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[o]),Y(r(ez,{theme:i,onClick:o,children:t(eA,{...n,onClick:e=>{e.stopPropagation()},theme:i,children:[e,r(ej,{theme:i,onClick:o})]})}),document.body)};let eM=c.div`
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(eA,{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=c.div`
87
87
  display: flex;
88
88
  position: relative;
89
- `,eS=c.input`
89
+ `,eT=c.input`
90
90
  padding-right: 2rem;
91
91
  padding-left: 0.3rem;
92
92
  width: 100%;
@@ -117,14 +117,14 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
117
117
  -webkit-appearance: none;
118
118
  margin-right: 1rem;
119
119
  }
120
- `,eF=c.div`
120
+ `,eD=c.div`
121
121
  display: flex;
122
122
  flex-direction: column;
123
123
  padding: 0.6rem;
124
124
  gap: 0.6rem;
125
125
  border-right: 1px solid ${({theme:e})=>e.colors.elevation3};
126
126
  min-width: 14rem;
127
- `,eT=c.label`
127
+ `,eH=c.label`
128
128
  user-select: none;
129
129
  input {
130
130
  display: none;
@@ -136,14 +136,14 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
136
136
  color: ${({theme:e})=>e.colors.accent3};
137
137
  cursor: pointer;
138
138
  }
139
- `;var eD=({onChange:e,value:o})=>{let n=eC(),i=ex(({plugins:e})=>e),l=f(null);return u(()=>{l.current&&l.current.focus()},[l]),t(eF,{theme:n,children:[r(eM,{children:r(eS,{ref:l,theme:n,value:o.search||"",placeholder:"search...",onChange:t=>e({...o,search:t.target.value})})}),i.map(({name:i,components:l},a)=>i?t(eT,{theme:n,children:[r("input",{type:"checkbox",name:"plugin",value:i,checked:i===o.plugin,onChange:()=>{e({...o,plugin:i===o.plugin?null:i})}}),r("span",{children:i})]},a):null)]})};let eH=i(c.div`
139
+ `;var eO=({onChange:e,value:o})=>{let n=ek(),i=eC(({plugins:e})=>e),l=m(null);return u(()=>{l.current&&l.current.focus()},[l]),r(eD,{theme:n,children:[t(eS,{children:t(eT,{ref:l,theme:n,value:o.search||"",placeholder:"search...",onChange:t=>e({...o,search:t.target.value})})}),i.map(({name:i,components:l},a)=>i?r(eH,{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 e_=i(c.div`
140
140
  width: 100%;
141
- `),eO=i(c.div`
141
+ `),eI=i(c.div`
142
142
  padding: 1rem;
143
143
  display: flex;
144
144
  flex-direction: column;
145
145
  gap: 1rem;
146
- `),e_=i(c.ul`
146
+ `),eW=i(c.ul`
147
147
  list-style: none;
148
148
  margin: 0;
149
149
  padding: 0;
@@ -168,26 +168,26 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
168
168
  white-space: nowrap;
169
169
  overflow: hidden;
170
170
  text-overflow: ellipsis;
171
- `),eI=i(c.div`
171
+ `),eR=i(c.div`
172
172
  color: ${({theme:e})=>e.colors.highlight2};
173
173
  font-size: 12px;
174
- `),eW=i(c.div``),eR=i(c.div`
174
+ `),eB=i(c.div``),eV=i(c.div`
175
175
  font-size: 1.1rem;
176
176
  padding: 0.25rem 0;
177
177
  color: ${({theme:e})=>e.colors.highlight3};
178
- `),eB=i(c.div`
178
+ `),eG=i(c.div`
179
179
  color: ${({theme:e})=>e.colors.highlight2};
180
180
  font-size: 12px;
181
- `);var eV=({onComponentClick:e,filters:{plugin:o,search:n}})=>{let i=ex(({plugins:e})=>e),l=g(()=>o?i.filter(({name:e})=>e===o):i,[i,o]);return r(eH,{children:g(()=>n?l.map(e=>({...e,components:e.components.filter(({type:e,name:o})=>e.toLocaleLowerCase().includes(n.toLocaleLowerCase())||o?.toLocaleLowerCase().includes(n.toLocaleLowerCase()))})):l,[l,n]).map(({name:o,description:n,components:i},l)=>i.length?t(eO,{children:[t(eW,{children:[r(eR,{children:o}),r(eB,{children:n})]}),r(e_,{children:i.sort((e,o)=>e.type.toLowerCase()>o.type.toLowerCase()?1:-1).map((o,n)=>t("li",{onClick:()=>e(o),children:[r(eL,{children:o.name||o.type}),o.description&&r(eI,{children:o.description})]},n))})]},l):null)})};let eG=c.div`
181
+ `);var eU=({onComponentClick:e,filters:{plugin:o,search:n}})=>{let i=eC(({plugins:e})=>e),l=g(()=>o?i.filter(({name:e})=>e===o):i,[i,o]);return t(e_,{children:g(()=>n?l.map(e=>({...e,components:e.components.filter(({type:e,name:o})=>e.toLocaleLowerCase().includes(n.toLocaleLowerCase())||o?.toLocaleLowerCase().includes(n.toLocaleLowerCase()))})):l,[l,n]).map(({name:o,description:n,components:i},l)=>i.length?r(eI,{children:[r(eB,{children:[t(eV,{children:o}),t(eG,{children:n})]}),t(eW,{children:i.sort((e,o)=>e.type.toLowerCase()>o.type.toLowerCase()?1:-1).map((o,n)=>r("li",{onClick:()=>e(o),children:[t(eL,{children:o.name||o.type}),o.description&&t(eR,{children:o.description})]},n))})]},l):null)})};let eJ=c.div`
182
182
  height: 100%;
183
183
  width: 100%;
184
184
  display: flex;
185
185
  gap: 1rem;
186
- `,eU=c.div`
186
+ `,eX=c.div`
187
187
  flex-grow: 1;
188
188
  height: 100%;
189
189
  overflow-y: scroll;
190
- `;var eJ=({isOpen:e,closeMenu:o,mousePosition:n})=>{let i=eC(),{screenToFlowPosition:l}=F(),{createNode:a}=ex(({createNode:e})=>({createNode:e})),[d,s]=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:T.Left,sourcePosition:T.Right}),o()},[n,l,a,o,n]);return e?r(eE,{onClose:()=>{o(),s({})},children:t(eG,{theme:i,children:[r(eD,{onChange:s,value:d}),r(eU,{theme:i,children:r(eV,{filters:d,onComponentClick:e=>{c(e),s({})}})})]})}):null};let eX=c.div`
190
+ `;var eY=({isOpen:e,closeMenu:o,mousePosition:n})=>{let i=ek(),{screenToFlowPosition:l}=S(),{createNode:a}=eC(({createNode:e})=>({createNode:e})),[d,s]=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(),s({})},children:r(eJ,{theme:i,children:[t(eO,{onChange:s,value:d}),t(eX,{theme:i,children:t(eU,{filters:d,onComponentClick:e=>{c(e),s({})}})})]})}):null};let eq=c.div`
191
191
  display: flex;
192
192
  align-items: center;
193
193
  justify-content: center;
@@ -213,19 +213,19 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
213
213
  .drop-zone-drag-over {
214
214
  opacity: 1;
215
215
  }
216
- `,eY=c.div`
216
+ `,eK=c.div`
217
217
  display: flex;
218
218
  flex-wrap: wrap;
219
219
  align-items: center;
220
220
  justify-content: center;
221
221
  height: 100%;
222
222
  width: 100%;
223
- `,eq=c(K)`
223
+ `,eQ=c(K)`
224
224
  width: 100%;
225
225
  height: 8rem;
226
- `,eK=c.div`
226
+ `,eZ=c.div`
227
227
  font-size: 2rem;
228
- `;var eQ=({isOpen:e,closeMenu:o})=>{let n=eC(),i=ex(({setGraph:e})=>e),l=ex(e=>e.setEditorState),a=f(null),d=m(e=>{let[t]=e||[];t.text().then(JSON.parse).then(e=>{l(e),o()}).catch(console.error)},[i,o]);return e?r(eE,{onClose:o,children:t(eX,{theme:n,children:[r("input",{onChange:({target:{files:e}})=>d(e),ref:a,type:"file",className:"hidden",style:{display:"none"},accept:".json"}),r(q,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{a.current?.click()},onDrop:e=>d(e),children:t(eY,{theme:n,children:[r(eq,{}),r(eK,{children:"click or drop file here"})]})})]})}):null};let eZ=c.div`
228
+ `;var e0=({isOpen:e,closeMenu:o})=>{let n=ek(),i=eC(({setGraph:e})=>e),l=eC(e=>e.setEditorState),a=m(null),d=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(eq,{theme:n,children:[t("input",{onChange:({target:{files:e}})=>d(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=>d(e),children:r(eK,{theme:n,children:[t(eQ,{}),t(eZ,{children:"click or drop file here"})]})})]})}):null};let e1=c.div`
229
229
  display: flex;
230
230
  align-items: center;
231
231
  justify-content: center;
@@ -251,19 +251,19 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
251
251
  .drop-zone-drag-over {
252
252
  opacity: 1;
253
253
  }
254
- `,e0=c.div`
254
+ `,e2=c.div`
255
255
  display: flex;
256
256
  flex-wrap: wrap;
257
257
  align-items: center;
258
258
  justify-content: center;
259
259
  height: 100%;
260
260
  width: 100%;
261
- `,e1=c(K)`
261
+ `,e3=c(K)`
262
262
  width: 100%;
263
263
  height: 8rem;
264
- `,e2=c.div`
264
+ `,e9=c.div`
265
265
  font-size: 2rem;
266
- `;var e3=({isOpen:e,closeMenu:o})=>{let n=eC(),i=ex(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?r(eE,{onClose:o,children:t(eZ,{theme:n,children:[r("input",{onChange:({target:{files:e}})=>a(e),ref:l,type:"file",className:"hidden",style:{display:"none"},accept:".json"}),r(q,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{l.current?.click()},onDrop:e=>a(e),children:t(e0,{theme:n,children:[r(e1,{}),r(e2,{children:"click or drop file here"})]})})]})}):null};let e9="editor-menu";var e8=({editorContextMenu:e=[]})=>{let o=eC(),[i,l]=h({x:0,y:0}),[a,d]=h(!1),[s,c]=h(!1),[p,f]=h(!1),v=m((e,o)=>{l({x:e,y:o}),d(!0)},[d]),y=ex(e=>e.pasteBuffer),{screenToFlowPosition:b}=F(),x=m(e=>{let{x:o,y:t}=b(e);y(o,t)},[d,b]),w=ex(({clearGraph:e})=>e),C=ex(e=>e.getEditorState),$=ex(e=>e.getProject),k=m(()=>{w()},[w]),N=ex(e=>e.toggleHelp),P=ex(e=>e.history.back),z=ex(e=>e.history.forward),A=ex(e=>e.history.pointer),j=ex(e=>e.history.buffer),E=ex(e=>e.copySelectedItems),M=ex(e=>e.nodes),S=g(()=>M.filter(({selected:e})=>e),[M]),T=ex(e=>e.copyBuffer),D=F(),H=m(()=>{J(JSON.stringify({...C()},null,2),"web-noise-patch.json")},[C,D]),O=m(()=>{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",()=>(x({x:200,y:50}),!1)),()=>{X.unbind()}),[v,x]),t(n,{children:[r(eJ,{isOpen:a,closeMenu:()=>d(!1),mousePosition:i}),r(eQ,{isOpen:s,closeMenu:()=>c(!1)}),r(e3,{isOpen:p,closeMenu:()=>f(!1)}),t(ek,{id:e9,animation:!1,colors:o.colors,children:[r(e$,{onClick:({triggerEvent:{clientX:e,clientY:o}})=>v(e,o),children:"Add Node (⌘+⇧+A)"}),r(U,{}),r(e$,{onClick:k,children:"Delete All"}),r(U,{}),r(e$,{onClick:H,children:"Download patch"}),r(e$,{onClick:()=>c(!0),children:"Upload patch"}),r(U,{}),r(e$,{onClick:O,children:"Download project"}),r(e$,{onClick:()=>f(!0),children:"Upload project"}),r(U,{}),r(e$,{disabled:0===A,onClick:P,children:"Undo (⌘+z)"}),r(e$,{disabled:A===j.length,onClick:z,children:"Redo (⌘+⇧+Z)"}),r(U,{}),r(e$,{disabled:!S.length,onClick:E,children:"Copy Selected (⌘+c)"}),r(e$,{disabled:!T.nodes.length,onClick:({triggerEvent:{clientX:e,clientY:o}})=>x({x:e,y:o}),children:"Paste (⌘+v)"}),r(U,{}),e.map((e,o)=>r(e$,{children:e},o)),r(U,{}),r(e$,{onClick:N,children:"Help (⇧+?)"})]})]})};let e5="editor-node-menu";var e4=e=>{let o=eC(),i=ex(e=>e.removeNodes),l=ex(e=>e.addNodeToControlPanel),a=ex(e=>e.removeNodeFromControlPanel),d=ex(e=>e.copy),s=ex(e=>e.nodesConfiguration),c=ex(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=s[e.node.type];return!!o?.controlPanelNode},[s]);return r(n,{children:t(ek,{id:e5,animation:!1,colors:o.colors,children:[r(e$,{onClick:e=>i([e.props.node]),children:"Delete Node (DEL)"}),r(e$,{hidden:(...e)=>!h(...e)||p(...e),onClick:e=>l(e.props.node),children:"Add To Control Panel"}),r(e$,{hidden:(...e)=>!h(...e)||!p(...e),onClick:e=>a(e.props.node),children:"Remove From Control Panel"}),r(e$,{onClick:e=>d({nodes:[e.props.node],edges:[]}),children:"Copy (⌘+c)"})]})})},e7=e=>ex(({patch:e})=>e).audioNodes.get(e),e6=e=>{let o=ex(({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 oe=c.input`
266
+ `;var e8=({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(e1,{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(e2,{theme:n,children:[t(e3,{}),t(e9,{children:"click or drop file here"})]})})]})}):null};let e5="editor-menu";var e6=({editorContextMenu:e=[]})=>{let o=ek(),[i,l]=h({x:0,y:0}),[a,d]=h(!1),[s,c]=h(!1),[p,m]=h(!1),v=f((e,o)=>{l({x:e,y:o}),d(!0)},[d]),y=eC(e=>e.pasteBuffer),{screenToFlowPosition:b}=S(),x=f(e=>{let{x:o,y:t}=b(e);y(o,t)},[d,b]),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),j=eC(e=>e.history.pointer),A=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",()=>(x({x:200,y:50}),!1)),()=>{X.unbind()}),[v,x]),r(n,{children:[t(eY,{isOpen:a,closeMenu:()=>d(!1),mousePosition:i}),t(e0,{isOpen:s,closeMenu:()=>c(!1)}),t(e8,{isOpen:p,closeMenu:()=>m(!1)}),r(eP,{id:e5,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===j,onClick:P,children:"Undo (⌘+z)"}),t(eN,{disabled:j===A.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}})=>x({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 e4="editor-node-menu";var e7=e=>{let o=ek(),i=eC(e=>e.removeNodes),l=eC(e=>e.addNodeToControlPanel),a=eC(e=>e.removeNodeFromControlPanel),d=eC(e=>e.copy),s=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=s[e.node.type];return!!o?.controlPanelNode},[s]);return t(n,{children:r(eP,{id:e4,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=>d({nodes:[e.props.node],edges:[]}),children:"Copy (⌘+c)"})]})})},oe=e=>eC(({patch:e})=>e).audioNodes.get(e),oo=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 ot=c.input`
267
267
  width: 100%;
268
268
  background: none;
269
269
  border: none;
@@ -292,7 +292,7 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
292
292
  padding: 0.3rem;
293
293
  border-radius: 0.2rem;
294
294
  }
295
- `;var oo=({onChange:e,value:o="",className:t})=>{let n=f(null),[i,l]=h(!1),a=m(e=>{e.target?.select(),l(!0)},[l]),d=m(()=>{window.getSelection()?.collapseToEnd(),l(!1)},[l]),s=m(()=>{d(),n.current&&e(n.current.value)},[n,d,e]),c=m(()=>{d(),n.current&&o&&(n.current.value=o)},[n,d,o]);return u(()=>{n.current&&(n.current.value=o)},[o,n]),r(oe,{ref:n,type:"text",readOnly:!i,onDoubleClick:e=>a(e),onBlur:s,onKeyDown:e=>{switch(e.key){case"Escape":c();break;case"Enter":s()}},className:t})};let ot=i(c.div`
295
+ `;var or=({onChange:e,value:o="",className:r})=>{let n=m(null),[i,l]=h(!1),a=f(e=>{e.target?.select(),l(!0)},[l]),d=f(()=>{window.getSelection()?.collapseToEnd(),l(!1)},[l]),s=f(()=>{d(),n.current&&e(n.current.value)},[n,d,e]),c=f(()=>{d(),n.current&&o&&(n.current.value=o)},[n,d,o]);return u(()=>{n.current&&(n.current.value=o)},[o,n]),t(ot,{ref:n,type:"text",readOnly:!i,onDoubleClick:e=>a(e),onBlur:s,onKeyDown:e=>{switch(e.key){case"Escape":c();break;case"Enter":s()}},className:r})};let on=i(c.div`
296
296
  height: 100%;
297
297
  width: 100%;
298
298
  overflow: scroll;
@@ -320,13 +320,13 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
320
320
  a {
321
321
  color: ${({theme:e})=>e.colors.accent1};
322
322
  }
323
- `);var or=({isOpen:e,onClose:o,type:t,node:n})=>{let{info:i,portsDescription:l}=ex(e=>e.nodesConfiguration[t]),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?r(eE,{onClose:o,children:r(ot,{dangerouslySetInnerHTML:{__html:ed((i||"")+"\n\n"+a||"")}})}):null};let on=c.div`
323
+ `);var oi=({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(on,{dangerouslySetInnerHTML:{__html:ed((i||"")+"\n\n"+a||"")}})}):null};let ol=c.div`
324
324
  background-color: var(--leva-colors-elevation1);
325
- `,oi=c(on)`
325
+ `,oa=c(ol)`
326
326
  padding: 2rem 5rem;
327
- `,ol=c(on)`
327
+ `,od=c(ol)`
328
328
  padding: 1rem 2rem;
329
- `,oa=c(x)`
329
+ `,os=c(x)`
330
330
  font-size: 1.2rem;
331
331
  opacity: 0.4;
332
332
  width: 1rem;
@@ -334,7 +334,7 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
334
334
  opacity: 1;
335
335
  cursor: pointer;
336
336
  }
337
- `,od=c(w)`
337
+ `,oc=c(w)`
338
338
  font-size: 1.2rem;
339
339
  opacity: 0.4;
340
340
  width: 1rem;
@@ -342,12 +342,12 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
342
342
  opacity: 1;
343
343
  cursor: pointer;
344
344
  }
345
- `,os=c.div`
345
+ `,op=c.div`
346
346
  position: relative;
347
347
  font-family: var(--leva-fonts-mono);
348
348
  font-size: var(--leva-fontSizes-root);
349
349
  background-color: var(--leva-colors-elevation1);
350
- `,oc=c(os)`
350
+ `,oh=c(op)`
351
351
  display: flex;
352
352
  height: var(--leva-sizes-titleBarHeight);
353
353
  touch-action: none;
@@ -357,38 +357,38 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
357
357
  color: var(--leva-colors-highlight1);
358
358
  padding: 0 0.4rem;
359
359
  gap: 0.3rem;
360
- `,op=c(os)(({theme:e})=>`
360
+ `,ou=c(op)(({theme:e})=>`
361
361
  display: grid;
362
362
  grid-template-areas: "inputs outputs";
363
363
  background: ${e.colors.elevation2};
364
364
  border-bottom: 1px solid ${e.colors.elevation1};
365
365
  color: ${e.colors.highlight3};
366
366
  font-size: 0.6rem;
367
- `),oh=c.div`
367
+ `),og=c.div`
368
368
  grid-area: inputs;
369
369
  text-align: left;
370
- `,ou=c.div`
370
+ `,of=c.div`
371
371
  grid-area: outputs;
372
372
  text-align: right;
373
- `,og=c.div`
373
+ `,om=c.div`
374
374
  position: relative;
375
375
  padding: 5px 10px;
376
- `,om={[eb.Audio]:"#4ade80",[eb.Gate]:"#c084fc",[eb.Number]:"#38bdf8",[eb.Any]:"#fb923c"},of=i(c(D,{shouldForwardProp:e=>"portType"!==e})`
377
- --port-color: ${e=>{if(!e.portType)return e.theme.colors.highlight2;if(!Array.isArray(e.portType))return om[e.portType];{let o=e.portType.map(e=>om[e]);return`linear-gradient(0.25turn, ${o.join(", ")});`}}};
376
+ `,ov={[ew.Audio]:"#4ade80",[ew.Gate]:"#c084fc",[ew.Number]:"#38bdf8",[ew.Any]:"#ffffff"},oy=i(c(D,{shouldForwardProp:e=>"portType"!==e})`
377
+ --port-color: ${e=>{if(!e.portType)return e.theme.colors.highlight2;if(!Array.isArray(e.portType))return ov[e.portType];{let o=e.portType.map(e=>ov[e]);return`linear-gradient(0.25turn, ${o.join(", ")});`}}};
378
378
  border-color: var(--port-color);
379
379
  background: var(--port-color);
380
380
  box-shadow: 0px 0px 0px 1px ${({theme:e})=>e.colors.elevation2} inset;
381
- `),ov=i(c(of)`
381
+ `),ob=i(c(oy)`
382
382
  left: -3px;
383
- `),oy=({...e})=>r(ov,{...e,type:"target",position:T.Left}),ob=i(c(of)`
383
+ `),ox=({...e})=>t(ob,{...e,type:"target",position:T.Left}),ow=i(c(oy)`
384
384
  right: -3px;
385
- `),ox=e=>r(ob,{...e,type:"source",position:T.Right}),ow=({className:e,...o})=>r(oc,{...o,className:[e,eu].join(" ")}),oC=e=>ex(o=>o.nodesConfiguration[e]),o$=e=>{let{id:o,children:n,selected:i,...l}=e,a=eC(),d=ex(({getNode:e})=>e),s=ex(e=>e.nodesConfiguration),[c,p]=h(!1),{info:u}=oC(e.type),m=g(()=>s[e.type].resizable??!1,[s,e.type]),{updateNodeLabel:f,updateNodeConfig:v}=e6(o),{data:y}=d(o)||{},b=e7(o),{ConfigNode:x}=(e=>{let{configNode:o}=oC(e);return{ConfigNode:o}})(l.type),[w,C]=h(!1);if(!b)return r(oi,{className:eu,children:"can't find audio node"});if(b.loading)return r(oi,{className:eu,children:"loading"});if(b.error)return t(ol,{className:eu,children:["error: ",b.error.toString()]});if(!b.node)return r(oi,{className:eu,children:"can't find audio node"});let $=y?.config?.size,{node:{inputs:k,outputs:N}}=b;return t(on,{children:[t(ow,{children:[u&&r(od,{onClickCapture:()=>p(!0)}),r(oo,{value:y?.label??"No Name",onChange:f}),x&&r(oa,{onClickCapture:()=>C(e=>!e)})]}),t(op,{theme:a,children:[r(oh,{children:k?Object.keys(k).map((e,o)=>t(og,{children:[r(oy,{id:e,portType:k[e].type}),r("span",{children:e})]},o)):null}),r(ou,{children:N?Object.keys(N).map((e,o)=>t(og,{children:[r(ox,{id:e,portType:N[e].type}),r("span",{children:e})]},o)):null})]}),x&&w&&i?r(x,{...e}):m?r(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,r(or,{isOpen:c,type:e.type,onClose:()=>p(!1),node:b.node})]})},ok=c.div`
385
+ `),oC=e=>t(ow,{...e,type:"source",position:T.Right}),o$=({className:e,...o})=>t(oh,{...o,className:[e,eu].join(" ")}),ok=e=>eC(o=>o.nodesConfiguration[e]),oN=e=>{let{id:o,children:n,selected:i,...l}=e,a=ek(),d=eC(({getNode:e})=>e),s=eC(e=>e.nodesConfiguration),[c,p]=h(!1),{info:u}=ok(e.type),f=g(()=>s[e.type].resizable??!1,[s,e.type]),{updateNodeLabel:m,updateNodeConfig:v}=oo(o),{data:y}=d(o)||{},b=oe(o),{ConfigNode:x}=(e=>{let{configNode:o}=ok(e);return{ConfigNode:o}})(l.type),[w,C]=h(!1);if(!b)return t(oa,{className:eu,children:"can't find audio node"});if(b.loading)return t(oa,{className:eu,children:"loading"});if(b.error)return r(od,{className:eu,children:["error: ",b.error.toString()]});if(!b.node)return t(oa,{className:eu,children:"can't find audio node"});let $=y?.config?.size,{node:{inputs:k,outputs:N}}=b;return r(ol,{children:[r(o$,{children:[u&&t(oc,{onClickCapture:()=>p(!0)}),t(or,{value:y?.label??"No Name",onChange:m}),x&&t(os,{onClickCapture:()=>C(e=>!e)})]}),r(ou,{theme:a,children:[t(og,{children:k?Object.keys(k).map((e,o)=>r(om,{children:[t(ox,{id:e,portType:k[e].type}),t("span",{children:e})]},o)):null}),t(of,{children:N?Object.keys(N).map((e,o)=>r(om,{children:[t(oC,{id:e,portType:N[e].type}),t("span",{children:e})]},o)):null})]}),x&&w&&i?t(x,{...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(oi,{isOpen:c,type:e.type,onClose:()=>p(!1),node:b.node})]})},oP=c.div`
386
386
  width: 100%;
387
387
  padding: 0.4rem 0;
388
388
  white-space: nowrap;
389
389
  overflow: hidden;
390
390
  text-overflow: ellipsis;
391
- `,oN=c(ow)`
391
+ `,oz=c(o$)`
392
392
  display: flex;
393
393
  gap: 0.1rem;
394
394
  padding: 0 0.4rem;
@@ -396,13 +396,13 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
396
396
  font-size: 0.6rem;
397
397
  height: auto;
398
398
  min-width: 0;
399
- `,oP=c.div`
399
+ `,oj=c.div`
400
400
  display: flex;
401
401
  align-items: center;
402
402
  height: 70%;
403
403
  width: auto;
404
404
  gap: 0.4rem;
405
- `,oz=c.span`
405
+ `,oA=c.span`
406
406
  width: auto;
407
407
  height: 100%;
408
408
  cursor: pointer;
@@ -414,11 +414,11 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
414
414
  color: ${({theme:e})=>e.colors.highlight2};
415
415
  cursor: pointer;
416
416
  }
417
- `,oA=c.div`
417
+ `,oE=c.div`
418
418
  height: 100%;
419
419
  display: grid;
420
420
  grid-template-rows: auto 1fr;
421
- `,oj=e=>{let{node:o}=e,t=ex(e=>e.getControlPanelNode),n=g(()=>t(o),[o]);return n?r(n,{...e}):null};var oE=e=>{let{node:o,showControls:n,onDelete:i}=e,l=eC(),{id:a}=o,{node:d}=e7(a)||{},{updateNodeValues:s}=e6(a);return t(oA,{theme:l,children:[t(oN,{theme:l,children:[r(ok,{children:o.data.label}),n&&t(oP,{children:[r(oz,{theme:l,children:r(b,{className:"grid-item-handle"})}),r(oz,{theme:l,children:r(y,{onClick:()=>i(o)})})]})]}),r(oj,{node:o,audioNode:d,updateNodeValues:s})]})};let oM=c.div`
421
+ `,oM=e=>{let{node:o}=e,r=eC(e=>e.getControlPanelNode),n=g(()=>r(o),[o]);return n?t(n,{...e}):null};var oF=e=>{let{node:o,showControls:n,onDelete:i}=e,l=ek(),{id:a}=o,{node:d}=oe(a)||{},{updateNodeValues:s}=oo(a);return r(oE,{theme:l,children:[r(oz,{theme:l,children:[t(oP,{children:o.data.label}),n&&r(oj,{children:[t(oA,{theme:l,children:t(b,{className:"grid-item-handle"})}),t(oA,{theme:l,children:t(y,{onClick:()=>i(o)})})]})]}),t(oM,{node:o,audioNode:d,updateNodeValues:s})]})};let oS=c.div`
422
422
  position: fixed;
423
423
  z-index: 5;
424
424
  box-shadow: 0px 1px 2px ${({theme:e})=>e.colors.elevation2};
@@ -438,30 +438,30 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
438
438
  color: ${({theme:e})=>e.colors.highlight2};
439
439
  cursor: pointer;
440
440
  }
441
- `,oS=c(oP)`
441
+ `,oT=c(oj)`
442
442
  height: 80%;
443
- `,oF=c(oz)`
443
+ `,oD=c(oA)`
444
444
  font-size: 1rem;
445
445
  display: flex;
446
446
  align-items: center;
447
- `,oT=c(oN)`
447
+ `,oH=c(oz)`
448
448
  grid-template-columns: 1fr auto;
449
449
  border-bottom: 1px solid ${({theme:e})=>e.colors.elevation3};
450
450
  font-size: 0.7rem;
451
- `,oD=c(ok)`
451
+ `,oO=c(oP)`
452
452
  text-align: center;
453
- `,oH=c.div`
453
+ `,o_=c.div`
454
454
  height: 100%;
455
455
  width: 100%;
456
456
  padding: 0.3rem 0.4rem;
457
457
  box-sizing: border-box;
458
- `,oO=c.div`
458
+ `,oI=c.div`
459
459
  height: auto;
460
460
  padding: 0;
461
461
  max-height: 95vh;
462
462
  overflow-y: scroll;
463
463
  border: 1px solid ${({theme:e})=>e.colors.elevation3};
464
- `,o_=c.div`
464
+ `,oW=c.div`
465
465
  padding: 1rem 0;
466
466
  font-family: var(--leva-fonts-mono);
467
467
  font-size: 0.8rem;
@@ -474,7 +474,7 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
474
474
  &:hover {
475
475
  color: ${({theme:e})=>e.colors.highlight2};
476
476
  }
477
- `,oI=c.div`
477
+ `,oR=c.div`
478
478
  position: absolute;
479
479
  height: 1rem;
480
480
  top: 0;
@@ -482,14 +482,14 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
482
482
  margin: auto;
483
483
  left: 0.5rem;
484
484
  border-right: 1px solid ${({theme:e})=>e.colors.whitePrimary};
485
- `,oW=c.div`
485
+ `,oB=c.div`
486
486
  box-sizing: border-box;
487
487
  overflow: hidden;
488
488
  .react-resizable-handle:after {
489
489
  border-color: ${({theme:e})=>e.colors.whitePrimary};
490
490
  border-width: 1px;
491
491
  }
492
- `;var oR=()=>{let e=eC(),o=f(null),i=ex(e=>e.nodes),{show:l,nodes:a,size:d}=ex(e=>e.controlPanel),{width:s=200,height:c}=d,p=g(()=>{let e=a.map(({id:e})=>e);return i.filter(({id:o})=>e.includes(o))},[i,a]),u=ex(e=>e.showControlPanel),m=ex(e=>e.hideControlPanel),v=ex(e=>e.setControlPanelNodes),b=ex(e=>e.setControlPanelSize),x=ex(e=>e.removeNodeFromControlPanel),[w,C]=h(!0),$=g(()=>{let e=a.reduce((e,{height:o=em,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?t(n,{children:[r(oM,{theme:e,ref:o,onClick:u,children:r(el,{})}),t(ea,{open:l,onClose:m,direction:"left",className:"",size:"auto",enableOverlay:!1,style:{background:e.colors.elevation1,position:"absolute"},children:[t(oT,{theme:e,children:[r(oD,{children:"Control Panel"}),r(oS,{children:r(oF,{onClick:m,theme:e,children:r(y,{})})})]}),t(oH,{children:[r(o_,{children:w?t(oL,{theme:e,onClick:()=>C(!1),children:[r(en,{}),"Unlock grid"]}):t(oL,{theme:e,onClick:()=>C(!0),children:[r(ei,{}),"Lock grid"]})}),r(et,{enable:{top:!1,right:!w,bottom:!1,left:!1,topRight:!1,bottomRight:!1,bottomLeft:!1,topLeft:!1},handleComponent:{right:r(oI,{theme:e})},minWidth:120,size:{width:s,height:"auto"},onResizeStop:(e,o,t,r)=>{b({width:s+r.width,height:c+r.height})},children:r(oO,{theme:e,children:r(er,{layout:$,className:"layout",cols:4,rowHeight:em,width:s,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=>r(oW,{theme:e,children:r(oE,{node:o,showControls:!w,onDelete:x})},o.id))})})})]})]})]}):null},oB={};oB="# 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 oV=i(c.div`
492
+ `;var oV=()=>{let e=ek(),o=m(null),i=eC(e=>e.nodes),{show:l,nodes:a,size:d}=eC(e=>e.controlPanel),{width:s=200,height:c}=d,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),b=eC(e=>e.setControlPanelSize),x=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(oS,{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(oH,{theme:e,children:[t(oO,{children:"Control Panel"}),t(oT,{children:t(oD,{onClick:f,theme:e,children:t(y,{})})})]}),r(o_,{children:[t(oW,{children:w?r(oL,{theme:e,onClick:()=>C(!1),children:[t(en,{}),"Unlock grid"]}):r(oL,{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(oR,{theme:e})},minWidth:120,size:{width:s,height:"auto"},onResizeStop:(e,o,t,r)=>{b({width:s+r.width,height:c+r.height})},children:t(oI,{theme:e,children:t(er,{layout:$,className:"layout",cols:4,rowHeight:ef,width:s,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(oB,{theme:e,children:t(oF,{node:o,showControls:!w,onDelete:x})},o.id))})})})]})]})]}):null},oG={};oG="# 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 oU=i(c.div`
493
493
  font-family: var(--leva-fonts-mono);
494
494
  font-size: 0.7rem;
495
495
  box-sizing: border-box;
@@ -503,13 +503,13 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
503
503
  color: ${({theme:e})=>e.colors.accent3};
504
504
  filter: hue-rotate(180deg);
505
505
  }
506
- `),oG=i(c.div`
506
+ `),oJ=i(c.div`
507
507
  padding: 1rem;
508
508
  height: 100%;
509
509
  width: 100%;
510
510
  box-sizing: border-box;
511
511
  overflow: hidden;
512
- `);var oU=()=>{let e=ex(e=>e.isHelpShown),o=ex(e=>e.toggleHelp);return e?r(eE,{onClose:()=>{o()},children:r(oG,{children:r(oV,{dangerouslySetInnerHTML:{__html:ed(es(oB))},onWheelCapture:e=>e.stopPropagation()})})}):null};let oJ=()=>r(n,{children:r(H,{onClick:ex(e=>e.toggleHelp),children:r(Q,{})})}),oX=c.div`
512
+ `);var oX=()=>{let e=eC(e=>e.isHelpShown),o=eC(e=>e.toggleHelp);return e?t(eF,{onClose:()=>{o()},children:t(oJ,{children:t(oU,{dangerouslySetInnerHTML:{__html:ed(es(oG))},onWheelCapture:e=>e.stopPropagation()})})}):null};let oY=()=>t(n,{children:t(H,{onClick:eC(e=>e.toggleHelp),children:t(Q,{})})}),oq=c.div`
513
513
  position: fixed;
514
514
  z-index: ${({theme:e})=>e.zIndex.resumeContextLayout};
515
515
  width: 100%;
@@ -523,28 +523,34 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
523
523
  justify-content: center;
524
524
  color: ${({theme:e})=>e.colors.whitePrimary};
525
525
  cursor: pointer;
526
- `,oY=c.div`
526
+ `,oK=c.div`
527
527
  display: flex;
528
528
  width: 100%;
529
529
  align-items: center;
530
530
  justify-content: center;
531
- `,oq=c.div`
531
+ `,oQ=c.div`
532
532
  font-family: var(--leva-fonts-mono);
533
533
  font-size: 2rem;
534
- `,oK=c(Z)`
534
+ `,oZ=c(Z)`
535
535
  width: 7rem;
536
536
  height: 7rem;
537
- `;var oQ=()=>{let e=eC(),o=ex(({patch:e})=>e).audioContext,[n,i]=h("running"===o.state);return n?null:t(oX,{theme:e,onClick:()=>{o.resume(),i(!0)},children:[r(oY,{children:r(oq,{theme:e,children:"Click anywhere to resume audio context"})}),r(oY,{children:r(oK,{})})]})},oZ=()=>{let e=ex(({setConfig:e})=>e),{showMinimap:o}=ex(({config:e})=>e);return r(H,{onClick:()=>e({showMinimap:!o}),children:o?r(ee,{}):r(eo,{})})},o0=({id:e,sourceX:o,sourceY:i,targetX:l,targetY:a,sourcePosition:d,targetPosition:s,style:c={},data:p,markerStart:h,markerEnd:g,source:m,target:f,sourceHandleId:v,targetHandleId:y,selected:b})=>{let x=eC(),w=ex(({getNode:e})=>e),C=w(m),$=w(f),k=C?.selected||$?.selected;u(()=>{if(v&&y)return console.log(`connected ${m} to ${f}`),()=>{console.log(`disconnected ${m} from ${f}`)}},[m,v,f,y]);let[N]=O({targetX:l,targetY:a,targetPosition:s,sourceX:o,sourceY:i,sourcePosition:d});return t(n,{children:[r("path",{id:e,style:{...c,stroke:b?x.colors.accent2:k?x.colors.highlight3:x.colors.highlight2},className:"react-flow__edge-path Wire",d:N,markerEnd:g}),r("path",{style:{...c,strokeWidth:8,color:"transparent",opacity:0,cursor:"pointer"},d:N,markerEnd:g})]})};let o1=(e,o)=>console.log("drag stop",o),o2=(e,o)=>console.log("click",o),o3=[20,20],o9=({editorState:e,plugins:o=[],editorContextMenu:n=[],onChange:i=()=>{}})=>{let l=g(()=>({wire:o0}),[]),{nodes:a,edges:d,controlPanel:s,onNodesChange:c,onNodesDelete:p,onEdgesChange:f,onEdgesDelete:v,onConnect:y,setEditorState:b,setPlugins:x,setViewport:w,viewport:$}=ex(),k=ex(({config:e})=>e),N=ex(({nodeTypes:e})=>e);u(()=>{x(o)},[o]),u(()=>{e&&b(e)},[e,b]);let[P,S]=h(null);u(()=>{P&&i({nodes:a,edges:d,controlPanel:s,viewport:$})},[a,d,s,$]);let F=m(e=>{P||(S(e),console.log("flow loaded:",e))},[P]),{onContextMenu:T}=(()=>{let{show:e}=B({id:e9});return{onContextMenu:e}})(),{onContextMenu:D}=(()=>{let{show:e}=B({id:e5});return{onContextMenu:m((o,t)=>{o.stopPropagation(),e(o,{props:{node:t}})},[])}})(),{onContextMenu:H}=(()=>{let{show:e}=B({id:eN});return{onContextMenu:m((o,t)=>{o.stopPropagation(),e(o,{props:{edge:t}})},[e])}})();return u(()=>{$&&P?.setViewport($)},[$,P]),z({onEnd:w}),t(C,{nodes:a,edges:d,onNodesChange:c,onNodesDelete:p,onEdgesChange:f,onConnect:y,onNodeDragStop:o1,onEdgesDelete:v,onInit:F,onNodeClick:o2,onContextMenu:T,onNodeContextMenu:D,onEdgeContextMenu:H,nodeTypes:N,edgeTypes:l,snapGrid:o3,defaultViewport:e?.viewport,defaultEdgeOptions:{type:"wire"},snapToGrid:!0,fitView:!0,disableKeyboardA11y:!0,children:[r(A,{variant:j.Dots,gap:12}),k.showMinimap?r(E,{}):null,t(M,{style:{right:"1rem",left:"initial",bottom:"40%",top:"initial"},showInteractive:!1,children:[r(oZ,{}),r(oJ,{})]}),r(oQ,{}),r(oR,{}),r(oU,{}),r(e8,{editorContextMenu:n}),r(e4,{}),r(eP,{})]})},o8=e=>r(S,{children:r(o9,{...e})}),o5={nodes:[],edges:[],controlPanel:{nodes:[],show:!1,size:{width:200,height:100}},viewport:{x:0,y:0,zoom:1.5}},o4=i(c.div`
537
+ `;var o0=()=>{let e=ek(),o=eC(({patch:e})=>e).audioContext,[n,i]=h("running"===o.state);return n?null:r(oq,{theme:e,onClick:()=>{o.resume(),i(!0)},children:[t(oK,{children:t(oQ,{theme:e,children:"Click anywhere to resume audio context"})}),t(oK,{children:t(oZ,{})})]})},o1=()=>{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,{})})},o2=({id:e,sourceX:o,sourceY:i,targetX:l,targetY:a,sourcePosition:d,targetPosition:s,style:c={},data:p,markerStart:h,markerEnd:g,source:f,target:m,sourceHandleId:v,targetHandleId:y,selected:b})=>{let x=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:s,sourceX:o,sourceY:i,sourcePosition:d});return r(n,{children:[t("path",{id:e,style:{...c,stroke:b?x.colors.accent2:k?x.colors.highlight3:x.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 o3=(e,o)=>console.log("drag stop",o),o9=(e,o)=>console.log("click",o),o8=[20,20],o5=({editorState:e,plugins:o=[],editorContextMenu:n=[],onChange:i=()=>{},...l})=>{let a=g(()=>({wire:o2}),[]),{nodes:d,edges:s,controlPanel:c,onNodesChange:p,onNodesDelete:m,onEdgesChange:v,onEdgesDelete:y,onConnect:b,setPlugins:x,setViewport:w,viewport:$}=eC(),k=eC(({config:e})=>e),N=eC(({nodeTypes:e})=>e);u(()=>{x(o)},[o]);let[P,F]=h(null);u(()=>{P&&i({nodes:d,edges:s,controlPanel:c,viewport:$})},[d,s,c,$]);let S=f(e=>{P||(F(e),console.log("flow loaded:",e))},[P]),{onContextMenu:T}=(()=>{let{show:e}=B({id:e5});return{onContextMenu:e}})(),{onContextMenu:D}=(()=>{let{show:e}=B({id:e4});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:d,edges:s,onNodesChange:p,onNodesDelete:m,onEdgesChange:v,onConnect:b,onNodeDragStop:o3,onEdgesDelete:y,onInit:S,onNodeClick:o9,onContextMenu:T,onNodeContextMenu:D,onEdgeContextMenu:H,nodeTypes:N,edgeTypes:a,snapGrid:o8,defaultViewport:e?.viewport,defaultEdgeOptions:{type:"wire"},snapToGrid:!0,fitView:!0,disableKeyboardA11y:!0,children:[t(j,{variant:A.Dots,gap:12}),k.showMinimap?t(E,{}):null,r(M,{style:{right:"1rem",left:"initial",bottom:"40%",top:"initial"},showInteractive:!1,children:[t(o1,{}),t(oY,{})]}),t(o0,{}),t(oV,{}),t(oX,{}),t(e6,{editorContextMenu:n}),t(e7,{}),t(ej,{})]})},o6=e=>t(F,{children:t(o5,{...e})}),o4={nodes:[],edges:[],controlPanel:{nodes:[],show:!1,size:{width:200,height:100}},viewport:{x:0,y:0,zoom:1.5}},o7=i(c.div`
538
538
  display: flex;
539
539
  flex-direction: column;
540
540
  height: 100%;
541
541
  width: 100%;
542
- `),o7=i(c.div`
542
+ `),te=i(c.div`
543
543
  height: 100%;
544
544
  width: 100%;
545
545
  display: flex;
546
546
  position: relative;
547
- `),o6=i(c.div`
547
+ `),to=i(c.div`
548
+ display: flex;
549
+ flex: 1;
550
+ align-items: center;
551
+ justify-content: center;
552
+ background: ${({theme:e})=>e.colors.elevation3};
553
+ `),tt=i(c.div`
548
554
  background: ${({theme:e})=>e.colors.elevation2};
549
555
  opacity: 0.7;
550
556
  position: absolute;
@@ -559,12 +565,12 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
559
565
  align-items: center;
560
566
  justify-content: center;
561
567
  font-size: 6rem;
562
- `),te=i(c.div`
568
+ `),tr=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:d}=e;return d?"audio"===d.type?t(to,{children:t("audio",{src:d.file,controls:!0})}):r(n,{children:[t(o6,{...e,onChange:e=>{o()},editorState:d.file||o4}),t(tt,{show:l,children:"Loading..."})]}):null},tn=i(c.div`
563
569
  height: 2rem;
564
570
  display: flex;
565
571
  align-items: center;
566
572
  background: ${({theme:e})=>e.colors.elevation2};
567
- `),to=i(c.div`
573
+ `),ti=i(c.div`
568
574
  display: flex;
569
575
  align-items: center;
570
576
  cursor: pointer;
@@ -581,7 +587,7 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
581
587
  background-color: ${({theme:e})=>e.colors.elevation1};
582
588
  }
583
589
  }
584
- `),tt=i(c.div`
590
+ `),tl=i(c.div`
585
591
  display: flex;
586
592
  align-items: center;
587
593
  height: 100%;
@@ -592,10 +598,10 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
592
598
  &:hover {
593
599
  color: ${({theme:e})=>e.colors.whitePrimary};
594
600
  }
595
- `),tr=i(c(v)`
601
+ `),ta=i(c(v)`
596
602
  height: 40%;
597
603
  width: auto;
598
- `),tn=i(c(y)`
604
+ `),td=i(c(y)`
599
605
  height: 70%;
600
606
  width: auto;
601
607
  cursor: pointer;
@@ -603,7 +609,7 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
603
609
  &:hover {
604
610
  color: ${({theme:e})=>e.colors.whitePrimary};
605
611
  }
606
- `),ti=()=>({file:o5,name:"Unnamed",type:"patch",id:p()});var tl=({...e})=>{let{projectState:o,theme:n}=e,i=ex(e=>e.currentFileIndex),s=ex(e=>e.setCurrentFileIndex),c=ex(e=>e.project),p=ex(e=>e.setProject),g=ex(e=>e.getProject),m=ex(e=>e.updateFileName),f=ex(e=>e.pullEditorChanges),v=ex(e=>e.addFile),y=ex(e=>e.deleteFile),b=ex(e=>e.setEditorState),[x,w]=h(!1);return u(()=>{p(o||{files:[ti()]}),o&&b(o.files[0].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 new Response(JSON.stringify(n?.file??null))},ec.push(["project://*",e]),()=>{}},[g]),u(()=>{w(!0),b(g().files[i]?.file),setTimeout(()=>{w(!1)},1600)},[i,b]),t(l,{theme:n||ew,children:[r(a,{styles:d`
612
+ `),ts=()=>({file:o4,name:"Unnamed",type:"patch",id:p()});var tc=({...e})=>{let{projectState:o,theme:n}=e,i=eC(e=>e.currentFileIndex),s=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),b=eC(e=>e.setEditorState);return eC(e=>e.pullEditorChanges),u(()=>{h(o||{files:[ts()]});let e=o?.files[0];e?.file&&e?.type!=="audio"&&b(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)):eb(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:d`
607
613
  :root {
608
614
  --leva-colors-elevation1: #292d39;
609
615
  --leva-colors-elevation2: #181c20;
@@ -660,5 +666,5 @@ let e,o;import{jsxs as t,jsx as r,Fragment as n}from"react/jsx-runtime";import{w
660
666
  --leva-fontWeights-folder: normal;
661
667
  --leva-fontWeights-button: normal;
662
668
  }
663
- `}),t(o4,{children:[t(te,{children:[c.files.map((e,o)=>t(to,{onClick:()=>s(o),active:o===i,children:[r(oo,{onChange:e=>m(o,e),value:e.name||"Unnamed"}),r(tn,{onClick:e=>{e.stopPropagation(),window.confirm("Do you really want to delete this file?")&&y(o)}})]},o)),r(tt,{onClick:()=>v(ti()),children:r(tr,{})})]}),t(o7,{children:[r(o8,{...e,onChange:e=>{f()},editorState:o5}),r(o6,{show:x,children:"Loading..."})]})]})]})};export{tl as Editor,o5 as EDITOR_DEFAULTS,o0 as Wire,o$ as WNNode,ow as TitleBar,op as PortsPanel,ou as OutputPorts,ox as OutputHandle,oh as InputPorts,oy as InputHandle,og as Port,eE as Modal,oo as EditableLabel,e7 as useAudioNode,e6 as useNode,eC as useTheme,ex as useStore,ew as theme,eb as PortType};
669
+ `}),r(o7,{children:[r(tn,{children:[p.files.map((e,o)=>r(ti,{onClick:()=>{c(o)},active:o===i,children:[t(or,{onChange:e=>f(o,e),value:e.name||"Unnamed"}),t(td,{onClick:e=>{e.stopPropagation(),window.confirm("Do you really want to delete this file?")&&v(o)}})]},o)),t(tl,{onClick:()=>{m(ts()),c(p.files.length)},children:t(ta,{})})]}),t(te,{children:t(tr,{file:s,...e})})]})]})};export{tc as Editor,o4 as EDITOR_DEFAULTS,o2 as Wire,oN as WNNode,o$ as TitleBar,ou as PortsPanel,of as OutputPorts,oC as OutputHandle,og as InputPorts,ox as InputHandle,om as Port,eF as Modal,or as EditableLabel,oe as useAudioNode,oo as useNode,ek as useTheme,eC as useStore,e$ as theme,eb as isAudio,ey as isPatch,ew as PortType};
664
670
  //# sourceMappingURL=module.js.map