@web-noise/core 0.0.18 → 0.0.19

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,4 +1,4 @@
1
- let e,o;import{jsx as t,jsxs as n,Fragment as r}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 m,useCallback as u,useRef as f}from"react";import{FaPlus as v}from"react-icons/fa6";import{MdClose as b,MdDragHandle as y,MdSettings as x,MdInfoOutline as w}from"react-icons/md";import{registerFetcher as C}from"@web-noise/fetch";import{getConnectedEdges as k,addEdge as $,applyNodeChanges as P,applyEdgeChanges as N,Controls as z,ReactFlow as F,Background as E,BackgroundVariant as j,MiniMap as D,ReactFlowProvider as T,useReactFlow as M,Position as S,Handle as A,ControlButton as _,getBezierPath as I}from"@xyflow/react";import{create as R}from"zustand";import{setAudioNodeTypes as H,createPatch as L}from"@web-noise/patch";import{reverse as W,patch as O,create as B}from"jsondiffpatch";import{injectGlobal as U}from"@emotion/css";import"@xyflow/react/dist/style.css";import{useContextMenu as G,Item as V,Menu as X,Separator as Y}from"react-contexify";import"react-contexify/dist/ReactContexify.css";import J from"hotkeys-js";import{createPortal as Z}from"react-dom";import{FileDrop as q}from"react-file-drop";import{FaFileUpload as K,FaQuestion as Q,FaVolumeOff as ee,FaMap as eo,FaRegMap as et}from"react-icons/fa";import{Resizable as en}from"re-resizable";import er from"react-grid-layout";import"react-grid-layout/css/styles.css";import{AiFillLock as ei,AiFillUnlock as el}from"react-icons/ai";import{RxDashboard as ea}from"react-icons/rx";import es from"react-modern-drawer";import"react-modern-drawer/dist/index.css";import{marked as ed}from"marked";let ec="web-noise-drag-handle",ep=`.${ec}`,eh=10;(ev=eb||(eb={})).Gate="gate",ev.Number="number",ev.Audio="audio",ev.Any="any";let eg=e=>JSON.parse(JSON.stringify(e)),em=(e,o)=>{let t=new Set(e.map(e=>e.id)),n=new Set(o.map(e=>e.id));return{added:o.filter(e=>!t.has(e.id)),removed:e.filter(e=>!n.has(e.id))}},eu=e=>!("type"in e)||"patch"===e.type,ef=e=>"audio"===e.type;var ev,eb,ey=R((e=(...e)=>{let[o,t]=e;return{...((e,o)=>({nodes:[],edges:[],onNodesChange:o=>{e(({nodes:e})=>({nodes:P(o,e).map(e=>({dragHandle:ep,...e,data:{label:"unknown",...e.data}}))}))},onEdgesChange:o=>{e(({edges:e})=>({edges:N(o,e)}))},onConnect:o=>{e(({edges:e})=>({edges:$(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:n}=o(),{maxHistoryLength:r,skipCollect:i}=n;i?e({history:{...n,skipCollect:!1}}):e(({history:e})=>{if(!e)return{};let{buffer:o,pointer:n}=e,i=o.slice(Math.max(n-r+1,0),n);return{history:{...e,buffer:[...i,t],pointer:Math.min(n+1,r)}}})},back:()=>{let{nodes:t,edges:n,controlPanel:r,history:i}=o(),{buffer:l,pointer:a}=i,s=l[a-1];if(!s)return;let d=W(s);d&&e({...O(eg({nodes:t,edges:n,controlPanel:r}),d),history:{...i,pointer:a-1,skipCollect:!0}})},forward:()=>{let{nodes:t,edges:n,controlPanel:r,history:i}=o(),{buffer:l,pointer:a}=i,s=l[a];s&&e({...O(eg({nodes:t,edges:n,controlPanel:r}),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:L(),nodesState:{}}))(...e),...((e,o)=>({project:{files:[]},setProject(o){e({project:o,currentFileIndex:0})},getProject:()=>o().project,pullEditorChanges(){let{getEditorState:e,currentFileIndex:t,updateFileContent:n,project:r}=o(),i=r.files[t];ef(i)||n(t,{...i,file:e()})},syncEditorWithCurrentFile:()=>{let{currentFileIndex:e,setEditorState:t,project:n}=o(),r=n.files[e];r?"audio"===r.type?console.log("audio file. skipping"):t(r.file):console.warn("No current file to sync with editor")},currentFileIndex:0,setCurrentFileIndex(t){let{currentFileIndex:n}=o();t!==n&&e({currentFileIndex:t})},updateFileContent(t,n){let{project:r}=o();e({project:{...r,files:r.files.map((e,o)=>o===t?{...e,...n}:e)}})},updateFileName(t,n){let{project:r}=o();e({project:{...r,files:r.files.map((e,o)=>o===t?{...e,name:n}:e)}})},addFile(t){let{project:n}=o(),r=[...n.files,t];e({project:{...n,files:r}})},deleteFile:t=>{let{project:n,currentFileIndex:r}=o();e({project:{...n,files:n.files.filter((e,o)=>t!==o)}}),t<=r&&e({currentFileIndex:Math.max(0,r-1)})}}))(...e),setGraph:async({nodes:e,edges:o})=>{let{patch:n,createNodes:r,createEdges:i,setNodesAndEdges:l,nodes:a,edges:s}=t();l({nodes:[],edges:[]}),await r(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:n}=t(),{type:r,id:i,data:l}=e;if(void 0===r)throw Error(`node type is not defined for node: ${i}`);o({...e,data:{...l,config:{...n[r]?.defaultConfig,...l?.config}}})},removeNode:e=>t().removeNodes([e]),removeNodes:e=>{let{edges:n,nodes:r,onNodesDelete:i,removeEdges:l,removeNodesFromControlPanel:a}=t(),s=e.map(({id:e})=>e),d=[...e,...r.filter(({parentId:e})=>e&&s.includes(e))];a(d),l(k(d,n)),i(d);let c=d.map(({id:e})=>e);o({nodes:r.filter(({id:e})=>!c.includes(e))})},removeEdges:e=>{let{edges:n,onEdgesDelete:r}=t(),i=e.map(({id:e})=>e);r(e),o({edges:n.filter(({id:e})=>!i.includes(e))})},createEdges:e=>{let{patch:o,edges:n,setEdges:r}=t();r(e)},onConnect:async e=>{let{edges:o,createEdges:n}=t();n($(e,o))},onEdgesDelete:e=>{let{patch:o}=t()},onNodesDelete:async e=>{let{removeNodesFromControlPanel:o,patch:n}=t();o(e)},plugins:[],setPlugins:async e=>{let{setNodeTypes:n}=t();o({plugins:e});let r=e.reduce((e,o)=>({...e,...o.components.reduce((e,o)=>({...e,[o.type]:o}),{})}),{}),i=Object.keys(r).reduce((e,o)=>({...e,[o]:r[o].node}),{});H(Object.keys(r).reduce((e,o)=>({...e,[o]:r[o].audioNode}),{})),n(i),o(({nodesConfiguration:e})=>({nodesConfiguration:{...e,...r}}))},nodesConfiguration:{},config:{showMinimap:!1},setConfig:e=>{o(({config:o})=>({config:{...o,...e}}))},getEditorState:()=>{let{getNodesAndEdges:e,controlPanel:o,viewport:n}=t();return{...e(),controlPanel:o,viewport:n}},setEditorState:async({nodes:e,edges:n,controlPanel:r,viewport:i})=>{let{setGraph:l}=t();await l({nodes:e,edges:n}),await new Promise(e=>setTimeout(e,1e3)),o({controlPanel:r,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:n}=t(),r=e.filter(({selected:e})=>e),i=o.filter(({selected:e})=>e);r.length&&n({nodes:r,edges:i})},pasteBuffer:(e=0,n=0)=>{let{copyBuffer:r,createNodes:i,setEdges:l,nodes:a,edges:s}=t(),{nodes:d,edges:c}=r;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-n,{nodes:m,mapping:u}=d.reduce((e,o)=>{let t,n=(t=+new Date+Math.floor(1e3*Math.random()),o?.type?`${o.type}-${t}`:t.toString());return{nodes:[...e.nodes,{...o,id:n,position:{x:o.position.x-h,y:o.position.y-g},selected:!0}],mapping:{...e.mapping,[o.id]:n}}},{nodes:[],mapping:{}});i(m);let f=c.map(e=>{let o=u[e.source]||e.source,t=u[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:n}=e;if(!n)return null;let r=o[n]?.controlPanelNode;return r||(console.error(`could not find node for type ${n}`),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:n}=t(),r=e.type?n[e.type]?.defaultConfig:{},{height:i}=r?.size||{},l={id:e.id,...i?{height:i/eh}:{}};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,n)=>{let r,i,l,a=(i=B({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)}),l=t(),(e,o)=>{e.currentFileIndex!==o.currentFileIndex&&t().history.clear(),clearTimeout(r),l||(l=o),r=setTimeout(()=>{let o=i.diff(l,e);l=null,o&&t().history.push(o)},500)});return n.subscribe(a),e((...e)=>o(...e),t,n)},(e,t,n)=>{n.subscribe(async(e,o)=>{});let r={...t(),nodes:[],edges:[]},i=Promise.resolve();return o((...o)=>{i=i.then(async()=>{let n=t(),[i]=o,l={...r,..."function"==typeof i?i({...r}):i},a=em(r.nodes,l.nodes),s=em(r.edges,l.edges);r=l;let d=a.added,c=s.added,p=s.removed,h=a.removed,{patch:g}=n;d.length&&await g.registerAudioNodes(d),c.length&&g.registerAudioConnections(c),p.length&&g.unregisterAudioConnections(p),h.length&&g.unregisterAudioNodes(h),e(...o)}).catch(e=>{console.error("audioPatch middleware error:",e)})},t,n)})),ex={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}};U`
1
+ let e,o;import{jsx as t,jsxs as n,Fragment as r}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 m,useCallback as u,useRef as f}from"react";import{FaPlus as v}from"react-icons/fa6";import{MdClose as b,MdDragHandle as y,MdSettings as x,MdInfoOutline as w}from"react-icons/md";import{registerFetcher as C}from"@web-noise/fetch";import{getConnectedEdges as k,addEdge as $,applyNodeChanges as P,applyEdgeChanges as N,Controls as z,ReactFlow as j,Background as F,BackgroundVariant as E,MiniMap as D,ReactFlowProvider as T,useReactFlow as M,Position as S,Handle as A,ControlButton as _,getBezierPath as I}from"@xyflow/react";import{create as R}from"zustand";import{setAudioNodeTypes as H,createPatch as L}from"@web-noise/patch";import{reverse as W,patch as O,create as B}from"jsondiffpatch";import{injectGlobal as U}from"@emotion/css";import"@xyflow/react/dist/style.css";import{useContextMenu as G,Item as V,Menu as Y,Separator as X}from"react-contexify";import"react-contexify/dist/ReactContexify.css";import J from"hotkeys-js";import{createPortal as Z}from"react-dom";import{FileDrop as q}from"react-file-drop";import{FaFileUpload as K,FaQuestion as Q,FaVolumeOff as ee,FaMap as eo,FaRegMap as et}from"react-icons/fa";import{Resizable as en}from"re-resizable";import er from"react-grid-layout";import"react-grid-layout/css/styles.css";import{AiFillLock as ei,AiFillUnlock as el}from"react-icons/ai";import{RxDashboard as ea}from"react-icons/rx";import es from"react-modern-drawer";import"react-modern-drawer/dist/index.css";import{marked as ed}from"marked";let ec="web-noise-drag-handle",ep=`.${ec}`,eh=10;(ev=eb||(eb={})).Gate="gate",ev.Number="number",ev.Audio="audio",ev.Any="any";let eg=e=>JSON.parse(JSON.stringify(e)),em=(e,o)=>{let t=new Set(e.map(e=>e.id)),n=new Set(o.map(e=>e.id));return{added:o.filter(e=>!t.has(e.id)),removed:e.filter(e=>!n.has(e.id))}},eu=e=>!("type"in e)||"patch"===e.type,ef=e=>"audio"===e.type;var ev,eb,ey=R((e=(...e)=>{let[o,t]=e;return{...((e,o)=>({nodes:[],edges:[],onNodesChange:o=>{e(({nodes:e})=>({nodes:P(o,e).map(e=>({dragHandle:ep,...e,data:{label:"unknown",...e.data}}))}))},onEdgesChange:o=>{e(({edges:e})=>({edges:N(o,e)}))},onConnect:o=>{e(({edges:e})=>({edges:$(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:n}=o(),{maxHistoryLength:r,skipCollect:i}=n;i?e({history:{...n,skipCollect:!1}}):e(({history:e})=>{if(!e)return{};let{buffer:o,pointer:n}=e,i=o.slice(Math.max(n-r+1,0),n);return{history:{...e,buffer:[...i,t],pointer:Math.min(n+1,r)}}})},back:()=>{let{nodes:t,edges:n,controlPanel:r,history:i}=o(),{buffer:l,pointer:a}=i,s=l[a-1];if(!s)return;let d=W(s);d&&e({...O(eg({nodes:t,edges:n,controlPanel:r}),d),history:{...i,pointer:a-1,skipCollect:!0}})},forward:()=>{let{nodes:t,edges:n,controlPanel:r,history:i}=o(),{buffer:l,pointer:a}=i,s=l[a];s&&e({...O(eg({nodes:t,edges:n,controlPanel:r}),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:L(),nodesState:{}}))(...e),...((e,o)=>({project:{files:[],currentFileIndex:0},setProject(o){e({project:o})},getProject:()=>o().project,pullEditorChanges(){let{getEditorState:e,updateFileContent:t,project:n}=o(),r=n.currentFileIndex||0,i=n.files[r];ef(i)||t(r,{...i,file:e()})},syncEditorWithCurrentFile:()=>{let{setEditorState:e,project:t}=o(),n=t.currentFileIndex||0,r=t.files[n];r?"audio"===r.type?console.log("audio file. skipping"):e(r.file):console.warn("No current file to sync with editor")},setCurrentFileIndex(t){let{project:n,getProject:r}=o();t!==(n.currentFileIndex??0)&&e({project:{...n,currentFileIndex:t}})},updateFileContent(t,n){let{project:r}=o();e({project:{...r,files:r.files.map((e,o)=>o===t?{...e,...n}:e)}})},updateFileName(t,n){let{project:r}=o();e({project:{...r,files:r.files.map((e,o)=>o===t?{...e,name:n}:e)}})},addFile(e){let{project:t,setProject:n}=o(),r=[...t.files,e];n({...t,files:r,currentFileIndex:r.length-1})},deleteFile:t=>{let{project:n}=o(),r=n.currentFileIndex??0,i=r===n.files.length-1?Math.max(0,r-1):r,l=n.files.filter((e,o)=>t!==o);e({project:{...n,files:l,currentFileIndex:i}})}}))(...e),setGraph:async({nodes:e,edges:o})=>{let{patch:n,createNodes:r,createEdges:i,setNodesAndEdges:l,nodes:a,edges:s}=t();l({nodes:[],edges:[]}),await r(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:n}=t(),{type:r,id:i,data:l}=e;if(void 0===r)throw Error(`node type is not defined for node: ${i}`);o({...e,data:{...l,config:{...n[r]?.defaultConfig,...l?.config}}})},removeNode:e=>t().removeNodes([e]),removeNodes:e=>{let{edges:n,nodes:r,onNodesDelete:i,removeEdges:l,removeNodesFromControlPanel:a}=t(),s=e.map(({id:e})=>e),d=[...e,...r.filter(({parentId:e})=>e&&s.includes(e))];a(d),l(k(d,n)),i(d);let c=d.map(({id:e})=>e);o({nodes:r.filter(({id:e})=>!c.includes(e))})},removeEdges:e=>{let{edges:n,onEdgesDelete:r}=t(),i=e.map(({id:e})=>e);r(e),o({edges:n.filter(({id:e})=>!i.includes(e))})},createEdges:e=>{let{patch:o,edges:n,setEdges:r}=t();r(e)},onConnect:async e=>{let{edges:o,createEdges:n}=t();n($(e,o))},onEdgesDelete:e=>{let{patch:o}=t()},onNodesDelete:async e=>{let{removeNodesFromControlPanel:o,patch:n}=t();o(e)},plugins:[],setPlugins:async e=>{let{setNodeTypes:n}=t();o({plugins:e});let r=e.reduce((e,o)=>({...e,...o.components.reduce((e,o)=>({...e,[o.type]:o}),{})}),{}),i=Object.keys(r).reduce((e,o)=>({...e,[o]:r[o].node}),{});H(Object.keys(r).reduce((e,o)=>({...e,[o]:r[o].audioNode}),{})),n(i),o(({nodesConfiguration:e})=>({nodesConfiguration:{...e,...r}}))},nodesConfiguration:{},config:{showMinimap:!1},setConfig:e=>{o(({config:o})=>({config:{...o,...e}}))},getEditorState:()=>{let{getNodesAndEdges:e,controlPanel:o,viewport:n}=t();return{...e(),controlPanel:o,viewport:n}},setEditorState:async({nodes:e,edges:n,controlPanel:r,viewport:i})=>{let{setGraph:l}=t();await l({nodes:e,edges:n}),await new Promise(e=>setTimeout(e,1e3)),o({controlPanel:r,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:n}=t(),r=e.filter(({selected:e})=>e),i=o.filter(({selected:e})=>e);r.length&&n({nodes:r,edges:i})},pasteBuffer:(e=0,n=0)=>{let{copyBuffer:r,createNodes:i,setEdges:l,nodes:a,edges:s}=t(),{nodes:d,edges:c}=r;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-n,{nodes:m,mapping:u}=d.reduce((e,o)=>{let t,n=(t=+new Date+Math.floor(1e3*Math.random()),o?.type?`${o.type}-${t}`:t.toString());return{nodes:[...e.nodes,{...o,id:n,position:{x:o.position.x-h,y:o.position.y-g},selected:!0}],mapping:{...e.mapping,[o.id]:n}}},{nodes:[],mapping:{}});i(m);let f=c.map(e=>{let o=u[e.source]||e.source,t=u[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:n}=e;if(!n)return null;let r=o[n]?.controlPanelNode;return r||(console.error(`could not find node for type ${n}`),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:n}=t(),r=e.type?n[e.type]?.defaultConfig:{},{height:i}=r?.size||{},l={id:e.id,...i?{height:i/eh}:{}};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,n)=>{let r,i,l,a=(i=B({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)}),l=t(),(e,o)=>{e.project.currentFileIndex!==o.project.currentFileIndex&&t().history.clear(),clearTimeout(r),l||(l=o),r=setTimeout(()=>{let o=i.diff(l,e);l=null,o&&t().history.push(o)},500)});return n.subscribe(a),e((...e)=>o(...e),t,n)},(e,t,n)=>{n.subscribe(async(e,o)=>{});let r={...t(),nodes:[],edges:[]},i=Promise.resolve();return o((...o)=>{i=i.then(async()=>{let n=t(),[i]=o,l={...r,..."function"==typeof i?i({...r}):i},a=em(r.nodes,l.nodes),s=em(r.edges,l.edges);r=l;let d=a.added,c=s.added,p=s.removed,h=a.removed,{patch:g}=n;d.length&&await g.registerAudioNodes(d),c.length&&g.registerAudioConnections(c),p.length&&g.unregisterAudioConnections(p),h.length&&g.unregisterAudioNodes(h),e(...o)}).catch(e=>{console.error("audioPatch middleware error:",e)})},t,n)})),ex={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}};U`
2
2
  .react-flow {
3
3
  .react-flow__pane {
4
4
  /* background: rgb(106 106 106); */
@@ -51,7 +51,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
51
51
  .react-contexify__item__content {
52
52
  color: ${({theme:e})=>e.colors.error};
53
53
  }
54
- `),e$=c(X)`
54
+ `),e$=c(Y)`
55
55
  background: ${({colors:e})=>e.elevation2};
56
56
  padding: 0;
57
57
  border-radius: 0;
@@ -75,7 +75,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
75
75
  display: flex;
76
76
  align-items: center;
77
77
  justify-content: center;
78
- `,eF=c.div`
78
+ `,ej=c.div`
79
79
  background: ${({theme:e})=>e.colors.elevation2};
80
80
  box-shadow: 1px 1px 1px 1px ${({theme:e})=>e.colors.elevation1};
81
81
  color: white;
@@ -83,12 +83,12 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
83
83
  height: 80%;
84
84
  overflow-y: scroll;
85
85
  position: relative;
86
- `,eE=c(b)`
86
+ `,eF=c(b)`
87
87
  position: absolute;
88
88
  top: 0.2rem;
89
89
  right: 0.2rem;
90
90
  cursor: pointer;
91
- `;var ej=({children:e,onClose:o,...r})=>{let i=ew();return g(()=>{let e=e=>{"Escape"===e.key&&o?.()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[o]),Z(t(ez,{theme:i,onClick:o,children:n(eF,{...r,onClick:e=>{e.stopPropagation()},theme:i,children:[e,t(eE,{theme:i,onClick:o})]})}),document.body)};let eD=i(c.div`
91
+ `;var eE=({children:e,onClose:o,...r})=>{let i=ew();return g(()=>{let e=e=>{"Escape"===e.key&&o?.()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[o]),Z(t(ez,{theme:i,onClick:o,children:n(ej,{...r,onClick:e=>{e.stopPropagation()},theme:i,children:[e,t(eF,{theme:i,onClick:o})]})}),document.body)};let eD=i(c.div`
92
92
  width: 100%;
93
93
  `),eT=i(c.div`
94
94
  padding: 1rem;
@@ -207,7 +207,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
207
207
  content: "×";
208
208
  margin-left: 0.4rem;
209
209
  }
210
- `);var eX=({onChange:e,value:o})=>{let r=ew(),i=ey(({plugins:e})=>e),l=f(null);return g(()=>{l.current&&l.current.focus()},[l]),n(eU,{theme:r,children:[t(eO,{children:t(eB,{ref:l,theme:r,value:o.search||"",placeholder:"search...",onChange:t=>e({...o,search:t.target.value})})}),t(e_,{children:o.tags?.map((n,r)=>t(eV,{isActive:!0,onClick:()=>{let t=o.tags?.filter(e=>e!==n)||[];e({...o,tags:t})},children:n},r))}),i.map(({name:i,components:l},a)=>i?n(eG,{theme:r,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`
210
+ `);var eY=({onChange:e,value:o})=>{let r=ew(),i=ey(({plugins:e})=>e),l=f(null);return g(()=>{l.current&&l.current.focus()},[l]),n(eU,{theme:r,children:[t(eO,{children:t(eB,{ref:l,theme:r,value:o.search||"",placeholder:"search...",onChange:t=>e({...o,search:t.target.value})})}),t(e_,{children:o.tags?.map((n,r)=>t(eV,{isActive:!0,onClick:()=>{let t=o.tags?.filter(e=>e!==n)||[];e({...o,tags:t})},children:n},r))}),i.map(({name:i,components:l},a)=>i?n(eG,{theme:r,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 eX=c.div`
211
211
  height: 100%;
212
212
  width: 100%;
213
213
  display: flex;
@@ -216,7 +216,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
216
216
  flex-grow: 1;
217
217
  height: 100%;
218
218
  overflow-y: scroll;
219
- `;var eZ=({isOpen:e,closeMenu:o,mousePosition:r})=>{let i=ew(),{screenToFlowPosition:l}=M(),{createNode:a}=ey(({createNode:e})=>({createNode:e})),[s,d]=h({}),c=u(({type:e})=>{let{x:t,y:n}=l(r);a({id:`${e}-${+new Date}`,type:e,data:{label:e},position:{x:t,y:n},targetPosition:S.Left,sourcePosition:S.Right}),o()},[r,l,a,o,r]);return e?t(ej,{onClose:()=>{o(),d({})},children:n(eY,{theme:i,children:[t(eX,{onChange:d,value:s}),t(eJ,{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=e=>new Promise((o,t)=>{let n=new FileReader;n.readAsDataURL(e),n.onload=()=>o(n.result?.toString()||""),n.onerror=e=>t(e)}),eK=c.div`
219
+ `;var eZ=({isOpen:e,closeMenu:o,mousePosition:r})=>{let i=ew(),{screenToFlowPosition:l}=M(),{createNode:a}=ey(({createNode:e})=>({createNode:e})),[s,d]=h({}),c=u(({type:e})=>{let{x:t,y:n}=l(r);a({id:`${e}-${+new Date}`,type:e,data:{label:e},position:{x:t,y:n},targetPosition:S.Left,sourcePosition:S.Right}),o()},[r,l,a,o,r]);return e?t(eE,{onClose:()=>{o(),d({})},children:n(eX,{theme:i,children:[t(eY,{onChange:d,value:s}),t(eJ,{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=e=>new Promise((o,t)=>{let n=new FileReader;n.readAsDataURL(e),n.onload=()=>o(n.result?.toString()||""),n.onerror=e=>t(e)}),eK=c.div`
220
220
  display: flex;
221
221
  align-items: center;
222
222
  justify-content: center;
@@ -254,7 +254,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
254
254
  height: 8rem;
255
255
  `,e1=c.div`
256
256
  font-size: 2rem;
257
- `;var e2=({isOpen:e,closeMenu:o})=>{let r=ew();ey(({setGraph:e})=>e),ey(e=>e.setEditorState);let i=ey(e=>e.addFile),l=f(null),a=u(async e=>{let[t]=e||[],n=await eq(t);i({type:"audio",id:`audio-file-${+new Date}`,name:t.name,file:n}),o()},[i,o]);return e?t(ej,{onClose:o,children:n(eK,{theme:r,children:[t("input",{onChange:({target:{files:e}})=>a(e),ref:l,type:"file",className:"hidden",style:{display:"none"},accept:".wav,.mp3,.ogg"}),t(q,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{l.current?.click()},onDrop:e=>a(e),children:n(eQ,{theme:r,children:[t(e0,{}),t(e1,{children:"click or drop file here"})]})})]})}):null};let e3="editor-menu";var e6=({editorContextMenu:e=[]})=>{let o=ew(),[i,l]=h({x:0,y:0}),[a,s]=h(!1),[d,c]=h(!1),p=u((e,o)=>{l({x:e,y:o}),s(!0)},[s]),f=ey(e=>e.pasteBuffer),{screenToFlowPosition:v}=M(),b=u(e=>{let{x:o,y:t}=v(e);f(o,t)},[s,v]),y=ey(({clearGraph:e})=>e),x=u(()=>{window.confirm("This action will delete all nodes in this patch. Continue?")&&y()},[y]),w=ey(e=>e.toggleHelp),C=ey(e=>e.history.back),k=ey(e=>e.history.forward),$=ey(e=>e.history.pointer),P=ey(e=>e.history.buffer),N=ey(e=>e.copySelectedItems),z=ey(e=>e.nodes),F=m(()=>z.filter(({selected:e})=>e),[z]),E=ey(e=>e.copyBuffer);return M(),g(()=>(J("command+shift+a",()=>(p(200,50),!1)),J("shift+/",()=>(w(),!1)),J("command+z",()=>(C(),!1)),J("command+shift+z",()=>(k(),!1)),J("command+c",()=>(N(),!1)),J("command+v",()=>(b({x:200,y:50}),!1)),()=>{J.unbind()}),[p,b]),n(r,{children:[t(eZ,{isOpen:a,closeMenu:()=>s(!1),mousePosition:i}),t(e2,{isOpen:d,closeMenu:()=>c(!1)}),n(e$,{id:e3,animation:!1,colors:o.colors,children:[t(eC,{onClick:({triggerEvent:{clientX:e,clientY:o}})=>p(e,o),children:"Add Node (⌘+⇧+A)"}),t(Y,{}),t(ek,{onClick:x,children:"Delete All"}),t(Y,{}),t(eC,{onClick:()=>c(!0),children:"Upload Audio File"}),t(Y,{}),t(eC,{disabled:0===$,onClick:C,children:"Undo (⌘+z)"}),t(eC,{disabled:$===P.length,onClick:k,children:"Redo (⌘+⇧+Z)"}),t(Y,{}),t(eC,{disabled:!F.length,onClick:N,children:"Copy Selected (⌘+c)"}),t(eC,{disabled:!E.nodes.length,onClick:({triggerEvent:{clientX:e,clientY:o}})=>b({x:e,y:o}),children:"Paste (⌘+v)"}),t(Y,{}),e.map((e,o)=>null===e?t(Y,{},o):t(eC,{children:e},o)),t(Y,{}),t(eC,{onClick:w,children:"Help (⇧+?)"})]})]})};let e4="editor-node-menu";var e9=e=>{let o=ew(),i=ey(e=>e.removeNodes),l=ey(e=>e.addNodeToControlPanel),a=ey(e=>e.removeNodeFromControlPanel),s=ey(e=>e.copy),d=ey(e=>e.nodesConfiguration),c=ey(e=>e.controlPanel.nodes),p=u(({props:e})=>!!e?.node.type&&!!c.find(({id:o})=>o===e.node.id),[c]),h=u(({props:e})=>{if(!e?.node.type)return!1;let o=d[e.node.type];return!!o?.controlPanelNode},[d]);return t(r,{children:n(e$,{id:e4,animation:!1,colors:o.colors,children:[t(eC,{onClick:e=>i([e.props.node]),children:"Delete Node (DEL)"}),t(eC,{hidden:(...e)=>!h(...e)||p(...e),onClick:e=>l(e.props.node),children:"Add To Control Panel"}),t(eC,{hidden:(...e)=>!h(...e)||!p(...e),onClick:e=>a(e.props.node),children:"Remove From Control Panel"}),t(eC,{onClick:e=>s({nodes:[e.props.node],edges:[]}),children:"Copy (⌘+c)"})]})})},e8=e=>ey(({patch:e})=>e).audioNodes.get(e),e7=e=>{let o=ey(({updateNodeData:e})=>e);return{updateNodeValues:u(t=>o(e,{values:t}),[e,o]),updateNodeConfig:u(t=>o(e,{config:t}),[e,o]),updateNodeLabel:u(t=>o(e,{label:t}),[e,o])}};let e5=c.input`
257
+ `;var e2=({isOpen:e,closeMenu:o})=>{let r=ew();ey(({setGraph:e})=>e),ey(e=>e.setEditorState);let i=ey(e=>e.addFile),l=f(null),a=u(async e=>{let[t]=e||[],n=await eq(t);i({type:"audio",id:`audio-file-${+new Date}`,name:t.name,file:n}),o()},[i,o]);return e?t(eE,{onClose:o,children:n(eK,{theme:r,children:[t("input",{onChange:({target:{files:e}})=>a(e),ref:l,type:"file",className:"hidden",style:{display:"none"},accept:".wav,.mp3,.ogg"}),t(q,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{l.current?.click()},onDrop:e=>a(e),children:n(eQ,{theme:r,children:[t(e0,{}),t(e1,{children:"click or drop file here"})]})})]})}):null};let e3="editor-menu";var e6=({editorContextMenu:e=[]})=>{let o=ew(),[i,l]=h({x:0,y:0}),[a,s]=h(!1),[d,c]=h(!1),p=u((e,o)=>{l({x:e,y:o}),s(!0)},[s]),f=ey(e=>e.pasteBuffer),{screenToFlowPosition:v}=M(),b=u(e=>{let{x:o,y:t}=v(e);f(o,t)},[s,v]),y=ey(({clearGraph:e})=>e),x=u(()=>{window.confirm("This action will delete all nodes in this patch. Continue?")&&y()},[y]),w=ey(e=>e.toggleHelp),C=ey(e=>e.history.back),k=ey(e=>e.history.forward),$=ey(e=>e.history.pointer),P=ey(e=>e.history.buffer),N=ey(e=>e.copySelectedItems),z=ey(e=>e.nodes),j=m(()=>z.filter(({selected:e})=>e),[z]),F=ey(e=>e.copyBuffer);return M(),g(()=>(J("command+shift+a",()=>(p(200,50),!1)),J("shift+/",()=>(w(),!1)),J("command+z",()=>(C(),!1)),J("command+shift+z",()=>(k(),!1)),J("command+c",()=>(N(),!1)),J("command+v",()=>(b({x:200,y:50}),!1)),()=>{J.unbind()}),[p,b]),n(r,{children:[t(eZ,{isOpen:a,closeMenu:()=>s(!1),mousePosition:i}),t(e2,{isOpen:d,closeMenu:()=>c(!1)}),n(e$,{id:e3,animation:!1,colors:o.colors,children:[t(eC,{onClick:({triggerEvent:{clientX:e,clientY:o}})=>p(e,o),children:"Add Node (⌘+⇧+A)"}),t(X,{}),t(ek,{onClick:x,children:"Delete All"}),t(X,{}),t(eC,{onClick:()=>c(!0),children:"Upload Audio File"}),t(X,{}),t(eC,{disabled:0===$,onClick:C,children:"Undo (⌘+z)"}),t(eC,{disabled:$===P.length,onClick:k,children:"Redo (⌘+⇧+Z)"}),t(X,{}),t(eC,{disabled:!j.length,onClick:N,children:"Copy Selected (⌘+c)"}),t(eC,{disabled:!F.nodes.length,onClick:({triggerEvent:{clientX:e,clientY:o}})=>b({x:e,y:o}),children:"Paste (⌘+v)"}),t(X,{}),e.map((e,o)=>null===e?t(X,{},o):t(eC,{children:e},o)),t(X,{}),t(eC,{onClick:w,children:"Help (⇧+?)"})]})]})};let e4="editor-node-menu";var e9=e=>{let o=ew(),i=ey(e=>e.removeNodes),l=ey(e=>e.addNodeToControlPanel),a=ey(e=>e.removeNodeFromControlPanel),s=ey(e=>e.copy),d=ey(e=>e.nodesConfiguration),c=ey(e=>e.controlPanel.nodes),p=u(({props:e})=>!!e?.node.type&&!!c.find(({id:o})=>o===e.node.id),[c]),h=u(({props:e})=>{if(!e?.node.type)return!1;let o=d[e.node.type];return!!o?.controlPanelNode},[d]);return t(r,{children:n(e$,{id:e4,animation:!1,colors:o.colors,children:[t(eC,{onClick:e=>i([e.props.node]),children:"Delete Node (DEL)"}),t(eC,{hidden:(...e)=>!h(...e)||p(...e),onClick:e=>l(e.props.node),children:"Add To Control Panel"}),t(eC,{hidden:(...e)=>!h(...e)||!p(...e),onClick:e=>a(e.props.node),children:"Remove From Control Panel"}),t(eC,{onClick:e=>s({nodes:[e.props.node],edges:[]}),children:"Copy (⌘+c)"})]})})},e8=e=>ey(({patch:e})=>e).audioNodes.get(e),e7=e=>{let o=ey(({updateNodeData:e})=>e);return{updateNodeValues:u(t=>o(e,{values:t}),[e,o]),updateNodeConfig:u(t=>o(e,{config:t}),[e,o]),updateNodeLabel:u(t=>o(e,{label:t}),[e,o])}};let e5=c.input`
258
258
  width: 100%;
259
259
  background: none;
260
260
  border: none;
@@ -362,7 +362,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
362
362
  margin-inline-end: 0px;
363
363
  unicode-bidi: isolate;
364
364
  }
365
- `);var ot=({isOpen:e,onClose:o,type:n,node:r})=>{let{info:i,portsDescription:l}=ey(e=>e.nodesConfiguration[n]),a=m(()=>{let e=[],o=r.inputs;if(o)for(let t in e.push("## Inputs"),o){let n=o[t];e.push(`### *${t}*`);let r=l?.inputs?.[t];r&&e.push(r),Array.isArray(n.type)?e.push(`**Types**: \`${n.type.join(", ")}\``):e.push(`**Type**: \`${n.type||"unknown"}\``),n.range&&e.push(`**Range**: \`[${n.range[0]}, ${n.range[1]}]\``),void 0!==n.defaultValue&&e.push(`**Default**: \`${n.defaultValue}\``)}let t=r.outputs;if(t)for(let o in e.push("## Outputs"),t){let n=t[o];e.push(`### *${o}*`);let r=l?.outputs?.[o];r&&e.push(r),Array.isArray(n.type)?e.push(`**Types**: \`${n.type.join(", ")}\``):e.push(`**Type**: \`${n.type||"unknown"}\``),n.range&&e.push(`**Range**: \`[${n.range[0]}, ${n.range[1]}]\``),void 0!==n.defaultValue&&e.push(`**Default**: \`${n.defaultValue}\``)}return e.join("\n\n")},[r,l]);return e?t(ej,{onClose:o,children:t(oo,{dangerouslySetInnerHTML:{__html:ed((i||"")+"\n\n"+a||"")}})}):null};let on=c.div`
365
+ `);var ot=({isOpen:e,onClose:o,type:n,node:r})=>{let{info:i,portsDescription:l}=ey(e=>e.nodesConfiguration[n]),a=m(()=>{let e=[],o=r.inputs;if(o)for(let t in e.push("## Inputs"),o){let n=o[t];e.push(`### *${t}*`);let r=l?.inputs?.[t];r&&e.push(r),Array.isArray(n.type)?e.push(`**Types**: \`${n.type.join(", ")}\``):e.push(`**Type**: \`${n.type||"unknown"}\``),n.range&&e.push(`**Range**: \`[${n.range[0]}, ${n.range[1]}]\``),void 0!==n.defaultValue&&e.push(`**Default**: \`${n.defaultValue}\``)}let t=r.outputs;if(t)for(let o in e.push("## Outputs"),t){let n=t[o];e.push(`### *${o}*`);let r=l?.outputs?.[o];r&&e.push(r),Array.isArray(n.type)?e.push(`**Types**: \`${n.type.join(", ")}\``):e.push(`**Type**: \`${n.type||"unknown"}\``),n.range&&e.push(`**Range**: \`[${n.range[0]}, ${n.range[1]}]\``),void 0!==n.defaultValue&&e.push(`**Default**: \`${n.defaultValue}\``)}return e.join("\n\n")},[r,l]);return e?t(eE,{onClose:o,children:t(oo,{dangerouslySetInnerHTML:{__html:ed((i||"")+"\n\n"+a||"")}})}):null};let on=c.div`
366
366
  background-color: var(--leva-colors-elevation1);
367
367
  `,or=c(on)`
368
368
  padding: 2rem 5rem;
@@ -460,7 +460,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
460
460
  height: 100%;
461
461
  display: grid;
462
462
  grid-template-rows: auto 1fr;
463
- `,oF=e=>{let{node:o}=e,n=ey(e=>e.getControlPanelNode),r=m(()=>n(o),[o]);return r?t(r,{...e}):null};var oE=e=>{let{node:o,showControls:r,onDelete:i}=e,l=ew(),{id:a}=o,{node:s}=e8(a)||{},{updateNodeValues:d}=e7(a);return n(oz,{theme:l,children:[n(o$,{theme:l,children:[t(ok,{children:o.data.label}),r&&n(oP,{children:[t(oN,{theme:l,children:t(y,{className:"grid-item-handle"})}),t(oN,{theme:l,children:t(b,{onClick:()=>i(o)})})]})]}),t(oF,{node:o,audioNode:s,updateNodeValues:d})]})};let oj=c.div`
463
+ `,oj=e=>{let{node:o}=e,n=ey(e=>e.getControlPanelNode),r=m(()=>n(o),[o]);return r?t(r,{...e}):null};var oF=e=>{let{node:o,showControls:r,onDelete:i}=e,l=ew(),{id:a}=o,{node:s}=e8(a)||{},{updateNodeValues:d}=e7(a);return n(oz,{theme:l,children:[n(o$,{theme:l,children:[t(ok,{children:o.data.label}),r&&n(oP,{children:[t(oN,{theme:l,children:t(y,{className:"grid-item-handle"})}),t(oN,{theme:l,children:t(b,{onClick:()=>i(o)})})]})]}),t(oj,{node:o,audioNode:s,updateNodeValues:d})]})};let oE=c.div`
464
464
  position: fixed;
465
465
  z-index: 5;
466
466
  box-shadow: 0px 1px 2px ${({theme:e})=>e.colors.elevation2};
@@ -531,7 +531,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
531
531
  border-color: ${({theme:e})=>e.colors.whitePrimary};
532
532
  border-width: 1px;
533
533
  }
534
- `;var oW=()=>{let e=ew(),o=f(null),i=ey(e=>e.nodes),{show:l,nodes:a,size:s}=ey(e=>e.controlPanel),{width:d=200,height:c}=s,p=m(()=>{let e=a.map(({id:e})=>e);return i.filter(({id:o})=>e.includes(o))},[i,a]),g=ey(e=>e.showControlPanel),u=ey(e=>e.hideControlPanel),v=ey(e=>e.setControlPanelNodes),y=ey(e=>e.setControlPanelSize),x=ey(e=>e.removeNodeFromControlPanel),[w,C]=h(!0),k=m(()=>{let e=a.reduce((e,{height:o=eh,x:t,y:n=0})=>{let r=n+o;return r>e?r:e},0);return a.map(({id:o,width:t,height:n,x:r,y:i})=>({i:o,w:t||4,h:n||6,x:r??0,y:i??e}))},[a]);return p.length?n(r,{children:[t(oj,{theme:e,ref:o,onClick:g,children:t(ea,{})}),n(es,{open:l,onClose:u,direction:"left",className:"",size:"auto",enableOverlay:!1,style:{background:e.colors.elevation1,position:"absolute"},children:[n(oM,{theme:e,children:[t(oS,{children:"Control Panel"}),t(oD,{children:t(oT,{onClick:u,theme:e,children:t(b,{})})})]}),n(oA,{children:[t(oI,{children:w?n(oR,{theme:e,onClick:()=>C(!1),children:[t(ei,{}),"Unlock grid"]}):n(oR,{theme:e,onClick:()=>C(!0),children:[t(el,{}),"Lock grid"]})}),t(en,{enable:{top:!1,right:!w,bottom:!1,left:!1,topRight:!1,bottomRight:!1,bottomLeft:!1,topLeft:!1},handleComponent:{right:t(oH,{theme:e})},minWidth:120,size:{width:d,height:"auto"},onResizeStop:(e,o,t,n)=>{y({width:d+n.width,height:c+n.height})},children:t(o_,{theme:e,children:t(er,{layout:k,className:"layout",cols:4,rowHeight:eh,width:d,margin:[0,0],isResizable:!w,draggableHandle:".grid-item-handle",onLayoutChange:e=>{requestAnimationFrame(()=>{v(e.map(({i:e,w:o,h:t,x:n,y:r})=>({id:e,width:o,height:t,x:n,y:r})))})},children:p.map(o=>t(oL,{theme:e,children:t(oE,{node:o,showControls:!w,onDelete:x})},o.id))})})})]})]})]}):null},oO={};oO="# 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## Rename node\n - Doubleclick the node title\n\n<br/>\n\n## Undo/Redo\n - `CMD+Z` to Undo / `CMD+SHIFT+Z` to Redo\n - Select **'Undo'**/**'Redo'** from the Edit menu\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<br/>\n\n## Rename file in the project\n - Doubleclick the tab title\n\n\n";let oB=i(c.div`
534
+ `;var oW=()=>{let e=ew(),o=f(null),i=ey(e=>e.nodes),{show:l,nodes:a,size:s}=ey(e=>e.controlPanel),{width:d=200,height:c}=s,p=m(()=>{let e=a.map(({id:e})=>e);return i.filter(({id:o})=>e.includes(o))},[i,a]),g=ey(e=>e.showControlPanel),u=ey(e=>e.hideControlPanel),v=ey(e=>e.setControlPanelNodes),y=ey(e=>e.setControlPanelSize),x=ey(e=>e.removeNodeFromControlPanel),[w,C]=h(!0),k=m(()=>{let e=a.reduce((e,{height:o=eh,x:t,y:n=0})=>{let r=n+o;return r>e?r:e},0);return a.map(({id:o,width:t,height:n,x:r,y:i})=>({i:o,w:t||4,h:n||6,x:r??0,y:i??e}))},[a]);return p.length?n(r,{children:[t(oE,{theme:e,ref:o,onClick:g,children:t(ea,{})}),n(es,{open:l,onClose:u,direction:"left",className:"",size:"auto",enableOverlay:!1,style:{background:e.colors.elevation1,position:"absolute"},children:[n(oM,{theme:e,children:[t(oS,{children:"Control Panel"}),t(oD,{children:t(oT,{onClick:u,theme:e,children:t(b,{})})})]}),n(oA,{children:[t(oI,{children:w?n(oR,{theme:e,onClick:()=>C(!1),children:[t(ei,{}),"Unlock grid"]}):n(oR,{theme:e,onClick:()=>C(!0),children:[t(el,{}),"Lock grid"]})}),t(en,{enable:{top:!1,right:!w,bottom:!1,left:!1,topRight:!1,bottomRight:!1,bottomLeft:!1,topLeft:!1},handleComponent:{right:t(oH,{theme:e})},minWidth:120,size:{width:d,height:"auto"},onResizeStop:(e,o,t,n)=>{y({width:d+n.width,height:c+n.height})},children:t(o_,{theme:e,children:t(er,{layout:k,className:"layout",cols:4,rowHeight:eh,width:d,margin:[0,0],isResizable:!w,draggableHandle:".grid-item-handle",onLayoutChange:e=>{requestAnimationFrame(()=>{v(e.map(({i:e,w:o,h:t,x:n,y:r})=>({id:e,width:o,height:t,x:n,y:r})))})},children:p.map(o=>t(oL,{theme:e,children:t(oF,{node:o,showControls:!w,onDelete:x})},o.id))})})})]})]})]}):null},oO={};oO="# 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## Rename node\n - Doubleclick the node title\n\n<br/>\n\n## Undo/Redo\n - `CMD+Z` to Undo / `CMD+SHIFT+Z` to Redo\n - Select **'Undo'**/**'Redo'** from the Edit menu\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<br/>\n\n## Rename file in the project\n - Doubleclick the tab title\n\n\n";let oB=i(c.div`
535
535
  font-family: var(--leva-fonts-mono);
536
536
  font-size: 0.7rem;
537
537
  box-sizing: border-box;
@@ -602,7 +602,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
602
602
  width: 100%;
603
603
  box-sizing: border-box;
604
604
  overflow: hidden;
605
- `);var oG=()=>{var e;let o=ey(e=>e.isHelpShown),n=ey(e=>e.toggleHelp);return o?t(ej,{onClose:()=>{n()},children:t(oU,{children:t(oB,{dangerouslySetInnerHTML:{__html:ed((e=oO)&&e.__esModule?e.default:e)},onWheelCapture:e=>e.stopPropagation()})})}):null};let oV=()=>t(r,{children:t(_,{onClick:ey(e=>e.toggleHelp),children:t(Q,{})})}),oX=c.div`
605
+ `);var oG=()=>{var e;let o=ey(e=>e.isHelpShown),n=ey(e=>e.toggleHelp);return o?t(eE,{onClose:()=>{n()},children:t(oU,{children:t(oB,{dangerouslySetInnerHTML:{__html:ed((e=oO)&&e.__esModule?e.default:e)},onWheelCapture:e=>e.stopPropagation()})})}):null};let oV=()=>t(r,{children:t(_,{onClick:ey(e=>e.toggleHelp),children:t(Q,{})})}),oY=c.div`
606
606
  position: fixed;
607
607
  z-index: ${({theme:e})=>e.zIndex.resumeContextLayout};
608
608
  width: 100%;
@@ -616,7 +616,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
616
616
  justify-content: center;
617
617
  color: ${({theme:e})=>e.colors.whitePrimary};
618
618
  cursor: pointer;
619
- `,oY=c.div`
619
+ `,oX=c.div`
620
620
  display: flex;
621
621
  width: 100%;
622
622
  align-items: center;
@@ -627,7 +627,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
627
627
  `,oZ=c(ee)`
628
628
  width: 7rem;
629
629
  height: 7rem;
630
- `;var oq=()=>{let e=ew(),o=ey(({patch:e})=>e).audioContext,[r,i]=h("running"===o.state);return r?null:n(oX,{theme:e,onClick:()=>{o.resume(),i(!0)},children:[t(oY,{children:t(oJ,{theme:e,children:"Click anywhere to resume audio context"})}),t(oY,{children:t(oZ,{})})]})},oK=()=>{let e=ey(({setConfig:e})=>e),{showMinimap:o}=ey(({config:e})=>e);return t(_,{onClick:()=>e({showMinimap:!o}),children:o?t(eo,{}):t(et,{})})},oQ=({id:e,sourceX:o,sourceY:i,targetX:l,targetY:a,sourcePosition:s,targetPosition:d,style:c={},data:p,markerStart:h,markerEnd:m,source:u,target:f,sourceHandleId:v,targetHandleId:b,selected:y})=>{let x=ew(),w=ey(({getNode:e})=>e),C=w(u),k=w(f),$=C?.selected||k?.selected;g(()=>{if(v&&b)return console.log(`connected ${u} to ${f}`),()=>{console.log(`disconnected ${u} from ${f}`)}},[u,v,f,b]);let[P]=I({targetX:l,targetY:a,targetPosition:d,sourceX:o,sourceY:i,sourcePosition:s});return n(r,{children:[t("path",{id:e,style:{...c,stroke:y?x.colors.accent2:$?x.colors.highlight3:x.colors.highlight2},className:"react-flow__edge-path Wire",d:P,markerEnd:m}),t("path",{style:{...c,strokeWidth:8,color:"transparent",opacity:0,cursor:"pointer"},d:P,markerEnd:m})]})};let o0=i(c(z)`
630
+ `;var oq=()=>{let e=ew(),o=ey(({patch:e})=>e).audioContext,[r,i]=h("running"===o.state);return r?null:n(oY,{theme:e,onClick:()=>{o.resume(),i(!0)},children:[t(oX,{children:t(oJ,{theme:e,children:"Click anywhere to resume audio context"})}),t(oX,{children:t(oZ,{})})]})},oK=()=>{let e=ey(({setConfig:e})=>e),{showMinimap:o}=ey(({config:e})=>e);return t(_,{onClick:()=>e({showMinimap:!o}),children:o?t(eo,{}):t(et,{})})},oQ=({id:e,sourceX:o,sourceY:i,targetX:l,targetY:a,sourcePosition:s,targetPosition:d,style:c={},data:p,markerStart:h,markerEnd:m,source:u,target:f,sourceHandleId:v,targetHandleId:b,selected:y})=>{let x=ew(),w=ey(({getNode:e})=>e),C=w(u),k=w(f),$=C?.selected||k?.selected;g(()=>{if(v&&b)return console.log(`connected ${u} to ${f}`),()=>{console.log(`disconnected ${u} from ${f}`)}},[u,v,f,b]);let[P]=I({targetX:l,targetY:a,targetPosition:d,sourceX:o,sourceY:i,sourcePosition:s});return n(r,{children:[t("path",{id:e,style:{...c,stroke:y?x.colors.accent2:$?x.colors.highlight3:x.colors.highlight2},className:"react-flow__edge-path Wire",d:P,markerEnd:m}),t("path",{style:{...c,strokeWidth:8,color:"transparent",opacity:0,cursor:"pointer"},d:P,markerEnd:m})]})};let o0=i(c(z)`
631
631
  &.bottom {
632
632
  right: 1rem;
633
633
  bottom: 40%;
@@ -636,7 +636,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
636
636
  svg {
637
637
  color: ${({theme:e})=>e.colors.elevation2};
638
638
  }
639
- `),o1=(e,o)=>console.log("drag stop",o),o2=(e,o)=>console.log("click",o),o3=[20,20],o6=({editorState:e,plugins:o=[],editorContextMenu:r=[],onChange:i=()=>{},...l})=>{let a=m(()=>({wire:oQ}),[]),{nodes:s,edges:d,controlPanel:c,onNodesChange:p,onNodesDelete:f,onEdgesChange:v,onEdgesDelete:b,onConnect:y,setViewport:x,viewport:w}=ey();g(()=>{e?.viewport&&!w&&x(e.viewport)},[e?.viewport,x,w]);let C=ey(({config:e})=>e),k=ey(({nodeTypes:e})=>e),[$,P]=h(null);g(()=>{$&&i({nodes:s,edges:d,controlPanel:c,viewport:w})},[s,d,c,w]);let N=u(e=>{$||(P(e),console.log("flow loaded:",e))},[$]),{onContextMenu:z}=(()=>{let{show:e}=G({id:e3});return{onContextMenu:e}})(),{onContextMenu:T}=(()=>{let{show:e}=G({id:e4});return{onContextMenu:u((o,t)=>{o.stopPropagation(),e(o,{props:{node:t}})},[])}})(),{onContextMenu:M}=(()=>{let{show:e}=G({id:eP});return{onContextMenu:u((o,t)=>{o.stopPropagation(),e(o,{props:{edge:t}})},[e])}})();return n(F,{nodes:s,edges:d,onNodesChange:p,onNodesDelete:f,onEdgesChange:v,onConnect:y,onNodeDragStop:o1,onEdgesDelete:b,onInit:N,onNodeClick:o2,onContextMenu:z,onNodeContextMenu:T,onEdgeContextMenu:M,nodeTypes:k,edgeTypes:a,snapGrid:o3,defaultViewport:e?.viewport,defaultEdgeOptions:{type:"wire"},snapToGrid:!0,fitView:!0,onViewportChange:x,viewport:e?.viewport,disableKeyboardA11y:!0,children:[t(E,{variant:j.Dots,gap:12}),C.showMinimap?t(D,{}):null,n(o0,{showInteractive:!1,position:"bottom-right",children:[t(oK,{}),t(oV,{})]}),t(oq,{}),t(oW,{}),t(oG,{}),t(e6,{editorContextMenu:r}),t(e9,{}),t(eN,{})]})},o4=e=>t(T,{children:t(o6,{...e})}),o9={nodes:[],edges:[],controlPanel:{nodes:[],show:!1,size:{width:200,height:100}},viewport:{x:0,y:0,zoom:1.5}},o8=i(c.div`
639
+ `),o1=(e,o)=>console.log("drag stop",o),o2=(e,o)=>console.log("click",o),o3=[20,20],o6=({editorState:e,plugins:o=[],editorContextMenu:r=[],onChange:i=()=>{},...l})=>{let a=m(()=>({wire:oQ}),[]),{nodes:s,edges:d,controlPanel:c,onNodesChange:p,onNodesDelete:f,onEdgesChange:v,onEdgesDelete:b,onConnect:y,setViewport:x,viewport:w}=ey();g(()=>{e?.viewport&&!w&&x(e.viewport)},[e?.viewport,x,w]);let C=ey(({config:e})=>e),k=ey(({nodeTypes:e})=>e),[$,P]=h(null);g(()=>{$&&i({nodes:s,edges:d,controlPanel:c,viewport:w})},[s,d,c,w]);let N=u(e=>{$||(P(e),console.log("flow loaded:",e))},[$]),{onContextMenu:z}=(()=>{let{show:e}=G({id:e3});return{onContextMenu:e}})(),{onContextMenu:T}=(()=>{let{show:e}=G({id:e4});return{onContextMenu:u((o,t)=>{o.stopPropagation(),e(o,{props:{node:t}})},[])}})(),{onContextMenu:M}=(()=>{let{show:e}=G({id:eP});return{onContextMenu:u((o,t)=>{o.stopPropagation(),e(o,{props:{edge:t}})},[e])}})();return n(j,{nodes:s,edges:d,onNodesChange:p,onNodesDelete:f,onEdgesChange:v,onConnect:y,onNodeDragStop:o1,onEdgesDelete:b,onInit:N,onNodeClick:o2,onContextMenu:z,onNodeContextMenu:T,onEdgeContextMenu:M,nodeTypes:k,edgeTypes:a,snapGrid:o3,defaultViewport:e?.viewport,defaultEdgeOptions:{type:"wire"},snapToGrid:!0,fitView:!0,onViewportChange:x,viewport:e?.viewport,disableKeyboardA11y:!0,children:[t(F,{variant:E.Dots,gap:12}),C.showMinimap?t(D,{}):null,n(o0,{showInteractive:!1,position:"bottom-right",children:[t(oK,{}),t(oV,{})]}),t(oq,{}),t(oW,{}),t(oG,{}),t(e6,{editorContextMenu:r}),t(e9,{}),t(eN,{})]})},o4=e=>t(T,{children:t(o6,{...e})}),o9={nodes:[],edges:[],controlPanel:{nodes:[],show:!1,size:{width:200,height:100}},viewport:{x:0,y:0,zoom:1.5}},o8=i(c.div`
640
640
  display: flex;
641
641
  flex-direction: column;
642
642
  height: 100%;
@@ -677,7 +677,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
677
677
  align-items: center;
678
678
  justify-content: center;
679
679
  font-size: 6rem;
680
- `),tt=e=>{let o=ey(e=>e.pullEditorChanges),i=ey(e=>e.currentFileIndex),l=ey(e=>e.project),[a,s]=h(!0);g(()=>{e.onChange?.(l)},[l,e.onChange]),g(()=>{s(!0),setTimeout(()=>{s(!1)},1600)},[i]);let{file:d}=e;return d?"audio"===d.type?t(te,{children:t("audio",{src:d.file,controls:!0})}):n(r,{children:[t(o4,{...e,onChange:e=>{o()},editorState:d.file||o9}),t(to,{show:a,children:"Loading..."})]}):null},tn=i(c.div`
680
+ `),tt=e=>{let o=ey(e=>e.pullEditorChanges),i=ey(e=>e.project.currentFileIndex),l=ey(e=>e.project),[a,s]=h(!0);g(()=>{e.onChange?.(l)},[l,e.onChange]),g(()=>{s(!0),setTimeout(()=>{s(!1)},1600)},[i]);let{file:d}=e;return d?"audio"===d.type?t(te,{children:t("audio",{src:d.file,controls:!0})}):n(r,{children:[t(o4,{...e,onChange:e=>{o()},editorState:d.file||o9}),t(to,{show:a,children:"Loading..."})]}):null},tn=i(c.div`
681
681
  height: 2rem;
682
682
  display: flex;
683
683
  align-items: center;
@@ -721,7 +721,10 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
721
721
  &:hover {
722
722
  color: ${({theme:e})=>e.colors.whitePrimary};
723
723
  }
724
- `),ts=()=>({file:o9,name:"Unnamed",type:"patch",id:p()});var td=({...e})=>{let{projectState:o,theme:r,plugins:i=[]}=e,d=ey(e=>e.setPlugins),c=ey(e=>e.currentFileIndex),p=ey(e=>e.project.files[e.currentFileIndex]),m=ey(e=>e.setCurrentFileIndex),u=ey(e=>e.project),f=ey(e=>e.setProject),v=ey(e=>e.getProject),b=ey(e=>e.updateFileName),y=ey(e=>e.addFile),x=ey(e=>e.deleteFile),w=ey(e=>e.syncEditorWithCurrentFile),k=ey(e=>e.setEditorState);ey(e=>e.pullEditorChanges);let[$,P]=h(!1);return g(()=>{d(i)},[i]),g(()=>{f(o||{files:[ts()]});let e=o?.files[0];e?.file&&e?.type!=="audio"&&k(e.file)},[o]),g(()=>(C("project://*",async(...e)=>{let o=new Request(...e),t=v().files,n=o.url.replace("project://",""),r=t.find(({id:e})=>e===n);return r?eu(r)?new Response(JSON.stringify(r.file??null)):ef(r)?fetch(r.file):new Response(null):new Response(`File not found: ${o.url}`,{status:404})}),()=>{}),[v]),g(()=>{w()},[c,w]),n(l,{theme:r||ex,children:[t(a,{styles:s`
724
+ ${({hide:e})=>e?`
725
+ display: none;
726
+ `:""};
727
+ `),ts=()=>({file:o9,name:"Unnamed",type:"patch",id:p()});var td=({...e})=>{let{projectState:o,theme:r,plugins:i=[]}=e,d=ey(e=>e.setPlugins),c=ey(e=>e.project.currentFileIndex||0),p=ey(e=>e.project.files[e.project.currentFileIndex||0]),m=ey(e=>e.setCurrentFileIndex),u=ey(e=>e.project),f=ey(e=>e.setProject),v=ey(e=>e.getProject),b=ey(e=>e.updateFileName),y=ey(e=>e.addFile),x=ey(e=>e.deleteFile);ey(e=>e.updateFileContent);let w=ey(e=>e.syncEditorWithCurrentFile),k=ey(e=>e.setEditorState);ey(e=>e.pullEditorChanges);let[$,P]=h(!1);return g(()=>{d(i)},[i]),g(()=>{f(o||{files:[ts()],currentFileIndex:0});let e=o?.files[0];e?.file&&e?.type!=="audio"&&k(e.file)},[o]),g(()=>(C("project://*",async(...e)=>{let o=new Request(...e),t=v().files,n=o.url.replace("project://",""),r=t.find(({id:e})=>e===n);return r?eu(r)?new Response(JSON.stringify(r.file??null)):ef(r)?fetch(r.file):new Response(null):new Response(`File not found: ${o.url}`,{status:404})}),()=>{}),[v]),g(()=>{w()},[c,w]),n(l,{theme:r||ex,children:[t(a,{styles:s`
725
728
  :root {
726
729
  --leva-colors-elevation1: #292d39;
727
730
  --leva-colors-elevation2: #181c20;
@@ -778,5 +781,5 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
778
781
  --leva-fontWeights-folder: normal;
779
782
  --leva-fontWeights-button: normal;
780
783
  }
781
- `}),n(o8,{onDragOver:e=>{e.preventDefault(),e.stopPropagation(),P(!0)},onDragLeave:e=>{e.preventDefault(),e.stopPropagation(),P(!1)},onDrop:e=>{e.preventDefault(),e.stopPropagation(),P(!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;f(o),m(0),w();return}y({...ts(),file:{...o,controlPanel:{...o9.controlPanel,...o.controlPanel}},name:e.name},e.name);return}if(e.type.match(/^audio\//)){let o=await eq(e);y({type:"audio",id:`audio-file-${+new Date}`,name:e.name,file:o});return}console.error("Unsupported file type",e)})},children:[n(tn,{children:[u.files.map((e,o)=>n(tr,{onClick:()=>{m(o)},active:o===c,children:[t(oe,{onChange:e=>b(o,e),value:e.name||"Unnamed"}),t(ta,{onClick:e=>{e.stopPropagation(),window.confirm("Do you really want to delete this file?")&&(x(o),1===u.files.length&&(y(ts()),m(0),w()))}})]},o)),t(ti,{onClick:()=>{y(ts()),m(u.files.length)},children:t(tl,{})})]}),t(o5,{children:t(tt,{file:p,...e})}),$&&t(o7,{children:"Drop file(s) to upload to the project"})]})]})};export{td as Editor,o9 as EDITOR_DEFAULTS,oQ as Wire,oC as WNNode,ox as TitleBar,oc as PortsPanel,oh as OutputPorts,oy as OutputHandle,op as InputPorts,ov as InputHandle,og as Port,ej as Modal,oe as EditableLabel,e8 as useAudioNode,e7 as useNode,ew as useTheme,ey as useStore,ex as theme,ef as isAudio,eu as isPatch,eb as PortType};
784
+ `}),n(o8,{onDragOver:e=>{e.preventDefault(),e.stopPropagation(),P(!0)},onDragLeave:e=>{e.preventDefault(),e.stopPropagation(),P(!1)},onDrop:e=>{e.preventDefault(),e.stopPropagation(),P(!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;f(o),m(0),w();return}y({...ts(),file:{...o,controlPanel:{...o9.controlPanel,...o.controlPanel}},name:e.name},e.name);return}if(e.type.match(/^audio\//)){let o=await eq(e);y({type:"audio",id:`audio-file-${+new Date}`,name:e.name,file:o});return}console.error("Unsupported file type",e)})},children:[n(tn,{children:[u.files.map((e,o)=>n(tr,{onClick:()=>{m(o)},active:o===c,children:[t(oe,{onChange:e=>b(o,e),value:e.name||"Unnamed"}),u.files.length>1&&t(ta,{onClick:e=>{if(e.stopPropagation(),window.confirm("Do you really want to delete this file?")){if(1===u.files.length)return void alert("You cannot delete the last file in the project");x(o)}}})]},o)),t(ti,{onClick:()=>{y(ts())},children:t(tl,{})})]}),t(o5,{children:t(tt,{file:p,...e})}),$&&t(o7,{children:"Drop file(s) to upload to the project"})]})]})};export{td as Editor,o9 as EDITOR_DEFAULTS,oQ as Wire,oC as WNNode,ox as TitleBar,oc as PortsPanel,oh as OutputPorts,oy as OutputHandle,op as InputPorts,ov as InputHandle,og as Port,eE as Modal,oe as EditableLabel,e8 as useAudioNode,e7 as useNode,ew as useTheme,ey as useStore,ex as theme,ef as isAudio,eu as isPatch,eb as PortType};
782
785
  //# sourceMappingURL=module.js.map