@web-noise/core 0.0.20 → 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,4 +1,4 @@
1
- let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{withTheme as i,ThemeProvider as l,Global as a,css as d,useTheme as s}from"@emotion/react";import c from"@emotion/styled";import{nanoid as p}from"nanoid";import{useState as h,useEffect as 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 S,useReactFlow as T,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 er}from"react-icons/fa";import{Resizable as en}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)),r=new Set(o.map(e=>e.id));return{added:o.filter(e=>!t.has(e.id)),removed:e.filter(e=>!r.has(e.id))}},ev=e=>!("type"in e)||"patch"===e.type,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:P(o,e).map(e=>({dragHandle:eh,...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)}))},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:r}=o(),{maxHistoryLength:n,skipCollect:i}=r;i?e({history:{...r,skipCollect:!1}}):e(({history:e})=>{if(!e)return{};let{buffer:o,pointer:r}=e,i=o.slice(Math.max(r-n+1,0),r);return{history:{...e,buffer:[...i,t],pointer:Math.min(r+1,n)}}})},back:()=>{let{nodes:t,edges:r,controlPanel:n,history:i}=o(),{buffer:l,pointer:a}=i,d=l[a-1];if(!d)return;let s=O(d);s&&e({...B(eu({nodes:t,edges:r,controlPanel:n}),s),history:{...i,pointer:a-1,skipCollect:!0}})},forward:()=>{let{nodes:t,edges:r,controlPanel:n,history:i}=o(),{buffer:l,pointer:a}=i,d=l[a];d&&e({...B(eu({nodes:t,edges:r,controlPanel:n}),d),history:{...i,pointer:a+1,skipCollect:!0}})},clear:()=>{let{history:t}=o();e({history:{...t,buffer:[],pointer:0,skipCollect:!0}})}}}))(...e),...((e,o)=>({patch:W(),nodesState:{}}))(...e),...((e,o)=>({project:{files:[],currentFileIndex:0},setProject(o){e({project:o})},getProject:()=>o().project,pullEditorChanges(){let{getEditorState:e,updateFileContent:t,project:r}=o(),n=r.currentFileIndex||0,i=r.files[n];eb(i)||t(n,{...i,file:e()})},syncEditorWithCurrentFile:()=>{let{setEditorState:e,project:t}=o(),r=t.currentFileIndex||0,n=t.files[r];n?"audio"===n.type?console.log("audio file. skipping"):e(n.file):console.warn("No current file to sync with editor")},setCurrentFileIndex(t){let{project:r,getProject:n}=o();t!==(r.currentFileIndex??0)&&e({project:{...r,currentFileIndex:t}})},updateFileContent(t,r){let{project:n}=o();e({project:{...n,files:n.files.map((e,o)=>o===t?{...e,...r}:e)}})},updateFileName(t,r){let{project:n}=o();e({project:{...n,files:n.files.map((e,o)=>o===t?{...e,name:r}:e)}})},addFile(e){let{project:t,setProject:r}=o(),n=[...t.files,e];r({...t,files:n,currentFileIndex:n.length-1})},deleteFile:t=>{let{project:r}=o(),n=r.currentFileIndex??0,i=n===r.files.length-1?Math.max(0,n-1):n,l=r.files.filter((e,o)=>t!==o);e({project:{...r,files:l,currentFileIndex:i}})}}))(...e),setGraph:async({nodes:e,edges:o})=>{let{patch:r,createNodes:n,createEdges:i,setNodesAndEdges:l,nodes:a,edges:d}=t();l({nodes:[],edges:[]}),await n(e),i(o)},clearGraph:()=>{let{setGraph:e}=t();e({nodes:[],edges:[]})},createNodes:async e=>{let{createNode:o}=t();await Promise.all(e.map(e=>o(e)))},createNode:e=>{let{addNode:o,nodesConfiguration:r}=t(),{type:n,id:i,data:l}=e;if(void 0===n)throw Error(`node type is not defined for node: ${i}`);o({...e,data:{...l,config:{...r[n]?.defaultConfig,...l?.config}}})},removeNode:e=>t().removeNodes([e]),removeNodes:e=>{let{edges:r,nodes:n,onNodesDelete:i,removeEdges:l,removeNodesFromControlPanel:a}=t(),d=e.map(({id:e})=>e),s=[...e,...n.filter(({parentId:e})=>e&&d.includes(e))];a(s),l(k(s,r)),i(s);let c=s.map(({id:e})=>e);o({nodes:n.filter(({id:e})=>!c.includes(e))})},removeEdges:e=>{let{edges:r,onEdgesDelete:n}=t(),i=e.map(({id:e})=>e);n(e),o({edges:r.filter(({id:e})=>!i.includes(e))})},createEdges:e=>{let{patch:o,edges:r,setEdges:n}=t();n(e)},onConnect:async e=>{let{edges:o,createEdges:r}=t();r($(e,o))},onEdgesDelete:e=>{let{patch:o}=t()},onNodesDelete:async e=>{let{removeNodesFromControlPanel:o,patch:r}=t();o(e)},plugins:[],setPlugins:async e=>{let{setNodeTypes:r}=t();o({plugins:e});let n=e.reduce((e,o)=>({...e,...o.components.reduce((e,o)=>({...e,[o.type]:o}),{})}),{}),i=Object.keys(n).reduce((e,o)=>({...e,[o]:n[o].node}),{});R(Object.keys(n).reduce((e,o)=>({...e,[o]:n[o].audioNode}),{})),r(i),o(({nodesConfiguration:e})=>({nodesConfiguration:{...e,...n}}))},nodesConfiguration:{},config:{showMinimap:!1},setConfig:e=>{o(({config:o})=>({config:{...o,...e}}))},getEditorState:()=>{let{getNodesAndEdges:e,controlPanel:o,viewport:r}=t();return{...e(),controlPanel:o,viewport:r}},setEditorState:async({nodes:e,edges:r,controlPanel:n,viewport:i})=>{let{setGraph:l}=t();await l({nodes:e,edges:r}),await new Promise(e=>setTimeout(e,1e3)),o({controlPanel:n,viewport:i})},isHelpShown:!1,toggleHelp:()=>{let{isHelpShown:e}=t();o({isHelpShown:!e})},copyBuffer:{nodes:[],edges:[]},copy:e=>{o({copyBuffer:e})},copySelectedItems:()=>{let{nodes:e,edges:o,copy:r}=t(),n=e.filter(({selected:e})=>e),i=o.filter(({selected:e})=>e);n.length&&r({nodes:n,edges:i})},pasteBuffer:(e=0,r=0)=>{let{copyBuffer:n,createNodes:i,setEdges:l,nodes:a,edges:d}=t(),{nodes:s,edges:c}=n;if(!s.length)return;o({nodes:a.map(e=>({...e,selected:!1}))});let p=s.reduce((e,o)=>!e||o.position.x<e.position.x&&o.position.y<e.position.y?o:e),h=p.position.x-e,g=p.position.y-r,{nodes:m,mapping:u}=s.reduce((e,o)=>{let t,r=(t=+new Date+Math.floor(1e3*Math.random()),o?.type?`${o.type}-${t}`:t.toString());return{nodes:[...e.nodes,{...o,id:r,position:{x:o.position.x-h,y:o.position.y-g},selected:!0}],mapping:{...e.mapping,[o.id]:r}}},{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:r}=e;if(!r)return null;let n=o[r]?.controlPanelNode;return n||(console.error(`could not find node for type ${r}`),null)},controlPanel:{show:!0,nodes:[],size:{width:200,height:100}},showControlPanel:()=>o(({controlPanel:e})=>({controlPanel:{...e,show:!0}})),hideControlPanel:()=>o(({controlPanel:e})=>({controlPanel:{...e,show:!1}})),addNodeToControlPanel:e=>{let{nodesConfiguration:r}=t(),n=e.type?r[e.type]?.minSize:{height:void 0},i=n?.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,r)=>{let n,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(n),l||(l=o),n=setTimeout(()=>{let o=i.diff(l,e);l=null,o&&t().history.push(o)},500)});return r.subscribe(a),e((...e)=>o(...e),t,r)},(e,t,r)=>{r.subscribe(async(e,o)=>{});let n={...t(),nodes:[],edges:[]},i=Promise.resolve();return o((...o)=>{i=i.then(async()=>{let r=t(),[i]=o,l={...n,..."function"==typeof i?i({...n}):i},a=ef(n.nodes,l.nodes),d=ef(n.edges,l.edges);n=l;let s=a.added,c=d.added,p=d.removed,h=a.removed,{patch:g}=r;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,r)})),eC={colors:{elevation1:"#292d39",elevation2:"#181c20",elevation3:"#373c4b",accent1:"#0066dc",accent2:"#007bff",accent3:"#3c93ff",highlight1:"#535760",highlight2:"#8c92a4",highlight3:"#fefefe",vivid1:"#14df42",whitePrimary:"#ffffff",error:"#db5353"},zIndex:{modal:9998,controlPanel:9999,resumeContextLayout:10003}};G`
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); */
@@ -47,11 +47,11 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
47
47
  } */
48
48
  }
49
49
 
50
- `;var ek=()=>{let e=s();return{...eC,...e}};let e$=c(Y)``,eP=i(c(e$)`
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
- `),eN=c(X)`
54
+ `),eP=c(X)`
55
55
  background: ${({colors:e})=>e.elevation2};
56
56
  padding: 0;
57
57
  border-radius: 0;
@@ -64,7 +64,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
64
64
  background-color: ${({colors:e})=>e.elevation1};
65
65
  margin: 0;
66
66
  }
67
- `,ez="editor-edge-menu";var ej=()=>{let e=ek(),o=ew(e=>e.removeEdges);return t(n,{children:t(eN,{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`
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%;
@@ -83,12 +83,12 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
83
83
  height: 80%;
84
84
  overflow-y: scroll;
85
85
  position: relative;
86
- `,eD=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 eS=({children:e,onClose:o,outerBackground:n,...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:n,onClick:o,children:r(eE,{...i,onClick:e=>{e.stopPropagation()},theme:l,children:[e,t(eD,{theme:l,onClick:o})]})}),document.body)};let eT=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
93
  `),eM=i(c.div`
94
94
  padding: 1rem;
@@ -145,7 +145,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
145
145
  `),eO=i(c.div`
146
146
  color: ${({theme:e})=>e.colors.highlight2};
147
147
  font-size: 12px;
148
- `);var eB=({onComponentClick:e,filters:{plugin:o,search:n="",tags:i},onTagClick:l})=>{let a=ew(({plugins:e})=>e),d=m(()=>o?a.filter(({name:e})=>e===o):a,[a,o]);return t(eT,{children:m(()=>n||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(n.toLocaleLowerCase())||o?.toLocaleLowerCase().includes(n.toLocaleLowerCase()))})):d,[d,n,i]).map(({name:o,description:n,components:a},d)=>a.length?r(eM,{children:[r(eR,{children:[t(eW,{children:o}),t(eO,{children:n})]}),t(eA,{children:a.sort((e,o)=>e.type.toLowerCase()>o.type.toLowerCase()?1:-1).map((o,n)=>r("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))})]},n))})]},d):null)})};let eU=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
151
  `,eG=c.input`
@@ -207,7 +207,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
207
207
  content: "×";
208
208
  margin-left: 0.4rem;
209
209
  }
210
- `);var eJ=({onChange:e,value:o})=>{let n=ek(),i=ew(({plugins:e})=>e),l=f(null);return g(()=>{l.current&&l.current.focus()},[l]),r(eV,{theme:n,children:[t(eU,{children:t(eG,{ref:l,theme:n,value:o.search||"",placeholder:"search...",onChange:t=>e({...o,search:t.target.value})})}),t(eL,{children:o.tags?.map((r,n)=>t(eX,{isActive:!0,onClick:()=>{let t=o.tags?.filter(e=>e!==r)||[];e({...o,tags:t})},children:r},n))}),i.map(({name:i,components:l},a)=>i?r(eY,{theme:n,children:[t("input",{type:"checkbox",name:"plugin",value:i,checked:i===o.plugin,onChange:()=>{e({...o,plugin:i===o.plugin?null:i})}}),t("span",{children:i})]},a):null)]})};let eZ=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;
@@ -216,7 +216,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
216
216
  flex-grow: 1;
217
217
  height: 100%;
218
218
  overflow-y: scroll;
219
- `;var eK=({isOpen:e,closeMenu:o,mousePosition:n})=>{let i=ek(),{screenToFlowPosition:l}=T(),{createNode:a}=ew(({createNode:e})=>({createNode:e})),[d,s]=h({}),c=u(({type:e,minSize:t})=>{let{x:r,y:i}=l(n);a({id:`${e}-${+new Date}`,type:e,data:{label:e},position:{x:r,y:i},targetPosition:M.Left,sourcePosition:M.Right,...t||{}}),o()},[n,l,a,o,n]);return e?t(eS,{onClose:()=>{o(),s({})},children:r(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 r=new FileReader;r.readAsDataURL(e),r.onload=()=>o(r.result?.toString()||""),r.onerror=e=>t(e)}),e0=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;
@@ -254,7 +254,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
254
254
  height: 8rem;
255
255
  `,e3=c.div`
256
256
  font-size: 2rem;
257
- `;var e6=({isOpen:e,closeMenu:o})=>{let n=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||[],r=await eQ(t);i({type:"audio",id:`audio-file-${+new Date}`,name:t.name,file:r}),o()},[i,o]);return e?t(eS,{onClose:o,children:r(e0,{theme:n,children:[t("input",{onChange:({target:{files:e}})=>a(e),ref:l,type:"file",className:"hidden",style:{display:"none"},accept:".wav,.mp3,.ogg"}),t(K,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{l.current?.click()},onDrop:e=>a(e),children:r(e1,{theme:n,children:[t(e2,{}),t(e3,{children:"click or drop file here"})]})})]})}):null};let e4="editor-menu";var e9=({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}=T(),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),P=ew(e=>e.history.buffer),N=ew(e=>e.copySelectedItems),z=ew(e=>e.nodes),j=m(()=>z.filter(({selected:e})=>e),[z]),F=ew(e=>e.copyBuffer);return T(),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",()=>(N(),!1)),Z("command+v",()=>(b({x:200,y:50}),!1)),()=>{Z.unbind()}),[p,b]),r(n,{children:[t(eK,{isOpen:a,closeMenu:()=>d(!1),mousePosition:i}),t(e6,{isOpen:s,closeMenu:()=>c(!1)}),r(eN,{id:e4,animation:!1,colors:o.colors,children:[t(e$,{onClick:({triggerEvent:{clientX:e,clientY:o}})=>p(e,o),children:"Add Node (⌘+⇧+A)"}),t(J,{}),t(eP,{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:$===P.length,onClick:k,children:"Redo (⌘+⇧+Z)"}),t(J,{}),t(e$,{disabled:!j.length,onClick:N,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 e7=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(n,{children:r(eN,{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)"})]})})},e5=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`
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 r,Fragment as n}from"react/jsx-runtime";import{w
283
283
  padding: 0.3rem;
284
284
  border-radius: 0.2rem;
285
285
  }
286
- `;var ot=({onChange:e,value:o="",className:r})=>{let n=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(),n.current&&e(n.current.value)},[n,d,e]),c=u(()=>{d(),n.current&&o&&(n.current.value=o)},[n,d,o]);return g(()=>{n.current&&(n.current.value=o)},[o,n]),t(oo,{ref:n,type:"text",readOnly:!i,onDoubleClick:e=>a(e),onBlur:s,onKeyDown:e=>{switch(e.key){case"Escape":c();break;case"Enter":s()}},className:r})};let or=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,7 +362,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
362
362
  margin-inline-end: 0px;
363
363
  unicode-bidi: isolate;
364
364
  }
365
- `);var on=({isOpen:e,onClose:o,type:r,node:n})=>{let{info:i,portsDescription:l}=ew(e=>e.nodesConfiguration[r]),a=m(()=>{let e=[],o=n.inputs;if(o)for(let t in e.push("## Inputs"),o){let r=o[t];e.push(`### *${t}*`);let n=l?.inputs?.[t];n&&e.push(n),Array.isArray(r.type)?e.push(`**Types**: \`${r.type.join(", ")}\``):e.push(`**Type**: \`${r.type||"unknown"}\``),r.range&&e.push(`**Range**: \`[${r.range[0]}, ${r.range[1]}]\``),void 0!==r.defaultValue&&e.push(`**Default**: \`${r.defaultValue}\``)}let t=n.outputs;if(t)for(let o in e.push("## Outputs"),t){let r=t[o];e.push(`### *${o}*`);let n=l?.outputs?.[o];n&&e.push(n),Array.isArray(r.type)?e.push(`**Types**: \`${r.type.join(", ")}\``):e.push(`**Type**: \`${r.type||"unknown"}\``),r.range&&e.push(`**Range**: \`[${r.range[0]}, ${r.range[1]}]\``),void 0!==r.defaultValue&&e.push(`**Default**: \`${r.defaultValue}\``)}return e.join("\n\n")},[n,l]);return e?t(eS,{onClose:o,children:t(or,{dangerouslySetInnerHTML:{__html:ec((i||"")+"\n\n"+a||"")}})}):null};let oi=i(c.div`
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
366
  background-color: ${({theme:e})=>e.colors.elevation1};
367
367
  height: 100%;
368
368
  width: 100%;
@@ -426,7 +426,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
426
426
  height: 100%;
427
427
  display: flex;
428
428
  flex-direction: column;
429
- `,ov=c(eS)`
429
+ `,ov=c(eT)`
430
430
  padding: 1rem;
431
431
  max-width: 20rem;
432
432
  height: auto;
@@ -440,7 +440,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
440
440
  left: 0;
441
441
  `),ox=({...e})=>t(oy,{...e,type:"target",position:M.Left}),ow=i(c(ob)`
442
442
  right: 0;
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]),oP=e=>{let{id:o,children:n,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=e5(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 r(oa,{className:ep,children:["error: ",x.error.toString()]});if(!x.node)return t(ol,{className:ep,children:"can't find audio node"});y?.config?.size;let{node:{inputs:$,outputs:P}}=x;return r(oi,{children:[r(ok,{children:[g&&t(os,{onClickCapture:()=>p(!0)}),t(ot,{value:y?.label??"No Name",onChange:v}),w&&t(od,{onClickCapture:()=>k(e=>!e)})]}),r(oh,{theme:a,children:[t(og,{children:$?Object.keys($).map((e,o)=>r(ou,{children:[t(ox,{id:e,portType:$[e].type}),t("span",{children:e})]},o)):null}),t(om,{children:P?Object.keys(P).map((e,o)=>r(ou,{children:[t(oC,{id:e,portType:P[e].type}),t("span",{children:e})]},o)):null})]}),t(of,{children:n}),f&&t(_,{style:{background:"transparent",border:"none"},minWidth:u?.width||180,minHeight:u?.height||100}),t(on,{isOpen:c,type:e.type,onClose:()=>p(!1),node:x.node}),w&&C&&t(ov,{onClose:()=>k(!1),outerBackground:"#333333cc",children:t(w,{...e,data:{label:"unknown",...e.data}})})]})},oN=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`
444
444
  width: 100%;
445
445
  padding: 0.4rem 0;
446
446
  white-space: nowrap;
@@ -476,7 +476,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
476
476
  height: 100%;
477
477
  display: grid;
478
478
  grid-template-rows: auto 1fr;
479
- `,oD=e=>{let{node:o}=e,r=ew(e=>e.getControlPanelNode),n=m(()=>r(o),[o]);return n?t(n,{...e}):null};var oS=e=>{let{node:o,showControls:n,onDelete:i}=e,l=ek(),{id:a}=o,{node:d}=e5(a)||{},{updateNodeValues:s}=oe(a);return r(oE,{theme:l,children:[r(oz,{theme:l,children:[t(oN,{children:o.data.label}),n&&r(oj,{children:[t(oF,{theme:l,children:t(y,{className:"grid-item-handle"})}),t(oF,{theme:l,children:t(b,{onClick:()=>i(o)})})]})]}),t(oD,{node:o,audioNode:d,updateNodeValues:s})]})};let oT=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`
480
480
  position: fixed;
481
481
  z-index: 5;
482
482
  box-shadow: 0px 1px 2px ${({theme:e})=>e.colors.elevation2};
@@ -506,7 +506,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
506
506
  grid-template-columns: 1fr auto;
507
507
  border-bottom: 1px solid ${({theme:e})=>e.colors.elevation3};
508
508
  font-size: 0.7rem;
509
- `,oI=c(oN)`
509
+ `,oI=c(oP)`
510
510
  text-align: center;
511
511
  `,oL=c.div`
512
512
  height: 100%;
@@ -547,7 +547,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
547
547
  border-color: ${({theme:e})=>e.colors.whitePrimary};
548
548
  border-width: 1px;
549
549
  }
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:r=0})=>{let n=r+o;return n>e?n:e},0);return a.map(({id:o,width:t,height:r,x:n,y:i})=>({i:o,w:t||4,h:r||6,x:n??0,y:i??e}))},[a]);return p.length?r(n,{children:[t(oT,{theme:e,ref:o,onClick:g,children:t(ed,{})}),r(es,{open:l,onClose:u,direction:"left",className:"",size:"auto",enableOverlay:!1,style:{background:e.colors.elevation1,position:"absolute"},children:[r(o_,{theme:e,children:[t(oI,{children:"Control Panel"}),t(oM,{children:t(oA,{onClick:u,theme:e,children:t(b,{})})})]}),r(oL,{children:[t(oR,{children:w?r(oW,{theme:e,onClick:()=>C(!1),children:[t(el,{}),"Unlock grid"]}):r(oW,{theme:e,onClick:()=>C(!0),children:[t(ea,{}),"Lock grid"]})}),t(en,{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,r)=>{y({width:s+r.width,height:c+r.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:r,y:n})=>({id:e,width:o,height:t,x:r,y:n})))})},children:p.map(o=>t(oB,{theme:e,children:t(oS,{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`
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`
551
551
  font-family: var(--leva-fonts-mono);
552
552
  font-size: 0.7rem;
553
553
  box-sizing: border-box;
@@ -618,7 +618,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
618
618
  width: 100%;
619
619
  box-sizing: border-box;
620
620
  overflow: hidden;
621
- `);var oX=()=>{var e;let o=ew(e=>e.isHelpShown),r=ew(e=>e.toggleHelp);return o?t(eS,{onClose:()=>{r()},children:t(oY,{children:t(oV,{dangerouslySetInnerHTML:{__html:ec((e=oG)&&e.__esModule?e.default:e)},onWheelCapture:e=>e.stopPropagation()})})}):null};let oJ=()=>t(n,{children:t(I,{onClick:ew(e=>e.toggleHelp),children:t(ee,{})})}),oZ=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`
622
622
  position: fixed;
623
623
  z-index: ${({theme:e})=>e.zIndex.resumeContextLayout};
624
624
  width: 100%;
@@ -643,7 +643,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
643
643
  `,oQ=c(eo)`
644
644
  width: 7rem;
645
645
  height: 7rem;
646
- `;var o0=()=>{let e=ek(),o=ew(({patch:e})=>e).audioContext,[n,i]=h("running"===o.state);return n?null:r(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(er,{})})},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[P]=L({targetX:l,targetY:a,targetPosition:s,sourceX:o,sourceY:i,sourcePosition:d});return r(n,{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 o3=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)`
647
647
  &.bottom {
648
648
  right: 1rem;
649
649
  bottom: 40%;
@@ -652,7 +652,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
652
652
  svg {
653
653
  color: ${({theme:e})=>e.colors.elevation2};
654
654
  }
655
- `),o6=(e,o)=>console.log("drag stop",o),o4=(e,o)=>console.log("click",o),o9=[20,20],o8=({editorState:e,plugins:o=[],editorContextMenu:n=[],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),[$,P]=h(null);g(()=>{$&&i({nodes:d,edges:s,controlPanel:c,viewport:w})},[d,s,c,w]);let N=u(e=>{$||(P(e),console.log("flow loaded:",e))},[$]),{onContextMenu:z}=(()=>{let{show:e}=V({id:e4});return{onContextMenu:e}})(),{onContextMenu:S}=(()=>{let{show:e}=V({id:e8});return{onContextMenu:u((o,t)=>{o.stopPropagation(),e(o,{props:{node:t}})},[])}})(),{onContextMenu:T}=(()=>{let{show:e}=V({id:ez});return{onContextMenu:u((o,t)=>{o.stopPropagation(),e(o,{props:{edge:t}})},[e])}})();return r(j,{nodes:d,edges:s,onNodesChange:p,onNodesDelete:f,onEdgesChange:v,onConnect:y,onNodeDragStop:o6,onEdgesDelete:b,onInit:N,onNodeClick:o4,onContextMenu:z,onNodeContextMenu:S,onEdgeContextMenu:T,nodeTypes:k,edgeTypes:a,snapGrid:o9,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,r(o3,{showInteractive:!1,position:"bottom-right",children:[t(o1,{}),t(oJ,{})]}),t(o0,{}),t(oU,{}),t(oX,{}),t(e9,{editorContextMenu:n}),t(e7,{}),t(ej,{})]})},o7=e=>t(S,{children:t(o8,{...e})}),o5={nodes:[],edges:[],controlPanel:{nodes:[],show:!1,size:{width:200,height:100}},viewport:{x:0,y:0,zoom:1.5}},te=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`
656
656
  display: flex;
657
657
  flex-direction: column;
658
658
  height: 100%;
@@ -672,13 +672,13 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
672
672
  width: 100%;
673
673
  display: flex;
674
674
  position: relative;
675
- `),tr=i(c.div`
675
+ `),tn=i(c.div`
676
676
  display: flex;
677
677
  flex: 1;
678
678
  align-items: center;
679
679
  justify-content: center;
680
680
  background: ${({theme:e})=>e.colors.elevation3};
681
- `),tn=i(c.div`
681
+ `),tr=i(c.div`
682
682
  background: ${({theme:e})=>e.colors.elevation2};
683
683
  opacity: 0.7;
684
684
  position: absolute;
@@ -693,7 +693,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
693
693
  align-items: center;
694
694
  justify-content: center;
695
695
  font-size: 6rem;
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(tr,{children:t("audio",{src:s.file,controls:!0})}):r(n,{children:[t(o7,{...e,onChange:e=>{o()},editorState:s.file||o5}),t(tn,{show:a,children:"Loading..."})]}):null},tl=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`
697
697
  height: 2rem;
698
698
  display: flex;
699
699
  align-items: center;
@@ -740,7 +740,7 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
740
740
  ${({hide:e})=>e?`
741
741
  display: none;
742
742
  `:""};
743
- `),tp=()=>({file:o5,name:"Unnamed",type:"patch",id:p()});var th=({...e})=>{let{projectState:o,theme:n,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[$,P]=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,r=o.url.replace("project://",""),n=t.find(({id:e})=>e===r);return n?ev(n)?new Response(JSON.stringify(n.file??null)):eb(n)?fetch(n.file):new Response(null):new Response(`File not found: ${o.url}`,{status:404})}),()=>{}),[v]),g(()=>{w()},[c,w]),r(l,{theme:n||eC,children:[t(a,{styles:d`
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`
744
744
  :root {
745
745
  --leva-colors-elevation1: #292d39;
746
746
  --leva-colors-elevation2: #181c20;
@@ -797,5 +797,54 @@ let e,o;import{jsx as t,jsxs as r,Fragment as n}from"react/jsx-runtime";import{w
797
797
  --leva-fontWeights-folder: normal;
798
798
  --leva-fontWeights-button: normal;
799
799
  }
800
- `}),r(te,{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({...tp(),file:{...o,controlPanel:{...o5.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:[r(tl,{children:[u.files.map((e,o)=>r(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"})]})]})};export{th as Editor,o5 as EDITOR_DEFAULTS,o2 as Wire,oP as WNNode,ok as TitleBar,oh as PortsPanel,om as OutputPorts,oC as OutputHandle,og as InputPorts,ox as InputHandle,ou as Port,eS as Modal,ot as EditableLabel,e5 as useAudioNode,oe as useNode,ek as useTheme,ew as useStore,eC as theme,eb as isAudio,ev as isPatch,ex 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};
801
850
  //# sourceMappingURL=module.js.map