@field/cascade 0.2.22 → 0.3.1
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/AGENTS.md +47 -7
- package/ARCHITECTURE.md +30 -2
- package/CHANGELOG.md +107 -0
- package/DESIGN.md +10 -5
- package/README.md +103 -7
- package/dist/assets/CodeEditor-D22fVi-4.js +623 -0
- package/dist/assets/CodePanel-DPNEYfcR.js +2 -0
- package/dist/assets/CustomNodeDialog-DeHCAvgb.js +1 -0
- package/dist/assets/{ExportDialog-DWN4nhXI.js → ExportDialog-BJu2Bpvv.js} +2 -2
- package/dist/assets/ProjectSettings-DWpVtWEx.js +2 -0
- package/dist/assets/SettingsDialog-za00IS3L.js +1 -0
- package/dist/assets/VersionHistoryDialog-DTMGhI0_.js +3 -0
- package/dist/assets/{core-Bji4aZUU.js → core-JsyKMO1k.js} +29 -38
- package/dist/assets/{cssMode-B6Z_Q1Kh.js → cssMode-emdRheFK.js} +1 -1
- package/dist/assets/{editor.api-jMoW_43X.js → editor.api-xHX-fMSo.js} +1 -1
- package/dist/assets/{freemarker2-DvvPV6m5.js → freemarker2-C3M8_Gs3.js} +1 -1
- package/dist/assets/geo-BAR6lQp5.js +1 -0
- package/dist/assets/{handlebars-B8rfuSIa.js → handlebars-CBMurtFk.js} +1 -1
- package/dist/assets/{html-DyHm6JCp.js → html-xbLQwknw.js} +1 -1
- package/dist/assets/{htmlMode-E9XLWE5u.js → htmlMode-2wKdDTon.js} +1 -1
- package/dist/assets/{image-BUcQC7PG.js → image-i1j6nWKe.js} +26 -40
- package/dist/assets/index-BDV5xGBZ.css +1 -0
- package/dist/assets/index-CMcH8AgP.js +212 -0
- package/dist/assets/index-client-BoJgsN9M.js +1 -0
- package/dist/assets/{javascript-C_bM5PCN.js → javascript-DJaOo_2I.js} +1 -1
- package/dist/assets/{jsonMode-BdyVS7G4.js → jsonMode-Bheas8_0.js} +1 -1
- package/dist/assets/{legacy-DIu3XRwl.js → legacy-CAj2_7QE.js} +2 -2
- package/dist/assets/{liquid-CDkn3spA.js → liquid-BCj_BGbM.js} +1 -1
- package/dist/assets/{lspLanguageFeatures-AB5DMAsr.js → lspLanguageFeatures-BfIsx_xz.js} +1 -1
- package/dist/assets/{mdx-BvH_NjDN.js → mdx-DwiQDiVO.js} +1 -1
- package/dist/assets/{nodeTypeUtils-CweA3NHd.js → nodeTypeUtils-BBA1JqHx.js} +1 -1
- package/dist/assets/{python-B7uii4fi.js → python-BjrB5nqj.js} +1 -1
- package/dist/assets/{razor-Z48fWdJc.js → razor-CfoBmGDs.js} +1 -1
- package/dist/assets/{tsMode-BDgacVG4.js → tsMode-BcEoMSxp.js} +1 -1
- package/dist/assets/{typescript-Derb6Oqa.js → typescript-DIg7TEmQ.js} +1 -1
- package/dist/assets/{workers-BtoMX_pm.js → workers-vXYuwtPw.js} +1 -1
- package/dist/assets/{xml-B1CaFSrG.js → xml-DexLQIQy.js} +1 -1
- package/dist/assets/{yaml-HmIeA0KH.js → yaml-DUnD_1dE.js} +1 -1
- package/dist/cli/index.js +16467 -10200
- package/dist/cli/runtime/gpu.ts +76 -0
- package/dist/cli/runtime/io.ts +93 -7
- package/dist/contracts/animation.d.ts +40 -0
- package/dist/contracts/animation.js +14 -0
- package/dist/contracts/capabilities.d.ts +69 -6
- package/dist/contracts/definition.d.ts +60 -2
- package/dist/contracts/document.d.ts +15 -0
- package/dist/contracts/index.d.ts +1 -0
- package/dist/contracts/index.js +1 -0
- package/dist/contracts/schema.js +8 -5
- package/dist/contracts/validate.d.ts +10 -1
- package/dist/contracts/validate.js +20 -3
- package/dist/gpu.d.ts +71 -0
- package/dist/gpu.js +53 -0
- package/dist/graphs/default.cascade +1 -1
- package/dist/index.html +5 -5
- package/dist/io.d.ts +196 -0
- package/dist/io.js +303 -0
- package/dist/net.d.ts +1 -0
- package/dist/net.js +28 -0
- package/dist/runtime/animation/channel.d.ts +108 -0
- package/dist/runtime/animation/channel.js +204 -0
- package/dist/runtime/animation/frameRange.d.ts +78 -0
- package/dist/runtime/animation/frameRange.js +76 -0
- package/dist/runtime/animation/index.d.ts +10 -0
- package/dist/runtime/animation/index.js +8 -0
- package/dist/runtime/builtins/core/random.d.ts +1 -1
- package/dist/runtime/builtins/core/remap.d.ts +1 -1
- package/dist/runtime/builtins/geo/copyToPoints.d.ts +1 -1
- package/dist/runtime/builtins/geo/copyToPoints.js +1 -1
- package/dist/runtime/builtins/geo/generators.d.ts +1 -1
- package/dist/runtime/builtins/geo/merge.d.ts +1 -1
- package/dist/runtime/builtins/geo/svgExport.d.ts +1 -1
- package/dist/runtime/builtins/geo/svgExport.js +1 -1
- package/dist/runtime/builtins/geo/transform.d.ts +1 -1
- package/dist/runtime/builtins/geo/transform.js +1 -1
- package/dist/runtime/definition/architecture.d.ts +1 -1
- package/dist/runtime/definition/extract.d.ts +1 -1
- package/dist/runtime/definition/extract.js +1 -1
- package/dist/runtime/error.d.ts +1 -1
- package/dist/runtime/expressions/evaluator.d.ts +53 -0
- package/dist/runtime/expressions/evaluator.js +193 -0
- package/dist/runtime/expressions/index.d.ts +15 -0
- package/dist/runtime/expressions/index.js +12 -0
- package/dist/runtime/expressions/math.d.ts +75 -0
- package/dist/runtime/expressions/math.js +140 -0
- package/dist/runtime/expressions/preprocess.d.ts +33 -0
- package/dist/runtime/expressions/preprocess.js +102 -0
- package/dist/runtime/expressions/scope.d.ts +27 -0
- package/dist/runtime/expressions/scope.js +10 -0
- package/dist/runtime/expressions/time.d.ts +54 -0
- package/dist/runtime/expressions/time.js +71 -0
- package/dist/runtime/expressions/types.d.ts +66 -0
- package/dist/runtime/expressions/types.js +9 -0
- package/dist/runtime/geometry/attributes.d.ts +2 -2
- package/dist/runtime/geometry/attributes.js +1 -1
- package/dist/runtime/geometry/builder.d.ts +1 -1
- package/dist/runtime/geometry/builder.js +1 -1
- package/dist/runtime/geometry/copy.d.ts +1 -1
- package/dist/runtime/geometry/copy.js +1 -1
- package/dist/runtime/geometry/generate.d.ts +1 -1
- package/dist/runtime/geometry/groups.d.ts +1 -1
- package/dist/runtime/geometry/groups.js +1 -1
- package/dist/runtime/geometry/matrix.d.ts +1 -1
- package/dist/runtime/geometry/merge.d.ts +1 -1
- package/dist/runtime/geometry/merge.js +1 -1
- package/dist/runtime/geometry/primitives.d.ts +1 -1
- package/dist/runtime/geometry/primitives.js +1 -1
- package/dist/runtime/geometry/promote.d.ts +1 -1
- package/dist/runtime/geometry/promote.js +1 -1
- package/dist/runtime/geometry/resample.d.ts +1 -1
- package/dist/runtime/geometry/resample.js +1 -1
- package/dist/runtime/geometry/svg.d.ts +1 -1
- package/dist/runtime/geometry/svg.js +1 -1
- package/dist/runtime/geometry/transform.d.ts +1 -1
- package/dist/runtime/geometry/transform.js +1 -1
- package/dist/runtime/index.d.ts +4 -1
- package/dist/runtime/index.js +4 -1
- package/dist/runtime/params/animator.d.ts +74 -0
- package/dist/runtime/params/animator.js +137 -0
- package/dist/runtime/params/index.d.ts +11 -0
- package/dist/runtime/params/index.js +9 -0
- package/dist/runtime/params/resolve.d.ts +73 -0
- package/dist/runtime/params/resolve.js +62 -0
- package/dist/runtime/runtime.d.ts +42 -0
- package/dist/runtime/runtime.js +351 -29
- package/dist/runtime/types.d.ts +32 -6
- package/dist/shell.d.ts +3 -3
- package/doc/NODE_REFERENCE.md +395 -0
- package/doc/PROJECT_AUTHORING.md +148 -6
- package/package.json +30 -3
- package/dist/assets/CodeEditor-DoaNEUaM.js +0 -641
- package/dist/assets/CodePanel-B0_2XJ-t.js +0 -2
- package/dist/assets/CustomNodeDialog-026lzecD.js +0 -1
- package/dist/assets/ProjectSettings-BzT164Yx.js +0 -2
- package/dist/assets/SettingsDialog-DmHb1V0r.js +0 -1
- package/dist/assets/VersionHistoryDialog-hH6VsXLX.js +0 -3
- package/dist/assets/geo-CXmCtzMM.js +0 -2
- package/dist/assets/index-BXYXSdgh.js +0 -224
- package/dist/assets/index-CrNke7SW.css +0 -1
- package/dist/assets/index-client-DN_FvjN8.js +0 -1
- package/dist/assets/quill-DjZ69wL_.js +0 -121
- package/dist/cli/index.js.map +0 -7
- package/dist/contracts/capabilities.d.ts.map +0 -1
- package/dist/contracts/capabilities.js.map +0 -1
- package/dist/contracts/color.d.ts.map +0 -1
- package/dist/contracts/color.js.map +0 -1
- package/dist/contracts/definition.d.ts.map +0 -1
- package/dist/contracts/definition.js.map +0 -1
- package/dist/contracts/document.d.ts.map +0 -1
- package/dist/contracts/document.js.map +0 -1
- package/dist/contracts/geometry.d.ts.map +0 -1
- package/dist/contracts/geometry.js.map +0 -1
- package/dist/contracts/index.d.ts.map +0 -1
- package/dist/contracts/index.js.map +0 -1
- package/dist/contracts/schema.d.ts.map +0 -1
- package/dist/contracts/schema.js.map +0 -1
- package/dist/contracts/validate.d.ts.map +0 -1
- package/dist/contracts/validate.js.map +0 -1
- package/dist/contracts/values.d.ts.map +0 -1
- package/dist/contracts/values.js.map +0 -1
- package/dist/graphs/default-orig.cascade +0 -128
- package/dist/runtime/browser.d.ts.map +0 -1
- package/dist/runtime/browser.js.map +0 -1
- package/dist/runtime/builtins/core/index.d.ts.map +0 -1
- package/dist/runtime/builtins/core/index.js.map +0 -1
- package/dist/runtime/builtins/core/random.d.ts.map +0 -1
- package/dist/runtime/builtins/core/random.js.map +0 -1
- package/dist/runtime/builtins/core/remap.d.ts.map +0 -1
- package/dist/runtime/builtins/core/remap.js.map +0 -1
- package/dist/runtime/builtins/core/routing.d.ts.map +0 -1
- package/dist/runtime/builtins/core/routing.js.map +0 -1
- package/dist/runtime/builtins/core/structural.d.ts.map +0 -1
- package/dist/runtime/builtins/core/structural.js.map +0 -1
- package/dist/runtime/builtins/geo/copyToPoints.d.ts.map +0 -1
- package/dist/runtime/builtins/geo/copyToPoints.js.map +0 -1
- package/dist/runtime/builtins/geo/definitions.d.ts.map +0 -1
- package/dist/runtime/builtins/geo/definitions.js.map +0 -1
- package/dist/runtime/builtins/geo/generators.d.ts.map +0 -1
- package/dist/runtime/builtins/geo/generators.js.map +0 -1
- package/dist/runtime/builtins/geo/index.d.ts.map +0 -1
- package/dist/runtime/builtins/geo/index.js.map +0 -1
- package/dist/runtime/builtins/geo/merge.d.ts.map +0 -1
- package/dist/runtime/builtins/geo/merge.js.map +0 -1
- package/dist/runtime/builtins/geo/namespace.d.ts.map +0 -1
- package/dist/runtime/builtins/geo/namespace.js.map +0 -1
- package/dist/runtime/builtins/geo/svgExport.d.ts.map +0 -1
- package/dist/runtime/builtins/geo/svgExport.js.map +0 -1
- package/dist/runtime/builtins/geo/transform.d.ts.map +0 -1
- package/dist/runtime/builtins/geo/transform.js.map +0 -1
- package/dist/runtime/builtins/index.d.ts.map +0 -1
- package/dist/runtime/builtins/index.js.map +0 -1
- package/dist/runtime/definition/architecture.d.ts.map +0 -1
- package/dist/runtime/definition/architecture.js.map +0 -1
- package/dist/runtime/definition/extract.d.ts.map +0 -1
- package/dist/runtime/definition/extract.js.map +0 -1
- package/dist/runtime/error.d.ts.map +0 -1
- package/dist/runtime/error.js.map +0 -1
- package/dist/runtime/geometry/attributes.d.ts.map +0 -1
- package/dist/runtime/geometry/attributes.js.map +0 -1
- package/dist/runtime/geometry/builder.d.ts.map +0 -1
- package/dist/runtime/geometry/builder.js.map +0 -1
- package/dist/runtime/geometry/copy.d.ts.map +0 -1
- package/dist/runtime/geometry/copy.js.map +0 -1
- package/dist/runtime/geometry/generate.d.ts.map +0 -1
- package/dist/runtime/geometry/generate.js.map +0 -1
- package/dist/runtime/geometry/groups.d.ts.map +0 -1
- package/dist/runtime/geometry/groups.js.map +0 -1
- package/dist/runtime/geometry/index.d.ts.map +0 -1
- package/dist/runtime/geometry/index.js.map +0 -1
- package/dist/runtime/geometry/matrix.d.ts.map +0 -1
- package/dist/runtime/geometry/matrix.js.map +0 -1
- package/dist/runtime/geometry/merge.d.ts.map +0 -1
- package/dist/runtime/geometry/merge.js.map +0 -1
- package/dist/runtime/geometry/primitives.d.ts.map +0 -1
- package/dist/runtime/geometry/primitives.js.map +0 -1
- package/dist/runtime/geometry/promote.d.ts.map +0 -1
- package/dist/runtime/geometry/promote.js.map +0 -1
- package/dist/runtime/geometry/resample.d.ts.map +0 -1
- package/dist/runtime/geometry/resample.js.map +0 -1
- package/dist/runtime/geometry/svg.d.ts.map +0 -1
- package/dist/runtime/geometry/svg.js.map +0 -1
- package/dist/runtime/geometry/transform.d.ts.map +0 -1
- package/dist/runtime/geometry/transform.js.map +0 -1
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/node.d.ts.map +0 -1
- package/dist/runtime/node.js.map +0 -1
- package/dist/runtime/runtime.d.ts.map +0 -1
- package/dist/runtime/runtime.js.map +0 -1
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/runtime/types.js.map +0 -1
- package/dist/shell.js.map +0 -7
- package/dist/stage.js.map +0 -7
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeEditor-DoaNEUaM.js","assets/legacy-DIu3XRwl.js","assets/nodeTypeUtils-CweA3NHd.js","assets/index-BXYXSdgh.js","assets/index-client-DN_FvjN8.js","assets/index-CrNke7SW.css","assets/editor.api-jMoW_43X.js","assets/editor-1FQrmyyI.css","assets/CodeEditor-DR7u0q7p.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{$ as e,A as t,Ct as n,H as r,L as i,Q as a,St as o,Tt as s,U as c,V as l,X as u,Y as d,at as f,ct as p,et as m,ft as h,gt as g,ht as _,i as v,it as y,l as b,r as x,rt as S,tt as C,ut as w,z as T}from"./legacy-DIu3XRwl.js";import{x as E,z as D}from"./index-BXYXSdgh.js";var O=c(`<div class="loading svelte-1pkj8m">Loading editor...</div>`),k=c(`<div class="error svelte-1pkj8m">Loading...</div>`),A=c(`<div class="error svelte-1pkj8m"> </div>`),j=c(`<div class="panel-wrapper svelte-1pkj8m"><!></div>`);function M(c,M){n(M,!1);let N=()=>g(D,`$sharedContextStore`,P),[P,F]=_(),I=p(null);x(async()=>{let e=await E(()=>import(`./CodeEditor-DoaNEUaM.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3,4,5,6,7,8]));w(I,e.default)}),v(M,`panelId`,8);let L=v(M,`panelParams`,8),R=v(M,`panelApi`,8);v(M,`containerApi`,8);let z=v(M,`graph`,12,void 0),B=v(M,`onRecordHistory`,12,void 0),V=p(null),H=L()?.nodeId;function U(){R()?.close&&R().close()}e(()=>N(),()=>{N()&&(z(N().graph),B(N().onRecordHistory))}),e(()=>d(z()),()=>{z()&&H?w(V,z().getNode(H)||null):w(V,null)}),e(()=>(d(R()),u(V)),()=>{R()?.setTitle&&u(V)&&R().setTitle(`Code: ${u(V).id}`)}),m(),b();var W=j(),G=S(W),K=e=>{var n=r(),i=y(n);{let e=h(()=>(d(z()),a(()=>z().packageManager||null)));t(i,()=>u(I),(t,n)=>{n(t,{get node(){return u(V)},get graph(){return z()},get packageManager(){return u(e)},onClose:U,showCloseButton:!1,get onRecordHistory(){return B()}})})}l(e,n)},q=e=>{var t=O();l(e,t)},J=e=>{var t=k();l(e,t)},Y=e=>{var t=A(),n=f(t);C(()=>T(n,`Node not found: ${H??``}`)),l(e,t)};i(G,e=>{u(V)&&z()&&u(I)?e(K):u(I)?z()?e(Y,-1):e(J,2):e(q,1)}),s(W),l(c,W),o(),F()}export{M as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,Ct as t,D as n,F as r,H as i,J as a,L as o,P as s,Q as c,St as l,Tt as u,U as d,V as f,X as p,Y as m,_ as h,at as g,ct as _,d as v,et as y,f as ee,g as te,i as b,it as x,l as S,nt as C,ot as w,p as T,rt as E,s as D,t as O,tt as k,u as ne,ut as A,wt as j,y as M,z as N}from"./legacy-DIu3XRwl.js";import{D as re,O as ie}from"./index-BXYXSdgh.js";var ae=d(`<span class="auto-badge svelte-1c1mvak">auto</span>`),oe=d(`<span class="radio-path svelte-1c1mvak"> </span>`),se=d(`<input type="text" class="custom-base-input svelte-1c1mvak" placeholder="e.g., cascade.mylib.MyBaseNode" autocomplete="off"/>`),P=d(`<label><input type="radio" name="baseClass" class="svelte-1c1mvak"/> <div class="radio-content svelte-1c1mvak"><div class="radio-header svelte-1c1mvak"><span class="radio-label svelte-1c1mvak"> </span> <!></div> <!></div></label>`),F=d(`<div class="dialog-overlay svelte-1c1mvak"><div class="dialog svelte-1c1mvak" role="dialog" aria-modal="true" aria-labelledby="custom-node-title"><div class="dialog-header svelte-1c1mvak"><h2 id="custom-node-title" class="svelte-1c1mvak">Create Custom Node</h2> <button class="close-button svelte-1c1mvak" aria-label="Close"><!></button></div> <form class="svelte-1c1mvak"><div class="form-group svelte-1c1mvak"><label for="node-name" class="svelte-1c1mvak">Node Name</label> <input id="node-name" type="text" placeholder="e.g., ParticleField" autocomplete="off" class="svelte-1c1mvak"/> <span class="hint svelte-1c1mvak">The display name for your node</span></div> <div class="form-group svelte-1c1mvak"><label for="module-path" class="svelte-1c1mvak">Module Path</label> <input id="module-path" type="text" placeholder="e.g., project.particle-field" autocomplete="off" class="svelte-1c1mvak"/> <span class="hint svelte-1c1mvak">Unique identifier for the node module <!></span></div> <div class="form-group svelte-1c1mvak"><span class="field-label svelte-1c1mvak">Base Class</span> <div class="base-class-options svelte-1c1mvak"></div></div> <div class="dialog-footer svelte-1c1mvak"><button type="button" class="cancel-button svelte-1c1mvak">Cancel</button> <button type="submit" class="create-button svelte-1c1mvak"><!> Create Node</button></div></form></div></div>`);function I(d,I){t(I,!1);let L=_(),R=[],z=b(I,`open`,12,!1),B=O(),V=_(``),H=_(``),U=_(`cascade.Node`),W=_(``),G=_(!0),K=[{id:`cascade.Node`,label:`Node`,description:`Base class for all nodes - use for general purpose computation`,template:`node`},{id:`cascade.image.ImageNodeBase`,label:`ImageNodeBase`,description:`Image processing base class with canvas/image utilities`,template:`image`},{id:`custom`,label:`Other`,description:`Specify a custom base class path`,template:`node`}];function ce(){A(G,!1)}function le(){let e=`local.${p(V).toLowerCase().replace(/[^a-z0-9]/g,``)}`;(p(H)===e||p(H)===``)&&A(G,!0)}function q(){if(!p(V).trim()||p(U)===`custom`&&!p(W).trim())return;let e=K.find(e=>e.id===p(U));B(`create`,{name:p(V).trim(),modulePath:p(H)||`local.${p(V).toLowerCase().replace(/[^a-z0-9]/g,``)}`,baseClass:p(L),template:e?.template||`node`}),Y()}function J(){Y(),B(`close`)}function Y(){A(V,``),A(H,``),A(U,`cascade.Node`),A(W,``),A(G,!0),z(!1)}function X(e){e.key===`Escape`?J():e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),q())}let Z=_();e(()=>(p(U),p(W)),()=>{A(L,p(U)===`custom`?p(W):p(U))}),e(()=>(p(G),p(V)),()=>{if(p(G)&&p(V)){let e=p(V).toLowerCase().replace(/[^a-z0-9]/g,``);A(H,`local.${e}`)}}),e(()=>(m(z()),p(Z)),()=>{z()&&p(Z)&&setTimeout(()=>p(Z)?.focus(),50)}),y(),S();var Q=i();a(`keydown`,C,X);var $=x(Q),ue=e=>{var t=F(),i=E(t),l=E(i),d=w(E(l),2),m=E(d);ie(m,{size:18}),u(d),u(l);var _=w(l,2),y=E(_),b=w(E(y),2);M(b),T(b,e=>A(Z,e),()=>p(Z)),j(2),u(y);var x=w(y,2),S=w(E(x),2);M(S);var C=w(S,2),O=w(E(C)),L=e=>{var t=ae();f(e,t)};o(O,e=>{p(G)&&e(L)}),u(C),u(x);var z=w(x,2),B=w(E(z),2);s(B,5,()=>K,r,(e,t)=>{var r=P();let i;var s=E(r);M(s);var l,d=w(s,2),m=E(d),_=E(m),v=g(_,!0),y=w(_,2),b=e=>{var n=oe(),r=g(n,!0);k(()=>N(r,(p(t),c(()=>p(t).id)))),f(e,n)};o(y,e=>{p(t),c(()=>p(t).id!==`custom`)&&e(b)}),u(m);var x=w(m,2),S=e=>{var t=se();M(t),h(t,()=>p(W),e=>A(W,e)),a(`click`,t,ee(function(e){D.call(this,I,e)})),f(e,t)};o(x,e=>{p(t),p(U),c(()=>p(t).id===`custom`&&p(U)===`custom`)&&e(S)}),u(d),u(r),k(()=>{i=n(r,1,`radio-option svelte-1c1mvak`,null,i,{selected:p(U)===p(t).id}),l!==(l=(p(t),c(()=>p(t).id)))&&(s.value=(s.__value=l)??``),N(v,(p(t),c(()=>p(t).label)))}),te(R,[],s,()=>(p(t),c(()=>p(t).id),p(U)),e=>A(U,e)),f(e,r)}),u(B),u(z);var Y=w(z,2),X=E(Y),Q=w(X,2),$=E(Q);re($,{name:`Zap`,size:14}),j(),u(Q),u(Y),u(_),u(i),u(t),k(e=>Q.disabled=e,[()=>(p(V),p(U),p(W),c(()=>!p(V).trim()||p(U)===`custom`&&!p(W).trim()))]),a(`click`,d,J),h(b,()=>p(V),e=>A(V,e)),a(`input`,b,le),h(S,()=>p(H),e=>A(H,e)),a(`input`,S,ce),a(`click`,X,J),a(`submit`,_,ne(q)),a(`click`,t,v(J)),f(e,t)};o($,e=>{z()&&e(ue)}),f(d,Q),l()}export{I as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{$ as e,Ct as t,D as n,F as r,H as i,J as a,L as o,P as s,Q as c,S as l,St as u,Tt as d,U as f,V as p,X as m,Y as h,_ as g,a as _,at as v,ct as y,d as ee,et as te,i as b,it as ne,l as re,mt as ie,nt as x,o as S,ot as C,rt as w,t as T,tt as E,ut as D,wt as O,y as k,z as A}from"./legacy-DIu3XRwl.js";import{A as ae,I as oe,O as se,R as j,j as ce,k as le}from"./index-BXYXSdgh.js";import{loadProjectSettings as M,saveProjectSettings as N}from"./projectSettingsApi-C1WvIwfP.js";var P=new Set([`$$slots`,`$$events`,`$$legacy`]);function ue(e,t){let n=_(t,P),r=[[`path`,{d:`M10 11v6`}],[`path`,{d:`M14 11v6`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`}],[`path`,{d:`M3 6h18`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`}]];j(e,S({name:`trash-2`},()=>n,{get iconNode(){return r}}))}var de=f(`<span> </span>`),fe=f(`<div class="credentials-status svelte-9d4ggp"><!> <small class="svelte-9d4ggp">Add missing values to <code>~/.cascade/credentials.yaml</code> or the file named by <code>CASCADE_CREDENTIALS</code>. Values are never shown here.</small></div>`),pe=f(`<div class="empty-state svelte-9d4ggp"><!> <p class="svelte-9d4ggp">No project packages configured</p> <button class="add-button svelte-9d4ggp"><!> Add Package</button></div>`),me=f(`<div class="package-item svelte-9d4ggp"><div class="package-info svelte-9d4ggp"><span class="package-alias svelte-9d4ggp"> </span> <span class="package-path svelte-9d4ggp"> </span></div> <button class="remove-button svelte-9d4ggp" aria-label="Remove package"><!></button></div>`),he=f(`<button class="add-button secondary svelte-9d4ggp"><!> Add Package</button>`),ge=f(`<div class="packages-list svelte-9d4ggp"></div> <!>`,1),_e=f(`<div class="error-message svelte-9d4ggp"><!> </div>`),ve=f(`<div class="add-form svelte-9d4ggp"><div class="form-row svelte-9d4ggp"><label for="package-path" class="svelte-9d4ggp">Path</label> <div class="input-with-button svelte-9d4ggp"><input id="package-path" type="text" placeholder="./src or ../shared-lib" class="svelte-9d4ggp"/> <button class="browse-button svelte-9d4ggp" title="Browse folder"><!></button></div></div> <div class="form-row svelte-9d4ggp"><label for="package-alias" class="svelte-9d4ggp">Alias</label> <input id="package-alias" type="text" placeholder="myproject" class="svelte-9d4ggp"/></div> <!> <div class="form-actions svelte-9d4ggp"><button class="cancel-button svelte-9d4ggp">Cancel</button> <button class="confirm-button svelte-9d4ggp">Add Package</button></div></div>`),ye=f(`<div class="modal-overlay svelte-9d4ggp"><div class="modal svelte-9d4ggp" role="dialog" aria-modal="true" aria-labelledby="modal-title"><div class="modal-header svelte-9d4ggp"><h2 id="modal-title" class="svelte-9d4ggp"><!> Project Settings</h2> <button class="close-button svelte-9d4ggp" aria-label="Close"><!></button></div> <div class="modal-body svelte-9d4ggp"><section class="section svelte-9d4ggp"><h3 class="svelte-9d4ggp">Graph Metadata <small class="svelte-9d4ggp">(current .cascade file)</small></h3> <div class="form-row svelte-9d4ggp"><label for="graph-name" class="svelte-9d4ggp">Name</label><input id="graph-name" class="svelte-9d4ggp"/></div> <div class="form-row svelte-9d4ggp"><label for="graph-description" class="svelte-9d4ggp">Description</label><input id="graph-description" class="svelte-9d4ggp"/></div> <div class="form-row svelte-9d4ggp"><label for="graph-author" class="svelte-9d4ggp">Author</label><input id="graph-author" class="svelte-9d4ggp"/></div> <div class="form-row svelte-9d4ggp"><label for="graph-created" class="svelte-9d4ggp">Created</label><input id="graph-created" readonly="" class="svelte-9d4ggp"/></div></section> <section class="section svelte-9d4ggp"><h3 class="svelte-9d4ggp">Project Manifest <small class="svelte-9d4ggp">(cascade.json, shared by every graph)</small></h3> <div class="form-row svelte-9d4ggp"><label for="project-name" class="svelte-9d4ggp">Project name</label><input id="project-name" class="svelte-9d4ggp"/></div> <div class="form-row svelte-9d4ggp"><label for="commands-json" class="svelte-9d4ggp">Allowed commands</label><textarea id="commands-json" rows="4" class="svelte-9d4ggp"></textarea></div> <div class="form-row svelte-9d4ggp"><label for="settings-json" class="svelte-9d4ggp">Node settings</label><textarea id="settings-json" rows="5" class="svelte-9d4ggp"></textarea></div> <div class="form-row svelte-9d4ggp"><label for="credentials-list" class="svelte-9d4ggp">Required credentials</label><textarea id="credentials-list" rows="3" placeholder="one credential name per line" class="svelte-9d4ggp"></textarea></div> <!></section> <section class="section svelte-9d4ggp"><h3 class="svelte-9d4ggp">Project Packages</h3> <p class="section-description svelte-9d4ggp">Add local folders as packages. Each package gets an alias that you can use to import modules. <br/> Example: <code class="svelte-9d4ggp">myproject.filters.Blur</code> for file <code class="svelte-9d4ggp">./src/filters/Blur.ts</code></p> <!> <!></section> <section class="section svelte-9d4ggp"><h3 class="svelte-9d4ggp">Project Info</h3> <div class="info-grid svelte-9d4ggp"><div class="info-item svelte-9d4ggp"><span class="info-label svelte-9d4ggp">Embedded Modules</span> <span class="info-value svelte-9d4ggp"> </span></div> <div class="info-item svelte-9d4ggp"><span class="info-label svelte-9d4ggp">External Modules</span> <span class="info-value svelte-9d4ggp"> </span></div></div></section></div> <div class="modal-footer svelte-9d4ggp"><button class="cancel-button svelte-9d4ggp">Cancel</button> <button class="save-button svelte-9d4ggp">Save Changes</button></div></div></div>`);function F(f,_){t(_,!1);let S=b(_,`open`,12,!1),j=b(_,`graph`,12,void 0),P=T(),F=y([]),I=y(``),L=y(``),R=y(!1),z=y(``),B=y(``),V=y(``),H=y(``),U=y(``),W=y(`{}`),G=y(`{}`),K=y(``),q=y([]),J=y(!1),Y=y(!1);function X(){S(!1),P(`close`)}async function be(){D(z,``);let e,t;try{if(e=JSON.parse(m(W)||`{}`),t=JSON.parse(m(G)||`{}`),m(Y)){let n=await N({name:m(U).trim(),commands:e,settings:t,credentials:m(K).split(/\r?\n|,/).map(e=>e.trim()).filter(Boolean)});D(q,n.requiredCredentials)}}catch(e){D(z,e instanceof Error?e.message:String(e));return}j()&&(j(j().project.name=m(B).trim(),!0),j(j().project.description=m(V).trim(),!0),j(j().project.author=m(H).trim(),!0),j(j().project.packages=[...m(F)],!0),m(F).forEach(e=>{j().moduleResolver.addProjectPackage(e)})),P(`save`,{packages:[...m(F)],graphName:m(B).trim(),projectName:m(U).trim(),missingCredentials:m(q).filter(e=>!e.set).map(e=>e.name)}),X()}function xe(){if(D(z,``),!m(I).trim()){D(z,`Path is required`);return}if(!m(L).trim()){D(z,`Alias is required`);return}if(!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(m(L))){D(z,`Alias must start with a letter and contain only letters, numbers, and underscores`);return}if(m(F).some(e=>e.alias===m(L))){D(z,`Alias "${m(L)}" already exists`);return}D(F,[...m(F),{path:m(I).trim(),alias:m(L).trim()}]),D(I,``),D(L,``),D(R,!1)}function Se(e){D(F,m(F).filter((t,n)=>n!==e))}function Z(e){e.key===`Escape`&&(m(R)?D(R,!1):X())}function Q(e){let t=e.replace(/\\/g,`/`).split(`/`).filter(Boolean);return(t[t.length-1]||`mypackage`).replace(/[^a-zA-Z0-9]/g,``).toLowerCase()||`mypackage`}e(()=>(h(S()),h(j())),()=>{S()&&j()&&(D(F,[...j().project.packages]),D(R,!1),D(z,``),D(I,``),D(L,``))}),e(()=>h(S()),()=>{S()||D(J,!1)}),e(()=>(h(S()),h(j()),m(J),M),()=>{S()&&j()&&!m(J)&&(D(J,!0),D(B,j().project.name??``),D(V,j().project.description??``),D(H,j().project.author??``),M().then(e=>{D(Y,!0),D(U,e.manifest.name),D(W,JSON.stringify(e.manifest.commands,null,2)),D(G,JSON.stringify(e.manifest.settings,null,2)),D(K,e.manifest.credentials.join(`
|
|
2
|
-
`)),D(q,e.requiredCredentials)}).catch(()=>{D(Y,!1)}))}),e(()=>(m(I),m(L)),()=>{m(I)&&!m(L)&&D(L,Q(m(I)))}),te(),re();var $=i();a(`keydown`,x,Z);var Ce=ne($),we=e=>{var t=ye(),i=w(t),u=w(i),f=w(u),_=w(f);ae(_,{size:20}),O(),d(f);var y=C(f,2),te=w(y);se(te,{size:20}),d(y),d(u);var b=C(u,2),re=w(b),x=C(w(re),2),S=C(w(x));k(S),d(x);var T=C(x,2),M=C(w(T));k(M),d(T);var N=C(T,2),P=C(w(N));k(P),d(N);var J=C(N,2),Y=C(w(J));k(Y),d(J),d(re);var Z=C(re,2),Q=C(w(Z),2),$=C(w(Q));k($),d(Q);var Ce=C(Q,2),we=C(w(Ce));ie(we),d(Ce);var Te=C(Ce,2),Ee=C(w(Te));ie(Ee),d(Te);var De=C(Te,2),Oe=C(w(De));ie(Oe),d(De);var ke=C(De,2),Ae=e=>{var t=fe(),i=w(t);s(i,1,()=>m(q),r,(e,t)=>{var r=de();let i;var a=v(r);E(()=>{i=n(r,1,`svelte-9d4ggp`,null,i,{set:m(t).set}),A(a,`${m(t),c(()=>m(t).name)??``}: ${m(t),c(()=>m(t).set?`set`:`not set`)??``}`)}),p(e,r)}),O(2),d(t),p(e,t)};o(ke,e=>{m(q),c(()=>m(q).length)&&e(Ae)}),d(Z);var je=C(Z,2),Me=C(w(je),4),Ne=e=>{var t=pe(),n=w(t);ce(n,{size:32});var r=C(n,4),i=w(r);le(i,{size:16}),O(),d(r),d(t),a(`click`,r,()=>D(R,!0)),p(e,t)},Pe=e=>{var t=ge(),n=ne(t);s(n,5,()=>m(F),r,(e,t,n)=>{var r=me(),i=w(r),o=w(i),s=v(o,!0),l=C(o,2),u=v(l,!0);d(i);var f=C(i,2);ue(w(f),{size:16}),d(f),d(r),E(()=>{A(s,(m(t),c(()=>m(t).alias))),A(u,(m(t),c(()=>m(t).path)))}),a(`click`,f,()=>Se(n)),p(e,r)}),d(n);var i=C(n,2),l=e=>{var t=he(),n=w(t);le(n,{size:16}),O(),d(t),a(`click`,t,()=>D(R,!0)),p(e,t)};o(i,e=>{m(R)||e(l)}),p(e,t)};o(Me,e=>{m(F),m(R),c(()=>m(F).length===0&&!m(R))?e(Ne):e(Pe,-1)});var Fe=C(Me,2),Ie=e=>{var t=ve(),n=w(t),r=C(w(n),2),i=w(r);k(i);var s=C(i,2),c=w(s);ce(c,{size:16}),d(s),d(r),d(n);var l=C(n,2),u=C(w(l),2);k(u),d(l);var f=C(l,2),h=e=>{var t=_e(),n=w(t);oe(n,{size:14});var r=C(n);d(t),E(()=>A(r,` ${m(z)??``}`)),p(e,t)};o(f,e=>{m(z)&&e(h)});var _=C(f,2),v=w(_),y=C(v,2);d(_),d(t),g(i,()=>m(I),e=>D(I,e)),g(u,()=>m(L),e=>D(L,e)),a(`click`,v,()=>D(R,!1)),a(`click`,y,xe),p(e,t)};o(Fe,e=>{m(R)&&e(Ie)}),d(je);var Le=C(je,2),Re=C(w(Le),2),ze=w(Re),Be=C(w(ze),2),Ve=v(Be,!0);d(ze);var He=C(ze,2),Ue=C(w(He),2),We=v(Ue,!0);d(He),d(Re),d(Le),d(b);var Ge=C(b,2),Ke=w(Ge),qe=C(Ke,2);d(Ge),d(i),d(t),E((e,t)=>{l(Y,(h(j()),c(()=>j()?.created??``))),A(Ve,e),A(We,t)},[()=>(h(j()),c(()=>j()?Object.keys(j().moduleResolver.exportConfig().embeddedModules).length:0)),()=>(h(j()),c(()=>j()?Object.keys(j().moduleResolver.exportConfig().externalModules).length:0))]),a(`click`,y,X),g(S,()=>m(B),e=>D(B,e)),g(M,()=>m(V),e=>D(V,e)),g(P,()=>m(H),e=>D(H,e)),g($,()=>m(U),e=>D(U,e)),g(we,()=>m(W),e=>D(W,e)),g(Ee,()=>m(G),e=>D(G,e)),g(Oe,()=>m(K),e=>D(K,e)),a(`click`,Ke,X),a(`click`,qe,be),a(`click`,t,ee(X)),p(e,t)};o(Ce,e=>{S()&&e(we)}),p(f,$),u()}export{F as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,Ct as t,D as n,F as r,H as i,J as a,L as o,P as s,Q as c,St as l,Tt as u,U as d,V as f,X as p,Y as m,_ as h,at as g,b as _,ct as v,et as y,gt as b,ht as x,i as S,it as C,l as w,lt as T,nt as E,ot as D,p as O,rt as k,t as A,tt as j,ut as M,y as N,z as P}from"./legacy-DIu3XRwl.js";import{i as F,n as I,r as L}from"./index-BXYXSdgh.js";var R=d(`<button type="button" role="radio"> </button>`),z=d(`<div class="overlay svelte-4828wi"><div class="dialog svelte-4828wi"><header class="svelte-4828wi"><h2 class="svelte-4828wi">Settings</h2> <button class="icon-button svelte-4828wi" aria-label="Close settings">×</button></header> <main class="svelte-4828wi"><h3 class="svelte-4828wi">Appearance</h3> <div class="setting-row svelte-4828wi"><span class="setting-label svelte-4828wi" id="theme-label">Theme</span> <div class="segmented svelte-4828wi" role="radiogroup" aria-labelledby="theme-label"></div></div> <h3 class="section svelte-4828wi">Editor</h3> <div class="setting-row svelte-4828wi"><label for="font-size">Font size</label> <input id="font-size" type="range" min="10" max="24" step="1"/> <output class="svelte-4828wi"> </output></div></main> <footer class="svelte-4828wi"><button class="svelte-4828wi">Cancel</button> <button class="primary svelte-4828wi">Save</button></footer></div></div>`);function B(d,B){t(B,!1);let V=()=>b(L,`$settingsStore`,H),[H,U]=x(),W={auto:`Auto`,dark:`Dark`,light:`Light`},G=S(B,`open`,12,!1),K=A(),q=v(),J=v(),Y=v(!1);function X(){G(!1),K(`close`)}function Z(){I(p(q)),X()}e(()=>(m(G()),p(Y),V()),()=>{G()&&!p(Y)?(M(Y,!0),M(q,structuredClone(V()))):!G()&&p(Y)&&M(Y,!1)}),y(),w();var Q=i();a(`keydown`,E,e=>e.key===`Escape`&&X()),a(`mousedown`,E,e=>G()&&e.target===p(J)&&X());var $=C(Q),ee=e=>{var t=z(),i=k(t),o=k(i),l=D(k(o),2);u(o);var d=D(o,2),m=D(k(d),2),v=D(k(m),2);s(v,5,()=>F,r,(e,t)=>{var r=R();let i;var o=g(r,!0);j(()=>{_(r,`aria-checked`,(p(q),p(t),c(()=>p(q).appearance.theme===p(t)))),i=n(r,1,`svelte-4828wi`,null,i,{selected:p(q).appearance.theme===p(t)}),P(o,(p(t),c(()=>W[p(t)])))}),a(`click`,r,()=>T(q,p(q).appearance.theme=p(t))),f(e,r)}),u(v),u(m);var y=D(m,4),b=D(k(y),2);N(b);var x=D(b,2),S=g(x);u(y),u(d);var C=D(d,2),w=k(C),E=D(w,2);u(C),u(i),u(t),O(t,e=>M(J,e),()=>p(J)),j(()=>P(S,`${p(q),c(()=>p(q).editor.fontSize)??``}px`)),a(`click`,l,X),h(b,()=>p(q).editor.fontSize,e=>T(q,p(q).editor.fontSize=e)),a(`click`,w,X),a(`click`,E,Z),f(e,t)};o($,e=>{G()&&e(ee)}),f(d,Q),l(),U()}export{B as default};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{$ as e,Ct as t,F as n,H as r,J as i,L as a,P as o,Q as s,St as c,Tt as l,U as u,V as d,X as f,Y as p,at as m,ct as h,d as g,et as _,i as v,it as y,l as b,nt as x,ot as S,rt as C,t as w,tt as T,ut as E,wt as D,z as O}from"./legacy-DIu3XRwl.js";import{O as k}from"./index-BXYXSdgh.js";var A=u(`<p class="note svelte-19fwuux">Reading history…</p>`),j=u(`<p class="note error svelte-19fwuux"> </p>`),M=u(`<p class="note svelte-19fwuux">This project isn't a git repository yet, so there's nothing to go back to. The next
|
|
2
|
-
save starts a history.</p>`),N=u(`<p class="note svelte-19fwuux">No versions yet. The next save becomes the first one.</p>`),P=u(`<p class="note dirty svelte-19fwuux">Unsaved changes on disk aren't in any version yet.</p>`),F=u(`<span class="tag svelte-19fwuux">current</span>`),I=u(`<li class="svelte-19fwuux"><div class="meta svelte-19fwuux"><span class="date svelte-19fwuux"> </span> <span class="sha svelte-19fwuux"> </span> <!></div> <div class="message svelte-19fwuux"> </div> <button class="restore svelte-19fwuux"> </button></li>`),L=u(`<!> <ul class="versions svelte-19fwuux"></ul> <p class="note footnote svelte-19fwuux">Restoring loads that version into the editor as unsaved work. Nothing is overwritten
|
|
3
|
-
until you save, and saving it becomes the next version — so this is always reversible.</p>`,1),R=u(`<div class="dialog-overlay svelte-19fwuux"><div class="dialog svelte-19fwuux" role="dialog" aria-modal="true" aria-labelledby="version-history-title"><div class="dialog-header svelte-19fwuux"><h2 id="version-history-title" class="svelte-19fwuux">Version History</h2> <button class="close-button svelte-19fwuux" aria-label="Close"><!></button></div> <div class="dialog-body svelte-19fwuux"><p class="subject svelte-19fwuux"> </p> <!></div></div></div>`);function z(u,z){t(z,!1);let B=v(z,`filename`,8,null),V=v(z,`open`,8,!1),H=w(),U=h([]),W=h(!1),G=h(!0),K=h(!1),q=h(null),J=h(null);async function Y(e){E(K,!0),E(q,null);try{let t=await fetch(`/api/graph/${encodeURIComponent(e)}/versions`);if(!t.ok)throw Error(await t.text());let n=await t.json();E(U,n.versions??[]),E(W,!!n.dirty),E(G,n.isGitRepo!==!1)}catch(e){E(q,e instanceof Error?e.message:String(e)),E(U,[])}finally{E(K,!1)}}async function X(e){if(B()){E(J,e.sha),E(q,null);try{let t=await fetch(`/api/graph/${encodeURIComponent(B())}/versions/${e.sha}`);if(!t.ok)throw Error(await t.text());H(`restore`,{json:await t.json(),version:e})}catch(e){E(q,e instanceof Error?e.message:String(e))}finally{E(J,null)}}}function Z(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(void 0,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}function Q(){H(`close`)}function ee(e){e.key===`Escape`&&Q()}e(()=>(p(V()),p(B())),()=>{V()&&B()&&Y(B())}),_(),b();var $=r();i(`keydown`,x,ee);var te=y($),ne=e=>{var t=R(),r=C(t),c=C(r),u=S(C(c),2),p=C(u);k(p,{size:18}),l(u),l(c);var h=S(c,2),_=C(h),v=m(_,!0),b=S(_,2),x=e=>{var t=A();d(e,t)},w=e=>{var t=j(),n=m(t,!0);T(()=>O(n,f(q))),d(e,t)},E=e=>{var t=M();d(e,t)},z=e=>{var t=N();d(e,t)},V=e=>{var t=L(),r=y(t),c=e=>{var t=P();d(e,t)};a(r,e=>{f(W)&&e(c)});var u=S(r,2);o(u,5,()=>f(U),n,(e,t,n)=>{var r=I(),o=C(r),c=C(o),u=m(c,!0),p=S(c,2),h=m(p,!0),g=S(p,2),_=e=>{var t=F();d(e,t)};a(g,e=>{n===0&&e(_)}),l(o);var v=S(o,2),y=m(v,!0),b=S(v,2),x=m(b,!0);l(r),T(e=>{O(u,e),O(h,(f(t),s(()=>f(t).shortSha))),O(y,(f(t),s(()=>f(t).message))),b.disabled=f(J)!==null,O(x,(f(J),f(t),s(()=>f(J)===f(t).sha?`Opening…`:`Restore`)))},[()=>(f(t),s(()=>Z(f(t).date)))]),i(`click`,b,()=>X(f(t))),d(e,r)}),l(u),D(2),d(e,t)};a(b,e=>{f(K)?e(x):f(q)?e(w,1):f(G)?(f(U),s(()=>f(U).length===0)?e(z,3):e(V,-1)):e(E,2)}),l(h),l(r),l(t),T(()=>O(v,B()??`No project file`)),i(`click`,u,Q),i(`click`,t,g(Q)),d(e,t)};a(te,e=>{V()&&e(ne)}),d(u,$),c()}export{z as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e,o as t,s as n}from"./nodeTypeUtils-CweA3NHd.js";import{S as r,c as i,d as a,f as o,l as s,m as c,p as l,u}from"./index-BXYXSdgh.js";var d=/^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;function f(e){return Number.isFinite(e)?e<0?0:e>1?1:e:0}function p(e){return Math.round(f(e)*255)}function m(e){return p(e).toString(16).padStart(2,`0`)}function h(e){return String(Number(f(e).toFixed(4)))}function g(e){return(e.length<=4?[...e].map(e=>`${e}${e}`):e.match(/../g)??[]).map(e=>Number.parseInt(e,16)/255)}var _=Object.freeze({fromHex(e){if(!d.test(e))throw TypeError(`color/invalid-hex: ${e} is not #rgb, #rgba, #rrggbb or #rrggbbaa`);let t=g(e.slice(1));return[t[0],t[1],t[2],t[3]??1]},isHex(e){return typeof e==`string`&&d.test(e)},toHex(e,t=!1){return`#${m(e[0])}${m(e[1])}${m(e[2])}${t?m(e[3]):``}`},toString(e){let t=`${p(e[0])}, ${p(e[1])}, ${p(e[2])}`;return f(e[3])>=1?`rgb(${t})`:`rgba(${t}, ${h(e[3])})`},alpha(e){return f(e[3])},opaque(e){return[f(e[0]),f(e[1]),f(e[2]),1]},fromComponents(e,t=0,n=4){let r=r=>r<n?f(e[t+r]??0):0;return[r(0),r(1),r(2),n<4?1:r(3)]}}),v=[`poly`,`bezier`,`mesh`,`packed`],y=new Set([`f32`,`f64`,`i32`,`u8`]),b=/^[A-Za-z_][A-Za-z0-9_]*$/,x=new Set([`__proto__`,`prototype`,`constructor`]);function S(e,t){throw TypeError(`geometry/${e}: ${t}`)}function ee(){return{vertexPoints:new Int32Array,offsets:Int32Array.of(0),kinds:new Uint8Array,closed:new Uint8Array}}function C(e){return e===`f64`?Float64Array:e===`f32`?Float32Array:e===`i32`?Int32Array:Uint8Array}function w(e,t){return Number.isFinite(t)?e===`f64`||e===`f32`?!0:Number.isInteger(t)?e===`u8`?t>=0&&t<=255:t>=-2147483648&&t<=2147483647:!1:!1}function T(e,t){return(!Number.isSafeInteger(t)||t<0)&&S(`attribute-length`,`attribute array length must be a non-negative safe integer`),e===`f64`?new Float64Array(t):e===`f32`?new Float32Array(t):e===`i32`?new Int32Array(t):new Uint8Array(t)}function E(e,t){let n=T(e,t.length);for(let r=0;r<t.length;r+=1){let i=t[r];w(e,i)||S(`attribute-value`,`${String(i)} cannot be represented as ${e}`),n[r]=i,Number.isFinite(n[r])||S(`attribute-value`,`${String(i)} overflows ${e}`)}return n}function D(e){return e.storage===`string`}function O(e,t){return t===`point`?e.pointCount:t===`vertex`?e.vertexCount:t===`primitive`?e.primitiveCount:1}function k(e,t){(!b.test(e)||x.has(e))&&S(`invalid-name`,`${t}.${e} is not a valid attribute name`)}function A(e,t,n){for(let[r,i]of Object.entries(e)){if(k(r,n),D(i)){i.data instanceof Int32Array||S(`attribute-storage`,`${n}.${r} string indices must be Int32Array`),i.size!==1&&S(`string-size`,`${n}.${r} string attributes have size 1`),i.data.length!==t&&S(`attribute-length`,`${n}.${r} has ${i.data.length} entries for ${t} elements`);for(let e of i.data)(e<-1||e>=i.table.length)&&S(`string-index`,`${n}.${r} references table entry ${e}`);(!Array.isArray(i.table)||i.table.some(e=>typeof e!=`string`))&&S(`string-table`,`${n}.${r} needs a string table`);continue}(!Number.isInteger(i.size)||i.size<1)&&S(`attribute-size`,`${n}.${r} needs a size of at least 1`),y.has(i.storage)||S(`attribute-storage`,`${n}.${r} has an unknown storage ${String(i.storage)}`),i.data instanceof C(i.storage)||S(`attribute-storage`,`${n}.${r} declares ${i.storage} but uses ${i.data?.constructor?.name??`unknown storage`}`),i.data.length!==i.size*t&&S(`attribute-length`,`${n}.${r} has ${i.data.length} values for ${t} elements of size ${i.size}`);for(let e of i.data)Number.isFinite(e)||S(`non-finite`,`${n}.${r} contains ${String(e)}`)}}function te(e,t,n){for(let[r,i]of Object.entries(e)){k(r,n),i.length!==t&&S(`group-length`,`${n}.${r} covers ${i.length} of ${t} elements`);for(let e of i)e!==0&&e!==1&&S(`group-mask`,`${n}.${r} contains ${e}; masks contain only 0 or 1`)}}function j(e){let t=e.pointCount;(!Number.isSafeInteger(t)||t<0)&&S(`point-count`,`pointCount must be a non-negative safe integer`);let n=e.topology??ee();(!(n.vertexPoints instanceof Int32Array)||!(n.offsets instanceof Int32Array)||!(n.kinds instanceof Uint8Array)||!(n.closed instanceof Uint8Array))&&S(`topology-storage`,`topology uses Int32Array indices and Uint8Array flags`);let r=n.offsets.length-1;r<0&&S(`offsets`,`topology.offsets needs primitiveCount + 1 entries`),n.offsets[0]!==0&&S(`offsets`,`topology.offsets starts at 0`);for(let e=1;e<=r;e+=1)n.offsets[e]<n.offsets[e-1]&&S(`offsets`,`topology.offsets must not decrease`);let i=n.offsets[r];i!==n.vertexPoints.length&&S(`offsets`,`topology.offsets ends at ${i} for ${n.vertexPoints.length} vertices`),(n.kinds.length!==r||n.closed.length!==r)&&S(`topology-length`,`topology.kinds and topology.closed need ${r} entries`);for(let e of n.vertexPoints)(e<0||e>=t)&&S(`vertex-point`,`vertex references point ${e}`);for(let e of n.kinds)e>=v.length&&S(`primitive-kind`,`unknown primitive kind ${e}`);for(let e of n.closed)e!==0&&e!==1&&S(`closed-mask`,`topology.closed contains ${e}; flags contain only 0 or 1`);let a=v.indexOf(`bezier`);for(let e=0;e<r;e+=1){if(n.kinds[e]!==a)continue;let t=n.offsets[e+1]-n.offsets[e],r=n.closed[e]===1;(t<(r?3:4)||(t-+!r)%3!=0)&&S(`bezier-arity`,`primitive ${e} has ${t} vertices, and a ${r?`closed`:`open`} bezier needs ${r?`3n`:`3n + 1`}`)}let o=e.point,s=o.P;s===void 0&&S(`missing-position`,`point.P is required on every geometry`),D(s)&&S(`position-storage`,`point.P must be a numeric attribute`),s.size!==2&&s.size!==3&&S(`position-size`,`point.P must have a size of 2 or 3`),A(o,t,`point`);let c=e.vertex??{};A(c,i,`vertex`);let l=e.primitive??{};A(l,r,`primitive`);let u=e.pointGroups??{};te(u,t,`pointGroups`);let d=e.primitiveGroups??{};te(d,r,`primitiveGroups`);let f=e.detail??{};for(let[e,t]of Object.entries(f))k(e,`detail`),typeof t==`number`?Number.isFinite(t)||S(`non-finite`,`detail.${e} contains ${String(t)}`):typeof t!=`string`&&(!Array.isArray(t)||t.some(e=>!Number.isFinite(e)))&&S(`detail-value`,`detail.${e} must be a finite number, string, or finite number array`);return ne({kind:`geometry`,pointCount:t,vertexCount:i,primitiveCount:r,topology:n,point:o,vertex:c,primitive:l,detail:f,pointGroups:u,primitiveGroups:d})}function ne(e){for(let t of[`point`,`vertex`,`primitive`]){let n=e[t];for(let e of Object.values(n))D(e)&&Object.freeze(e.table),Object.freeze(e);Object.freeze(n)}Object.freeze(e.topology);for(let t of Object.values(e.detail))Array.isArray(t)&&Object.freeze(t);return Object.freeze(e.detail),Object.freeze(e.pointGroups),Object.freeze(e.primitiveGroups),Object.freeze(e)}function M(e=2){return j({pointCount:0,point:{P:{storage:`f64`,size:e,data:new Float64Array}}})}function N(e,t){throw TypeError(`geometry/${e}: ${t}`)}function re(e,t){return e[t]}function P(e,t,n){if(e!==void 0)return D(e)&&N(`attribute-storage`,`${t} must be numeric`),n!==void 0&&!n.includes(e.size)&&N(`attribute-size`,`${t} has size ${e.size}; expected ${n.join(` or `)}`),e}function F(e,t,n=0){return e.data[t*e.size+n]}function ie(e,t){let n=Array(e.size);for(let r=0;r<e.size;r+=1)n[r]=e.data[t*e.size+r];return n}function ae(e,t){let n=e.data[t];return n<0?``:e.table[n]??``}function oe(e){return e.point.P.size}function I(e){return e.point.P}function se(e,t){return ie(I(e),t)}function ce(e,t,n=`f64`,r){let i=T(n,t*e);if(r!==void 0){let n=typeof r==`number`?[r]:r;for(let r=0;r<e;r+=1)for(let e=0;e<t;e+=1)i[r*t+e]=n[e%Math.max(n.length,1)]??0}return{storage:n,size:t,data:i}}function L(e){let t=[],n=new Map,r=new Int32Array(e.length);for(let i=0;i<e.length;i+=1){let a=e[i],o=n.get(a);o===void 0&&(o=t.length,t.push(a),n.set(a,o)),r[i]=o}return{storage:`string`,size:1,table:t,data:r}}function R(e,t,n){return j({pointCount:e.pointCount,point:t===`point`?n:e.point,vertex:t===`vertex`?n:e.vertex,primitive:t===`primitive`?n:e.primitive,detail:e.detail,topology:e.topology,pointGroups:e.pointGroups,primitiveGroups:e.primitiveGroups})}function z(e,t,n,r){return R(e,t,{...e[t],[n]:r})}function le(e){return E(e.storage,e.data)}var B={point:`pointGroups`,primitive:`primitiveGroups`};function ue(e,t,n){return e[B[t]][n]}function de(e){let t=[];for(let n=0;n<e.length;n+=1)e[n]&&t.push(n);return t}function fe(e,t){return Object.keys(e[B[t]])}function V(e){let[t,n]=e.translate??[0,0],[r,i]=e.scale??[1,1],[a,o]=e.pivot??[0,0],s=e.rotate??0;if(![t,n,r,i,a,o,s].every(Number.isFinite))throw TypeError(`geometry/transform: transform parameters must be finite`);let c=s*Math.PI/180,l=Math.cos(c),u=Math.sin(c),d=l*r,f=u*r,p=-u*i,m=l*i;return[d,f,0,p,m,0,t+a-(d*a+p*o),n+o-(f*a+m*o),1]}function H(e){if(e.length===0)return M(2);if(e.length===1)return e[0];let t=U(e,e=>e.pointCount),n=U(e,e=>e.vertexCount),r=U(e,e=>e.primitiveCount),i=new Int32Array(n),a=new Int32Array(r+1),o=new Uint8Array(r),s=new Uint8Array(r),c=0,l=0,u=0;for(let t of e){for(let e=0;e<t.vertexCount;e+=1)i[l+e]=t.topology.vertexPoints[e]+c;for(let e=0;e<t.primitiveCount;e+=1)a[u+e]=t.topology.offsets[e]+l,o[u+e]=t.topology.kinds[e],s[u+e]=t.topology.closed[e];c+=t.pointCount,l+=t.vertexCount,u+=t.primitiveCount}a[r]=n;let d={};for(let t of e)for(let[e,n]of Object.entries(t.detail))Object.prototype.hasOwnProperty.call(d,e)||(d[e]=n);return j({pointCount:t,point:G(e,`point`),vertex:G(e,`vertex`),primitive:G(e,`primitive`),detail:d,topology:{vertexPoints:i,offsets:a,kinds:o,closed:s},pointGroups:K(e,`point`),primitiveGroups:K(e,`primitive`)})}function U(e,t){let n=0;for(let r of e)n+=t(r);return n}var W={u8:0,i32:1,f32:2,f64:3};function pe(e,t){return e===t?e:e===`f64`||t===`f64`||e===`i32`&&t===`f32`||e===`f32`&&t===`i32`?`f64`:W[e]>W[t]?e:t}function G(e,t){let n=[];for(let r of e)for(let e of Object.keys(r[t]))n.includes(e)||n.push(e);let r=U(e,e=>O(e,t)),i={};for(let a of n){let n=e.map(e=>e[t][a]).filter(e=>e!==void 0),o=n.filter(D).length;o!==0&&o!==n.length&&N(`attribute-conflict`,`${t}.${a} is a string attribute on one input and numeric on another`),i[a]=o===n.length?he(e,t,a,r):me(e,t,a,r)}return i}function me(e,t,n,r){let i=1,a;for(let r of e){let e=r[t][n];e===void 0||D(e)||(i=Math.max(i,e.size),a=a===void 0?e.storage:pe(a,e.storage))}let o=T(a??`f64`,i*r),s=0;for(let r of e){let e=O(r,t),a=r[t][n];if(a!==void 0&&!D(a))for(let t=0;t<e;t+=1)for(let e=0;e<a.size;e+=1)o[(s+t)*i+e]=a.data[t*a.size+e];s+=e}return{storage:a??`f64`,size:i,data:o}}function he(e,t,n,r){let i=Array(r).fill(``),a=0;for(let r of e){let e=O(r,t),o=r[t][n];if(o!==void 0&&D(o))for(let t=0;t<e;t+=1)i[a+t]=ae(o,t);a+=e}return L(i)}function K(e,t){let n=t===`point`?`pointGroups`:`primitiveGroups`,r=[];for(let t of e)for(let e of Object.keys(t[n]))r.includes(e)||r.push(e);let i=U(e,e=>O(e,t)),a={};for(let o of r){let r=new Uint8Array(i),s=0;for(let i of e){let e=O(i,t),a=i[n][o];if(a!==void 0)for(let t=0;t<e;t+=1)r[s+t]=a[t];s+=e}a[o]=r}return a}function q(e,t){if(t.length!==9&&t.length!==16&&N(`matrix`,`transform needs a mat3 or a mat4`),t.every(Number.isFinite)||N(`matrix`,`transform matrix values must be finite`),e.pointCount===0)return e;let n=I(e),r=n.size,i=le(n);if(t.length===9){let n=t;for(let t=0;t<e.pointCount;t+=1){let e=t*r,a=i[e],o=i[e+1];i[e]=n[0]*a+n[3]*o+n[6],i[e+1]=n[1]*a+n[4]*o+n[7]}}else{let n=t;for(let t=0;t<e.pointCount;t+=1){let e=t*r,a=i[e],o=i[e+1],s=r===3?i[e+2]:0;i[e]=n[0]*a+n[4]*o+n[8]*s+n[12],i[e+1]=n[1]*a+n[5]*o+n[9]*s+n[13],r===3&&(i[e+2]=n[2]*a+n[6]*o+n[10]*s+n[14])}}return R(e,`point`,{...re(e,`point`),P:{storage:n.storage,size:r,data:i}})}function ge(e,t,n={}){let r=oe(e)===3?3:2,i=n.targetGroup===void 0||n.targetGroup===``?void 0:ue(t,`point`,n.targetGroup)??N(`missing-group`,`point group ${n.targetGroup} is not present on the target`),a=i===void 0?_e(t.pointCount):de(i);if(a.length===0||e.pointCount===0)return M(r);let o=n.useTargetOrientations??!0,s=o?P(t.point.pscale,`point.pscale`,[1]):void 0,c=o?P(t.point.N,`point.N`,[2,3]):void 0,l=n.copyNumberAttribute??`copynum`,u=n.transferTargetAttributes??!0?Object.keys(t.point).filter(t=>t!==`P`&&!Object.prototype.hasOwnProperty.call(e.point,t)):[],d=[];for(let n of a){let r=se(t,n),i=s===void 0?1:F(s,n),a=c===void 0?0:Math.atan2(F(c,n,1),F(c,n,0))*180/Math.PI,o=q(e,V({translate:[r[0],r[1]],rotate:a,scale:[i,i]}));l!==``&&(o=z(o,`primitive`,l,{storage:`i32`,size:1,data:new Int32Array(o.primitiveCount).fill(n)}));for(let e of u)o=z(o,`point`,e,ve(t.point[e],n,o.pointCount));d.push(o)}return H(d)}function _e(e){let t=Array(e);for(let n=0;n<e;n+=1)t[n]=n;return t}function ve(e,t,n){return D(e)?L(Array(n).fill(ae(e,t))):ce(n,e.size,e.storage,ie(e,t))}var ye=`cascade.geo`;function J(e){return`${ye}.${e}`}function be(e){let t=e.inputs.source,n=e.inputs.target;if(t===void 0||n===void 0){e.outputs.geometry.set(M(2));return}e.outputs.geometry.set(ge(t,n,{targetGroup:e.props.targetGroup,useTargetOrientations:e.props.useTargetOrientations}))}var xe={kind:`definition-v1`,moduleId:J(`CopyToPoints`),definition:u,loadExecute:async()=>be},Se=class{positions=[];size;storage;vertexPoints=[];offsets=[0];kinds=[];closed=[];attributes={point:{},vertex:{},primitive:{}};detail={};pointGroups=new Map;primitiveGroups=new Map;constructor(e={}){this.size=e.positionSize??2,this.storage=e.positionStorage??`f64`}get pointCount(){return this.positions.length/this.size}get vertexCount(){return this.vertexPoints.length}get primitiveCount(){return this.offsets.length-1}addPoint(e,t,n=0){let r=this.pointCount;return this.positions.push(e,t),this.size===3&&this.positions.push(n),r}addPoints(e){e.length%this.size!==0&&N(`point-stride`,`${e.length} values is not a multiple of the position size ${this.size}`);let t=this.pointCount;for(let t=0;t<e.length;t+=1)this.positions.push(e[t]);return t}addPrimitive(e,t={}){let n=this.primitiveCount;for(let t of e)(!Number.isInteger(t)||t<0||t>=this.pointCount)&&N(`vertex-point`,`primitive ${n} references point ${t} of ${this.pointCount}`),this.vertexPoints.push(t);return this.offsets.push(this.vertexPoints.length),this.kinds.push(v.indexOf(t.kind??`poly`)),this.closed.push(+!!t.closed),n}addPolygon(e,t={}){let n=this.addPoints(e),r=[];for(let e=n;e<this.pointCount;e+=1)r.push(e);return this.addPrimitive(r,t)}setAttribute(e,t,n){return e===`point`&&t===`P`&&N(`set-position`,`point.P is owned by the builder; use addPoint`),this.attributes[e][t]=n,this}setNumericAttribute(e,t,n,r=1,i=`f64`){return this.setAttribute(e,t,{storage:i,size:r,data:E(i,n)})}setStringAttribute(e,t,n){return this.setAttribute(e,t,L(n))}setDetail(e,t){return this.detail[e]=t,this}addToPointGroup(e,t){let n=this.pointGroups.get(e)??new Set;return n.add(t),this.pointGroups.set(e,n),this}addToPrimitiveGroup(e,t){let n=this.primitiveGroups.get(e)??new Set;return n.add(t),this.primitiveGroups.set(e,n),this}build(){let e=this.pointCount,t={};for(let[n,r]of this.pointGroups)t[n]=Ce(r,e);let n={};for(let[e,t]of this.primitiveGroups)n[e]=Ce(t,this.primitiveCount);return j({pointCount:e,point:{...this.attributes.point,P:{storage:this.storage,size:this.size,data:E(this.storage,this.positions)}},vertex:this.attributes.vertex,primitive:this.attributes.primitive,detail:this.detail,topology:{vertexPoints:Int32Array.from(this.vertexPoints),offsets:Int32Array.from(this.offsets),kinds:Uint8Array.from(this.kinds),closed:Uint8Array.from(this.closed)},pointGroups:t,primitiveGroups:n})}};function Ce(e,t){let n=new Uint8Array(t);for(let r of e)(!Number.isInteger(r)||r<0||r>=t)&&N(`group-indices`,`group references element ${r}`),n[r]=1;return n}function Y(e,t){(!Number.isFinite(e[0])||!Number.isFinite(e[1]))&&N(t,`both components must be finite`)}function we(e={}){let[t,n]=e.size??[1,1],[r,i]=e.center??[0,0];Y([t,n],`rectangle-size`),Y([r,i],`rectangle-center`),(t<0||n<0)&&N(`rectangle-size`,`rectangle size must not be negative`);let a=r-t/2,o=r+t/2,s=i-n/2,c=i+n/2,l=new Se;return l.addPolygon([a,s,o,s,o,c,a,c],{closed:!0}),l.build()}function Te(e={}){let[t,n]=e.center??[0,0],[r,i]=e.radius??[1,1];Y([t,n],`circle-center`),Y([r,i],`circle-radius`),(r<0||i<0)&&N(`circle-radius`,`circle radius must not be negative`);let a=new Se;if((e.type??`bezier`)===`poly`){let o=e.divisions??32;(!Number.isSafeInteger(o)||o<3)&&N(`circle-divisions`,`a polygonal circle needs an integer division count of at least 3`);let s=[];for(let e=0;e<o;e+=1){let a=2*Math.PI*e/o;s.push(t+r*Math.cos(a),n+i*Math.sin(a))}return a.addPolygon(s,{closed:!0}),a.build()}let o=4/3*Math.tan(Math.PI/8),s=r*o,c=i*o,l=[t+r,n,t+r,n+c,t+s,n+i,t,n+i,t-s,n+i,t-r,n+c,t-r,n,t-r,n-c,t-s,n-i,t,n-i,t+s,n-i,t+r,n-c];return a.addPolygon(l,{closed:!0,kind:`bezier`}),a.build()}function Ee(e){e.outputs.geometry.set(we({size:e.inputs.size,center:e.inputs.center}))}var De={kind:`definition-v1`,moduleId:J(`Rectangle`),definition:o,loadExecute:async()=>Ee};function Oe(e){e.outputs.geometry.set(Te({center:e.inputs.center,radius:e.inputs.radius,divisions:e.inputs.divisions,type:e.props.type===`poly`?`poly`:`bezier`}))}var ke={kind:`definition-v1`,moduleId:J(`Circle`),definition:s,loadExecute:async()=>Oe};function Ae(e){e.outputs.geometry.set(H(e.inputs.inputs.filter(e=>e!==void 0)))}var je={kind:`definition-v1`,moduleId:J(`Merge`),definition:a,loadExecute:async()=>Ae};function Me(e,t){return v[e.topology.kinds[t]]??`poly`}function Ne(e,t){return e.topology.closed[t]===1}function Pe(e,t){return Me(e,t)===`bezier`}function Fe(e,t){let n=Le(e,t),r=Ne(e,t)?n.length/3:(n.length-1)/3,i=[];for(let e=0;e<r;e+=1){let t=e*3;i.push([n[t],n[t+1],n[t+2],n[(t+3)%n.length]])}return i}function Ie(e,t){return[e.topology.offsets[t],e.topology.offsets[t+1]]}function Le(e,t){let[n,r]=Ie(e,t),i=Array(r-n);for(let t=n;t<r;t+=1)i[t-n]=e.topology.vertexPoints[t];return i}function Re(e){let t=new Uint8Array(e.pointCount);for(let n of e.topology.vertexPoints)t[n]=1;let n=new Uint8Array(e.pointCount);for(let e=0;e<n.length;e+=1)n[e]=+!t[e];return n}function ze(e){if(e.pointCount===0)return;let t=I(e),n=oe(e),r=Array(n).fill(1/0),i=Array(n).fill(-1/0);for(let a=0;a<e.pointCount;a+=1)for(let e=0;e<n;e+=1){let o=t.data[a*n+e];o<r[e]&&(r[e]=o),o>i[e]&&(i[e]=o)}return{min:r,max:i}}var Be=`ungrouped`,Ve=[0,0,0,1];function He(e,t={}){Ke(t);let n=t.margin??0,r=ze(e),i=r===void 0?0:r.min[0]-n,a=r===void 0?0:r.min[1]-n,o=r===void 0?1:r.max[0]+n,s=r===void 0?1:r.max[1]+n,c=Math.max(o-i,2**-52),l=Math.max(s-a,2**-52),u=t.width&&t.width>0?t.width:c,d=t.height&&t.height>0?t.height:l,f=t.precision??3,p=e=>Ge(e,f),m=t.stroke??Ve,h=t.strokeWidth??1,g=t.fill??Ve,v=(t.fillMode??`none`)===`solid`,y=e.primitive.Cd,b=P(e.primitive.width,`primitive.width`,[1]),x=P(e.primitive.opacity,`primitive.opacity`,[1]),S=P(e.point.pscale,`point.pscale`,[1]),ee=e.point.Cd;X(b,`primitive.width`,e=>e>=0,`non-negative`),X(x,`primitive.opacity`,e=>e>=0&&e<=1,`between 0 and 1`),X(S,`point.pscale`,e=>e>=0,`non-negative`);let C=fe(e,`primitive`),w=new Int32Array(e.primitiveCount).fill(-1);for(let t=0;t<C.length;t+=1){let n=e.primitiveGroups[C[t]];for(let r=0;r<e.primitiveCount;r+=1)n[r]===1&&w[r]===-1&&(w[r]=t)}let T=t=>{let n=[`d="${Ue(e,t,p)}"`],r=We(y,t,`primitive`);return r!==void 0&&(n.push(`stroke="${_.toHex(r)}"`),_.alpha(r)<1&&n.push(`stroke-opacity="${p(_.alpha(r))}"`)),b!==void 0&&n.push(`stroke-width="${p(F(b,t))}"`),x!==void 0&&n.push(`opacity="${p(F(x,t))}"`),`<path ${n.join(` `)} />`},E=[];if(C.length===0)for(let t=0;t<e.primitiveCount;t+=1)E.push(Z(T(t),2));else{for(let t=0;t<C.length;t+=1){let n=[];for(let r=0;r<e.primitiveCount;r+=1)w[r]===t&&n.push(Z(T(r),3));E.push(Z(`<g id="${qe(C[t])}">`,2),...n,Z(`</g>`,2))}let t=[];for(let n=0;n<e.primitiveCount;n+=1)w[n]===-1&&t.push(Z(T(n),3));t.length>0&&E.push(Z(`<g id="${Be}">`,2),...t,Z(`</g>`,2))}let D=Re(e),O=I(e);for(let n=0;n<e.pointCount;n+=1){if(D[n]!==1)continue;let e=S===void 0?t.pointRadius??.5:F(S,n),r=We(ee,n,`point`)??m,i=_.alpha(r)<1;E.push(Z(`<circle cx="${p(F(O,n,0))}" cy="${p(F(O,n,1))}" r="${p(e)}" fill="${_.toHex(r)}"${i?` fill-opacity="${p(_.alpha(r))}"`:``} stroke="none" />`,2))}return`${[`<svg xmlns="http://www.w3.org/2000/svg" width="${p(u)}" height="${p(d)}" viewBox="${p(i)} ${p(-s)} ${p(c)} ${p(l)}">`,Z(`<!-- Geometry is +Y up; SVG is +Y down. This is the one flip. -->`,1),Z(`<g transform="scale(1,-1)" fill="${v?_.toHex(g):`none`}"${v&&_.alpha(g)<1?` fill-opacity="${p(_.alpha(g))}"`:``} stroke="${_.toHex(m)}"${_.alpha(m)<1?` stroke-opacity="${p(_.alpha(m))}"`:``} stroke-width="${p(h)}"${t.opacity!==void 0&&t.opacity!==1?` opacity="${p(t.opacity)}"`:``}>`,1),...E,Z(`</g>`,1),`</svg>`].join(`
|
|
2
|
-
`)}\n`}function Ue(e,t,n){let r=I(e),i=e=>`${n(F(r,e,0))} ${n(F(r,e,1))}`,a=Ne(e,t);if(Pe(e,t)){let n=Fe(e,t);if(n.length===0)return``;let r=[`M ${i(n[0][0])}`];for(let[,e,t,a]of n)r.push(`C ${i(e)} ${i(t)} ${i(a)}`);return a&&r.push(`Z`),r.join(` `)}let o=Le(e,t);if(o.length===0)return``;let s=[`M ${i(o[0])}`];for(let e=1;e<o.length;e+=1)s.push(`L ${i(o[e])}`);return a&&s.push(`Z`),s.join(` `)}function We(e,t,n){if(e!==void 0)return D(e)&&N(`colour-storage`,`${n}.Cd is a string attribute; colour is a vec4. Convert with Color.fromHex at the boundary.`),e.size!==4&&N(`colour-size`,`${n}.Cd has size ${e.size}; colour is a vec4`),_.fromComponents(e.data,t*4,4)}function Ge(e,t){Number.isFinite(e)||N(`svg-number`,`cannot format non-finite value ${String(e)}`);let n=Number.parseFloat(e.toFixed(t));return Object.is(n,-0)?`0`:String(n)}function Ke(e){for(let[t,n]of[[`width`,e.width],[`height`,e.height],[`margin`,e.margin],[`strokeWidth`,e.strokeWidth],[`opacity`,e.opacity],[`pointRadius`,e.pointRadius]])n!==void 0&&!Number.isFinite(n)&&N(`svg-option`,`${t} must be finite`);((e.width??0)<0||(e.height??0)<0)&&N(`svg-option`,`width and height must not be negative`),((e.strokeWidth??0)<0||(e.pointRadius??0)<0)&&N(`svg-option`,`strokeWidth and pointRadius must not be negative`),e.opacity!==void 0&&(e.opacity<0||e.opacity>1)&&N(`svg-option`,`opacity must be between 0 and 1`);let t=e.precision??3;(!Number.isSafeInteger(t)||t<0||t>15)&&N(`svg-precision`,`precision must be an integer from 0 to 15`)}function X(e,t,n,r){if(e!==void 0)for(let i of e.data)n(i)||N(`attribute-value`,`${t} values must be ${r}`)}function Z(e,t){return`${` `.repeat(t)}${e}`}function qe(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function Je(e){let t=[];for(let n of e){let e=n.codePointAt(0);e<128?t.push(e):e<2048?t.push(192|e>>6,128|e&63):e<65536?t.push(224|e>>12,128|e>>6&63,128|e&63):t.push(240|e>>18,128|e>>12&63,128|e>>6&63,128|e&63),e=0}return Uint8Array.from(t)}async function Ye(e){let{props:t}=e,n=He(e.inputs.geometry??M(2),{width:t.width,height:t.height,margin:t.margin,stroke:t.stroke,strokeWidth:t.strokeWidth,opacity:t.opacity,fill:t.fill,fillMode:t.fillMode===`solid`?`solid`:`none`,pointRadius:t.pointRadius,precision:t.precision});e.outputs.svg.set(n);let r=await e.capabilities.assets.write(Je(n),{mediaType:`image/svg+xml`,suggestedName:t.filename},{signal:e.signal});e.outputs.asset.set(r)}var Xe={kind:`definition-v1`,moduleId:J(`SvgExport`),definition:l,loadExecute:async()=>Ye};function Ze(e){let t=e.inputs.geometry??M(2);e.outputs.geometry.set(q(t,V({translate:e.inputs.translate,rotate:e.inputs.rotate,scale:e.inputs.scale,pivot:e.inputs.pivot})))}var Qe={kind:`definition-v1`,moduleId:J(`Transform`),definition:c,loadExecute:async()=>Ze},Q=Object.freeze([De,ke,Qe,je,xe,Xe]);new Map(Q.map(e=>[e.moduleId,e]));function $(e){return`/api/assets/${e.replace(/^\.\//,``).replace(/^assets\//,``).split(`/`).map(encodeURIComponent).join(`/`)}`}var $e={async read(e,{signal:t}){let n=await fetch($(e.path),{signal:t});if(!n.ok)throw Error(`Could not read asset ${e.path} (${n.status})`);return new Uint8Array(await n.arrayBuffer())},async write(e,t,{signal:n}){let r=t.suggestedName?.trim()||`asset.bin`,i=new FormData;i.append(`file`,new Blob([new Uint8Array(e)],{type:t.mediaType}),r);let a=await fetch(`/api/assets`,{method:`POST`,body:i,signal:n});if(!a.ok)throw Error(`Could not write asset ${r} (${a.status})`);let o=await a.json();if(!o.path)throw Error(`Asset upload returned no path for ${r}`);return{path:o.path,...t.mediaType?{mediaType:t.mediaType}:{}}},async resolveUrl(e){return{value:$(e.path),release:()=>{}}}},et={report:()=>{}};function tt(e){return{...e.label?{label:e.label}:{},...e.min===void 0?{}:{min:e.min},...e.max===void 0?{}:{max:e.max},...e.step===void 0?{}:{step:e.step},...e.options?{choices:e.options.map(e=>({value:e,label:String(e)}))}:{},promotable:!1}}function nt(e,t,n){let r=t.definition,i=new Map,a=0;for(let[t,n]of Object.entries(r.inputs??{})){if(n.kind===`trigger`){let r=e.in(t,void 0,{type:`any`,...n.description?{description:n.description}:{}});r.portType=`trigger`,r.onTrigger=async n=>{let r=a++;i.set(t,{id:`${e.id}:${r}`,runId:`studio:${e.id}:${r}`,sequence:r,...n===void 0?{}:{payload:n},source:{kind:`external`}}),e.markDirty(),await e.execute()};continue}if(n.variadic){e.setVariadic(void 0,{type:n.type});continue}e.in(t,n.default,{type:n.type,...n.min===void 0?{}:{min:n.min},...n.max===void 0?{}:{max:n.max},...n.step===void 0?{}:{step:n.step},...n.options?{choices:n.options.map(e=>({value:e,label:String(e)}))}:{},...n.description?{description:n.description}:{}})}for(let[t,n]of Object.entries(r.outputs??{}))e.out(t,n.kind===`trigger`?`trigger`:`param`,n.kind===`data`?{type:n.type,description:n.description}:{description:n.description});for(let[t,n]of Object.entries(r.props??{})){let r=e.param(t,n.default,{type:n.type,...tt(n)});r.documentField=`props`}let o=Object.values(r.inputs??{}).some(e=>e.kind===`trigger`),s;e.setFunction(async()=>{if(o&&i.size===0)return;for(let e of r.capabilities??[])if(!n[e])throw Error(`${t.moduleId} requires the Studio ${e} capability`);let a=await(s??=t.loadExecute(`browser`)),c={};for(let[t,n]of Object.entries(r.inputs??{}))c[t]=n.kind===`trigger`?i.get(t):n.variadic?e.getVariadicInputs().map(e=>e.value??void 0):e.inputs.find(e=>e.name===t)?.value;i.clear(),await a({inputs:c,outputs:Object.fromEntries(Object.entries(r.outputs??{}).map(([n,r])=>{let i=e.outputs.find(e=>e.name===n);if(!i)throw Error(`Missing output ${t.moduleId}.${n}`);return[n,r.kind===`trigger`?{trigger:e=>i.trigger(e)}:{set:e=>i.setValue(e)}]})),props:Object.fromEntries(e.parameters.map(e=>[e.name,e.value])),capabilities:n,signal:new AbortController().signal,progress:et})})}function rt(i,a={}){let o=new Map;for(let t of i){let i=t.moduleId.split(`.`);if(i.length!==3||i[0]!==`cascade`)throw Error(`Studio built-ins require cascade.<library>.<node>: ${t.moduleId}`);let s=i[1],c=e(t.moduleId),l=o.get(s)??{};l[c]=class extends r{constructor(e,t){super(e,c,t)}setup(){nt(this,t,a)}},o.set(s,l),n({type:t.moduleId,name:t.definition.label??c,icon:t.definition.icon,description:t.definition.description,category:s})}for(let[e,n]of o)t(e,n)}rt(Q,{assets:$e});export{i as geoLibrary};
|