@volter/editor 0.5.60 → 0.5.61
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/BUNDLED_NOTICES +6 -6
- package/dist/.vite/manifest.json +253 -253
- package/dist/assets/{AudioViewer-C9JP7n49.js → AudioViewer-Cvu0tj6D.js} +1 -1
- package/dist/assets/{EntityModelDocument-SFgsuX4_.js → EntityModelDocument-Cf9gBRJC.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-DEqKuki2.js → EnvironmentAssetDocument-Ci98saEi.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-BtEPIu2F.js → GameplaySessionTimeline-DE0985zy.js} +1 -1
- package/dist/assets/{ImageViewer-CyIXlQTG.js → ImageViewer-BuCQ-r1c.js} +1 -1
- package/dist/assets/{InspectorObjectPreview-MDmTPFBT.js → InspectorObjectPreview-DbRdK5-k.js} +1 -1
- package/dist/assets/{JsonAssetDocument-Zyv_CDpC.js → JsonAssetDocument-CXYQPool.js} +1 -1
- package/dist/assets/{ModelAssetDocument-BKdnWaJL.js → ModelAssetDocument-BcgmYF99.js} +1 -1
- package/dist/assets/{NonThreeAuthoringBootstrap-ab96Xbnn.js → NonThreeAuthoringBootstrap-B3pVzwGx.js} +2 -2
- package/dist/assets/{Object3DPreview-ChopdNF4.js → Object3DPreview-CqJ1UvnR.js} +2 -2
- package/dist/assets/{OnlineAssetDetail-B_l8XkeE.js → OnlineAssetDetail-Buu6QoLM.js} +2 -2
- package/dist/assets/{SourceAssetViewer-zpxF5DOe.js → SourceAssetViewer-D8j4Gm0U.js} +2 -2
- package/dist/assets/{StageHost-B4P-uvV9.js → StageHost-iPOh6V05.js} +4 -4
- package/dist/assets/{ToolObject3DPreview-DGcT5dDK.js → ToolObject3DPreview-CxH5xj1p.js} +1 -1
- package/dist/assets/{TransientHint-9_u15mth.js → TransientHint-CSkoVYzu.js} +1 -1
- package/dist/assets/{VideoViewer-3I_zUWEC.js → VideoViewer-DoYvabkN.js} +1 -1
- package/dist/assets/{asset-editor-persistence-B6Yg7dTC.js → asset-editor-persistence-CTVs5At_.js} +1 -1
- package/dist/assets/{blender-node-editor.document-DGn6U6Kf.js → blender-node-editor.document-BdG20dlg.js} +1 -1
- package/dist/assets/{blender-properties-tab-DkE9ensL.js → blender-properties-tab-BAECyOA_.js} +1 -1
- package/dist/assets/blender-runtime-host-DJTo5Z2R.js +4 -0
- package/dist/assets/{blender-runtime-skin-BFLh4nHG.js → blender-runtime-skin-DqCggoJN.js} +1 -1
- package/dist/assets/{blender-runtime.document-C60VEa1_.js → blender-runtime.document-BXR1d_5l.js} +1 -1
- package/dist/assets/{blender-timeline.document-D9BOYb0q.js → blender-timeline.document-qm5K2lns.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-BK2pP2sR.js → blender-uv-editor.document-BQ8MMlkb.js} +1 -1
- package/dist/assets/{blender-version.status-ZqfW0upF.js → blender-version.status-BmU30giy.js} +1 -1
- package/dist/assets/{blender.command-BLtAEuIZ.js → blender.command-B4xyaB1J.js} +1 -1
- package/dist/assets/{browserAll-DTuU4PmC.js → browserAll-CBGZHmKu.js} +1 -1
- package/dist/assets/{edit-mode-authoring-DBEoND0w.js → edit-mode-authoring-B-iV5Tn-.js} +1 -1
- package/dist/assets/{hosted-asset-materialization-6HtWQ0od.js → hosted-asset-materialization-CNQHav1a.js} +1 -1
- package/dist/assets/{index-DuB3wHKD.js → index-07Amqch3.js} +346 -346
- package/dist/assets/{models.finder-Bs46IncP.js → models.finder-DP1XyYvb.js} +1 -1
- package/dist/assets/{product-FSoI1WhZ.js → product-CoUbepYo.js} +1 -1
- package/dist/assets/{properties-bone-constraints.inspector-QML_-0yQ.js → properties-bone-constraints.inspector-C6NScMEe.js} +1 -1
- package/dist/assets/{properties-bone.inspector-DSDyP6-P.js → properties-bone.inspector-CoTNOjj5.js} +1 -1
- package/dist/assets/{properties-collection.inspector-jic5mzgz.js → properties-collection.inspector-B4eG6_bC.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-TLHv00p7.js → properties-constraints.inspector-BRqfn0NX.js} +1 -1
- package/dist/assets/{properties-data.inspector-BJBPl88V.js → properties-data.inspector-BXbFeZPP.js} +1 -1
- package/dist/assets/{properties-material.inspector-xxWuVjrx.js → properties-material.inspector-BfeaO6aB.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-CWjdmu_J.js → properties-modifiers.inspector-D3tPSaf2.js} +1 -1
- package/dist/assets/{properties-object.inspector-D15l44Tq.js → properties-object.inspector-B9ezybNI.js} +1 -1
- package/dist/assets/{properties-output.inspector-DVuGGSBb.js → properties-output.inspector-DjLEv1km.js} +1 -1
- package/dist/assets/{properties-particles.inspector-B94x32Ez.js → properties-particles.inspector-BbQjfMDe.js} +1 -1
- package/dist/assets/{properties-physics.inspector-9EYMjwFP.js → properties-physics.inspector-B6_1of6W.js} +1 -1
- package/dist/assets/{properties-render.inspector-8yA_8luD.js → properties-render.inspector-B6ZueVw2.js} +1 -1
- package/dist/assets/{properties-scene.inspector-WM7qZhJ4.js → properties-scene.inspector-By9fe0v9.js} +1 -1
- package/dist/assets/{properties-texture.inspector-Cno5lCIz.js → properties-texture.inspector-j-S0H2GK.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector--PX0c9h6.js → properties-view-layer.inspector-BEybCsjX.js} +1 -1
- package/dist/assets/{properties-world.inspector-C3EuydM_.js → properties-world.inspector-D1eAUjiB.js} +1 -1
- package/dist/assets/{react-story-board-d_OfX68Z.js → react-story-board-p22CYS79.js} +1 -1
- package/dist/assets/{react-three-rapier.esm-Ch_Gf2qR.js → react-three-rapier.esm-DyPu8PN-.js} +1 -1
- package/dist/assets/{spark.module-B_-x7Z29.js → spark.module-DVeR0ywZ.js} +1 -1
- package/dist/assets/{stage-keyboard-C9wzGFxu.js → stage-keyboard-BBkqzXlW.js} +1 -1
- package/dist/assets/{stage-overlay-set-D7J-N5eX.js → stage-overlay-set-C_8HSfRI.js} +1 -1
- package/dist/assets/{stage-presence-markers-DvbNl1W4.js → stage-presence-markers-Dhy3vaSU.js} +1 -1
- package/dist/assets/{story-capture-D0H-H2_b.js → story-capture-BcOlOwLt.js} +1 -1
- package/dist/assets/{story-pixi-preview-Cafk1Xbk.js → story-pixi-preview-D7WHysVb.js} +1 -1
- package/dist/assets/{story-three-preview-ByMTQc8w.js → story-three-preview-DLodiWJL.js} +2 -2
- package/dist/assets/{webworkerAll-CS1yjkoi.js → webworkerAll-B9OFnN4A.js} +1 -1
- package/dist/assets/{world-documents-CWiw361z.js → world-documents-BCg8BgpS.js} +1 -1
- package/dist-node/cli.js +7 -7
- package/package.json +7 -7
- package/dist/assets/blender-runtime-host-JKPuUKtZ.js +0 -4
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{bS as lt,bT as ct,e as B,ac as ut,bU as dt}from"./index-DuB3wHKD.js";import{d as ht,W as Oe,H as pt,br as ft,i as wt,bK as we,w as gt,x as bt,af as $e,V as se,bl as yt,$ as mt,k as Mt,bL as vt,bf as Pe}from"./three.module-BynznMJN.js";import{f as xt}from"./clip-planes-CnAI6DZn.js";class kt{#r;#i;#n=new Map;#v=0;#l=null;#a=null;#c=!1;#g=!1;#b=t=>{!this.#g&&this.#n.size===0||(t.preventDefault(),t.returnValue="")};#u=new Map;#d=null;#p=0;#y=0;#m=0;#s=null;#M=null;#f=null;constructor(t){this.#i=t,this.#r=new Worker(new URL("/assets/worker-CBvBkaXr.js",import.meta.url),{type:"module",name:"blender"}),globalThis.addEventListener?.("beforeunload",this.#b),this.#r.onmessage=n=>void this.#x(n.data),this.#r.onerror=n=>{const r=n.error,o=n.filename?` at ${n.filename}:${n.lineno}:${n.colno}`:"",a=r?.stack??r?.message??n.message,s=new Error(`Blender worker failed: ${a||"the worker script did not load"}${o}`);console.error(s.message);for(const i of[...this.#n.keys()])this.#w(i);for(const i of this.#n.values())i.reject(s);this.#n.clear()}}#o=null;#h=null;get project(){return this.#o}start(t,n){return this.#o!==null&&this.#o!==t?Promise.reject(new Error(`The Blender session is bound to ${this.#o}, not ${t}`)):n!==void 0&&this.#h!==null&&this.#h!==n?Promise.reject(new Error(`Blender resource conflict: the session holds ${this.#h}; cannot open ${n}`)):(this.#o=t,this.#h??=n??"models/model.blend",this.#l??=this.#e({op:"start",project:t,...n===void 0?{}:{document:n}}),this.#l)}#t(){return this.#o===null?Promise.reject(new Error("The Blender session has not been started with a project (blender-start)")):this.start(this.#o)}async execute(t,n=!0,r="Blender Python"){return await this.#t(),await this.#e({op:"execute",code:t,history:n,label:r})}async historyGesture(t){await this.#t(),await this.#e({op:t})}async historyStep(t,n){return await this.#t(),(await this.#e({op:"history-step",token:t,direction:n})).moved}async sceneInfo(){return await this.#t(),await this.#e({op:"scene-info"})}async objectInfo(t){return await this.#t(),await this.#e({op:"object-info",name:t})}async rna(t,n){return await this.#t(),await this.#e({op:"rna",path:t,...n===void 0?{}:{names:n}})}async rnaContext(t,n){return await this.#t(),await this.#e({op:"rna-context",...t===void 0?{}:{object:t},...n===void 0?{}:{collection:n}})}async rnaSet(t,n,r,o,a=!0){return await this.#t(),await this.#e({op:"rna-set",history:a,path:t,property:n,value:r,...o===void 0?{}:{index:o}})}async outliner(t){return await this.#t(),await this.#e({op:"outliner",...t===void 0?{}:{selected:t}})}async nodeTree(t){return await this.#t(),await this.#e({op:"node-tree",...t?.path===void 0?{}:{path:t.path},...t?.material===void 0?{}:{material:t.material}})}async uvLayout(t){return await this.#t(),await this.#e({op:"uv-layout",...t?.object===void 0?{}:{object:t.object},...t?.uvLayer===void 0?{}:{uvLayer:t.uvLayer}})}async rig(t){return await this.#t(),await this.#e({op:"rig",...t?.object===void 0?{}:{object:t.object}})}async actionClip(t){return await this.#t(),await this.#e({op:"action-clip",...t?.object===void 0?{}:{object:t.object},...t?.bake===void 0?{}:{bake:t.bake}})}async outlinerSet(t,n,r){return await this.#t(),await this.#e({op:"outliner-set",path:t,column:n,value:r})}async present(){await this.#t(),await this.#e({op:"present"})}async screenshotView(t){return await this.#t(),await this.#e({op:"screenshot-view",maxSize:t})}async readFile(t){return await this.#t(),await this.#e({op:"read-file",path:t})}async writeFile(t,n){await this.#t(),await this.#e({op:"write-file",path:t,bytes:n})}async listFiles(t){return await this.#t(),await this.#e({op:"list-files",path:t})}get presented(){return this.#M}stop(){return this.#c?Promise.resolve():this.#a?this.#a:(this.#a=(async()=>{this.#l&&(await this.#l,await this.#e({op:"flush-document"},!0)),this.terminate()})().catch(t=>{throw this.#a=null,t}),this.#a)}terminate(){if(this.#c)return;this.#c=!0,globalThis.removeEventListener?.("beforeunload",this.#b),this.#r.terminate();const t=new Error("The Blender session was terminated");for(const n of[...this.#n.keys()])this.#w(n);for(const n of this.#n.values())n.reject(t);this.#n.clear()}metrics(t=performance.now()){let n=null,r=this.#p,o=this.#y,a=this.#m;for(const s of this.#u.values()){const i=t-s;(n===null||i>n)&&(n=i),i>r&&(r=i),i>=5e3&&(o+=1),i>=3e4&&(a+=1)}return{inFlightMs:n===null?null:Math.round(n),lastCallMs:this.#d===null?null:Math.round(this.#d),maxCallMs:this.#d===null&&n===null?null:Math.round(r),callsOver5s:o,callsOver30s:a,lastCallWindow:this.#s,wasmMemoryMB:this.#f===null?null:Math.round(this.#f/1048576)}}#w(t){const n=this.#u.get(t);if(n===void 0)return;this.#u.delete(t);const r=performance.now()-n;this.#d=r,r>this.#p&&(this.#p=r),r>=5e3&&(this.#y+=1),r>=3e4&&(this.#m+=1),this.#s!==null&&this.#s.start===n&&(this.#s={start:n,end:n+r})}#e(t,n=!1){if(this.#c||this.#a&&!n)return Promise.reject(new Error("The Blender session is stopping or terminated"));const r=++this.#v;return new Promise((o,a)=>{this.#n.set(r,{resolve:o,reject:a});const s=performance.now();this.#u.set(r,s),this.#s={start:s,end:null},this.#r.postMessage({...t,id:r})})}async#x(t){if("op"in t){if(t.op==="document-dirty"){this.#g=t.dirty;return}if(t.op==="history"){this.#i.history?.(t.entries);return}if(t.op==="log"){this.#i.log?.(t.level,t.text);return}if(t.op==="memory"){this.#f=t.bytes;return}const r=t.frame;typeof r?.session=="string"&&typeof r.revision=="number"&&(this.#M={session:r.session,revision:r.revision});try{const o=await this.#i.present(t.frame,t.description,t.capture);this.#r.postMessage({op:"present-result",id:t.id,...o?.capture===void 0?{}:{capture:o.capture},...o!=null&&"held"in o?{held:o.held}:{}})}catch(o){this.#r.postMessage({op:"present-result",id:t.id,error:o instanceof Error?o.message:String(o)})}return}const n=this.#n.get(t.id);n&&(this.#n.delete(t.id),this.#w(t.id),"error"in t?n.reject(new Error(t.error)):n.resolve(t.result))}}const Et="/assets/agx-base-srgb-BjWZJgrZ.lut",St="/assets/agx-look-medium-high-contrast-D5F_ob1L.lut",Bt="/assets/agx-look-punchy-dxsnycNs.lut",Ct="/assets/filmic-srgb-Ct35FIH6.lut",j=new Float64Array(12),Ue=[0,0,0],R=new Float64Array(3),W=new Float64Array(3),T=new Int8Array([1,0,0,1,1,0,0,1,2,1,0,0,1,0,1,0,2,1,0,0,1,1,0,1,2,0,1,0,0,1,0,1,1,2,1,0,0,1,0,0,1,1,1,2,0,0,1,0,1,1,0,1,0,2]);function At(e,t,n){return e>t?t>n?0:e>n?1:2:n>t?3:n>e?4:5}function qe(e,t,n,r,o){const a=t*t,s=Math.min(1,Math.max(0,n))*(t-1),i=Math.min(1,Math.max(0,r))*(t-1),d=Math.min(1,Math.max(0,o))*(t-1),w=Math.min(Math.floor(s),t-2),l=Math.min(Math.floor(i),t-2),h=Math.min(Math.floor(d),t-2),E=s-w,g=i-l,c=d-h,y=(u,m,O,S)=>{const I=(w+m+(l+O)*t+(h+S)*a)*3;j[u]=e[I]/65535,j[u+1]=e[I+1]/65535,j[u+2]=e[I+2]/65535};y(0,0,0,0),y(9,1,1,1),R[0]=E,R[1]=g,R[2]=c;const p=At(E,g,c)*9;y(3,T[p],T[p+1],T[p+2]),y(6,T[p+3],T[p+4],T[p+5]);const v=R[T[p+6]],b=R[T[p+7]],f=R[T[p+8]];for(let u=0;u<3;u++){const m=j[u];Ue[u]=m+v*(j[3+u]-m)+b*(j[6+u]-j[3+u])+f*(j[9+u]-j[6+u])}return Ue}function z(e){const t=e&32768?-1:1,n=e>>10&31,r=e&1023;return n===0?t*2**-24*r:n===31?r?Number.NaN:t*Number.POSITIVE_INFINITY:t*2**(n-15)*(1+r/1024)}function Be(e,t,n,r){const o=new Uint8ClampedArray(t*4);for(let a=0;a<t;a++){const s=a*4,i=z(e[s+3]),d=i===0?n:n/i;W[0]=z(e[s])*d,W[1]=z(e[s+1])*d,W[2]=z(e[s+2])*d;const w=r(W);o[s]=Math.round(w[0]*255),o[s+1]=Math.round(w[1]*255),o[s+2]=Math.round(w[2]*255),o[s+3]=Math.round(Math.min(1,Math.max(0,i))*255)}return o}function jt(e){return new URL(Object.assign({"./agx-base-srgb.lut":Et,"./agx-look-medium-high-contrast.lut":St,"./agx-look-punchy.lut":Bt,"./filmic-srgb.lut":Ct})[`./${e.replace(/\.lut$/,"")}.lut`],import.meta.url)}const Tt=57,_=-12.47393,He=12.5260688117,_t=[[.4123908,.3575843,.1804808],[.212639,.7151687,.0721923],[.0193308,.1191948,.9505322]],Lt=[[1.5250528,-.3159135,-.1226583],[-.5091526,1.3333274,.1382844],[.0957153,.0508974,.7879558]];function Ve(e,t,n){const r=t[0],o=t[1],a=t[2];n[0]=e[0][0]*r+e[0][1]*o+e[0][2]*a,n[1]=e[1][0]*r+e[1][1]*o+e[1][2]*a,n[2]=e[2][0]*r+e[2][1]*o+e[2][2]*a}const q=new Float64Array(3),De=new Float64Array(3),H=[0,0,0];function ie(e){const t=Math.min(1,Math.max(0,e));return t<=.0031308?12.92*t:1.055*t**(1/2.4)-.055}function Xe(e,t,n,r){return qe(e,Tt,t,n,r)}function Ft(e,t){Ve(_t,t,De),Ve(Lt,De,q);const n=He-_,r=Xe(e,(Math.log2(Math.max(q[0],1e-10))-_)/n,(Math.log2(Math.max(q[1],1e-10))-_)/n,(Math.log2(Math.max(q[2],1e-10))-_)/n);return H[0]=ie(Math.max(0,r[0])**2.4),H[1]=ie(Math.max(0,r[1])**2.4),H[2]=ie(Math.max(0,r[2])**2.4),H}const It={"AgX - Medium High Contrast":"agx-look-medium-high-contrast.lut","AgX - Punchy":"agx-look-punchy.lut"};function Rt(e,t){const n=He-_;return Xe(e,(Math.log2(Math.max(t[0],1e-10))-_)/n,(Math.log2(Math.max(t[1],1e-10))-_)/n,(Math.log2(Math.max(t[2],1e-10))-_)/n)}function Nt(e,t,n,r={}){const o=r.exposure??1,a=r.composedLook===!0?Rt:Ft;return Be(t,n,o,s=>a(e,s))}const Ze=33,ge=Ze**3*3,be=4096,le=-12.473931188,ce=25;function ue(e,t){const n=Math.min(1,Math.max(0,t))*(be-1),r=Math.min(Math.floor(n),be-2),o=n-r;return((1-o)*e[ge+r]+o*e[ge+r+1])/65535}const X=[0,0,0];function Ot(e,t){const n=qe(e,Ze,(Math.log2(Math.max(t[0],1e-10))-le)/ce,(Math.log2(Math.max(t[1],1e-10))-le)/ce,(Math.log2(Math.max(t[2],1e-10))-le)/ce);return X[0]=ue(e,n[0]/.66),X[1]=ue(e,n[1]/.66),X[2]=ue(e,n[2]/.66),X}function $t(e,t,n,r){if(e.length!==ge+be)throw new Error("Invalid Blender Filmic display table");return Be(t,n,r,o=>Ot(e,o))}const V=2.4,F=.055,Ke=F/(V-1),Pt=1/(V/(1+F)*((Ke+F)/(1+F))**(V-1)),Ut=((Ke+F)/(1+F))**V;function de(e){return e>0?e<Ut?e*Pt:(1+F)*e**(1/V)-F:0}const Z=[0,0,0];function Vt(e){return Z[0]=de(e[0]),Z[1]=de(e[1]),Z[2]=de(e[2]),Z}function Dt(e,t,n){return Be(e,t,n,Vt)}function Ye(e,t,n,r){if(!Number.isFinite(n.width)||!Number.isFinite(n.height)||n.width<1||n.height<1)throw new Error("Scene capture requires finite positive dimensions");const o=Math.min(2048,Math.round(n.width)),a=Math.min(2048,Math.round(n.height)),s=r?1:2,i=o*s,d=a*s,w=lt(),l=w.renderer,h={target:l.getRenderTarget(),toneMapping:l.toneMapping,exposure:l.toneMappingExposure,colorSpace:l.outputColorSpace,shadows:l.shadowMap.enabled,shadowType:l.shadowMap.type,clearColor:l.getClearColor(new ht),clearAlpha:l.getClearAlpha(),background:e.background};let E,g,c=!1;try{if(E=new Oe(i,d,{type:pt}),l.shadowMap.enabled=!0,l.shadowMap.type=ft,l.outputColorSpace=wt,l.toneMapping=n.toneMapping??we,l.toneMappingExposure=n.exposure??1,l.setClearColor(0,n.transparent?0:1),n.transparent&&(e.background=null),l.setRenderTarget(E),l.clear(),l.render(e,t),r){const S=new Uint16Array(i*d*4);return l.readRenderTargetPixels(E,0,0,i,d,S),c=!0,{pixels:S,width:o,height:a}}g=new Oe(i,d),ct(n.transparent===!0).render(l,g,E,0,!1);const y=new Uint8Array(i*d*4);l.readRenderTargetPixels(g,0,0,i,d,y);const p=document.createElement("canvas");p.width=i,p.height=d;const v=p.getContext("2d");if(!v)throw new Error("Scene capture could not create an image canvas");const b=v.createImageData(i,d),f=i*4;for(let S=0;S<d;S++)b.data.set(y.subarray((d-1-S)*f,(d-S)*f),S*f);v.putImageData(b,0,0);const u=document.createElement("canvas");u.width=o,u.height=a;const m=u.getContext("2d");if(!m)throw new Error("Scene capture could not create an output canvas");m.drawImage(p,0,0,o,a);const O=u.toDataURL("image/png");return c=!0,O}finally{e.background=h.background,l.setRenderTarget(h.target),l.toneMapping=h.toneMapping,l.toneMappingExposure=h.exposure,l.outputColorSpace=h.colorSpace,l.shadowMap.enabled=h.shadows,l.shadowMap.type=h.shadowType,l.setClearColor(h.clearColor,h.clearAlpha),g?.dispose(),E?.dispose(),w.release({discard:!c})}}function Gt(e,t,n){return Ye(e,t,n,!0)}function Wt(e,t,n){return Ye(e,t,n,!1)}const zt=e=>typeof e=="object"&&e!==null&&typeof e.subscribeFrames=="function"&&typeof e.objectForBlenderName=="function"&&typeof e.blenderObjectName=="function"&&typeof e.blenderSelection=="function"&&typeof e.setStageMode=="function";function Ce(){const e=B().documents.context(nt());return zt(e)?e:null}function qt(){return Ce()?.blenderSelection()??{selected:[],active:null}}const Ht={tree:null,byId:new Map,parentOf:new Map,error:null,loading:!1};let ye=Ht,Je=0;const me=new Set;let $=null,te=null,Ae="",P=null;function Xt(e){const t=new Map,n=new Map,r=(o,a)=>{t.set(o.id,o),n.set(o.id,a);for(const s of o.children)r(s,o.id)};for(const o of e?.rows??[])r(o,null);return{byId:t,parentOf:n}}function Y(e){ye={...ye,...e},Je+=1;for(const t of[...me])t()}function bn(e){return me.add(e),()=>{me.delete(e)}}function yn(){return Je}function mn(){return ye}function je(e){P!==e&&(P=e,setTimeout(()=>{P===e&&(P=null,Qe(e===""?[]:e.split("\0")))},0))}let he=0,Me=Promise.resolve();function Qe(e){const t=Zt(e);return Me=t,t}async function Zt(e){const t=e.join("\0"),n=++he;te=t,Ae=t,Y({loading:!0});try{const r=await sn(e);if(n!==he)return;Ce()?.setStageMode(r?.mode??null),Y({tree:r,...Xt(r),loading:!1,error:null})}catch(r){if(n!==he)return;Y({loading:!1,error:et(r)})}}function Kt(){te=null,je(Ae);for(const e of[...ve])e()}const ve=new Set;function Mn(e){return Te(),ve.add(e),()=>{ve.delete(e)}}let K=!1,pe=null;function Te(){const e=Ce();if($!==null&&pe===e)return;$!==null&&($(),$=null,pe=null);const t=e;if(t!==null){$=t.subscribeFrames(Kt),pe=t;return}K||(K=!0,B().documents.waitForContext(nt()).then(()=>{K=!1,Te()}).catch(()=>{K=!1}))}function vn(e){if(!C())return;Te();const t=[...e].sort().join("\0");te!==t&&je(t)}async function Yt(e){if(!C())return;P=null;let t=Qe([...e].sort());for(;;){if(await t,Me===t)return;t=Me}}async function xn(e,t,n){try{return await ot(e,t,n),te=null,je(Ae),!0}catch(r){return Y({error:et(r)}),!1}}function et(e){return e instanceof Error?e.message:String(e)}const Jt={transform:{cx:0,cy:0,zoom:1},looked:null,refusal:null,size:{w:0,h:0},framedAt:0,drawn:[]};let xe=Jt,_e=0;const Q=new Set;let tt=0;function fe(){return xe}function kn(){return _e}function En(e){return Q.add(e),()=>{Q.delete(e)}}function U(e){xe={...xe,...e},_e+=1;for(const t of[...Q])t()}function Qt(){tt+=1,_e+=1;for(const e of[...Q])e()}function Sn(){return tt}function N(e){U({refusal:e})}const Ge=new Map;function en(e){let t=Ge.get(e);return t||(t=fetch(jt(e)).then(async n=>{if(!n.ok)throw new Error(`Blender display table ${e}: ${n.status} ${n.statusText}`);return new Uint16Array(await n.arrayBuffer())}),Ge.set(e,t)),t}function tn(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return new Uint16Array(n.buffer,n.byteOffset,n.byteLength>>1)}async function We(e,t){const n=t.look??"None",r=t.toneMapping==="filmic",o=t.toneMapping==="none";if(!o&&t.toneMapping!=="agx"&&!r)throw new Error("Blender's Khronos PBR Neutral view transform has no scene-linear implementation in the browser, so it cannot resolve a composited or scene-referred frame (implemented: Standard, AgX, Filmic)");const a=o?null:r?"filmic-srgb.lut":n==="None"?"agx-base-srgb.lut":It[n];if(a===void 0)throw new Error(`Blender display transform has no table for look ${n}`);const s=a?await en(a):null,i=t.linearInput,d=i?{pixels:tn(i.base64),width:i.width,height:i.height}:e;if(!d)throw new Error("Blender display transform requires a linear capture");const{pixels:w,width:l,height:h}=d,E=o?Dt(w,l*h,t.exposure):r?$t(s,w,l*h,t.exposure):Nt(s,w,l*h,{exposure:t.exposure,composedLook:n!=="None"}),g=document.createElement("canvas");g.width=l,g.height=h;const c=g.getContext("2d");if(!c)throw new Error("Blender display transform could not create its image canvas");const y=c.createImageData(l,h),p=l*4;for(let f=0;f<h;f++){const u=(h-1-f)*p;y.data.set(E.subarray(u,u+p),f*p)}c.putImageData(y,0,0);const v=g.toDataURL("image/png"),b={base64:v.slice(v.indexOf(",")+1),mimeType:"image/png"};if(t.linear===!0){const f=new Uint8Array(w.buffer,w.byteOffset,w.byteLength);let u="";for(let m=0;m<f.length;m+=32768)u+=String.fromCharCode(...f.subarray(m,m+32768));b.linearBase64=btoa(u),b.linearWidth=l,b.linearHeight=h}return b}const nn="document:blender:runtime";let ee=null;function rn(e){ee=e}function L(){return ee?.documentId??nn}function nt(){return L()}async function Bn(e,t,n){rn({documentId:e,entryId:n,blend:t});const r=B();if(!r.session.open())return;const o=r.projectLocalState.projectRootPath();o!==null&&(await M().start(o,t),await M().present())}function C(){return k?.project!=null}let rt=0;const ke=new Set;function Cn(){return rt}function An(e){return ke.add(e),()=>{ke.delete(e)}}function ne(){rt+=1;for(const e of[...ke])e()}async function jn(e,t){return C()?M().rna(e,t):null}async function Tn(e,t){return C()?M().rnaContext(e,t):null}async function on(e,t,n,r,o=!0){if(!C())return null;const a=await M().rnaSet(e,t,n,r,o);return ne(),a}async function an(e,t=!0,n="Blender Python"){const r=await M().execute(e,t,n);ne();const o=/^Error executing code:/.exec(r);return{text:r,executed:o===null,result:o===null?r.replace(/^Code executed successfully: ?/,""):"",error:o===null?null:r.replace(/^Error executing code: ?/,"")}}function _n(){M().historyGesture("history-begin").catch(e=>B().console.error(`Could not begin Blender undo gesture: ${String(e)}`,"blender-history"))}async function Ln(){await M().historyGesture("history-end")}async function sn(e){return C()?M().outliner(e):null}async function Fn(e){return C()?M().nodeTree(e):null}async function In(e){return C()?M().uvLayout(e):null}async function Rn(e){return C()?M().rig(e):null}async function Nn(e){return C()?M().actionClip(e):null}async function ot(e,t,n){if(!C())return null;const r=await M().outlinerSet(e,t,n);return ne(),r}const ln={view:"blender-node-view",title:"Node Editor",verbs:[["state",void 0],["look",void 0],["view-all","Node Editor: Frame All"],["zoom",void 0],["pan",void 0],["move",void 0],["link",void 0],["set-value",void 0],["use-nodes",void 0],["collapse-panel",void 0]].map(([e,t])=>({id:e,...t?{title:t}:{},run:n=>at({...n,action:e})}))};function at(e){const t=typeof e.action=="string"?e.action:"state";switch(t){case"state":break;case"look":U({looked:typeof e.node=="string"?e.node:null,refusal:null});break;case"view-all":Qt(),U({refusal:null});break;case"zoom":{const n=typeof e.zoom=="number"?e.zoom:1;U({transform:{...fe().transform,zoom:n},refusal:null});break}case"pan":{const n=fe().transform;U({transform:{...n,cx:typeof e.cx=="number"?e.cx:n.cx,cy:typeof e.cy=="number"?e.cy:n.cy},refusal:null});break}case"move":N(`Moving "${String(e.node??"a node")}" writes Node.location — editing parity is not the program.`);break;case"link":N("Dragging between sockets would make a link — editing parity is not the program.");break;case"set-value":N(`Changing "${String(e.socket??"a socket")}" writes the socket's default_value — editing parity is not the program.`);break;case"use-nodes":N("Use Nodes writes Material.use_nodes — editing parity is not the program.");break;case"collapse-panel":N(`Collapsing "${String(e.panel??"a panel")}" writes the panel's is_collapsed — editing parity is not the program.`);break;default:N(`blender-node-view: no action "${t}" — state, look, view-all, zoom, pan, and the refusals move, link, set-value, use-nodes, collapse-panel.`)}return fe()}let k=null;const J=new Set;function st(){J.size&&B().history.invalidate([...J]),J.clear()}let Ee=null,ze=!1;function Se(){st(),Ee?.abort(),Ee=null,k?.terminate(),k=null}function cn(){ze||(ze=!0,B().session.onBeforeClose(async()=>{await k?.stop(),Se()}),B().session.onEnded(Se))}const un=e=>typeof e=="object"&&e!==null&&typeof e.applyFrame=="function"&&typeof e.snapshot=="function"&&typeof e.captureSnapshot=="function"&&typeof e.recordPresentation=="function"&&typeof e.recordPhotograph=="function";async function dn(){const{documents:e}=B(),t=await e.waitForContext(L(),15e3);if(un(t))return t;throw new Error('The Blender Model document is not open, or the open one is not a Model this engine can present to (it must answer applyFrame, captureSnapshot, recordPresentation and recordPhotograph): present {kind: "document", id: "blender:runtime"} first (it ships with the editor; `vgai blender-mcp` presents it before its first call).')}function M(){if(k!==null)return k;cn();const e=new AbortController;Ee=e;let t=!1;k=new kt({history:r=>{const o=k;if(!o)throw new Error("Blender history arrived before its runtime");for(const a of r){if("reset"in a){st();continue}if(!a.resource)throw new Error("A Blender edit has no document resource");J.add(a.resource);const s=async i=>{if(k!==o)throw new Error("This Blender history belongs to a closed worker");const d=await o.historyStep(a.id,i);return ne(),await Yt(qt().selected),d};B().history.record({id:a.id,label:a.label,resources:[a.resource],document:L(),undo:()=>s("undo"),redo:()=>s("redo")})}},present:async(r,o,a)=>{const s=L(),i=await dn();if(e.signal.throwIfAborted(),L()!==s)throw new Error("Blender document changed before its frame could be presented");const d=i.applyFrame(r),w=typeof d=="object"&&d!==null&&"held"in d,l=w?d.held:null,h=f=>({...f===void 0?{}:{capture:f},...w?{held:l}:{}});if(i.recordPresentation(o),!a||!a.render)return h(void 0);const E=i.snapshot(),g=()=>{if(e.signal.throwIfAborted(),L()!==s||i.snapshot()!==E)throw new Error("Blender capture document or source revision changed before completion")};if(a.render.linearInput){const f=await We(null,a.render);return g(),h(f)}const{render:c,position:y,target:p,up:v}=a;if(!y||!p||!v)throw new Error("A Blender render capture must carry the scene camera position, target and up");if(t)throw new Error("A Blender render capture is already in progress");const b=i.captureSnapshot();t=!0,e.signal.addEventListener("abort",b.dispose,{once:!0});try{g();const f=new gt;f.add(b.root),f.updateMatrixWorld(!0);const u=b.root.matrixWorld,m=new bt().copy(u).invert(),O=new $e().setFromMatrix4(u),S=new $e().setFromMatrix4(m),I=new se(y[0],y[1],y[2]).applyMatrix4(u),Le=new se(p[0],p[1],p[2]).applyMatrix4(u),Fe=new se(v[0],v[1],v[2]).applyMatrix3(O),re=Math.min(2048,Math.round(c.width))/Math.min(2048,Math.round(c.height)),Ie=ut(b.root).getBoundingSphere(new yt),D=xt(I.distanceTo(Ie.center),Ie.radius);let A;if(c.orthographic){const G=c.fov/2;A=new mt(-G*re,G*re,G,-G,D.near,D.far)}else A=new Mt(c.fov,re,D.near,D.far);A.up.copy(Fe),A.position.copy(I),A.lookAt(Le),A.updateMatrixWorld(!0);const oe={position:I.clone().applyMatrix4(m).toArray(),target:Le.clone().applyMatrix4(m).toArray(),up:Fe.clone().applyMatrix3(S).toArray()};i.recordPhotograph({sent:{position:y,target:p,up:v},photographed:oe,render:{width:c.width,height:c.height,fov:c.fov,orthographic:c.orthographic}});const it={none:we,agx:Pe,neutral:vt,filmic:we};await b.prepare(A),g();const Re={width:c.width,height:c.height,transparent:c.transparent===!0,toneMapping:it[c.toneMapping]??Pe,exposure:c.exposure},Ne=c.toneMapping==="agx"||c.toneMapping==="filmic"||c.linear===!0?await We(Gt(f,A,Re),c):null;if(g(),Ne)return h({...Ne,camera:oe});const ae=Wt(f,A,Re);if(!ae)throw new Error("Blender render could not capture its image");return h({base64:ae.slice(ae.indexOf(",")+1),mimeType:"image/png",camera:oe})}finally{t=!1,e.signal.removeEventListener("abort",b.dispose),b.dispose()}},log:(r,o)=>(r==="error"?console.error:console.log)(`[blender] ${o}`)});const n=k;return B().session.reportWorkerCallMeter(()=>n.metrics()),k}const hn="models/model.blend",x=(e,t)=>{const n=e[t];if(typeof n!="string")throw new Error(`${String(e.type)} requires a string "${t}"`);return n};async function pn(e){const t=B().projectLocalState.projectRootPath();if(t===null)return{};let n;try{n=await e.execute(`import bpy
|
|
2
|
-
print(bpy.data.filepath)
|
|
3
|
-
`,!1)}catch{return{}}if(/^Error executing code:/m.test(n))return{};const r=n.replace(/^Code executed successfully:/,"").split(`
|
|
4
|
-
`).map(a=>a.trim()).filter(a=>a.startsWith("/")).pop()??"";if(r==="")return{};const o=t.endsWith("/")?t:`${t}/`;return r.startsWith(o)?{document:r.slice(o.length)}:{}}async function On(e){const t=B();if(e.type==="blender-status")return{ok:!0,data:{started:k?.project!=null,document:t.documents.context(L())!==void 0}};if(!t.session.open())return{ok:!1,error:`${e.type} needs an open project session; this editor page has none.`};try{const n=e.type==="blender-start"?x(e,"project"):null;if((e.type==="blender-stop"||e.type==="blender-start"&&e.fresh===!0)&&(await k?.stop(),Se(),e.type==="blender-stop"))return{ok:!0,data:{stopped:!0}};if(e.type==="blender-start"&&!t.documents.context(L())&&!await t.workspace.open({kind:"document",id:"blender:runtime"}))return{ok:!1,error:"blender-start could not open the Blender Model document: nothing in this editor opens {kind: 'document', id: 'blender:runtime'} (it ships with @volter/editor-blender)."};const r=M();switch(e.type){case"blender-start":{const o=typeof e.document=="string"?e.document:ee?.blend??hn;return{ok:!0,data:{...await r.start(n,o)}}}case"blender-execute":return{ok:!0,data:{result:(await an(x(e,"code"))).text}};case"blender-scene-info":return{ok:!0,data:{result:await r.sceneInfo()}};case"blender-object-info":return{ok:!0,data:{result:await r.objectInfo(x(e,"name"))}};case"blender-rna":{const o=typeof e.names=="number"?e.names:void 0;return{ok:!0,data:{result:await r.rna(x(e,"path"),o)}}}case"blender-rna-context":{const o=typeof e.object=="string"?e.object:void 0,a=typeof e.collection=="string"?e.collection:void 0;return{ok:!0,data:{result:await r.rnaContext(o,a)}}}case"blender-rna-set":{const o=typeof e.index=="number"?e.index:void 0;return{ok:!0,data:{result:await on(x(e,"path"),x(e,"property"),e.value,o)}}}case"blender-outliner":{const o=Array.isArray(e.selected)?e.selected.filter(a=>typeof a=="string"):void 0;return{ok:!0,data:{result:await r.outliner(o)}}}case"blender-node-tree":return{ok:!0,data:{result:await r.nodeTree({...typeof e.path=="string"?{path:e.path}:{},...typeof e.material=="string"?{material:e.material}:{}})}};case"blender-uv-layout":return{ok:!0,data:{result:await r.uvLayout({...typeof e.object=="string"?{object:e.object}:{},...typeof e.uvLayer=="string"?{uvLayer:e.uvLayer}:{}})}};case"blender-rig":return{ok:!0,data:{result:await r.rig({...typeof e.object=="string"?{object:e.object}:{}})}};case"blender-action-clip":return{ok:!0,data:{result:await r.actionClip({...typeof e.object=="string"?{object:e.object}:{},...typeof e.bake=="boolean"?{bake:e.bake}:{}})}};case"blender-node-view":{const o=typeof e.action=="string"?e.action:"state";return{ok:!0,data:{result:ln.verbs.some(s=>s.id===o)?dt("blender-node-view",o,e):at(e)}}}case"blender-outliner-set":return{ok:!0,data:{result:await ot(x(e,"path"),x(e,"column"),e.value!==!1)}};case"blender-screenshot-view":{const o=typeof e.maxSize=="number"?e.maxSize:1e3,a={kind:"document",id:ee?.entryId??"blender:runtime"};return{ok:!0,data:{...await r.screenshotView(o),document:a}}}case"blender-read-file":{const o=await r.readFile(x(e,"path")),a=x(e,"transferId"),s=await fetch(`/__editor/blender-file?id=${encodeURIComponent(a)}`,{method:"POST",headers:{"content-type":"application/octet-stream"},body:new Blob([o])});return s.ok?{ok:!0,data:{bytes:o.length}}:{ok:!1,error:`Transfer ${a} was refused: ${s.status}`}}case"blender-write-file":{const o=atob(x(e,"base64")),a=Uint8Array.from(o,s=>s.charCodeAt(0));return await r.writeFile(x(e,"path"),a),{ok:!0,data:{written:a.length}}}case"blender-list-files":{const o=await r.listFiles(x(e,"path")),a=r.presented;return{ok:!0,data:{entries:o,...a?{session:a.session,revision:a.revision}:{},...await pn(r)}}}}return{ok:!1,error:`Unknown Blender command ${e.type}`}}catch(n){return{ok:!1,error:n instanceof Error?n.message:String(n)}}}export{Bn as A,rn as B,nt as C,C as D,ne as E,Tn as F,jn as G,ln as N,En as a,Cn as b,U as c,fe as d,Fn as e,Sn as f,Nn as g,On as h,Rn as i,In as j,bn as k,Yt as l,qt as m,kn as n,Mn as o,yn as p,Ce as q,N as r,An as s,on as t,Ln as u,_n as v,xn as w,vn as x,mn as y,an as z};
|