@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/cjs/components.js +61 -12
- package/dist/cjs/components.js.map +1 -1
- package/dist/esm/components.js +75 -26
- package/dist/esm/components.js.map +1 -1
- package/dist/main.js +65 -16
- package/dist/main.js.map +1 -1
- package/dist/module.js +74 -25
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
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)``,
|
|
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
|
-
`),
|
|
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(
|
|
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
|
-
`,
|
|
86
|
+
`,eS=c(b)`
|
|
87
87
|
position: absolute;
|
|
88
88
|
top: 0.2rem;
|
|
89
89
|
right: 0.2rem;
|
|
90
90
|
cursor: pointer;
|
|
91
|
-
`;var
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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(
|
|
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]),
|
|
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
|
-
`,
|
|
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(
|
|
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:
|
|
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 ### 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 ### 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),
|
|
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,[
|
|
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),
|
|
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
|
-
`),
|
|
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
|
-
`),
|
|
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(
|
|
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:
|
|
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
|
-
`}),
|
|
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
|