@web-noise/core 0.0.12-fix → 0.0.12

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 ADDED
@@ -0,0 +1,742 @@
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 s,useTheme as d}from"@emotion/react";import c from"@emotion/styled";import{nanoid as p}from"nanoid";import{useState as h,useEffect as g,useMemo as u,useCallback as m,useRef as f}from"react";import{FaPlus as v}from"react-icons/fa6";import{MdClose as y,MdDragHandle as b,MdSettings as w,MdInfoOutline as x}from"react-icons/md";import{registerFetcher as C}from"@web-noise/fetch";import $,{getConnectedEdges as k,addEdge as P,applyNodeChanges as N,applyEdgeChanges as z,useOnViewportChange as j,Background as E,BackgroundVariant as F,MiniMap as S,Controls as T,ReactFlowProvider as D,useReactFlow as M,Position as A,Handle as O,ControlButton as _,getBezierPath as I}from"reactflow";import{create as L}from"zustand";import{setAudioNodeTypes as H,createPatch as R}from"@web-noise/patch";import{reverse as W,patch as B,create as G}from"jsondiffpatch";import{injectGlobal as V}from"@emotion/css";import"reactflow/dist/style.css";import{useContextMenu as U,Item as J,Menu as X,Separator as Y}from"react-contexify";import"react-contexify/dist/ReactContexify.css";import q from"js-file-download";import K from"hotkeys-js";import{createPortal as Q}from"react-dom";import{FileDrop as Z}from"react-file-drop";import{FaFileUpload as ee,FaQuestion as eo,FaVolumeOff as et,FaMap as er,FaRegMap as en}from"react-icons/fa";import{Resizable as ei}from"re-resizable";import el from"react-grid-layout";import"react-grid-layout/css/styles.css";import{AiFillLock as ea,AiFillUnlock as es}from"react-icons/ai";import{RxDashboard as ed}from"react-icons/rx";import ec from"react-modern-drawer";import"react-modern-drawer/dist/index.css";import{marked as ep}from"marked";let eh="web-noise-drag-handle",eg=`.${eh}`,eu=10;(eb=ew||(ew={})).Gate="gate",eb.Number="number",eb.Audio="audio",eb.Any="any";let em=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,ey=e=>"audio"===e.type;var eb,ew,ex=L((e=(...e)=>{let[o,t]=e;return{...((e,o)=>({nodes:[],edges:[],onNodesChange:o=>{e(({nodes:e})=>({nodes:N(o,e).map(e=>({dragHandle:eg,...e}))}))},onEdgesChange:o=>{e(({edges:e})=>({edges:z(o,e)}))},onConnect:o=>{e(({edges:e})=>({edges:P(o,e)}))},addNode:o=>{e(({nodes:e})=>({nodes:e.concat(o)}))},setNodes:o=>{e({nodes:o})},setEdges:o=>{e({edges:o})},setNodesAndEdges:({nodes:o,edges:t})=>{e({nodes:o,edges:t})},getNodesAndEdges:()=>{let{nodes:e,edges:t}=o();return{nodes:e,edges:t}},clearElements:()=>{e({nodes:[],edges:[]})},getNode:e=>{let{nodes:t}=o();return t.find(o=>o.id===e)||null},updateNodeData:(o,t)=>{e(({nodes:e})=>({nodes:e.map(e=>e.id===o?{...e,data:{...e.data,...t}}:e)}))},nodeTypes:{},setNodeTypes:o=>e({nodeTypes:o})}))(...e),...((e,o)=>({history:{maxHistoryLength:5,buffer:[],pointer:0,skipCollect:!1,push:t=>{let{history:r}=o(),{maxHistoryLength:n,skipCollect:i}=r;if(i)return void e({history:{...r,skipCollect:!1}});e(({history:e})=>{if(!e)return{};let{buffer:o,pointer:r}=e,i=o.slice(Math.max(r-n+1,0),r);return{history:{...e,buffer:[...i,t],pointer:Math.min(r+1,n)}}})},back:()=>{let{nodes:t,edges:r,controlPanel:n,history:i}=o(),{buffer:l,pointer:a}=i,s=l[a-1];if(!s)return;let d=W(s);d&&e({...B(em({nodes:t,edges:r,controlPanel:n}),d),history:{...i,pointer:a-1,skipCollect:!0}})},forward:()=>{let{nodes:t,edges:r,controlPanel:n,history:i}=o(),{buffer:l,pointer:a}=i,s=l[a];s&&e({...B(em({nodes:t,edges:r,controlPanel:n}),s),history:{...i,pointer:a+1,skipCollect:!0}})},clear:()=>{let{history:t}=o();e({history:{...t,buffer:[],pointer:0,skipCollect:!0}})}}}))(...e),...((e,o)=>({patch:R(),nodesState:{}}))(...e),...((e,o)=>({project:{files:[]},setProject(o){e({project:o,currentFileIndex:0})},getProject:()=>o().project,pullEditorChanges(){let{getEditorState:e,currentFileIndex:t,updateFileContent:r,project:n}=o(),i=n.files[t];ey(i)||r(t,{...i,file:e()})},syncEditorWithCurrentFile:()=>{let{currentFileIndex:e,setEditorState:t,project:r}=o(),n=r.files[e];if("audio"===n.type)return void console.log("audio file. skipping");t(n.file)},currentFileIndex:0,setCurrentFileIndex(t){let{currentFileIndex:r}=o();t!==r&&e({currentFileIndex:t})},updateFileContent(t,r){let{project:n}=o();e({project:{...n,files:n.files.map((e,o)=>o===t?{...e,...r}:e)}})},updateFileName(t,r){let{project:n}=o();e({project:{...n,files:n.files.map((e,o)=>o===t?{...e,name:r}:e)}})},addFile(t){let{project:r}=o(),n=[...r.files,t];e({project:{...r,files:n}})},deleteFile:t=>{let{project:r,currentFileIndex:n}=o();e({project:{...r,files:r.files.filter((e,o)=>t!==o)}}),t<=n&&e({currentFileIndex:n-1})}}))(...e),setGraph:async({nodes:e,edges:o})=>{let{patch:r,createNodes:n,createEdges:i,setNodesAndEdges:l,nodes:a,edges:s}=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(),s=e.map(({id:e})=>e),d=[...e,...n.filter(({parentNode:e})=>e&&s.includes(e))];a(d),l(k(d,r)),i(d);let c=d.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(P(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}),{});H(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:s}=t(),{nodes:d,edges:c}=n;if(!d.length)return;o({nodes:a.map(e=>({...e,selected:!1}))});let p=d.reduce((e,o)=>!e||o.position.x<e.position.x&&o.position.y<e.position.y?o:e),h=p.position.x-e,g=p.position.y-r,{nodes:u,mapping:m}=d.reduce((e,o)=>{let t=(e=>{let o=+new Date+Math.floor(1e3*Math.random());return e?.type?`${e.type}-${o}`:o.toString()})(o);return{nodes:[...e.nodes,{...o,id:t,position:{x:o.position.x-h,y:o.position.y-g},selected:!0}],mapping:{...e.mapping,[o.id]:t}}},{nodes:[],mapping:{}});i(u);let f=c.map(e=>{let o=m[e.source]||e.source,t=m[e.target]||e.target;return{...e,id:e.id.replace(e.source,o).replace(e.target,t),source:o,target:t,selected:!0}});l([...s.map(e=>({...e,selected:!1})),...f])},getControlPanelNode:e=>{let{nodesConfiguration:o}=t(),{type:r}=e;if(!r)return null;let n=o[r]?.controlPanelNode;return n||(console.error(`could not find node for type ${r}`),null)},controlPanel:{show:!0,nodes:[],size:{width:200,height:100}},showControlPanel:()=>o(({controlPanel:e})=>({controlPanel:{...e,show:!0}})),hideControlPanel:()=>o(({controlPanel:e})=>({controlPanel:{...e,show:!1}})),addNodeToControlPanel:e=>{let{nodesConfiguration:r}=t(),n=e.type?r[e.type]?.defaultConfig:{},{height:i}=n?.size||{},l={id:e.id,...i?{height:i/eu}:{}};o(({controlPanel:e})=>({controlPanel:{...e,nodes:[...e.nodes,l]}}))},removeNodeFromControlPanel:e=>t().removeNodesFromControlPanel([e]),removeNodesFromControlPanel:e=>{let t=e.map(({id:e})=>e);o(({controlPanel:e})=>{let o=e.nodes.filter(({id:e})=>!t.includes(e));return{controlPanel:{...e,nodes:o}}})},setControlPanelNodes:e=>{o(({controlPanel:o})=>({controlPanel:{...o,nodes:e}}))},setControlPanelSize:e=>{o(({controlPanel:o})=>({controlPanel:{...o,size:e}}))},viewport:{x:0,y:0,zoom:1},setViewport:e=>o({viewport:e})}},o=(o,t,r)=>{let n=((e,o)=>{let t,r=G({propertyFilter:(e,o)=>!!(o.parent?.parent?.childName==="controlPanel"||["data","position","controlPanel"].includes(o.parent?.childName))||["controlPanel","size","edges","nodes","data","label","config","values","position","x","y"].includes(e)}),n=o();return(e,i)=>{e.currentFileIndex!==i.currentFileIndex&&o().history.clear(),clearTimeout(t),n||(n=i),t=setTimeout(()=>{let t=r.diff(n,e);n=null,t&&o().history.push(t)},500)}})(0,t);return r.subscribe(n),e((...e)=>o(...e),t,r)},(e,t,r)=>{r.subscribe(async(e,o)=>{});let n=new Set,i={...t(),nodes:[],edges:[]};return o(async(...o)=>{let r=t(),[l]=o,a={...i,..."function"==typeof l?l({...i}):l},s=ef(i.nodes,a.nodes),d=ef(i.edges,a.edges);i=a;let c=s.added,p=d.added,h=d.removed,g=s.removed,{patch:u}=r;if(c.length){let e=u.registerAudioNodes(c);n.add(e),await e,n.delete(e)}if(!(p.length||h.length||g.length))return void e(...o);if(n.size)try{await Promise.all([...n.values()])}catch(e){console.log("some error",e)}p.length&&u.registerAudioConnections(p),h.length&&u.unregisterAudioConnections(h),g.length&&u.unregisterAudioNodes(g),e(...o)},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}};V`
2
+ .react-flow {
3
+ .react-flow__pane {
4
+ /* background: rgb(106 106 106); */
5
+ /* background: "white"; */
6
+ // background: #292d39;
7
+ background: ${eC.colors.elevation3};
8
+ }
9
+
10
+ .react-flow__background {
11
+ /* background: #efefef; */
12
+ stroke: white;
13
+ }
14
+
15
+ .react-flow__node-default {
16
+ background: #292d39;
17
+ color: white;
18
+ border: none;
19
+ /* background: transparent; */
20
+ }
21
+
22
+ .react-flow__node {
23
+ padding: 0;
24
+ width: auto;
25
+ }
26
+
27
+ .react-flow__edge-path {
28
+ stroke: ${eC.colors.accent2};
29
+ }
30
+
31
+ .react-flow__node.selected {
32
+ border: 1px solid ${eC.colors.accent2};
33
+ box-shadow: 0 0 0 0.5px #${eC.colors.accent2};
34
+ }
35
+
36
+ .react-flow__node-default.selected, .react-flow__node-default.selected:hover {
37
+ box-shadow: 0 0 0 0.5px #${eC.colors.accent2};
38
+ }
39
+
40
+ /* .react-flow__minimap-mask {
41
+ fill: ${eC.colors.elevation1}
42
+ }
43
+
44
+ .react-flow__minimap-node {
45
+ fill:${eC.colors.accent2}
46
+ } */
47
+ }
48
+
49
+ `;var e$=()=>d();let ek=c(J)``,eP=c(X)`
50
+ background: ${({colors:e})=>e.elevation2};
51
+ padding: 0;
52
+ border-radius: 0;
53
+
54
+ .react-contexify__item__content {
55
+ color: ${({colors:e})=>e.whitePrimary};
56
+ }
57
+
58
+ .react-contexify__separator {
59
+ background-color: ${({colors:e})=>e.elevation1};
60
+ margin: 0;
61
+ }
62
+ `,eN="editor-edge-menu";var ez=()=>{let e=e$(),o=ex(e=>e.removeEdges);return t(n,{children:t(eP,{id:eN,animation:!1,colors:e.colors,children:t(ek,{onClick:e=>o([e.props.edge]),children:"Delete Edge (DEL)"})})})};let ej=c.div`
63
+ position: fixed;
64
+ z-index: ${({theme:e})=>e.zIndex.modal};
65
+ width: 100%;
66
+ height: 100%;
67
+ top: 0;
68
+ left: 0;
69
+ background: ${({theme:e})=>e.colors.elevation3}cc;
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ `,eE=c.div`
74
+ background: ${({theme:e})=>e.colors.elevation2};
75
+ box-shadow: 1px 1px 1px 1px ${({theme:e})=>e.colors.elevation1};
76
+ color: white;
77
+ width: 70%;
78
+ height: 80%;
79
+ overflow-y: scroll;
80
+ position: relative;
81
+ `,eF=c(y)`
82
+ position: absolute;
83
+ top: 0.2rem;
84
+ right: 0.2rem;
85
+ cursor: pointer;
86
+ `;var eS=({children:e,onClose:o,...n})=>{let i=e$();return g(()=>{let e=e=>{"Escape"===e.key&&o?.()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[o]),Q(t(ej,{theme:i,onClick:o,children:r(eE,{...n,onClick:e=>{e.stopPropagation()},theme:i,children:[e,t(eF,{theme:i,onClick:o})]})}),document.body)};let eT=i(c.div`
87
+ width: 100%;
88
+ `),eD=i(c.div`
89
+ padding: 1rem;
90
+ display: flex;
91
+ flex-direction: column;
92
+ gap: 1rem;
93
+ `),eM=i(c.ul`
94
+ list-style: none;
95
+ margin: 0;
96
+ padding: 0;
97
+ padding-bottom: 10px;
98
+ columns: 2;
99
+
100
+ li {
101
+ display: flex;
102
+ flex-direction: column;
103
+ gap: 8px;
104
+ padding: 4px;
105
+ overflow: hidden;
106
+ border: 1px solid ${({theme:e})=>e.colors.elevation3};
107
+ border-radius: 4px;
108
+ margin-bottom: 0.5rem;
109
+ &:hover {
110
+ border-color: ${({theme:e})=>e.colors.accent2};
111
+ cursor: pointer;
112
+ }
113
+ }
114
+ `),eA=i(c.div`
115
+ white-space: nowrap;
116
+ overflow: hidden;
117
+ text-overflow: ellipsis;
118
+ `),eO=i(c.div`
119
+ color: ${({theme:e})=>e.colors.highlight2};
120
+ font-size: 12px;
121
+ `),e_=i(c.div`
122
+ display: flex;
123
+ gap: 0.2rem;
124
+ flex-wrap: wrap;
125
+ `),eI=i(c.span`
126
+ cursor: pointer;
127
+ font-size: 10px;
128
+ background: ${({theme:e,isActive:o})=>o?e.colors.highlight1:e.colors.elevation3};
129
+ border-radius: 2px;
130
+ padding: 0.1rem 0.2rem;
131
+ border: 1px solid;
132
+ border-color: ${({theme:e})=>e.colors.elevation2};
133
+ &:hover {
134
+ border-color: ${({theme:e})=>e.colors.accent2};
135
+ }
136
+ `),eL=i(c.div``),eH=i(c.div`
137
+ font-size: 1.1rem;
138
+ padding: 0.25rem 0;
139
+ color: ${({theme:e})=>e.colors.highlight3};
140
+ `),eR=i(c.div`
141
+ color: ${({theme:e})=>e.colors.highlight2};
142
+ font-size: 12px;
143
+ `);var eW=({onComponentClick:e,filters:{plugin:o,search:n="",tags:i},onTagClick:l})=>{let a=ex(({plugins:e})=>e),s=u(()=>o?a.filter(({name:e})=>e===o):a,[a,o]);return t(eT,{children:u(()=>n||i?.length?s.map(e=>({...e,components:i?.length?e.components.filter(e=>i?.every(o=>e.tags?.includes(o))):e.components})).map(e=>({...e,components:e.components.filter(({type:e,name:o})=>e.toLocaleLowerCase().includes(n.toLocaleLowerCase())||o?.toLocaleLowerCase().includes(n.toLocaleLowerCase()))})):s,[s,n,i]).map(({name:o,description:n,components:a},s)=>a.length?r(eD,{children:[r(eL,{children:[t(eH,{children:o}),t(eR,{children:n})]}),t(eM,{children:a.sort((e,o)=>e.type.toLowerCase()>o.type.toLowerCase()?1:-1).map((o,n)=>r("li",{onClick:()=>e(o),children:[t(eA,{children:o.name||o.type}),o.description&&t(eO,{children:o.description}),t(e_,{children:o.tags?.map((e,o)=>t(eI,{isActive:i?.includes(e),onClickCapture:o=>{o.stopPropagation(),l(e)},children:e},o))})]},n))})]},s):null)})};let eB=c.div`
144
+ display: flex;
145
+ position: relative;
146
+ `,eG=c.input`
147
+ padding-right: 2rem;
148
+ padding-left: 0.3rem;
149
+ width: 100%;
150
+ appearance: textfield;
151
+ font-size: inherit;
152
+ background: none;
153
+ border: none;
154
+ color: var(--leva-colors-highlight1);
155
+ font-family: var(--leva-fonts-mono);
156
+ cursor: inherit;
157
+ text-overflow: ellipsis;
158
+ outline: none;
159
+ appearance: textfield;
160
+ cursor: auto;
161
+ background-color: ${({theme:e})=>e.colors.elevation3};
162
+ border-radius: 0.1rem;
163
+ height: 2rem;
164
+ color: ${({theme:e})=>e.colors.highlight2};
165
+
166
+ &:focus,
167
+ &:hover {
168
+ box-shadow: 0 0 0 var(--leva-borderWidths-focus)
169
+ ${({theme:e})=>e.colors.accent2};
170
+ color: ${({theme:e})=>e.colors.whitePrimary};
171
+ }
172
+ &::-webkit-inner-spin-button,
173
+ &::-webkit-outer-spin-button {
174
+ -webkit-appearance: none;
175
+ margin-right: 1rem;
176
+ }
177
+ `,eV=c.div`
178
+ display: flex;
179
+ flex-direction: column;
180
+ padding: 0.6rem;
181
+ gap: 0.6rem;
182
+ border-right: 1px solid ${({theme:e})=>e.colors.elevation3};
183
+ min-width: 14rem;
184
+ `,eU=c.label`
185
+ user-select: none;
186
+ input {
187
+ display: none;
188
+ }
189
+ input:checked + span {
190
+ color: ${({theme:e})=>e.colors.accent2};
191
+ }
192
+ &:hover {
193
+ color: ${({theme:e})=>e.colors.accent3};
194
+ cursor: pointer;
195
+ }
196
+ `,eJ=i(c(eI)`
197
+ font-size: 12px;
198
+ padding: 0.2rem 0.4rem;
199
+ &:hover {
200
+ }
201
+ &::after {
202
+ content: "×";
203
+ margin-left: 0.4rem;
204
+ }
205
+ `);var eX=({onChange:e,value:o})=>{let n=e$(),i=ex(({plugins:e})=>e),l=f(null);return g(()=>{l.current&&l.current.focus()},[l]),r(eV,{theme:n,children:[t(eB,{children:t(eG,{ref:l,theme:n,value:o.search||"",placeholder:"search...",onChange:t=>e({...o,search:t.target.value})})}),t(e_,{children:o.tags?.map((r,n)=>t(eJ,{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(eU,{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 eY=c.div`
206
+ height: 100%;
207
+ width: 100%;
208
+ display: flex;
209
+ gap: 1rem;
210
+ `,eq=c.div`
211
+ flex-grow: 1;
212
+ height: 100%;
213
+ overflow-y: scroll;
214
+ `;var eK=({isOpen:e,closeMenu:o,mousePosition:n})=>{let i=e$(),{screenToFlowPosition:l}=M(),{createNode:a}=ex(({createNode:e})=>({createNode:e})),[s,d]=h({}),c=m(({type:e})=>{let{x:t,y:r}=l(n);a({id:`${e}-${+new Date}`,type:e,data:{label:e},position:{x:t,y:r},targetPosition:A.Left,sourcePosition:A.Right}),o()},[n,l,a,o,n]);return e?t(eS,{onClose:()=>{o(),d({})},children:r(eY,{theme:i,children:[t(eX,{onChange:d,value:s}),t(eq,{theme:i,children:t(eW,{filters:s,onTagClick:e=>{d(o=>({...o,tags:o.tags?.includes(e)?o.tags.filter(o=>o!==e):[...o.tags||[],e]}))},onComponentClick:e=>{c(e),d({})}})})]})}):null};let eQ=c.div`
215
+ display: flex;
216
+ align-items: center;
217
+ justify-content: center;
218
+ height: 100%;
219
+ width: 100%;
220
+
221
+ .drop-zone-wrapper {
222
+ width: 80%;
223
+ height: 80%;
224
+ }
225
+
226
+ .drop-zone {
227
+ height: 100%;
228
+ width: 100%;
229
+ border-style: dashed;
230
+ border-width: 2px;
231
+ border-color: ${({theme:e})=>e.colors.highlight2};
232
+ opacity: 0.5;
233
+ cursor: pointer;
234
+ }
235
+
236
+ .drop-zone:hover,
237
+ .drop-zone-drag-over {
238
+ opacity: 1;
239
+ }
240
+ `,eZ=c.div`
241
+ display: flex;
242
+ flex-wrap: wrap;
243
+ align-items: center;
244
+ justify-content: center;
245
+ height: 100%;
246
+ width: 100%;
247
+ `,e0=c(ee)`
248
+ width: 100%;
249
+ height: 8rem;
250
+ `,e1=c.div`
251
+ font-size: 2rem;
252
+ `;var e2=({isOpen:e,closeMenu:o})=>{let n=e$(),i=ex(({setGraph:e})=>e),l=ex(e=>e.setEditorState),a=f(null),s=m(e=>{let[t]=e||[];t.text().then(JSON.parse).then(e=>{l(e),o()}).catch(console.error)},[i,o]);return e?t(eS,{onClose:o,children:r(eQ,{theme:n,children:[t("input",{onChange:({target:{files:e}})=>s(e),ref:a,type:"file",className:"hidden",style:{display:"none"},accept:".json"}),t(Z,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{a.current?.click()},onDrop:e=>s(e),children:r(eZ,{theme:n,children:[t(e0,{}),t(e1,{children:"click or drop file here"})]})})]})}):null};let e3=c.div`
253
+ display: flex;
254
+ align-items: center;
255
+ justify-content: center;
256
+ height: 100%;
257
+ width: 100%;
258
+
259
+ .drop-zone-wrapper {
260
+ width: 80%;
261
+ height: 80%;
262
+ }
263
+
264
+ .drop-zone {
265
+ height: 100%;
266
+ width: 100%;
267
+ border-style: dashed;
268
+ border-width: 2px;
269
+ border-color: ${({theme:e})=>e.colors.highlight2};
270
+ opacity: 0.5;
271
+ cursor: pointer;
272
+ }
273
+
274
+ .drop-zone:hover,
275
+ .drop-zone-drag-over {
276
+ opacity: 1;
277
+ }
278
+ `,e8=c.div`
279
+ display: flex;
280
+ flex-wrap: wrap;
281
+ align-items: center;
282
+ justify-content: center;
283
+ height: 100%;
284
+ width: 100%;
285
+ `,e9=c(ee)`
286
+ width: 100%;
287
+ height: 8rem;
288
+ `,e5=c.div`
289
+ font-size: 2rem;
290
+ `;var e7=({isOpen:e,closeMenu:o})=>{let n=e$(),i=ex(e=>e.setProject),l=f(null),a=m(e=>{let[t]=e||[];t.text().then(JSON.parse).then(e=>{i(e),o()}).catch(console.error)},[i,o]);return e?t(eS,{onClose:o,children:r(e3,{theme:n,children:[t("input",{onChange:({target:{files:e}})=>a(e),ref:l,type:"file",className:"hidden",style:{display:"none"},accept:".json"}),t(Z,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{l.current?.click()},onDrop:e=>a(e),children:r(e8,{theme:n,children:[t(e9,{}),t(e5,{children:"click or drop file here"})]})})]})}):null};let e6=e=>new Promise((o,t)=>{let r=new FileReader;r.readAsDataURL(e),r.onload=()=>o(r.result?.toString()||""),r.onerror=e=>t(e)}),e4=c.div`
291
+ display: flex;
292
+ align-items: center;
293
+ justify-content: center;
294
+ height: 100%;
295
+ width: 100%;
296
+
297
+ .drop-zone-wrapper {
298
+ width: 80%;
299
+ height: 80%;
300
+ }
301
+
302
+ .drop-zone {
303
+ height: 100%;
304
+ width: 100%;
305
+ border-style: dashed;
306
+ border-width: 2px;
307
+ border-color: ${({theme:e})=>e.colors.highlight2};
308
+ opacity: 0.5;
309
+ cursor: pointer;
310
+ }
311
+
312
+ .drop-zone:hover,
313
+ .drop-zone-drag-over {
314
+ opacity: 1;
315
+ }
316
+ `,oe=c.div`
317
+ display: flex;
318
+ flex-wrap: wrap;
319
+ align-items: center;
320
+ justify-content: center;
321
+ height: 100%;
322
+ width: 100%;
323
+ `,oo=c(ee)`
324
+ width: 100%;
325
+ height: 8rem;
326
+ `,ot=c.div`
327
+ font-size: 2rem;
328
+ `;var or=({isOpen:e,closeMenu:o})=>{let n=e$();ex(({setGraph:e})=>e),ex(e=>e.setEditorState);let i=ex(e=>e.addFile),l=f(null),a=m(async e=>{let[t]=e||[],r=await e6(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(e4,{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(Z,{className:"drop-zone-wrapper",targetClassName:"drop-zone",draggingOverTargetClassName:"drop-zone-drag-over",onTargetClick:()=>{l.current?.click()},onDrop:e=>a(e),children:r(oe,{theme:n,children:[t(oo,{}),t(ot,{children:"click or drop file here"})]})})]})}):null};let on="editor-menu";var oi=({editorContextMenu:e=[]})=>{let o=e$(),[i,l]=h({x:0,y:0}),[a,s]=h(!1),[d,c]=h(!1),[p,f]=h(!1),[v,y]=h(!1),b=m((e,o)=>{l({x:e,y:o}),s(!0)},[s]),w=ex(e=>e.pasteBuffer),{screenToFlowPosition:x}=M(),C=m(e=>{let{x:o,y:t}=x(e);w(o,t)},[s,x]),$=ex(({clearGraph:e})=>e),k=ex(e=>e.getEditorState),P=ex(e=>e.getProject),N=m(()=>{$()},[$]),z=ex(e=>e.toggleHelp),j=ex(e=>e.history.back),E=ex(e=>e.history.forward),F=ex(e=>e.history.pointer),S=ex(e=>e.history.buffer),T=ex(e=>e.copySelectedItems),D=ex(e=>e.nodes),A=u(()=>D.filter(({selected:e})=>e),[D]),O=ex(e=>e.copyBuffer),_=M(),I=m(()=>{q(JSON.stringify({...k()},null,2),"web-noise-patch.json")},[k,_]),L=m(()=>{q(JSON.stringify({...P()},null,2),"web-noise-project.json")},[k,_]);return g(()=>(K("command+shift+a",()=>(b(200,50),!1)),K("shift+/",()=>(z(),!1)),K("command+z",()=>(j(),!1)),K("command+shift+z",()=>(E(),!1)),K("command+c",()=>(T(),!1)),K("command+v",()=>(C({x:200,y:50}),!1)),()=>{K.unbind()}),[b,C]),r(n,{children:[t(eK,{isOpen:a,closeMenu:()=>s(!1),mousePosition:i}),t(e2,{isOpen:d,closeMenu:()=>c(!1)}),t(e7,{isOpen:p,closeMenu:()=>f(!1)}),t(or,{isOpen:v,closeMenu:()=>y(!1)}),r(eP,{id:on,animation:!1,colors:o.colors,children:[t(ek,{onClick:({triggerEvent:{clientX:e,clientY:o}})=>b(e,o),children:"Add Node (⌘+⇧+A)"}),t(Y,{}),t(ek,{onClick:N,children:"Delete All"}),t(Y,{}),t(ek,{onClick:I,children:"Download patch"}),t(ek,{onClick:()=>c(!0),children:"Upload patch"}),t(Y,{}),t(ek,{onClick:L,children:"Download project"}),t(ek,{onClick:()=>f(!0),children:"Upload project"}),t(Y,{}),t(ek,{onClick:()=>y(!0),children:"Upload Audio File"}),t(Y,{}),t(ek,{disabled:0===F,onClick:j,children:"Undo (⌘+z)"}),t(ek,{disabled:F===S.length,onClick:E,children:"Redo (⌘+⇧+Z)"}),t(Y,{}),t(ek,{disabled:!A.length,onClick:T,children:"Copy Selected (⌘+c)"}),t(ek,{disabled:!O.nodes.length,onClick:({triggerEvent:{clientX:e,clientY:o}})=>C({x:e,y:o}),children:"Paste (⌘+v)"}),t(Y,{}),e.map((e,o)=>t(ek,{children:e},o)),t(Y,{}),t(ek,{onClick:z,children:"Help (⇧+?)"})]})]})};let ol="editor-node-menu";var oa=e=>{let o=e$(),i=ex(e=>e.removeNodes),l=ex(e=>e.addNodeToControlPanel),a=ex(e=>e.removeNodeFromControlPanel),s=ex(e=>e.copy),d=ex(e=>e.nodesConfiguration),c=ex(e=>e.controlPanel.nodes),p=m(({props:e})=>!!e?.node.type&&!!c.find(({id:o})=>o===e.node.id),[c]),h=m(({props:e})=>{if(!e?.node.type)return!1;let o=d[e.node.type];return!!o?.controlPanelNode},[d]);return t(n,{children:r(eP,{id:ol,animation:!1,colors:o.colors,children:[t(ek,{onClick:e=>i([e.props.node]),children:"Delete Node (DEL)"}),t(ek,{hidden:(...e)=>!h(...e)||p(...e),onClick:e=>l(e.props.node),children:"Add To Control Panel"}),t(ek,{hidden:(...e)=>!h(...e)||!p(...e),onClick:e=>a(e.props.node),children:"Remove From Control Panel"}),t(ek,{onClick:e=>s({nodes:[e.props.node],edges:[]}),children:"Copy (⌘+c)"})]})})},os=e=>ex(({patch:e})=>e).audioNodes.get(e),od=e=>{let o=ex(({updateNodeData:e})=>e),t=m(t=>o(e,{values:t}),[e,o]);return{updateNodeValues:t,updateNodeConfig:m(t=>o(e,{config:t}),[e,o]),updateNodeLabel:m(t=>o(e,{label:t}),[e,o])}};let oc=c.input`
329
+ width: 100%;
330
+ background: none;
331
+ border: none;
332
+ text-align: center;
333
+ color: var(--leva-colors-highlight1);
334
+ font-family: var(--leva-fonts-mono);
335
+ font-size: var(--leva-fontSizes-root);
336
+ cursor: inherit;
337
+ text-overflow: ellipsis;
338
+ outline: none;
339
+
340
+ &:focus {
341
+ box-shadow: 0 0 0 green var(--leva-colors-accent2);
342
+ }
343
+ &:focus-within {
344
+ box-shadow: 0 0 0 green var(--leva-colors-accent2);
345
+ }
346
+ &:focus-vissible {
347
+ box-shadow: 0 0 0 green var(--leva-colors-accent2);
348
+ }
349
+ &:not([readonly]):focus {
350
+ color: #fff;
351
+ appearance: none;
352
+ cursor: auto;
353
+ background-color: var(--leva-colors-elevation2);
354
+ padding: 0.3rem;
355
+ border-radius: 0.2rem;
356
+ }
357
+ `;var op=({onChange:e,value:o="",className:r})=>{let n=f(null),[i,l]=h(!1),a=m(e=>{e.target?.select(),l(!0)},[l]),s=m(()=>{window.getSelection()?.collapseToEnd(),l(!1)},[l]),d=m(()=>{s(),n.current&&e(n.current.value)},[n,s,e]),c=m(()=>{s(),n.current&&o&&(n.current.value=o)},[n,s,o]);return g(()=>{n.current&&(n.current.value=o)},[o,n]),t(oc,{ref:n,type:"text",readOnly:!i,onDoubleClick:e=>a(e),onBlur:d,onKeyDown:e=>{switch(e.key){case"Escape":c();break;case"Enter":d()}},className:r})};let oh=i(c.div`
358
+ height: 100%;
359
+ width: 100%;
360
+ overflow: scroll;
361
+ padding: 0.6rem;
362
+ box-sizing: border-box;
363
+
364
+ hr {
365
+ border: none;
366
+ border-bottom: 1px solid ${({theme:e})=>e.colors.elevation3};
367
+ }
368
+
369
+ code {
370
+ background-color: ${({theme:e})=>e.colors.elevation3};
371
+ color: ${({theme:e})=>e.colors.highlight3};
372
+ font-family:
373
+ source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;
374
+ }
375
+
376
+ pre {
377
+ background-color: ${({theme:e})=>e.colors.elevation3};
378
+ padding: 0.2rem 0.3rem;
379
+ border-radius: 1px;
380
+ }
381
+
382
+ a {
383
+ color: ${({theme:e})=>e.colors.accent1};
384
+ }
385
+ `);var og=({isOpen:e,onClose:o,type:r,node:n})=>{let{info:i,portsDescription:l}=ex(e=>e.nodesConfiguration[r]),a=u(()=>{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(oh,{dangerouslySetInnerHTML:{__html:ep((i||"")+"\n\n"+a||"")}})}):null};let ou=c.div`
386
+ background-color: var(--leva-colors-elevation1);
387
+ `,om=c(ou)`
388
+ padding: 2rem 5rem;
389
+ `,of=c(ou)`
390
+ padding: 1rem 2rem;
391
+ `,ov=c(w)`
392
+ font-size: 1.2rem;
393
+ opacity: 0.4;
394
+ width: 1rem;
395
+ &:hover {
396
+ opacity: 1;
397
+ cursor: pointer;
398
+ }
399
+ `,oy=c(x)`
400
+ font-size: 1.2rem;
401
+ opacity: 0.4;
402
+ width: 1rem;
403
+ &:hover {
404
+ opacity: 1;
405
+ cursor: pointer;
406
+ }
407
+ `,ob=c.div`
408
+ position: relative;
409
+ font-family: var(--leva-fonts-mono);
410
+ font-size: var(--leva-fontSizes-root);
411
+ background-color: var(--leva-colors-elevation1);
412
+ `,ow=c(ob)`
413
+ display: flex;
414
+ height: var(--leva-sizes-titleBarHeight);
415
+ touch-action: none;
416
+ align-items: center;
417
+ justify-content: center;
418
+ flex: 1 1 0%;
419
+ color: var(--leva-colors-highlight1);
420
+ padding: 0 0.4rem;
421
+ gap: 0.3rem;
422
+ `,ox=c(ob)(({theme:e})=>`
423
+ display: grid;
424
+ grid-template-areas: "inputs outputs";
425
+ background: ${e.colors.elevation2};
426
+ border-bottom: 1px solid ${e.colors.elevation1};
427
+ color: ${e.colors.highlight3};
428
+ font-size: 0.6rem;
429
+ `),oC=c.div`
430
+ grid-area: inputs;
431
+ text-align: left;
432
+ `,o$=c.div`
433
+ grid-area: outputs;
434
+ text-align: right;
435
+ `,ok=c.div`
436
+ position: relative;
437
+ padding: 5px 10px;
438
+ `,oP={[ew.Audio]:"#4ade80",[ew.Gate]:"#c084fc",[ew.Number]:"#38bdf8",[ew.Any]:"#ffffff"},oN=i(c(O,{shouldForwardProp:e=>"portType"!==e})`
439
+ --port-color: ${e=>{if(!e.portType)return e.theme.colors.highlight2;if(!Array.isArray(e.portType))return oP[e.portType];{let o=e.portType.map(e=>oP[e]);return`linear-gradient(0.25turn, ${o.join(", ")});`}}};
440
+ border-color: var(--port-color);
441
+ background: var(--port-color);
442
+ box-shadow: 0px 0px 0px 1px ${({theme:e})=>e.colors.elevation2} inset;
443
+ `),oz=i(c(oN)`
444
+ left: -3px;
445
+ `),oj=({...e})=>t(oz,{...e,type:"target",position:A.Left}),oE=i(c(oN)`
446
+ right: -3px;
447
+ `),oF=e=>t(oE,{...e,type:"source",position:A.Right}),oS=({className:e,...o})=>t(ow,{...o,className:[e,eh].join(" ")}),oT=e=>ex(o=>o.nodesConfiguration[e]),oD=e=>{let{id:o,children:n,selected:i,...l}=e,a=e$(),s=ex(({getNode:e})=>e),d=ex(e=>e.nodesConfiguration),[c,p]=h(!1),{info:g}=oT(e.type),m=u(()=>d[e.type].resizable??!1,[d,e.type]),{updateNodeLabel:f,updateNodeConfig:v}=od(o),{data:y}=s(o)||{},b=os(o),{ConfigNode:w}=(e=>{let{configNode:o}=oT(e);return{ConfigNode:o}})(l.type),[x,C]=h(!1);if(!b)return t(om,{className:eh,children:"can't find audio node"});if(b.loading)return t(om,{className:eh,children:"loading"});if(b.error)return r(of,{className:eh,children:["error: ",b.error.toString()]});if(!b.node)return t(om,{className:eh,children:"can't find audio node"});let $=y?.config?.size,{node:{inputs:k,outputs:P}}=b;return r(ou,{children:[r(oS,{children:[g&&t(oy,{onClickCapture:()=>p(!0)}),t(op,{value:y?.label??"No Name",onChange:f}),w&&t(ov,{onClickCapture:()=>C(e=>!e)})]}),r(ox,{theme:a,children:[t(oC,{children:k?Object.keys(k).map((e,o)=>r(ok,{children:[t(oj,{id:e,portType:k[e].type}),t("span",{children:e})]},o)):null}),t(o$,{children:P?Object.keys(P).map((e,o)=>r(ok,{children:[t(oF,{id:e,portType:P[e].type}),t("span",{children:e})]},o)):null})]}),w&&x&&i?t(w,{...e}):m?t(ei,{size:$,minWidth:180,minHeight:30,enable:{bottom:!0,bottomRight:!0,right:!0},onResizeStop:(e,o,t,r)=>{let n=$?{width:$.width+r.width,height:$.height+r.height}:t.getBoundingClientRect();v({...y?.config,size:n})},children:n}):n,t(og,{isOpen:c,type:e.type,onClose:()=>p(!1),node:b.node})]})},oM=c.div`
448
+ width: 100%;
449
+ padding: 0.4rem 0;
450
+ white-space: nowrap;
451
+ overflow: hidden;
452
+ text-overflow: ellipsis;
453
+ `,oA=c(oS)`
454
+ display: flex;
455
+ gap: 0.1rem;
456
+ padding: 0 0.4rem;
457
+ justify-content: start;
458
+ font-size: 0.6rem;
459
+ height: auto;
460
+ min-width: 0;
461
+ `,oO=c.div`
462
+ display: flex;
463
+ align-items: center;
464
+ height: 70%;
465
+ width: auto;
466
+ gap: 0.4rem;
467
+ `,o_=c.span`
468
+ width: auto;
469
+ height: 100%;
470
+ cursor: pointer;
471
+ svg {
472
+ width: auto;
473
+ height: 100%;
474
+ }
475
+ &:hover {
476
+ color: ${({theme:e})=>e.colors.highlight2};
477
+ cursor: pointer;
478
+ }
479
+ `,oI=c.div`
480
+ height: 100%;
481
+ display: grid;
482
+ grid-template-rows: auto 1fr;
483
+ `,oL=e=>{let{node:o}=e,r=ex(e=>e.getControlPanelNode),n=u(()=>r(o),[o]);return n?t(n,{...e}):null};var oH=e=>{let{node:o,showControls:n,onDelete:i}=e,l=e$(),{id:a}=o,{node:s}=os(a)||{},{updateNodeValues:d}=od(a);return r(oI,{theme:l,children:[r(oA,{theme:l,children:[t(oM,{children:o.data.label}),n&&r(oO,{children:[t(o_,{theme:l,children:t(b,{className:"grid-item-handle"})}),t(o_,{theme:l,children:t(y,{onClick:()=>i(o)})})]})]}),t(oL,{node:o,audioNode:s,updateNodeValues:d})]})};let oR=c.div`
484
+ position: fixed;
485
+ z-index: 5;
486
+ box-shadow: 0px 1px 2px ${({theme:e})=>e.colors.elevation2};
487
+ left: 1rem;
488
+ top: 4rem;
489
+ width: 2rem;
490
+ height: 2rem;
491
+ border-radius: 50%;
492
+ overflow: hidden;
493
+ display: flex;
494
+ align-items: center;
495
+ justify-content: center;
496
+ background: ${({theme:e})=>e.colors.elevation1};
497
+ color: ${({theme:e})=>e.colors.highlight1};
498
+
499
+ :hover {
500
+ color: ${({theme:e})=>e.colors.highlight2};
501
+ cursor: pointer;
502
+ }
503
+ `,oW=c(oO)`
504
+ height: 80%;
505
+ `,oB=c(o_)`
506
+ font-size: 1rem;
507
+ display: flex;
508
+ align-items: center;
509
+ `,oG=c(oA)`
510
+ grid-template-columns: 1fr auto;
511
+ border-bottom: 1px solid ${({theme:e})=>e.colors.elevation3};
512
+ font-size: 0.7rem;
513
+ `,oV=c(oM)`
514
+ text-align: center;
515
+ `,oU=c.div`
516
+ height: 100%;
517
+ width: 100%;
518
+ padding: 0.3rem 0.4rem;
519
+ box-sizing: border-box;
520
+ `,oJ=c.div`
521
+ height: auto;
522
+ padding: 0;
523
+ max-height: 95vh;
524
+ overflow-y: scroll;
525
+ border: 1px solid ${({theme:e})=>e.colors.elevation3};
526
+ `,oX=c.div`
527
+ padding: 1rem 0;
528
+ font-family: var(--leva-fonts-mono);
529
+ font-size: 0.8rem;
530
+ `,oY=c.div`
531
+ display: flex;
532
+ align-items: center;
533
+ gap: 0.5rem;
534
+ cursor: pointer;
535
+ color: ${({theme:e})=>e.colors.highlight1};
536
+ &:hover {
537
+ color: ${({theme:e})=>e.colors.highlight2};
538
+ }
539
+ `,oq=c.div`
540
+ position: absolute;
541
+ height: 1rem;
542
+ top: 0;
543
+ bottom: 0;
544
+ margin: auto;
545
+ left: 0.5rem;
546
+ border-right: 1px solid ${({theme:e})=>e.colors.whitePrimary};
547
+ `,oK=c.div`
548
+ box-sizing: border-box;
549
+ overflow: hidden;
550
+ .react-resizable-handle:after {
551
+ border-color: ${({theme:e})=>e.colors.whitePrimary};
552
+ border-width: 1px;
553
+ }
554
+ `;var oQ=()=>{let e=e$(),o=f(null),i=ex(e=>e.nodes),{show:l,nodes:a,size:s}=ex(e=>e.controlPanel),{width:d=200,height:c}=s,p=u(()=>{let e=a.map(({id:e})=>e);return i.filter(({id:o})=>e.includes(o))},[i,a]),g=ex(e=>e.showControlPanel),m=ex(e=>e.hideControlPanel),v=ex(e=>e.setControlPanelNodes),b=ex(e=>e.setControlPanelSize),w=ex(e=>e.removeNodeFromControlPanel),[x,C]=h(!0),$=u(()=>{let e=a.reduce((e,{height:o=eu,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(oR,{theme:e,ref:o,onClick:g,children:t(ed,{})}),r(ec,{open:l,onClose:m,direction:"left",className:"",size:"auto",enableOverlay:!1,style:{background:e.colors.elevation1,position:"absolute"},children:[r(oG,{theme:e,children:[t(oV,{children:"Control Panel"}),t(oW,{children:t(oB,{onClick:m,theme:e,children:t(y,{})})})]}),r(oU,{children:[t(oX,{children:x?r(oY,{theme:e,onClick:()=>C(!1),children:[t(ea,{}),"Unlock grid"]}):r(oY,{theme:e,onClick:()=>C(!0),children:[t(es,{}),"Lock grid"]})}),t(ei,{enable:{top:!1,right:!x,bottom:!1,left:!1,topRight:!1,bottomRight:!1,bottomLeft:!1,topLeft:!1},handleComponent:{right:t(oq,{theme:e})},minWidth:120,size:{width:d,height:"auto"},onResizeStop:(e,o,t,r)=>{b({width:d+r.width,height:c+r.height})},children:t(oJ,{theme:e,children:t(el,{layout:$,className:"layout",cols:4,rowHeight:eu,width:d,margin:[0,0],isResizable:!x,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(oK,{theme:e,children:t(oH,{node:o,showControls:!x,onDelete:w})},o.id))})})})]})]})]}):null},oZ={};oZ="# 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## 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\n";let o0=i(c.div`
555
+ font-family: var(--leva-fonts-mono);
556
+ font-size: 0.7rem;
557
+ box-sizing: border-box;
558
+ height: 100%;
559
+ width: 100%;
560
+ overflow: scroll;
561
+ color: ${({theme:e})=>e.colors.whitePrimary};
562
+ padding: 0 0.5rem;
563
+
564
+ code {
565
+ color: ${({theme:e})=>e.colors.accent3};
566
+ filter: hue-rotate(180deg);
567
+ }
568
+ `),o1=i(c.div`
569
+ padding: 1rem;
570
+ height: 100%;
571
+ width: 100%;
572
+ box-sizing: border-box;
573
+ overflow: hidden;
574
+ `);var o2=()=>{var e;let o=ex(e=>e.isHelpShown),r=ex(e=>e.toggleHelp);return o?t(eS,{onClose:()=>{r()},children:t(o1,{children:t(o0,{dangerouslySetInnerHTML:{__html:ep((e=oZ)&&e.__esModule?e.default:e)},onWheelCapture:e=>e.stopPropagation()})})}):null};let o3=()=>t(n,{children:t(_,{onClick:ex(e=>e.toggleHelp),children:t(eo,{})})}),o8=c.div`
575
+ position: fixed;
576
+ z-index: ${({theme:e})=>e.zIndex.resumeContextLayout};
577
+ width: 100%;
578
+ height: 100%;
579
+ top: 0;
580
+ left: 0;
581
+ background: rgb(24 28 32 / 90%);
582
+ display: flex;
583
+ flex-wrap: wrap;
584
+ align-items: center;
585
+ justify-content: center;
586
+ color: ${({theme:e})=>e.colors.whitePrimary};
587
+ cursor: pointer;
588
+ `,o9=c.div`
589
+ display: flex;
590
+ width: 100%;
591
+ align-items: center;
592
+ justify-content: center;
593
+ `,o5=c.div`
594
+ font-family: var(--leva-fonts-mono);
595
+ font-size: 2rem;
596
+ `,o7=c(et)`
597
+ width: 7rem;
598
+ height: 7rem;
599
+ `;var o6=()=>{let e=e$(),o=ex(({patch:e})=>e).audioContext,[n,i]=h("running"===o.state);return n?null:r(o8,{theme:e,onClick:()=>{o.resume(),i(!0)},children:[t(o9,{children:t(o5,{theme:e,children:"Click anywhere to resume audio context"})}),t(o9,{children:t(o7,{})})]})},o4=()=>{let e=ex(({setConfig:e})=>e),{showMinimap:o}=ex(({config:e})=>e);return t(_,{onClick:()=>e({showMinimap:!o}),children:o?t(er,{}):t(en,{})})},te=({id:e,sourceX:o,sourceY:i,targetX:l,targetY:a,sourcePosition:s,targetPosition:d,style:c={},data:p,markerStart:h,markerEnd:u,source:m,target:f,sourceHandleId:v,targetHandleId:y,selected:b})=>{let w=e$(),x=ex(({getNode:e})=>e),C=x(m),$=x(f),k=C?.selected||$?.selected;g(()=>{if(v&&y)return console.log(`connected ${m} to ${f}`),()=>{console.log(`disconnected ${m} from ${f}`)}},[m,v,f,y]);let[P]=I({targetX:l,targetY:a,targetPosition:d,sourceX:o,sourceY:i,sourcePosition:s});return r(n,{children:[t("path",{id:e,style:{...c,stroke:b?w.colors.accent2:k?w.colors.highlight3:w.colors.highlight2},className:"react-flow__edge-path Wire",d:P,markerEnd:u}),t("path",{style:{...c,strokeWidth:8,color:"transparent",opacity:0,cursor:"pointer"},d:P,markerEnd:u})]})};let to=(e,o)=>console.log("drag stop",o),tt=(e,o)=>console.log("click",o),tr=[20,20],tn=({editorState:e,plugins:o=[],editorContextMenu:n=[],onChange:i=()=>{},...l})=>{let a=u(()=>({wire:te}),[]),{nodes:s,edges:d,controlPanel:c,onNodesChange:p,onNodesDelete:f,onEdgesChange:v,onEdgesDelete:y,onConnect:b,setPlugins:w,setViewport:x,viewport:C}=ex(),k=ex(({config:e})=>e),P=ex(({nodeTypes:e})=>e);g(()=>{w(o)},[o]);let[N,z]=h(null);g(()=>{N&&i({nodes:s,edges:d,controlPanel:c,viewport:C})},[s,d,c,C]);let D=m(e=>{N||(z(e),console.log("flow loaded:",e))},[N]),{onContextMenu:M}=(()=>{let{show:e}=U({id:on});return{onContextMenu:e}})(),{onContextMenu:A}=(()=>{let{show:e}=U({id:ol});return{onContextMenu:m((o,t)=>{o.stopPropagation(),e(o,{props:{node:t}})},[])}})(),{onContextMenu:O}=(()=>{let{show:e}=U({id:eN});return{onContextMenu:m((o,t)=>{o.stopPropagation(),e(o,{props:{edge:t}})},[e])}})();return g(()=>{C&&N?.setViewport(C)},[C,N]),j({onEnd:x}),r($,{nodes:s,edges:d,onNodesChange:p,onNodesDelete:f,onEdgesChange:v,onConnect:b,onNodeDragStop:to,onEdgesDelete:y,onInit:D,onNodeClick:tt,onContextMenu:M,onNodeContextMenu:A,onEdgeContextMenu:O,nodeTypes:P,edgeTypes:a,snapGrid:tr,defaultViewport:e?.viewport,defaultEdgeOptions:{type:"wire"},snapToGrid:!0,fitView:!0,disableKeyboardA11y:!0,children:[t(E,{variant:F.Dots,gap:12}),k.showMinimap?t(S,{}):null,r(T,{style:{right:"1rem",left:"initial",bottom:"40%",top:"initial"},showInteractive:!1,children:[t(o4,{}),t(o3,{})]}),t(o6,{}),t(oQ,{}),t(o2,{}),t(oi,{editorContextMenu:n}),t(oa,{}),t(ez,{})]})},ti=e=>t(D,{children:t(tn,{...e})}),tl={nodes:[],edges:[],controlPanel:{nodes:[],show:!1,size:{width:200,height:100}},viewport:{x:0,y:0,zoom:1.5}},ta=i(c.div`
600
+ display: flex;
601
+ flex-direction: column;
602
+ height: 100%;
603
+ width: 100%;
604
+ `),ts=i(c.div`
605
+ position: fixed;
606
+ height: 100%;
607
+ width: 100%;
608
+ background: rgba(0, 0, 0, 0.7);
609
+ color: white;
610
+ display: flex;
611
+ justify-content: center;
612
+ align-items: center;
613
+ font-size: 2rem;
614
+ `),td=i(c.div`
615
+ height: 100%;
616
+ width: 100%;
617
+ display: flex;
618
+ position: relative;
619
+ `),tc=i(c.div`
620
+ display: flex;
621
+ flex: 1;
622
+ align-items: center;
623
+ justify-content: center;
624
+ background: ${({theme:e})=>e.colors.elevation3};
625
+ `),tp=i(c.div`
626
+ background: ${({theme:e})=>e.colors.elevation2};
627
+ opacity: 0.7;
628
+ position: absolute;
629
+ width: 100%;
630
+ height: 100%;
631
+ left: 0;
632
+ top: 0;
633
+ z-index: 1;
634
+ font-family: var(--leva-fonts-mono);
635
+ color: ${({theme:e})=>e.colors.whitePrimary};
636
+ display: ${({show:e})=>e?"flex":"none"};
637
+ align-items: center;
638
+ justify-content: center;
639
+ font-size: 6rem;
640
+ `),th=e=>{let o=ex(e=>e.pullEditorChanges),i=ex(e=>e.currentFileIndex),[l,a]=h(!0);g(()=>{a(!0),setTimeout(()=>{a(!1)},1600)},[i]);let{file:s}=e;return s?"audio"===s.type?t(tc,{children:t("audio",{src:s.file,controls:!0})}):r(n,{children:[t(ti,{...e,onChange:e=>{o()},editorState:s.file||tl}),t(tp,{show:l,children:"Loading..."})]}):null},tg=i(c.div`
641
+ height: 2rem;
642
+ display: flex;
643
+ align-items: center;
644
+ background: ${({theme:e})=>e.colors.elevation2};
645
+ `),tu=i(c.div`
646
+ display: flex;
647
+ align-items: center;
648
+ cursor: pointer;
649
+ height: 100%;
650
+ box-sizing: border-box;
651
+ padding: 0.3rem 0.4rem;
652
+
653
+ border-right: 1px solid ${({theme:e})=>e.colors.elevation1};
654
+
655
+ input {
656
+ color: ${({theme:e,active:o})=>o?e.colors.whitePrimary:e.colors.highlight1};
657
+
658
+ &:not([readonly]):focus {
659
+ background-color: ${({theme:e})=>e.colors.elevation1};
660
+ }
661
+ }
662
+ `),tm=i(c.div`
663
+ display: flex;
664
+ align-items: center;
665
+ height: 100%;
666
+ padding: 0 0.5rem;
667
+ cursor: pointer;
668
+
669
+ color: ${({theme:e})=>e.colors.highlight1};
670
+ &:hover {
671
+ color: ${({theme:e})=>e.colors.whitePrimary};
672
+ }
673
+ `),tf=i(c(v)`
674
+ height: 40%;
675
+ width: auto;
676
+ `),tv=i(c(y)`
677
+ height: 70%;
678
+ width: auto;
679
+ cursor: pointer;
680
+ color: ${({theme:e})=>e.colors.highlight1};
681
+ &:hover {
682
+ color: ${({theme:e})=>e.colors.whitePrimary};
683
+ }
684
+ `),ty=()=>({file:tl,name:"Unnamed",type:"patch",id:p()});var tb=({...e})=>{let{projectState:o,theme:n}=e,i=ex(e=>e.currentFileIndex),d=ex(e=>e.project.files[e.currentFileIndex]),c=ex(e=>e.setCurrentFileIndex),p=ex(e=>e.project),u=ex(e=>e.setProject),m=ex(e=>e.getProject),f=ex(e=>e.updateFileName),v=ex(e=>e.addFile),y=ex(e=>e.deleteFile),b=ex(e=>e.syncEditorWithCurrentFile),w=ex(e=>e.setEditorState);ex(e=>e.pullEditorChanges);let[x,$]=h(!1);return g(()=>{u(o||{files:[ty()]});let e=o?.files[0];e?.file&&e?.type!=="audio"&&w(e.file)},[o]),g(()=>(C("project://*",async(...e)=>{let o=new Request(...e),t=m().files,r=o.url.replace("project://",""),n=t.find(({id:e})=>e===r);return n?ev(n)?new Response(JSON.stringify(n.file??null)):ey(n)?fetch(n.file):new Response(null):new Response(`File not found: ${o.url}`,{status:404})}),()=>{}),[m]),g(()=>{b()},[i,b]),r(l,{theme:n||eC,children:[t(a,{styles:s`
685
+ :root {
686
+ --leva-colors-elevation1: #292d39;
687
+ --leva-colors-elevation2: #181c20;
688
+ --leva-colors-elevation3: #373c4b;
689
+ --leva-colors-accent1: #0066dc;
690
+ --leva-colors-accent2: #007bff;
691
+ --leva-colors-accent3: #3c93ff;
692
+ --leva-colors-highlight1: #535760;
693
+ --leva-colors-highlight2: #8c92a4;
694
+ --leva-colors-highlight3: #fefefe;
695
+ --leva-colors-vivid1: #ffcc00;
696
+ --leva-colors-folderWidgetColor: var(--leva-colors-highlight2);
697
+ --leva-colors-folderTextColor: var(--leva-colors-highlight3);
698
+ --leva-colors-toolTipBackground: var(--leva-colors-highlight3);
699
+ --leva-colors-toolTipText: var(--leva-colors-elevation2);
700
+ --leva-radii-xs: 2px;
701
+ --leva-radii-sm: 3px;
702
+ --leva-radii-lg: 10px;
703
+ --leva-space-xs: 3px;
704
+ --leva-space-sm: 6px;
705
+ --leva-space-md: 10px;
706
+ --leva-space-rowGap: 7px;
707
+ --leva-space-colGap: 7px;
708
+ --leva-fonts-mono:
709
+ ui-monospace, SFMono-Regular, Menlo, "Roboto Mono", monospace;
710
+ --leva-fonts-sans: system-ui, sans-serif;
711
+ --leva-fontSizes-root: 11px;
712
+ --leva-fontSizes-toolTip: var(--leva-fontSizes-root);
713
+ --leva-sizes-rootWidth: 280px;
714
+ --leva-sizes-controlWidth: 160px;
715
+ --leva-sizes-numberInputMinWidth: 38px;
716
+ --leva-sizes-scrubberWidth: 8px;
717
+ --leva-sizes-scrubberHeight: 16px;
718
+ --leva-sizes-rowHeight: 24px;
719
+ --leva-sizes-folderTitleHeight: 20px;
720
+ --leva-sizes-checkboxSize: 16px;
721
+ --leva-sizes-joystickWidth: 100px;
722
+ --leva-sizes-joystickHeight: 100px;
723
+ --leva-sizes-colorPickerWidth: var(--leva-sizes-controlWidth);
724
+ --leva-sizes-colorPickerHeight: 100px;
725
+ --leva-sizes-imagePreviewWidth: var(--leva-sizes-controlWidth);
726
+ --leva-sizes-imagePreviewHeight: 100px;
727
+ --leva-sizes-monitorHeight: 60px;
728
+ --leva-sizes-titleBarHeight: 39px;
729
+ --leva-shadows-level1: 0 0 9px 0 #00000088;
730
+ --leva-shadows-level2: 0 4px 14px #00000033;
731
+ --leva-borderWidths-root: 0px;
732
+ --leva-borderWidths-input: 1px;
733
+ --leva-borderWidths-focus: 1px;
734
+ --leva-borderWidths-hover: 1px;
735
+ --leva-borderWidths-active: 1px;
736
+ --leva-borderWidths-folder: 1px;
737
+ --leva-fontWeights-label: normal;
738
+ --leva-fontWeights-folder: normal;
739
+ --leva-fontWeights-button: normal;
740
+ }
741
+ `}),r(ta,{onDragOver:e=>{e.preventDefault(),e.stopPropagation(),$(!0)},onDragLeave:e=>{e.preventDefault(),e.stopPropagation(),$(!1)},onDrop:e=>{e.preventDefault(),e.stopPropagation(),$(!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;u(o),c(0),b();return}v({...ty(),file:{...o,controlPanel:{...tl.controlPanel,...o.controlPanel}},name:e.name},e.name);return}if(e.type.match(/^audio\//)){let o=await e6(e);v({type:"audio",id:`audio-file-${+new Date}`,name:e.name,file:o});return}console.error("Unsupported file type",e)})},children:[r(tg,{children:[p.files.map((e,o)=>r(tu,{onClick:()=>{c(o)},active:o===i,children:[t(op,{onChange:e=>f(o,e),value:e.name||"Unnamed"}),t(tv,{onClick:e=>{e.stopPropagation(),window.confirm("Do you really want to delete this file?")&&y(o)}})]},o)),t(tm,{onClick:()=>{v(ty()),c(p.files.length)},children:t(tf,{})})]}),t(td,{children:t(th,{file:d,...e})}),x&&t(ts,{children:"Drop file(s) to upload to the project"})]})]})};export{tb as Editor,tl as EDITOR_DEFAULTS,te as Wire,oD as WNNode,oS as TitleBar,ox as PortsPanel,o$ as OutputPorts,oF as OutputHandle,oC as InputPorts,oj as InputHandle,ok as Port,eS as Modal,op as EditableLabel,os as useAudioNode,od as useNode,e$ as useTheme,ex as useStore,eC as theme,ey as isAudio,ev as isPatch,ew as PortType};
742
+ //# sourceMappingURL=module.js.map