@web-noise/core 0.0.19 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module.js CHANGED
@@ -1,10 +1,10 @@
1
- let e,o;import{jsx as t,jsxs as 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`
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 d,useTheme as s}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 N,applyEdgeChanges as P,Controls as z,ReactFlow as j,Background as F,BackgroundVariant as E,MiniMap as S,ReactFlowProvider as T,useReactFlow as D,Position as M,Handle as A,NodeResizeControl as _,ControlButton as I,getBezierPath as L}from"@xyflow/react";import{create as H}from"zustand";import{setAudioNodeTypes as R,createPatch as W}from"@web-noise/patch";import{reverse as O,patch as B,create as U}from"jsondiffpatch";import{injectGlobal as G}from"@emotion/css";import"@xyflow/react/dist/style.css";import{useContextMenu as V,Item as Y,Menu as X,Separator as J}from"react-contexify";import"react-contexify/dist/ReactContexify.css";import Z from"hotkeys-js";import{createPortal as q}from"react-dom";import{FileDrop as K}from"react-file-drop";import{FaFileUpload as Q,FaQuestion as ee,FaVolumeOff as eo,FaMap as et,FaRegMap as en}from"react-icons/fa";import{Resizable as er}from"re-resizable";import ei from"react-grid-layout";import"react-grid-layout/css/styles.css";import{AiFillLock as el,AiFillUnlock as ea}from"react-icons/ai";import{RxDashboard as ed}from"react-icons/rx";import es from"react-modern-drawer";import"react-modern-drawer/dist/index.css";import{marked as ec}from"marked";let ep="web-noise-drag-handle",eh=`.${ep}`,eg=10;(ey=ex||(ex={})).Gate="gate",ey.Number="number",ey.Audio="audio",ey.Any="any";let em={[ex.Audio]:"#4ade80",[ex.Gate]:"#c084fc",[ex.Number]:"#38bdf8",[ex.Any]:"#ffffff"},eu=e=>JSON.parse(JSON.stringify(e)),ef=(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))}},ev=e=>!("type"in e)||"patch"===e.type,eb=e=>"audio"===e.type;var ey,ex,ew=H((e=(...e)=>{let[o,t]=e;return{...((e,o)=>({nodes:[],edges:[],onNodesChange:o=>{e(({nodes:e})=>({nodes:N(o,e).map(e=>({dragHandle:eh,...e,data:{label:"unknown",...e.data}}))}))},onEdgesChange:o=>{e(({edges:e})=>({edges:P(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)}))},updateNode:(o,t)=>{e(({nodes:e})=>({nodes:e.map(e=>e.id===o?{...e,...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,d=l[a-1];if(!d)return;let s=O(d);s&&e({...B(eu({nodes:t,edges:n,controlPanel:r}),s),history:{...i,pointer:a-1,skipCollect:!0}})},forward:()=>{let{nodes:t,edges:n,controlPanel:r,history:i}=o(),{buffer:l,pointer:a}=i,d=l[a];d&&e({...B(eu({nodes:t,edges:n,controlPanel:r}),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:W(),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];eb(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:d}=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(),d=e.map(({id:e})=>e),s=[...e,...r.filter(({parentId:e})=>e&&d.includes(e))];a(s),l(k(s,n)),i(s);let c=s.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}),{});R(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:d}=t(),{nodes:s,edges:c}=r;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,g=p.position.y-n,{nodes:m,mapping:u}=s.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([...d.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]?.minSize:{height:void 0},i=r?.height,l={id:e.id,...i?{height:i/eg}:{}};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=U({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=ef(r.nodes,l.nodes),d=ef(r.edges,l.edges);r=l;let s=a.added,c=d.added,p=d.removed,h=a.removed,{patch:g}=n;s.length&&await g.registerAudioNodes(s),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)})),eC={colors:{elevation1:"#292d39",elevation2:"#181c20",elevation3:"#373c4b",accent1:"#0066dc",accent2:"#007bff",accent3:"#3c93ff",highlight1:"#535760",highlight2:"#8c92a4",highlight3:"#fefefe",vivid1:"#14df42",whitePrimary:"#ffffff",error:"#db5353"},zIndex:{modal:9998,controlPanel:9999,resumeContextLayout:10003}};G`
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: ${ex.colors.elevation3};
7
+ background: ${eC.colors.elevation3};
8
8
  }
9
9
 
10
10
  .react-flow__background {
@@ -26,32 +26,32 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
26
26
  }
27
27
 
28
28
  .react-flow__edge-path {
29
- stroke: ${ex.colors.accent2};
29
+ stroke: ${eC.colors.accent2};
30
30
  }
31
31
 
32
32
  .react-flow__node.selected {
33
- border: 1px solid ${ex.colors.accent2};
34
- box-shadow: 0 0 0 0.5px #${ex.colors.accent2};
33
+ border: 1px solid ${eC.colors.accent2};
34
+ box-shadow: 0 0 0 0.5px #${eC.colors.accent2};
35
35
  }
36
36
 
37
37
  .react-flow__node-default.selected, .react-flow__node-default.selected:hover {
38
- box-shadow: 0 0 0 0.5px #${ex.colors.accent2};
38
+ box-shadow: 0 0 0 0.5px #${eC.colors.accent2};
39
39
  }
40
40
 
41
41
  /* .react-flow__minimap-mask {
42
- fill: ${ex.colors.elevation1}
42
+ fill: ${eC.colors.elevation1}
43
43
  }
44
44
 
45
45
  .react-flow__minimap-node {
46
- fill:${ex.colors.accent2}
46
+ fill:${eC.colors.accent2}
47
47
  } */
48
48
  }
49
49
 
50
- `;var ew=()=>{let e=d();return{...ex,...e}};let eC=c(V)``,ek=i(c(eC)`
50
+ `;var ek=()=>{let e=s();return{...eC,...e}};let e$=c(Y)``,eN=i(c(e$)`
51
51
  .react-contexify__item__content {
52
52
  color: ${({theme:e})=>e.colors.error};
53
53
  }
54
- `),e$=c(Y)`
54
+ `),eP=c(X)`
55
55
  background: ${({colors:e})=>e.elevation2};
56
56
  padding: 0;
57
57
  border-radius: 0;
@@ -64,18 +64,18 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
64
64
  background-color: ${({colors:e})=>e.elevation1};
65
65
  margin: 0;
66
66
  }
67
- `,eP="editor-edge-menu";var eN=()=>{let e=ew(),o=ey(e=>e.removeEdges);return t(r,{children:t(e$,{id:eP,animation:!1,colors:e.colors,children:t(eC,{onClick:e=>o([e.props.edge]),children:"Delete Edge (DEL)"})})})};let ez=c.div`
67
+ `,ez="editor-edge-menu";var ej=()=>{let e=ek(),o=ew(e=>e.removeEdges);return t(r,{children:t(eP,{id:ez,animation:!1,colors:e.colors,children:t(e$,{onClick:e=>o([e.props.edge]),children:"Delete Edge (DEL)"})})})};let eF=i(c.div`
68
68
  position: fixed;
69
69
  z-index: ${({theme:e})=>e.zIndex.modal};
70
70
  width: 100%;
71
71
  height: 100%;
72
72
  top: 0;
73
73
  left: 0;
74
- background: ${({theme:e})=>e.colors.elevation3}cc;
74
+ background: ${({theme:e,outerBackground:o})=>o||e.colors.elevation3+"cc"};
75
75
  display: flex;
76
76
  align-items: center;
77
77
  justify-content: center;
78
- `,ej=c.div`
78
+ `),eE=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,19 +83,19 @@ 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
- `,eF=c(b)`
86
+ `,eS=c(b)`
87
87
  position: absolute;
88
88
  top: 0.2rem;
89
89
  right: 0.2rem;
90
90
  cursor: pointer;
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`
91
+ `;var eT=({children:e,onClose:o,outerBackground:r,...i})=>{let l=ek();return g(()=>{let e=e=>{"Escape"===e.key&&o?.()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[o]),q(t(eF,{outerBackground:r,onClick:o,children:n(eE,{...i,onClick:e=>{e.stopPropagation()},theme:l,children:[e,t(eS,{theme:l,onClick:o})]})}),document.body)};let eD=i(c.div`
92
92
  width: 100%;
93
- `),eT=i(c.div`
93
+ `),eM=i(c.div`
94
94
  padding: 1rem;
95
95
  display: flex;
96
96
  flex-direction: column;
97
97
  gap: 1rem;
98
- `),eM=i(c.ul`
98
+ `),eA=i(c.ul`
99
99
  list-style: none;
100
100
  margin: 0;
101
101
  padding: 0;
@@ -116,18 +116,18 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
116
116
  cursor: pointer;
117
117
  }
118
118
  }
119
- `),eS=i(c.div`
119
+ `),e_=i(c.div`
120
120
  white-space: nowrap;
121
121
  overflow: hidden;
122
122
  text-overflow: ellipsis;
123
- `),eA=i(c.div`
123
+ `),eI=i(c.div`
124
124
  color: ${({theme:e})=>e.colors.highlight2};
125
125
  font-size: 12px;
126
- `),e_=i(c.div`
126
+ `),eL=i(c.div`
127
127
  display: flex;
128
128
  gap: 0.2rem;
129
129
  flex-wrap: wrap;
130
- `),eI=i(c.span`
130
+ `),eH=i(c.span`
131
131
  cursor: pointer;
132
132
  font-size: 10px;
133
133
  background: ${({theme:e,isActive:o})=>o?e.colors.highlight1:e.colors.elevation3};
@@ -138,17 +138,17 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
138
138
  &:hover {
139
139
  border-color: ${({theme:e})=>e.colors.accent2};
140
140
  }
141
- `),eR=i(c.div``),eH=i(c.div`
141
+ `),eR=i(c.div``),eW=i(c.div`
142
142
  font-size: 1.1rem;
143
143
  padding: 0.25rem 0;
144
144
  color: ${({theme:e})=>e.colors.highlight3};
145
- `),eL=i(c.div`
145
+ `),eO=i(c.div`
146
146
  color: ${({theme:e})=>e.colors.highlight2};
147
147
  font-size: 12px;
148
- `);var eW=({onComponentClick:e,filters:{plugin:o,search:r="",tags:i},onTagClick:l})=>{let a=ey(({plugins:e})=>e),s=m(()=>o?a.filter(({name:e})=>e===o):a,[a,o]);return t(eD,{children:m(()=>r||i?.length?s.map(e=>({...e,components:i?.length?e.components.filter(e=>i?.every(o=>e.tags?.includes(o))):e.components})).map(e=>({...e,components:e.components.filter(({type:e,name:o})=>e.toLocaleLowerCase().includes(r.toLocaleLowerCase())||o?.toLocaleLowerCase().includes(r.toLocaleLowerCase()))})):s,[s,r,i]).map(({name:o,description:r,components:a},s)=>a.length?n(eT,{children:[n(eR,{children:[t(eH,{children:o}),t(eL,{children:r})]}),t(eM,{children:a.sort((e,o)=>e.type.toLowerCase()>o.type.toLowerCase()?1:-1).map((o,r)=>n("li",{onClick:()=>e(o),children:[t(eS,{children:o.name||o.type}),o.description&&t(eA,{children:o.description}),t(e_,{children:o.tags?.map((e,o)=>t(eI,{isActive:i?.includes(e),onClickCapture:o=>{o.stopPropagation(),l(e)},children:e},o))})]},r))})]},s):null)})};let eO=c.div`
148
+ `);var eB=({onComponentClick:e,filters:{plugin:o,search:r="",tags:i},onTagClick:l})=>{let a=ew(({plugins:e})=>e),d=m(()=>o?a.filter(({name:e})=>e===o):a,[a,o]);return t(eD,{children:m(()=>r||i?.length?d.map(e=>({...e,components:i?.length?e.components.filter(e=>i?.every(o=>e.tags?.includes(o))):e.components})).map(e=>({...e,components:e.components.filter(({type:e,name:o})=>e.toLocaleLowerCase().includes(r.toLocaleLowerCase())||o?.toLocaleLowerCase().includes(r.toLocaleLowerCase()))})):d,[d,r,i]).map(({name:o,description:r,components:a},d)=>a.length?n(eM,{children:[n(eR,{children:[t(eW,{children:o}),t(eO,{children:r})]}),t(eA,{children:a.sort((e,o)=>e.type.toLowerCase()>o.type.toLowerCase()?1:-1).map((o,r)=>n("li",{onClick:()=>e(o),children:[t(e_,{children:o.name||o.type}),o.description&&t(eI,{children:o.description}),t(eL,{children:o.tags?.map((e,o)=>t(eH,{isActive:i?.includes(e),onClickCapture:o=>{o.stopPropagation(),l(e)},children:e},o))})]},r))})]},d):null)})};let eU=c.div`
149
149
  display: flex;
150
150
  position: relative;
151
- `,eB=c.input`
151
+ `,eG=c.input`
152
152
  padding-right: 2rem;
153
153
  padding-left: 0.3rem;
154
154
  width: 100%;
@@ -179,14 +179,14 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
179
179
  -webkit-appearance: none;
180
180
  margin-right: 1rem;
181
181
  }
182
- `,eU=c.div`
182
+ `,eV=c.div`
183
183
  display: flex;
184
184
  flex-direction: column;
185
185
  padding: 0.6rem;
186
186
  gap: 0.6rem;
187
187
  border-right: 1px solid ${({theme:e})=>e.colors.elevation3};
188
188
  min-width: 14rem;
189
- `,eG=c.label`
189
+ `,eY=c.label`
190
190
  user-select: none;
191
191
  input {
192
192
  display: none;
@@ -198,7 +198,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
198
198
  color: ${({theme:e})=>e.colors.accent3};
199
199
  cursor: pointer;
200
200
  }
201
- `,eV=i(c(eI)`
201
+ `,eX=i(c(eH)`
202
202
  font-size: 12px;
203
203
  padding: 0.2rem 0.4rem;
204
204
  &:hover {
@@ -207,16 +207,16 @@ 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 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`
210
+ `);var eJ=({onChange:e,value:o})=>{let r=ek(),i=ew(({plugins:e})=>e),l=f(null);return g(()=>{l.current&&l.current.focus()},[l]),n(eV,{theme:r,children:[t(eU,{children:t(eG,{ref:l,theme:r,value:o.search||"",placeholder:"search...",onChange:t=>e({...o,search:t.target.value})})}),t(eL,{children:o.tags?.map((n,r)=>t(eX,{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(eY,{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 eZ=c.div`
211
211
  height: 100%;
212
212
  width: 100%;
213
213
  display: flex;
214
214
  gap: 1rem;
215
- `,eJ=c.div`
215
+ `,eq=c.div`
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(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`
219
+ `;var eK=({isOpen:e,closeMenu:o,mousePosition:r})=>{let i=ek(),{screenToFlowPosition:l}=D(),{createNode:a}=ew(({createNode:e})=>({createNode:e})),[d,s]=h({}),c=u(({type:e,minSize:t})=>{let{x:n,y:i}=l(r);a({id:`${e}-${+new Date}`,type:e,data:{label:e},position:{x:n,y:i},targetPosition:M.Left,sourcePosition:M.Right,...t}),o()},[r,l,a,o,r]);return e?t(eT,{onClose:()=>{o(),s({})},children:n(eZ,{theme:i,children:[t(eJ,{onChange:s,value:d}),t(eq,{theme:i,children:t(eB,{filters:d,onTagClick:e=>{s(o=>({...o,tags:o.tags?.includes(e)?o.tags.filter(o=>o!==e):[...o.tags||[],e]}))},onComponentClick:e=>{c(e),s({})}})})]})}):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)}),e0=c.div`
220
220
  display: flex;
221
221
  align-items: center;
222
222
  justify-content: center;
@@ -242,19 +242,19 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
242
242
  .drop-zone-drag-over {
243
243
  opacity: 1;
244
244
  }
245
- `,eQ=c.div`
245
+ `,e1=c.div`
246
246
  display: flex;
247
247
  flex-wrap: wrap;
248
248
  align-items: center;
249
249
  justify-content: center;
250
250
  height: 100%;
251
251
  width: 100%;
252
- `,e0=c(K)`
252
+ `,e2=c(Q)`
253
253
  width: 100%;
254
254
  height: 8rem;
255
- `,e1=c.div`
255
+ `,e3=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(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`
257
+ `;var e6=({isOpen:e,closeMenu:o})=>{let r=ek();ew(({setGraph:e})=>e),ew(e=>e.setEditorState);let i=ew(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(eT,{onClose:o,children:n(e0,{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(K,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{l.current?.click()},onDrop:e=>a(e),children:n(e1,{theme:r,children:[t(e2,{}),t(e3,{children:"click or drop file here"})]})})]})}):null};let e9="editor-menu";var e4=({editorContextMenu:e=[]})=>{let o=ek(),[i,l]=h({x:0,y:0}),[a,d]=h(!1),[s,c]=h(!1),p=u((e,o)=>{l({x:e,y:o}),d(!0)},[d]),f=ew(e=>e.pasteBuffer),{screenToFlowPosition:v}=D(),b=u(e=>{let{x:o,y:t}=v(e);f(o,t)},[d,v]),y=ew(({clearGraph:e})=>e),x=u(()=>{window.confirm("This action will delete all nodes in this patch. Continue?")&&y()},[y]),w=ew(e=>e.toggleHelp),C=ew(e=>e.history.back),k=ew(e=>e.history.forward),$=ew(e=>e.history.pointer),N=ew(e=>e.history.buffer),P=ew(e=>e.copySelectedItems),z=ew(e=>e.nodes),j=m(()=>z.filter(({selected:e})=>e),[z]),F=ew(e=>e.copyBuffer);return D(),g(()=>(Z("command+shift+a",()=>(p(200,50),!1)),Z("shift+/",()=>(w(),!1)),Z("command+z",()=>(C(),!1)),Z("command+shift+z",()=>(k(),!1)),Z("command+c",()=>(P(),!1)),Z("command+v",()=>(b({x:200,y:50}),!1)),()=>{Z.unbind()}),[p,b]),n(r,{children:[t(eK,{isOpen:a,closeMenu:()=>d(!1),mousePosition:i}),t(e6,{isOpen:s,closeMenu:()=>c(!1)}),n(eP,{id:e9,animation:!1,colors:o.colors,children:[t(e$,{onClick:({triggerEvent:{clientX:e,clientY:o}})=>p(e,o),children:"Add Node (⌘+⇧+A)"}),t(J,{}),t(eN,{onClick:x,children:"Delete All"}),t(J,{}),t(e$,{onClick:()=>c(!0),children:"Upload Audio File"}),t(J,{}),t(e$,{disabled:0===$,onClick:C,children:"Undo (⌘+z)"}),t(e$,{disabled:$===N.length,onClick:k,children:"Redo (⌘+⇧+Z)"}),t(J,{}),t(e$,{disabled:!j.length,onClick:P,children:"Copy Selected (⌘+c)"}),t(e$,{disabled:!F.nodes.length,onClick:({triggerEvent:{clientX:e,clientY:o}})=>b({x:e,y:o}),children:"Paste (⌘+v)"}),t(J,{}),e.map((e,o)=>null===e?t(J,{},o):t(e$,{children:e},o)),t(J,{}),t(e$,{onClick:w,children:"Help (⇧+?)"})]})]})};let e8="editor-node-menu";var e5=e=>{let o=ek(),i=ew(e=>e.removeNodes),l=ew(e=>e.addNodeToControlPanel),a=ew(e=>e.removeNodeFromControlPanel),d=ew(e=>e.copy),s=ew(e=>e.nodesConfiguration),c=ew(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=s[e.node.type];return!!o?.controlPanelNode},[s]);return t(r,{children:n(eP,{id:e8,animation:!1,colors:o.colors,children:[t(e$,{onClick:e=>i([e.props.node]),children:"Delete Node (DEL)"}),t(e$,{hidden:(...e)=>!h(...e)||p(...e),onClick:e=>l(e.props.node),children:"Add To Control Panel"}),t(e$,{hidden:(...e)=>!h(...e)||!p(...e),onClick:e=>a(e.props.node),children:"Remove From Control Panel"}),t(e$,{onClick:e=>d({nodes:[e.props.node],edges:[]}),children:"Copy (⌘+c)"})]})})},e7=e=>ew(({patch:e})=>e).audioNodes.get(e),oe=e=>{let o=ew(({updateNodeData:e})=>e),t=ew(({updateNode: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]),updateNodeSize:u(o=>t(e,o),[e,t])}};let oo=c.input`
258
258
  width: 100%;
259
259
  background: none;
260
260
  border: none;
@@ -283,7 +283,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
283
283
  padding: 0.3rem;
284
284
  border-radius: 0.2rem;
285
285
  }
286
- `;var oe=({onChange:e,value:o="",className:n})=>{let r=f(null),[i,l]=h(!1),a=u(e=>{e.target?.select(),l(!0)},[l]),s=u(()=>{window.getSelection()?.collapseToEnd(),l(!1)},[l]),d=u(()=>{s(),r.current&&e(r.current.value)},[r,s,e]),c=u(()=>{s(),r.current&&o&&(r.current.value=o)},[r,s,o]);return g(()=>{r.current&&(r.current.value=o)},[o,r]),t(e5,{ref:r,type:"text",readOnly:!i,onDoubleClick:e=>a(e),onBlur:d,onKeyDown:e=>{switch(e.key){case"Escape":c();break;case"Enter":d()}},className:n})};let oo=i(c.div`
286
+ `;var ot=({onChange:e,value:o="",className:n})=>{let r=f(null),[i,l]=h(!1),a=u(e=>{e.target?.select(),l(!0)},[l]),d=u(()=>{window.getSelection()?.collapseToEnd(),l(!1)},[l]),s=u(()=>{d(),r.current&&e(r.current.value)},[r,d,e]),c=u(()=>{d(),r.current&&o&&(r.current.value=o)},[r,d,o]);return g(()=>{r.current&&(r.current.value=o)},[o,r]),t(oo,{ref:r,type:"text",readOnly:!i,onDoubleClick:e=>a(e),onBlur:s,onKeyDown:e=>{switch(e.key){case"Escape":c();break;case"Enter":s()}},className:n})};let on=i(c.div`
287
287
  height: 100%;
288
288
  width: 100%;
289
289
  overflow: scroll;
@@ -362,13 +362,17 @@ 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(eE,{onClose:o,children:t(oo,{dangerouslySetInnerHTML:{__html:ed((i||"")+"\n\n"+a||"")}})}):null};let on=c.div`
366
- background-color: var(--leva-colors-elevation1);
367
- `,or=c(on)`
365
+ `);var or=({isOpen:e,onClose:o,type:n,node:r})=>{let{info:i,portsDescription:l}=ew(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(eT,{onClose:o,children:t(on,{dangerouslySetInnerHTML:{__html:ec((i||"")+"\n\n"+a||"")}})}):null};let oi=i(c.div`
366
+ background-color: ${({theme:e})=>e.colors.elevation1};
367
+ height: 100%;
368
+ width: 100%;
369
+ display: flex;
370
+ flex-direction: column;
371
+ `),ol=c(oi)`
368
372
  padding: 2rem 5rem;
369
- `,oi=c(on)`
373
+ `,oa=c(oi)`
370
374
  padding: 1rem 2rem;
371
- `,ol=c(x)`
375
+ `,od=c(x)`
372
376
  font-size: 1.2rem;
373
377
  opacity: 0.4;
374
378
  width: 1rem;
@@ -376,7 +380,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
376
380
  opacity: 1;
377
381
  cursor: pointer;
378
382
  }
379
- `,oa=c(w)`
383
+ `,os=c(w)`
380
384
  font-size: 1.2rem;
381
385
  opacity: 0.4;
382
386
  width: 1rem;
@@ -384,14 +388,16 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
384
388
  opacity: 1;
385
389
  cursor: pointer;
386
390
  }
387
- `,os=c.div`
391
+ `,oc=c.div`
388
392
  position: relative;
389
393
  font-family: var(--leva-fonts-mono);
390
394
  font-size: var(--leva-fontSizes-root);
391
395
  background-color: var(--leva-colors-elevation1);
392
- `,od=c(os)`
396
+ `,op=c(oc)`
393
397
  display: flex;
394
- height: var(--leva-sizes-titleBarHeight);
398
+ height: 2rem;
399
+ max-height: 2rem;
400
+ min-height: 2rem;
395
401
  touch-action: none;
396
402
  align-items: center;
397
403
  justify-content: center;
@@ -399,38 +405,48 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
399
405
  color: var(--leva-colors-highlight1);
400
406
  padding: 0 0.4rem;
401
407
  gap: 0.3rem;
402
- `,oc=c(os)(({theme:e})=>`
408
+ `,oh=c(oc)(({theme:e})=>`
403
409
  display: grid;
404
410
  grid-template-areas: "inputs outputs";
405
411
  background: ${e.colors.elevation2};
406
412
  border-bottom: 1px solid ${e.colors.elevation1};
407
413
  color: ${e.colors.highlight3};
408
414
  font-size: 0.6rem;
409
- `),op=c.div`
415
+ `),og=c.div`
410
416
  grid-area: inputs;
411
417
  text-align: left;
412
- `,oh=c.div`
418
+ `,om=c.div`
413
419
  grid-area: outputs;
414
420
  text-align: right;
415
- `,og=c.div`
421
+ `,ou=c.div`
416
422
  position: relative;
417
423
  padding: 5px 10px;
418
- `,om={[eb.Audio]:"#4ade80",[eb.Gate]:"#c084fc",[eb.Number]:"#38bdf8",[eb.Any]:"#ffffff"},ou=i(c(A,{shouldForwardProp:e=>"portType"!==e})`
419
- --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(", ")});`}}};
424
+ `,of=c.div`
425
+ width: 100%;
426
+ height: 100%;
427
+ display: flex;
428
+ flex-direction: column;
429
+ `,ov=c(eT)`
430
+ padding: 1rem;
431
+ max-width: 20rem;
432
+ height: auto;
433
+ max-height: 90%;
434
+ `,ob=i(c(A,{shouldForwardProp:e=>"portType"!==e})`
435
+ --port-color: ${e=>{if(!e.portType)return e.theme.colors.highlight2;if(!Array.isArray(e.portType))return em[e.portType];{let o=e.portType.map(e=>em[e]);return`linear-gradient(0.25turn, ${o.join(", ")});`}}};
420
436
  border-color: var(--port-color);
421
437
  background: var(--port-color);
422
438
  box-shadow: 0px 0px 0px 1px ${({theme:e})=>e.colors.elevation2} inset;
423
- `),of=i(c(ou)`
439
+ `),oy=i(c(ob)`
424
440
  left: 0;
425
- `),ov=({...e})=>t(of,{...e,type:"target",position:S.Left}),ob=i(c(ou)`
441
+ `),ox=({...e})=>t(oy,{...e,type:"target",position:M.Left}),ow=i(c(ob)`
426
442
  right: 0;
427
- `),oy=e=>t(ob,{...e,type:"source",position:S.Right}),ox=({className:e,...o})=>t(od,{...o,className:[e,ec].join(" ")}),ow=e=>ey(o=>o.nodesConfiguration[e]),oC=e=>{let{id:o,children:r,selected:i,...l}=e,a=ew(),s=ey(({getNode:e})=>e),d=ey(e=>e.nodesConfiguration),[c,p]=h(!1),{info:g}=ow(e.type),u=m(()=>d[e.type].resizable??!1,[d,e.type]),{updateNodeLabel:f,updateNodeConfig:v}=e7(o),{data:b}=s(o)||{},y=e8(o),{ConfigNode:x}=(e=>{let{configNode:o}=ow(e);return{ConfigNode:o}})(l.type),[w,C]=h(!1);if(!y)return t(or,{className:ec,children:"can't find audio node"});if(y.loading)return t(or,{className:ec,children:"loading"});if(y.error)return n(oi,{className:ec,children:["error: ",y.error.toString()]});if(!y.node)return t(or,{className:ec,children:"can't find audio node"});let k=b?.config?.size,{node:{inputs:$,outputs:P}}=y;return n(on,{children:[n(ox,{children:[g&&t(oa,{onClickCapture:()=>p(!0)}),t(oe,{value:b?.label??"No Name",onChange:f}),x&&t(ol,{onClickCapture:()=>C(e=>!e)})]}),n(oc,{theme:a,children:[t(op,{children:$?Object.keys($).map((e,o)=>n(og,{children:[t(ov,{id:e,portType:$[e].type}),t("span",{children:e})]},o)):null}),t(oh,{children:P?Object.keys(P).map((e,o)=>n(og,{children:[t(oy,{id:e,portType:P[e].type}),t("span",{children:e})]},o)):null})]}),x&&w&&i?t(x,{...e,data:{label:"unknown",...e.data}}):u?t(en,{size:k,minWidth:180,minHeight:30,enable:{bottom:!0,bottomRight:!0,right:!0},onResizeStop:(e,o,t,n)=>{let r=k?{width:k.width+n.width,height:k.height+n.height}:t.getBoundingClientRect();v({...b?.config,size:r})},children:r}):r,t(ot,{isOpen:c,type:e.type,onClose:()=>p(!1),node:y.node})]})},ok=c.div`
443
+ `),oC=e=>t(ow,{...e,type:"source",position:M.Right}),ok=({className:e,...o})=>t(op,{...o,className:[e,ep].join(" ")}),o$=e=>ew(o=>o.nodesConfiguration[e]),oN=e=>{let{id:o,children:r,selected:i,...l}=e,a=ek(),d=ew(({getNode:e})=>e),s=ew(e=>e.nodesConfiguration),[c,p]=h(!1),{info:g,minSize:u}=o$(e.type),f=m(()=>s[e.type].resizable??!1,[s,e.type]),{updateNodeLabel:v,updateNodeConfig:b}=oe(o),{data:y}=d(o)||{},x=e7(o),{ConfigNode:w}=(e=>{let{configNode:o}=o$(e);return{ConfigNode:o}})(l.type),[C,k]=h(!1);if(!x)return t(ol,{className:ep,children:"can't find audio node"});if(x.loading)return t(ol,{className:ep,children:"loading"});if(x.error)return n(oa,{className:ep,children:["error: ",x.error.toString()]});if(!x.node)return t(ol,{className:ep,children:"can't find audio node"});let{node:{inputs:$,outputs:N}}=x;return n(oi,{children:[n(ok,{children:[g&&t(os,{onClickCapture:()=>p(!0)}),t(ot,{value:y?.label??"No Name",onChange:v}),w&&t(od,{onClickCapture:()=>k(e=>!e)})]}),n(oh,{theme:a,children:[t(og,{children:$?Object.keys($).map((e,o)=>n(ou,{children:[t(ox,{id:e,portType:$[e].type}),t("span",{children:e})]},o)):null}),t(om,{children:N?Object.keys(N).map((e,o)=>n(ou,{children:[t(oC,{id:e,portType:N[e].type}),t("span",{children:e})]},o)):null})]}),t(of,{children:r}),f&&t(_,{style:{background:"transparent",border:"none"},minWidth:u?.width||180,minHeight:u?.height||100}),t(or,{isOpen:c,type:e.type,onClose:()=>p(!1),node:x.node}),w&&C&&t(ov,{onClose:()=>k(!1),outerBackground:a.colors.elevation3+"ee",children:t(w,{...e,data:{label:"unknown",...e.data}})})]})},oP=c.div`
428
444
  width: 100%;
429
445
  padding: 0.4rem 0;
430
446
  white-space: nowrap;
431
447
  overflow: hidden;
432
448
  text-overflow: ellipsis;
433
- `,o$=c(ox)`
449
+ `,oz=c(ok)`
434
450
  display: flex;
435
451
  gap: 0.1rem;
436
452
  padding: 0 0.4rem;
@@ -438,13 +454,13 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
438
454
  font-size: 0.6rem;
439
455
  height: auto;
440
456
  min-width: 0;
441
- `,oP=c.div`
457
+ `,oj=c.div`
442
458
  display: flex;
443
459
  align-items: center;
444
460
  height: 70%;
445
461
  width: auto;
446
462
  gap: 0.4rem;
447
- `,oN=c.span`
463
+ `,oF=c.span`
448
464
  width: auto;
449
465
  height: 100%;
450
466
  cursor: pointer;
@@ -456,11 +472,11 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
456
472
  color: ${({theme:e})=>e.colors.highlight2};
457
473
  cursor: pointer;
458
474
  }
459
- `,oz=c.div`
475
+ `,oE=c.div`
460
476
  height: 100%;
461
477
  display: grid;
462
478
  grid-template-rows: auto 1fr;
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`
479
+ `,oS=e=>{let{node:o}=e,n=ew(e=>e.getControlPanelNode),r=m(()=>n(o),[o]);return r?t(r,{...e}):null};var oT=e=>{let{node:o,showControls:r,onDelete:i}=e,l=ek(),{id:a}=o,{node:d}=e7(a)||{},{updateNodeValues:s}=oe(a);return n(oE,{theme:l,children:[n(oz,{theme:l,children:[t(oP,{children:o.data.label}),r&&n(oj,{children:[t(oF,{theme:l,children:t(y,{className:"grid-item-handle"})}),t(oF,{theme:l,children:t(b,{onClick:()=>i(o)})})]})]}),t(oS,{node:o,audioNode:d,updateNodeValues:s})]})};let oD=c.div`
464
480
  position: fixed;
465
481
  z-index: 5;
466
482
  box-shadow: 0px 1px 2px ${({theme:e})=>e.colors.elevation2};
@@ -480,34 +496,34 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
480
496
  color: ${({theme:e})=>e.colors.highlight2};
481
497
  cursor: pointer;
482
498
  }
483
- `,oD=c(oP)`
499
+ `,oM=c(oj)`
484
500
  height: 80%;
485
- `,oT=c(oN)`
501
+ `,oA=c(oF)`
486
502
  font-size: 1rem;
487
503
  display: flex;
488
504
  align-items: center;
489
- `,oM=c(o$)`
505
+ `,o_=c(oz)`
490
506
  grid-template-columns: 1fr auto;
491
507
  border-bottom: 1px solid ${({theme:e})=>e.colors.elevation3};
492
508
  font-size: 0.7rem;
493
- `,oS=c(ok)`
509
+ `,oI=c(oP)`
494
510
  text-align: center;
495
- `,oA=c.div`
511
+ `,oL=c.div`
496
512
  height: 100%;
497
513
  width: 100%;
498
514
  padding: 0.3rem 0.4rem;
499
515
  box-sizing: border-box;
500
- `,o_=c.div`
516
+ `,oH=c.div`
501
517
  height: auto;
502
518
  padding: 0;
503
519
  max-height: 95vh;
504
520
  overflow-y: scroll;
505
521
  border: 1px solid ${({theme:e})=>e.colors.elevation3};
506
- `,oI=c.div`
522
+ `,oR=c.div`
507
523
  padding: 1rem 0;
508
524
  font-family: var(--leva-fonts-mono);
509
525
  font-size: 0.8rem;
510
- `,oR=c.div`
526
+ `,oW=c.div`
511
527
  display: flex;
512
528
  align-items: center;
513
529
  gap: 0.5rem;
@@ -516,7 +532,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
516
532
  &:hover {
517
533
  color: ${({theme:e})=>e.colors.highlight2};
518
534
  }
519
- `,oH=c.div`
535
+ `,oO=c.div`
520
536
  position: absolute;
521
537
  height: 1rem;
522
538
  top: 0;
@@ -524,14 +540,14 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
524
540
  margin: auto;
525
541
  left: 0.5rem;
526
542
  border-right: 1px solid ${({theme:e})=>e.colors.whitePrimary};
527
- `,oL=c.div`
543
+ `,oB=c.div`
528
544
  box-sizing: border-box;
529
545
  overflow: hidden;
530
546
  .react-resizable-handle:after {
531
547
  border-color: ${({theme:e})=>e.colors.whitePrimary};
532
548
  border-width: 1px;
533
549
  }
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`
550
+ `;var oU=()=>{let e=ek(),o=f(null),i=ew(e=>e.nodes),{show:l,nodes:a,size:d}=ew(e=>e.controlPanel),{width:s=200,height:c}=d,p=m(()=>{let e=a.map(({id:e})=>e);return i.filter(({id:o})=>e.includes(o))},[i,a]),g=ew(e=>e.showControlPanel),u=ew(e=>e.hideControlPanel),v=ew(e=>e.setControlPanelNodes),y=ew(e=>e.setControlPanelSize),x=ew(e=>e.removeNodeFromControlPanel),[w,C]=h(!0),k=m(()=>{let e=a.reduce((e,{height:o=eg,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(oD,{theme:e,ref:o,onClick:g,children:t(ed,{})}),n(es,{open:l,onClose:u,direction:"left",className:"",size:"auto",enableOverlay:!1,style:{background:e.colors.elevation1,position:"absolute"},children:[n(o_,{theme:e,children:[t(oI,{children:"Control Panel"}),t(oM,{children:t(oA,{onClick:u,theme:e,children:t(b,{})})})]}),n(oL,{children:[t(oR,{children:w?n(oW,{theme:e,onClick:()=>C(!1),children:[t(el,{}),"Unlock grid"]}):n(oW,{theme:e,onClick:()=>C(!0),children:[t(ea,{}),"Lock grid"]})}),t(er,{enable:{top:!1,right:!w,bottom:!1,left:!1,topRight:!1,bottomRight:!1,bottomLeft:!1,topLeft:!1},handleComponent:{right:t(oO,{theme:e})},minWidth:120,size:{width:s,height:"auto"},onResizeStop:(e,o,t,n)=>{y({width:s+n.width,height:c+n.height})},children:t(oH,{theme:e,children:t(ei,{layout:k,className:"layout",cols:4,rowHeight:eg,width:s,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(oB,{theme:e,children:t(oT,{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<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 oV=i(c.div`
535
551
  font-family: var(--leva-fonts-mono);
536
552
  font-size: 0.7rem;
537
553
  box-sizing: border-box;
@@ -596,13 +612,13 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
596
612
  margin-inline-end: 0px;
597
613
  unicode-bidi: isolate;
598
614
  }
599
- `),oU=i(c.div`
615
+ `),oY=i(c.div`
600
616
  padding: 1rem;
601
617
  height: 100%;
602
618
  width: 100%;
603
619
  box-sizing: border-box;
604
620
  overflow: hidden;
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`
621
+ `);var oX=()=>{var e;let o=ew(e=>e.isHelpShown),n=ew(e=>e.toggleHelp);return o?t(eT,{onClose:()=>{n()},children:t(oY,{children:t(oV,{dangerouslySetInnerHTML:{__html:ec((e=oG)&&e.__esModule?e.default:e)},onWheelCapture:e=>e.stopPropagation()})})}):null};let oJ=()=>t(r,{children:t(I,{onClick:ew(e=>e.toggleHelp),children:t(ee,{})})}),oZ=c.div`
606
622
  position: fixed;
607
623
  z-index: ${({theme:e})=>e.zIndex.resumeContextLayout};
608
624
  width: 100%;
@@ -616,18 +632,18 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
616
632
  justify-content: center;
617
633
  color: ${({theme:e})=>e.colors.whitePrimary};
618
634
  cursor: pointer;
619
- `,oX=c.div`
635
+ `,oq=c.div`
620
636
  display: flex;
621
637
  width: 100%;
622
638
  align-items: center;
623
639
  justify-content: center;
624
- `,oJ=c.div`
640
+ `,oK=c.div`
625
641
  font-family: var(--leva-fonts-mono);
626
642
  font-size: 2rem;
627
- `,oZ=c(ee)`
643
+ `,oQ=c(eo)`
628
644
  width: 7rem;
629
645
  height: 7rem;
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)`
646
+ `;var o0=()=>{let e=ek(),o=ew(({patch:e})=>e).audioContext,[r,i]=h("running"===o.state);return r?null:n(oZ,{theme:e,onClick:()=>{o.resume(),i(!0)},children:[t(oq,{children:t(oK,{theme:e,children:"Click anywhere to resume audio context"})}),t(oq,{children:t(oQ,{})})]})},o1=()=>{let e=ew(({setConfig:e})=>e),{showMinimap:o}=ew(({config:e})=>e);return t(I,{onClick:()=>e({showMinimap:!o}),children:o?t(et,{}):t(en,{})})},o2=({id:e,sourceX:o,sourceY:i,targetX:l,targetY:a,sourcePosition:d,targetPosition:s,style:c={},data:p,markerStart:h,markerEnd:m,source:u,target:f,sourceHandleId:v,targetHandleId:b,selected:y})=>{let x=ek(),w=ew(({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[N]=L({targetX:l,targetY:a,targetPosition:s,sourceX:o,sourceY:i,sourcePosition:d});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:N,markerEnd:m}),t("path",{style:{...c,strokeWidth:8,color:"transparent",opacity:0,cursor:"pointer"},d:N,markerEnd:m})]})};let o3=i(c(z)`
631
647
  &.bottom {
632
648
  right: 1rem;
633
649
  bottom: 40%;
@@ -636,12 +652,12 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
636
652
  svg {
637
653
  color: ${({theme:e})=>e.colors.elevation2};
638
654
  }
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`
655
+ `),o6=(e,o)=>console.log("drag stop",o),o9=(e,o)=>console.log("click",o),o4=[20,20],o8=({editorState:e,plugins:o=[],editorContextMenu:r=[],onChange:i=()=>{},...l})=>{let a=m(()=>({wire:o2}),[]),{nodes:d,edges:s,controlPanel:c,onNodesChange:p,onNodesDelete:f,onEdgesChange:v,onEdgesDelete:b,onConnect:y,setViewport:x,viewport:w}=ew();g(()=>{e?.viewport&&!w&&x(e.viewport)},[e?.viewport,x,w]);let C=ew(({config:e})=>e),k=ew(({nodeTypes:e})=>e),[$,N]=h(null);g(()=>{$&&i({nodes:d,edges:s,controlPanel:c,viewport:w})},[d,s,c,w]);let P=u(e=>{$||(N(e),console.log("flow loaded:",e))},[$]),{onContextMenu:z}=(()=>{let{show:e}=V({id:e9});return{onContextMenu:e}})(),{onContextMenu:T}=(()=>{let{show:e}=V({id:e8});return{onContextMenu:u((o,t)=>{o.stopPropagation(),e(o,{props:{node:t}})},[])}})(),{onContextMenu:D}=(()=>{let{show:e}=V({id:ez});return{onContextMenu:u((o,t)=>{o.stopPropagation(),e(o,{props:{edge:t}})},[e])}})();return n(j,{nodes:d,edges:s,onNodesChange:p,onNodesDelete:f,onEdgesChange:v,onConnect:y,onNodeDragStop:o6,onEdgesDelete:b,onInit:P,onNodeClick:o9,onContextMenu:z,onNodeContextMenu:T,onEdgeContextMenu:D,nodeTypes:k,edgeTypes:a,snapGrid:o4,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(S,{}):null,n(o3,{showInteractive:!1,position:"bottom-right",children:[t(o1,{}),t(oJ,{})]}),t(o0,{}),t(oU,{}),t(oX,{}),t(e4,{editorContextMenu:r}),t(e5,{}),t(ej,{})]})},o5=e=>t(T,{children:t(o8,{...e})}),o7={nodes:[],edges:[],controlPanel:{nodes:[],show:!1,size:{width:200,height:100}},viewport:{x:0,y:0,zoom:1.5}},te=i(c.div`
640
656
  display: flex;
641
657
  flex-direction: column;
642
658
  height: 100%;
643
659
  width: 100%;
644
- `),o7=i(c.div`
660
+ `),to=i(c.div`
645
661
  position: fixed;
646
662
  height: 100%;
647
663
  width: 100%;
@@ -651,18 +667,18 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
651
667
  justify-content: center;
652
668
  align-items: center;
653
669
  font-size: 2rem;
654
- `),o5=i(c.div`
670
+ `),tt=i(c.div`
655
671
  height: 100%;
656
672
  width: 100%;
657
673
  display: flex;
658
674
  position: relative;
659
- `),te=i(c.div`
675
+ `),tn=i(c.div`
660
676
  display: flex;
661
677
  flex: 1;
662
678
  align-items: center;
663
679
  justify-content: center;
664
680
  background: ${({theme:e})=>e.colors.elevation3};
665
- `),to=i(c.div`
681
+ `),tr=i(c.div`
666
682
  background: ${({theme:e})=>e.colors.elevation2};
667
683
  opacity: 0.7;
668
684
  position: absolute;
@@ -677,12 +693,12 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
677
693
  align-items: center;
678
694
  justify-content: center;
679
695
  font-size: 6rem;
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`
696
+ `),ti=e=>{let o=ew(e=>e.pullEditorChanges),i=ew(e=>e.project.currentFileIndex),l=ew(e=>e.project),[a,d]=h(!0);g(()=>{e.onChange?.(l)},[l,e.onChange]),g(()=>{d(!0),setTimeout(()=>{d(!1)},1600)},[i]);let{file:s}=e;return s?"audio"===s.type?t(tn,{children:t("audio",{src:s.file,controls:!0})}):n(r,{children:[t(o5,{...e,onChange:e=>{o()},editorState:s.file||o7}),t(tr,{show:a,children:"Loading..."})]}):null},tl=i(c.div`
681
697
  height: 2rem;
682
698
  display: flex;
683
699
  align-items: center;
684
700
  background: ${({theme:e})=>e.colors.elevation2};
685
- `),tr=i(c.div`
701
+ `),ta=i(c.div`
686
702
  display: flex;
687
703
  align-items: center;
688
704
  cursor: pointer;
@@ -699,7 +715,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
699
715
  background-color: ${({theme:e})=>e.colors.elevation1};
700
716
  }
701
717
  }
702
- `),ti=i(c.div`
718
+ `),td=i(c.div`
703
719
  display: flex;
704
720
  align-items: center;
705
721
  height: 100%;
@@ -710,10 +726,10 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
710
726
  &:hover {
711
727
  color: ${({theme:e})=>e.colors.whitePrimary};
712
728
  }
713
- `),tl=i(c(v)`
729
+ `),ts=i(c(v)`
714
730
  height: 40%;
715
731
  width: auto;
716
- `),ta=i(c(b)`
732
+ `),tc=i(c(b)`
717
733
  height: 70%;
718
734
  width: auto;
719
735
  cursor: pointer;
@@ -724,7 +740,7 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
724
740
  ${({hide:e})=>e?`
725
741
  display: none;
726
742
  `:""};
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`
743
+ `),tp=()=>({file:o7,name:"Unnamed",type:"patch",id:p()});var th=({...e})=>{let{projectState:o,theme:r,plugins:i=[]}=e,s=ew(e=>e.setPlugins),c=ew(e=>e.project.currentFileIndex||0),p=ew(e=>e.project.files[e.project.currentFileIndex||0]),m=ew(e=>e.setCurrentFileIndex),u=ew(e=>e.project),f=ew(e=>e.setProject),v=ew(e=>e.getProject),b=ew(e=>e.updateFileName),y=ew(e=>e.addFile),x=ew(e=>e.deleteFile);ew(e=>e.updateFileContent);let w=ew(e=>e.syncEditorWithCurrentFile),k=ew(e=>e.setEditorState);ew(e=>e.pullEditorChanges);let[$,N]=h(!1);return g(()=>{s(i)},[i]),g(()=>{f(o||{files:[tp()],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?ev(r)?new Response(JSON.stringify(r.file??null)):eb(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||eC,children:[t(a,{styles:d`
728
744
  :root {
729
745
  --leva-colors-elevation1: #292d39;
730
746
  --leva-colors-elevation2: #181c20;
@@ -781,5 +797,54 @@ let e,o;import{jsx as t,jsxs as n,Fragment as r}from"react/jsx-runtime";import{w
781
797
  --leva-fontWeights-folder: normal;
782
798
  --leva-fontWeights-button: normal;
783
799
  }
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};
800
+ `}),n(te,{onDragOver:e=>{e.preventDefault(),e.stopPropagation(),N(!0)},onDragLeave:e=>{e.preventDefault(),e.stopPropagation(),N(!1)},onDrop:e=>{e.preventDefault(),e.stopPropagation(),N(!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({...tp(),file:{...o,controlPanel:{...o7.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(tl,{children:[u.files.map((e,o)=>n(ta,{onClick:()=>{m(o)},active:o===c,children:[t(ot,{onChange:e=>b(o,e),value:e.name||"Unnamed"}),u.files.length>1&&t(tc,{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(td,{onClick:()=>{y(tp())},children:t(ts,{})})]}),t(tt,{children:t(ti,{file:p,...e})}),$&&t(to,{children:"Drop file(s) to upload to the project"})]})]})};let tg=i(c.div`
801
+ height: 100%;
802
+ width: 100%;
803
+ display: flex;
804
+ flex-direction: column;
805
+ overflow: hidden;
806
+ `),tm=c(x)`
807
+ font-size: 1.2rem;
808
+ opacity: 0.4;
809
+ width: 1rem;
810
+ &:hover {
811
+ opacity: 1;
812
+ cursor: pointer;
813
+ }
814
+ `,tu=c(w)`
815
+ font-size: 1.2rem;
816
+ opacity: 0.4;
817
+ width: 1rem;
818
+ &:hover {
819
+ opacity: 1;
820
+ cursor: pointer;
821
+ }
822
+ `,tf=c.div`
823
+ position: relative;
824
+ font-family: var(--leva-fonts-mono);
825
+ font-size: var(--leva-fontSizes-root);
826
+ background-color: var(--leva-colors-elevation1);
827
+ `,tv=c(tf)`
828
+ display: flex;
829
+ height: 2rem;
830
+ max-height: 2rem;
831
+ min-height: 2rem;
832
+ touch-action: none;
833
+ align-items: center;
834
+ justify-content: space-between;
835
+ flex: 1 1 0%;
836
+ color: var(--leva-colors-highlight1);
837
+ padding: 0 0.4rem;
838
+ gap: 0.3rem;
839
+ `;c.div`
840
+ width: 100%;
841
+ height: 100%;
842
+ display: flex;
843
+ flex-direction: column;
844
+ `;let tb=c(eT)`
845
+ padding: 1rem;
846
+ max-width: 20rem;
847
+ height: auto;
848
+ max-height: 90%;
849
+ `,ty=({className:e,...o})=>t(tv,{...o,className:[e,ep].join(" ")}),tx=e=>ew(o=>o.nodesConfiguration[e]),tw=e=>{let{id:o,children:r,selected:i,...l}=e,a=ek(),d=ew(({getNode:e})=>e),s=ew(e=>e.nodesConfiguration),[c,p]=h(!1),{info:g,minSize:u}=tx(e.type),f=m(()=>s[e.type].resizable??!1,[s,e.type]),{updateNodeLabel:v}=oe(o),{data:b}=d(o)||{},y=e7(o),{ConfigNode:x}=(e=>{let{configNode:o}=tx(e);return{ConfigNode:o}})(l.type),[w,C]=h(!1);return n(tg,{children:[!e.hideToolbar&&n(ty,{children:[g&&t(tu,{onClickCapture:()=>p(!0)}),t(ot,{value:b?.label??"No Name",onChange:v}),x&&t(tm,{onClickCapture:()=>C(e=>!e)})]}),r,f&&t(_,{style:{background:"transparent",border:"none"},minWidth:u?.width||180,minHeight:u?.height||100}),t(or,{isOpen:c,type:e.type,onClose:()=>p(!1),node:y?.node??null}),x&&w&&t(tb,{onClose:()=>C(!1),outerBackground:a.colors.elevation3+"ee",children:t(x,{...e,data:{label:"unknown",...e.data}})})]})};export{th as Editor,o7 as EDITOR_DEFAULTS,o2 as Wire,oN as WNNode,ok as TitleBar,oh as PortsPanel,om as OutputPorts,oC as OutputHandle,og as InputPorts,ox as InputHandle,ou as Port,tw as BaseWNNode,eT as Modal,ot as EditableLabel,e7 as useAudioNode,oe as useNode,ek as useTheme,ew as useStore,eC as theme,eb as isAudio,ev as isPatch,ex as PortType};
785
850
  //# sourceMappingURL=module.js.map