@pacem/pacem 1.0.0-dirac → 1.0.0-fermat
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/pacem-2d.js +1 -1
- package/dist/browser/pacem-2d.min.js +1 -1
- package/dist/browser/pacem-3d.js +16 -6
- package/dist/browser/pacem-3d.js.map +1 -1
- package/dist/browser/pacem-3d.min.js +2 -2
- package/dist/browser/pacem-charts.js +1 -1
- package/dist/browser/pacem-charts.min.js +1 -1
- package/dist/browser/pacem-cms.js +1 -1
- package/dist/browser/pacem-cms.min.js +1 -1
- package/dist/browser/pacem-core.js +1 -1
- package/dist/browser/pacem-core.min.js +1 -1
- package/dist/browser/pacem-foundation.js +1 -1
- package/dist/browser/pacem-foundation.min.js +1 -1
- package/dist/browser/pacem-fx.js +1 -1
- package/dist/browser/pacem-fx.min.js +1 -1
- package/dist/browser/pacem-logging.js +1 -1
- package/dist/browser/pacem-logging.min.js +1 -1
- package/dist/browser/pacem-maps.js +1 -1
- package/dist/browser/pacem-maps.min.js +1 -1
- package/dist/browser/pacem-media.js +1 -1
- package/dist/browser/pacem-media.min.js +1 -1
- package/dist/browser/pacem-networking.js +1 -1
- package/dist/browser/pacem-networking.min.js +1 -1
- package/dist/browser/pacem-numerical.js +1 -1
- package/dist/browser/pacem-numerical.min.js +1 -1
- package/dist/browser/pacem-plus.js +1 -1
- package/dist/browser/pacem-plus.min.js +1 -1
- package/dist/browser/pacem-scaffolding.js +1 -1
- package/dist/browser/pacem-scaffolding.min.js +1 -1
- package/dist/browser/pacem-ui.js +1 -1
- package/dist/browser/pacem-ui.min.js +1 -1
- package/dist/bundle/pacem.min.mjs +2 -2
- package/dist/bundle/pacem.mjs +15 -5
- package/dist/bundle/pacem.mjs.map +2 -2
- package/dist/typings/index.d.ts +1 -1
- package/dist/vscode.html-custom.json +1 -1
- package/package.json +1 -1
package/dist/browser/pacem-fx.js
CHANGED
package/dist/browser/pacem-ui.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem v1.0.0-
|
|
2
|
+
* @pacem/pacem v1.0.0-fermat (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
@@ -923,7 +923,7 @@ fn computeOffsetPosition(p0: vec4f, p1: vec4f, index: u32) -> vec4f {
|
|
|
923
923
|
intensity: f32
|
|
924
924
|
}`,`fn computeAmbient(color: vec4f, light: AmbientLight) -> vec4f {
|
|
925
925
|
return vec4f(light.intensity * color.rgb * light.color.rgb, color.a);
|
|
926
|
-
}`],bindings:[`@group(${r}) @binding(${e}) var<uniform> ${n}: AmbientLight;`],modifiers:[`${s} = computeAmbient(${i}, ${n});`]}}import{Utils as Me}from"@pacem/pacem-core";import{Colors as ak}from"@pacem/pacem-foundation";import{Geometry as GD}from"@pacem/pacem-numerical";import{Geometry as BD}from"@pacem/pacem-numerical";var $i=BD.LinearAlgebra.Vector3D,sk=BD.LinearAlgebra.Matrix3D,VD={width:1,height:1},wx=class{static create(r){if(Hb(r))return new ik(r);if(Bb(r))return new nk(r);throw new TypeError(`Camera type '${r.type}' not supported.`)}};function UD(a,r,e){let t=$i.subtract(r,a),n=$i.cross(e,t),i=$i.cross(t,n);$i.normalize(n),$i.normalize(t),$i.normalize(i);let s=-$i.dot(n,a),o=-$i.dot(i,a),c=-$i.dot(t,a);return sk.from(n.x,i.x,t.x,0,n.y,i.y,t.y,0,n.z,i.z,t.z,0,s,o,c,1)}function zD(a,r){if(a<=0)throw new RangeError("Near plane distance must be positive.");if(r<=a)throw new RangeError("Far plane distance must be greater than near plane distance.")}function DG(a=120,r=1,e=.1,t=1e3){zD(e,t);let n=Math.tan(.5*Math.PI*(1-a/180)),i=n/r,s=Number.isFinite(t),o=s?t/(e-t):-1,c=s?t*e/(e-t):-e;return sk.from(i,0,0,0,0,n,0,0,0,0,o,-1,0,0,c,0)}function RG(a,r,e,t,n=.1,i=1e3){return zD(n,i),sk.from(2/(r-a),0,0,0,0,2/(e-t),0,0,0,0,1/(n-i),0,(a+r)/(a-r),(e+t)/(t-e),n/(n-i),1)}var nk=class a{constructor(r){this._camera=r}static view(r){return UD(r.position,r.lookAt,r.up)}static projection(r,e=VD){let t=r.position,n=r.lookAt,i=$i.subtract(n,t);$i.normalize(i);let s=$i.dot(i,t),{height:o,width:c}=e,d=c/o,p=.5*s,u=p*d,h=p,m=r.top*h,f=r.bottom*h,g=r.right*u,y=r.left*u;return RG(y,g,m,f,r.near,r.far)}view(){return a.view(this._camera)}projection(r){return a.projection(this._camera,r)}},ik=class a{constructor(r){this._camera=r}static view(r){return UD(r.position,r.lookAt,r.up)}static projection(r,e=VD){let t=e.width/e.height/r.aspectRatio;return DG(r.fov,t,r.near,r.far)}view(){return a.view(this._camera)}projection(r){return a.projection(this._camera,r)}};var ok=GD.LinearAlgebra.Vector3D,ri=GD.LinearAlgebra.Matrix3D;function Bm(a,r){throw typeof r=="function"&&(r=r.name),new RangeError(`Buffer '${a}' not available for ${r}.`)}function FD(a,r,...e){if(a.stage??=r?.item.stage,vd(a))return a.key??="group_"+Me.uniqueCode(),new lk(a,r,...e);if(Rn(a))return a.key??="mesh_"+Me.uniqueCode(),new pk(a,r,...e);if($r(a))return a.key??="camera_"+Me.uniqueCode(),new ck(a);if(Is(a))return a.key??="light_"+a.type+"_"+Me.uniqueCode(),new uk(a);throw new Error("Renderable is not supported.")}var kx=class{constructor(r){this._set=r}get items(){return this._set}loop(r){let{meshes:e,cameras:t,groups:n,lights:i}=this._set,s=t[0],o=!1,c=!1;for(let d of e)d.disposed||!r(d,s,i)||(mt.clearFlags(d),o||(mt.clearFlags(s),o=!0),c||(i.forEach(u=>mt.clearFlags(u)),c=!0));for(let d of n)mt.clearFlags(d)}},Im=class{static create(r){if(yf(r))return r.key??="geometry_"+Me.uniqueCode(),new $v(r);if(pi(r))return new Hv(r);if(Vb(r))return new dk(r);throw new Error("Object is not supported.")}},mt=class a{static create(r,...e){return FD(r,null,...e)}static clearFlags(r,e=!1){if(r.item.flags.splice(0),e){let t=r;Me.isNull(t.parent)||a.clearFlags(t.parent,!0)}}static allFlags(r){let e=r,t=e.parent,n=Me.isNull(t)?[]:a.allFlags(t);return e.item.flags.union(n)}},$m=class{#e;constructor(r){this.#e=r}get item(){return this.#e}#t=!1;lock(){this.#t=!0}unlock(){this.#t=!1;let r=this.#r;for(;r.length>0;){let e=r.shift();this._destroyUnsafe(e)}}#r=[];_destroyUnsafe(r){"texture"in r?r.texture.destroy():"buffer"in r&&r.buffer.destroy()}destroySafely(...r){for(let e of Array.from(r).concat(...this.#r.splice(0)))e&&(this.#t?this.#r.push(e):this._destroyUnsafe(e))}#n=!1;destroy(){this.dispose(),this.#n=!0}get disposed(){return this.#n}},Hm=class extends $m{constructor(r,e){super(r),this.#t=e,this.#e=Me.uniqueId()%4294967295}#e;#t;#r=new Map;get parent(){return this.#t}get id(){return this.#e}allFlags(){let r=this.parent;return this.item.flags.union(r?.allFlags()??[])}buildParentWorldTransform(){let r=ri.identity(),e=this;for(;!Me.isNull(e.parent);){let t=e.parent.item,n=ri.translate(t.transformMatrix??ri.identity(),t.position??ok.zero());r=ri.multiply(r,n),e=e.parent}return r}buildWorldTransform(){let r=ri.translate(this.item.transformMatrix??ri.identity(),this.item.position??ok.zero()),e=this.buildParentWorldTransform();return ri.multiply(r,e)}#n=new Map;version(r){return this.#n.get(r)??0}buffer(r,e){if(e==="u32id"){let n=this.#r,{pipeline:i,device:s}=r;if(n.has(i))return Me.extend({fresh:!1},n.get(i));let o=new Uint32Array([this.id]),c=_r.createUniform(s,o,Fe+"u32id-buffer"),d=Me.extend({buffer:c,value:o,version:performance.now()},{fresh:!0});return this.#r.set(i,d),d}let t=this.specificBuffer(r,e);return this.#n.set(e,t.version),t}},PG={shader:"basic",color:"#c0c0c0",flags:[]},lk=class extends Hm{#e;constructor(r,e,...t){super(r,e),this.#e=r.childRenderables.map(n=>FD(n,this,...t))}get children(){return this.#e}specificBuffer(r,e){return null}texture(r){throw new Error("Method not implemented.")}dispose(){this.#e.forEach(r=>r.destroy())}},ck=class a extends Hm{#e=new Map;#t;constructor(r){super(r)}texture(r){throw new Error("Method not implemented.")}specificBuffer(r,e){let t=!1;(this.allFlags().length>0||Me.isNull(this.#t))&&(t=!0,this.#e.clear(),this._rebuildMatrices(r));let{pipeline:n}=r;if(this.#e.has(n)||(t=!0,this.#e.set(n,this.#t)),mt.clearFlags(this),e==="cameraViewTransform")return Me.extend(this.#t,{fresh:t});Bm(e,a)}_rebuildMatrices({device:r,canvas:e}){let t=this.item,n=wx.create(t),{x:i,y:s,z:o}=t.position,c=n.view(),d=n.projection(e),p=ri.multiply(c,d),u=new Float32Array(36);if(u.set(ri.toArray(c),0),u.set(ri.toArray(p),16),u.set([i,s,o],32),Me.isNull(this.#t)){let h=_r.createUniform(r,u,Fe+"view-buffer");this.#t={buffer:h,value:u,version:performance.now().roundoff()}}else this.#t.value=u,this.#t.version=performance.now().roundoff()}_destroyView(){this.#e.clear();let r=this.#t;this.#t=null,this.destroySafely(r)}dispose(){this._destroyView()}},$v=class a extends $m{#e={};#t={positions:!0,normals:!0,uv:!0,packed:!0};#r;constructor(r){super(r),r.flags??=[]}buffer(r,e){let t=this.item.flags??[];(Me.isNull(this.#r)||t.includes("geometry"))&&(t.splice(0),this.#e={},this._rebuildGeometryBuffers(r));let n=this.#t,i=this.#r,{pipeline:s}=r,o=this.#e[e]??=new Map,c=!o.has(s),d=p=>(c&&o.set(s,p),p);switch(e){case"geometryPositions":let{positions:p}=i,u=n.positions;return n.positions=!1,Me.extend(d(p),{fresh:u||c});case"geometryNormals":let{normals:h}=i,m=n.normals;return n.normals=!1,Me.extend(d(h),{fresh:m||c});case"geometryTexCoords":let{uv:f}=i,g=n.uv;return n.uv=!1,Me.extend({fresh:g||c},d(f));case"geometry":let{packed:y}=i,v=n.packed;return n.packed=!1,Me.extend(d(y),{fresh:v||c});default:Bm(e,a)}}texture(r){throw new Error("Method not implemented.")}_rebuildGeometryBuffers({device:r}){this._destroyBuffers();let e=performance.now(),t=this.item,n=t.key;if(Au(t)){let i=t,o=!Me.isNullOrEmpty(i.triangleIndices)?i.triangleIndices.map(_=>i.positions[_]):i.positions,c=o.length*2,d=c+o.length,p=new Float32Array(d),u=new Float32Array(d),h=new Float32Array(c),m=new Float32Array(2*d+c);for(let _=0;_<o.length;_++){let C=2*_,E=3*_,{x:k,y:w,z:N}=o[_],{x:H,y:R,z:A}=i.normals[_],{x:P,y:T}=i.textureCoordinates[_];p.set([k,w,N],E),u.set([H,R,A],E),h.set([P,T],C),m.set([k,w,N,H,R,A,P,T],E*2+C)}let f=_r.create(r,p,Fe+"meshgeometry-"+n+"-positions-buffer"),g=_r.create(r,u,Fe+"meshgeometry-"+n+"-normals-buffer"),y=_r.create(r,h,Fe+"meshgeometry-"+n+"-uvmap-buffer"),v=_r.create(r,m,Fe+"meshgeometry-"+n+"-buffer");this.#r={packed:{buffer:v,value:m,version:e},positions:{buffer:f,value:p,version:e},normals:{buffer:g,value:u,version:e},uv:{buffer:y,value:h,version:e}},this.#t={positions:!0,normals:!0,uv:!0,packed:!0}}else{let i=new Float32Array(ll.flattenVectorArray(t.positions)),s=_r.createStorage(r,i,Fe+"nodegeometry-"+n+"-positions-buffer");this.#r={positions:{buffer:s,value:i,version:e},packed:{buffer:s,value:i,version:e}},this.#t={positions:!0,packed:!0}}}_destroyBuffers(){this.#e={};let r=this.#r;Me.isNull(r)||this.destroySafely(r.positions,r.normals,r.uv)}dispose(){this._destroyBuffers()}},Hv=class a extends $m{#e={};#t={};#r;#n=new Map;#i=new Map;constructor(r){super(r),r.flags??=[],r.flags.indexOf("material")===-1&&r.flags.push("material")}buffer(r,e){let t=this.item.flags??[],n=Me.isNull(this.#r);t.includes("material")&&(this.#e={},t.splice(0),n=!0,this.#i.clear(),this._resetMaterialBuffers());let{pipeline:i}=r,s=this.#e[e]??=new Map;switch(e){case"material":case"line":let o=this._ensureMaterialBuffer(r,e);return o?(s.has(i)||(n=!0,s.set(i,o)),Me.extend(o,{fresh:n})):null;default:Bm(e,a)}}_ensureMaterialBuffer(r,e="material"){let t=this.#n,n=t.get(e);return n||(t.has(e)?null:(n=this.#r?.buffer(r,e),n&&t.set(e,n),n))}_resetMaterialBuffers(){this.#r=fx.create(this.item),this._destroyBuffers()}texture(r,e="texture"){let t=this.#i,n=t.get(e),i=!1;if(!n){if(n=this.#r?.texture(r,e),!n)return null;t.set(e,n),i=!0,this.#t={}}let{pipeline:s}=r,o=this.#t[e]??=new Map;return o.has(s)||(i=!0,o.set(s,n)),Me.extend(n,{fresh:i})}dispose(){this._destroyBuffers()}_destroyBuffers(){this.#e={},this.#t={};let r=this.#n.values();this.#n.clear(),this.destroySafely(...r);let e=this.#i.values();this.#i.clear(),e.forEach(t=>t.texture.destroy())}},dk=class a extends $m{#e={time:0,cursor:{x:0,y:0},resolution:{width:0,height:0}};#t;#r=new Map;constructor(r){super(r),Me.extend(this.#e,r)}buffer(r,e){if(e==="interaction")return this._ensureInteractionBuffer(r);Bm(e,a)}texture(r){throw new Error("Method not implemented.")}_ensureInteractionBuffer(r,e="interaction"){let t=this.#e,n=this.item,i=!this.#t||n.time!==t.time||n.resolution?.width!==t.resolution.width||n.resolution?.height!==t.resolution.height;if(!i&&!Me.isNull(n.cursor)&&(i=n.cursor.x!==t.cursor.x||n.cursor.y!==t.cursor.y),i){let c=new Float32Array([n.cursor?.x??0,n.cursor?.y??0,n.resolution.width,n.resolution.height,n.time,0]),d=_r.createUniform(r.device,c,Fe+"interaction-buffer");this.#t={buffer:d,value:c,version:performance.now()},this.#r.clear()}let{pipeline:s}=r,o=this.#r;return o.has(s)||(i=!0,o.set(s,this.#t)),Me.extend(this.#t,{fresh:i})}_destroyBuffers(){this.#r.clear();let r=this.#t;Me.isNull(r)||this.destroySafely(r)}dispose(){this._destroyBuffers()}},pk=class a extends Hm{#e;#t;#r;#n;#i;#a={geometry:!0,material:!0,transform:!0};#s=new Map;constructor(r,e,t,n){super(r,e),r.flags??=[],r.flags.indexOf("geometry")===-1&&r.flags.push("geometry"),r.flags.indexOf("material")===-1&&r.flags.push("material"),r.flags.indexOf("position")===-1&&r.flags.indexOf("transform")===-1&&r.flags.push("transform"),this.#e=t,this.#r=n}texture(r,e){return this.#n?.texture(r,e)}specificBuffer(r,e){let t=this.#a,n=this.allFlags();(Me.isNull(this.#i)||n.includes("position")||n.includes("transform"))&&(this.#s.clear(),t.transform=!0,this._rebuildWorldMatrices(r)),(Me.isNull(this.#t)||n.includes("geometry"))&&(t.geometry=!0,this._ensureGeometryBuffer()),(Me.isNull(this.#n)||n.includes("material"))&&(t.material=!0,this._ensureMaterialBuffer()),mt.clearFlags(this);let i=this.#t,s=this.#n;switch(e){case"geometryPositions":case"geometryNormals":case"geometryTexCoords":case"geometry":return i.buffer(r,e);case"material":case"line":return s.buffer(r,e);case"objectWorldTransform":let o=this.#i,c=t.transform;t.transform=!1;let d=this.#s,{pipeline:p}=r,u=!d.has(p);return u&&d.set(p,o),Me.extend(o,{fresh:c||u});default:Bm(e,a)}}_ensureGeometryBuffer(){let r=this.#t,e=this.#e,n=this.item.geometry;if(Me.isNull(e))r?.destroy(),this.#t=new $v(n);else{let i=e?.get(n);i?.disposed!==!1&&(i=new $v(n),e.set(n,i)),this.#t=i}}_ensureMaterialBuffer(){let r=this.#n,e=this.#r,n=this.item.material??PG;if(Me.isNull(e))r?.destroy(),this.#n=new Hv(n);else{let i=e?.get(n);i?.disposed!==!1&&(i=new Hv(n),e.set(n,i)),this.#n=i}}_rebuildWorldMatrices({device:r}){let e=this.item,t=this.buildWorldTransform(),n=ri.transpose(ri.invert(t)),i=new Float32Array(28);if(i.set(ri.toArray(t),0),i.set([n.m11,n.m12,n.m13,0,n.m21,n.m22,n.m23,0,n.m31,n.m32,n.m33,0],16),Me.isNull(this.#i)){let s=_r.createUniform(r,i,Fe+"mesh-"+e.key+"-worldmatrix-buffer");this.#i={buffer:s,value:i,version:performance.now().roundoff()}}else this.#i.value=i,this.#i.version=performance.now().roundoff()}dispose(){this.#s.clear();let r=this.#i;this.#i=null,this.destroySafely(r);let e=this.#n;this.#n=null,e?.destroy();let t=this.#t;this.#t=null,t?.destroy()}},uk=class a extends Hm{#e;#t=new Map;constructor(r){super(r),r.flags.push("light")}_rebuildAmbientLightBuffer({device:r}){let e=this.item,t=4,n=1,i=0,s=4,o=24,c=new Float32Array(o),{r:d,g:p,b:u,a:h}=ak.parse(e.color??"#fff");c.set([d,p,u,h],i),c.set([e.intensity],s),this.#e={value:c,buffer:_r.createUniform(r,c,Fe+"ambient-light-buffer"),version:performance.now()}}_rebuildDirectionalLightBuffer({device:r}){let e=this.item,t=1,n=4,i=3,s=0,o=4,c=7,d=c+t,p=new Float32Array(d),{r:u,g:h,b:m,a:f}=ak.parse(e.color??"#fff");p.set([u,h,m,f],s),p.set([e.intensity],c);let g=ok.subtract(e.position,e.target);p.set([g.x,g.y,g.z],o),this.#e={value:p,buffer:_r.createUniform(r,p,Fe+"directional-light-buffer"),version:performance.now()}}_rebuildOmniLightBuffer({device:r}){let e=this.item,t=1,n=4,i=3,s=0,o=4,c=7,d=c+t,p=new Float32Array(d),{r:u,g:h,b:m,a:f}=ak.parse(e.color??"#fff");p.set([u,h,m,f],s),p.set([e.intensity],c),p.set([e.position.x,e.position.y,e.position.z],o),this.#e={value:p,buffer:_r.createUniform(r,p,Fe+"omni-light-buffer"),version:performance.now()}}_rebuildLight(r){this.destroySafely(this.#e);let e=this.item;switch(e.type){case"direction":this._rebuildDirectionalLightBuffer(r);break;case"omni":this._rebuildOmniLightBuffer(r);break;case"ambient":this._rebuildAmbientLightBuffer(r);break;default:throw new Error(`Light '${e.type}' is not supported.`)}}texture(r){throw new Error("Method not implemented.")}specificBuffer(r,e){let t=this.#t,n=Me.isNull(this.#e)||this.allFlags().length>0;n&&(t.clear(),this._rebuildLight(r)),mt.clearFlags(this);let{pipeline:i}=r;if(t.has(i)||(n=!0,t.set(i,this.#e)),e==="light")return Me.extend(this.#e,{fresh:n});Bm(e,a)}dispose(){this.#t.clear();let r=this.#e;this.#e=null,this.destroySafely(r)}};var Pe=Fe,jD={multisample:!0,packedVertices:!0,primitive:{topology:"triangle-list",frontFace:"ccw",cullMode:"back"}},Fr=a=>{},Wp=class a{static{this._memoizer=new WeakMap}static dispose(r){let e=this._memoizer,t=e.get(r);Le.isNull(t)||(t.clear(),e.delete(r))}static createColorPicking(r,e){let t=a.create(r,e);return t instanceof Sx||t instanceof Lx?{frame:t.raycast}:null}static create(r,[e,t,...n],i){let s=a._memoizer,o=s.get(r);if(Le.isNull(o)&&s.set(r,o=new Map),Le.isNull(e))throw new Error("Pipeline not implemented, given the provided arguments.");if(Rn(e.item)){let c=Au(e.item.geometry),d=!c&&Tl(e.item.material);if(!c&&!d)throw new Error("Pipeline not implemented, given the provided mesh argument.");let p=c?new hk(e,t,...n):new mk(e,t),u=p.key+(i?.modifiers?.version??""),h=o.get(u);if(h)return h;let m=c?new Sx(r,p):new Lx(r,p);m.build(i);let f=m;return Le.extend(f,{id:u+"-"+r.canvas.width+"x"+r.canvas.height+"-"+Le.Dates.now().toISOString()}),o.set(u,f),f}else throw new ReferenceError("Pipeline not implemented, given thst the first argument is not a mesh.")}},Mx=class{constructor(){this.#e=new Map}#e;ensureBindGroup({device:r},e,t,n,i,s,o=()=>{}){let c=this.#e,d=typeof e=="string"?e:e.key,p=c.get(d);if(Le.isNull(p)&&c.set(d,p=new Map),n||!p.has(s)){let u=t.map((f,g)=>({binding:g,resource:{buffer:f}})),h={label:s,layout:i,entries:u};o(h);let m=r.createBindGroup(h);return p.set(s,m),m}else return p.get(s)}},hk=class a{#e=[];#t;#r;#n=new Map;#i={shader:"basic",lights:""};constructor(...r){this.add(...r)}reset(){this.#e.splice(0),this.#t=null,this.#n.clear(),this.#i={shader:"basic",lights:""}}add(...r){for(let e of r??[])if(Rn(e.item))if(Le.isNull(this.#t)){this.#t=e;let t=e.item.material??{shader:"basic"};this.#i.shader=t.shader+"-"+(t.map?"map":"nomap")}else throw new Error("Mesh already added.");else if(Is(e.item))this.#e.push(e),this.#i.lights+="-"+e.item.type;else if($r(e.item))this.#r??=e;else throw new Error("Unknown object type.")}build(r){let e=this._computeBasicData(),t=this.key,n=this.vertex({inputModifier:r?.vertexInput,outputModifier:r?.vertexOutput}),i=this.fragment(e,{modifier:r?.fragment}),s=(...c)=>a.prototype.bindgroup.apply(this,c),o={lightCount:this.#e.length,mapCount:this.#t.item.material?.map?1:0};return{vertex:n,fragment:i,key:t,bindings:s,metadata:o}}get key(){let{shader:r,lights:e}=this.#i;return"mesh-"+r+e}bindgroup(r,e,t){let i=this.#n.get(r);if(Le.isNull(i))return null;if(Le.isNullOrEmpty(e))return i;let s=i.filter(o=>o.key===e);return isNaN(t)?s:t>=0&&t<i.length?s[t]:s}vertex(r){return ND(r)}_computeBasicData(){let r=this.#t.item,e=this.#e,t=r.material,n=!Le.isNull(t?.texture),i=!Le.isNullOrEmpty(e),s=Le.isNull(r)?"basic":r.material?.shader??"basic";return{hasTexture:n,hasLighting:i,shader:s,materialBindGroupIndex:2,lightingBindGroupIndex:3}}_computeBindGroupsAndReferences(r=this._computeBasicData()){let{hasTexture:e,materialBindGroupIndex:t,lightingBindGroupIndex:n}=r,i=this.#n,s=this.#e,o={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},c={key:"material",group:t,binding:0,type:"buffer"};e?i.set("mesh",[o,c,{key:"texture",group:t,type:"texture"}]):i.set("mesh",[o,c]),i.set("camera",[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}]);let d=s.map((p,u)=>({key:"light",group:n,binding:u,type:"buffer"}));d.push(...d),i.set("interaction",[{key:"interaction",group:0,type:"buffer",binding:1}])}fragment(r=this._computeBasicData(),e){this._computeBindGroupsAndReferences(r);let t={definitions:[],bindings:[],modifiers:[]},n=i=>{for(let s of i.definitions??[])t.definitions.indexOf(s)===-1&&t.definitions.push(s);Le.isNullOrEmpty(i.bindings)||t.bindings.push(...i.bindings),Le.isNullOrEmpty(i.modifiers)||t.modifiers.push(...i.modifiers)};switch(r.shader){case"basic":if(r.hasTexture){let o=r.materialBindGroupIndex,c=PD({inputColor:Gp,outputColors:[Gp],uv:"uv"},o);n(c)}let i=0,s=this.#e;for(let o of s){switch(o.item.type){case"direction":let d=ID({outputColor:Dv,normal:"normal"},r.lightingBindGroupIndex,i);n(d);break;case"omni":let p=$D({outputColor:Dv,normal:"normal",position:"vertex"},r.lightingBindGroupIndex,i);n(p);break;case"ambient":let u=HD({inputColor:Gp,outputColor:mx},r.lightingBindGroupIndex,i);n(u);break}i++}return Ov.fragment(t,e)}}},Hi={writeBufferConditionally:(a,r)=>{r.fresh&&a.queue.writeBuffer(r.buffer,0,r.value)}},Sx=class{constructor(r,e,t=new Mx){this._context=r;this._builder=e;this._cache=t;this._ensureU32idBindGroup=(r,e,t)=>this._cache.ensureBindGroup(this._context,r,[e],t,this._pickBindGroupLayout,Pe+"mesh-colorpick-bind-group");this._ensureMaterialBindGroup=(r,e,t,n,i=2)=>{let s=this._bindGroupLayouts[i],o=Pe+"material-bind-group";if(s.label!==Pe+"material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");return this._cache.ensureBindGroup(this._context,r,[e],n,s,o,c=>{let{device:d}=this.context,p=c.entries;t&&p.push({binding:1,resource:d.createSampler({addressModeU:"repeat",addressModeV:"repeat",magFilter:"linear",minFilter:"linear"})},{binding:2,resource:t.createView()})})};this._ensureWorldTransformBindGroup=(r,e,t,n=1,i=!1)=>{let s=this._bindGroupLayouts[n];if(s.label!==Pe+"mesh-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let o=r.key+"-"+(i?1:0),c=`${Pe}${i?"colorpick":"mesh"}-transforms-bind-group`;return this._cache.ensureBindGroup(this._context,o,[e],t,s,c)};this._ensureCameraProjectionAndInteractionDataBindGroup=(r,e,t,n,i=0,s=!1)=>{let o=this._bindGroupLayouts[i],c=r.key+"-"+(s?1:0),d=`${Pe}${s?"colorpick":"mesh"}-view-bind-group`;return this._cache.ensureBindGroup(this._context,c,[e,t],n,o,d)};this._ensureLightingBindGroup=(r,e,t=3)=>{let n=this._bindGroupLayouts[t],i=r.map(o=>o.id).join(":"),s=r.map(o=>o.buffer.buffer);return this._cache.ensureBindGroup(this._context,i,s,e,n,Pe+"mesh-lighting-bind-group")};this._bindGroupLayouts=[];this._bindVertex=Fr;this._bindPicker=Fr;this._bindWorldTransform=Fr;this._bindRaycastWorldTransform=Fr;this._bindCameraProjectionAndInteractionData=Fr;this._bindRaycastCameraProjectionAndInteractionData=Fr;this._bindLighting=Fr;this._bindMaterial=Fr;this.set=r=>{throw new Error("Deprecated.")};this.bind=(r,...e)=>{throw new Error("Deprecated.")};this.draw=(r,...e)=>{throw new Error("Deprecated.")};this.frame=(r,e,t,n,...i)=>{r.setPipeline(this._pipeline);try{this._bindVertex(r,t),this._bindWorldTransform(r,t),this._bindMaterial(r,t),this._bindCameraProjectionAndInteractionData(r,n,e),this._bindLighting(r,...i);let s=t.item,o=s.geometry;r.draw(o.triangleIndices?.length||o.positions.length)}catch(s){console.error("Pacem.Drawing3D.FrameException",s)}};this.raycast=(r,e,t,n)=>{r.setPipeline(this._pickPipeline);try{this._bindVertex(r,t),this._bindRaycastWorldTransform(r,t),this._bindRaycastCameraProjectionAndInteractionData(r,n,e),this._bindPicker(r,t);let i=t.item,s=i.geometry;r.draw(s.triangleIndices.length)}catch{}};this._key=e.key}get context(){return this._context}get key(){return this._key}build(r){let e=Le.extend({},jD,r??{}),t=this._builder,n=t.build(e.modifiers),i=Le.extend({pipeline:this},this._context),s=i.device,o={module:s.createShaderModule({code:n.vertex}),buffers:e.packedVertices?[Fp.createVertex(0,3,3,2)]:[Fp.createVertex(0,3),Fp.createVertex(1,3),Fp.createVertex(2,2)]},c=s.createBindGroupLayout({entries:[{binding:0,visibility:3,buffer:{type:"uniform"}},{binding:1,visibility:3,buffer:{type:"uniform"}}],label:Pe+"mesh-view-bind-group-layout"}),d=s.createBindGroupLayout({entries:[{binding:0,visibility:1,buffer:{type:"uniform"}}],label:Pe+"mesh-transforms-bind-group-layout"}),p=[c,d],u={module:s.createShaderModule({code:n.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},h=p.length,m=[{binding:0,visibility:2,buffer:{type:"read-only-storage"}}],{mapCount:f}=n.metadata,g=f>0;g&&m.push({visibility:2,binding:1,sampler:{}},...Array(f).keys().map(T=>({visibility:2,binding:2+T,texture:{}})));let y={label:Pe+"material-bind-group-layout",entries:m},v=s.createBindGroupLayout(y);p.push(v);let _=p.length,{lightCount:C}=n.metadata,E=C>0;if(E){let T=s.createBindGroupLayout({entries:[...Array(C).keys()].map(($,V)=>({visibility:2,binding:V,buffer:{type:"uniform"}})),label:Pe+"lighting-bind-group-layout"});p.push(T)}let k={label:Pe+"mesh-render-pipeline",vertex:o,fragment:u,layout:s.createPipelineLayout({label:Pe+"mesh-render-pipeline-layout",bindGroupLayouts:this._bindGroupLayouts=p}),primitive:e.primitive};e.multisample&&(k.multisample={count:4},k.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._pipeline=s.createRenderPipeline(k);let w=this._pickBindGroupLayout=s.createBindGroupLayout({label:Pe+"mesh-colorpick-bind-group-layout",entries:[{visibility:2,binding:0,buffer:{type:"uniform"}}]}),N={label:Pe+"mesh-colorpick-pipeline",vertex:o,fragment:{module:s.createShaderModule({code:Z0(2)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:Pe+"mesh-colorpick-pipeline-layout",bindGroupLayouts:[c,d,w]}),primitive:e.primitive,depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickPipeline=s.createRenderPipeline(N);let H=(T,...$)=>{let V=$.at(0);if(Le.isNull(V))throw new ReferenceError(`Null ${mt.name} bringing vertex buffers was provided.`);let{buffer:B}=V.buffer(i,"geometryPositions"),{buffer:O}=V.buffer(i,"geometryNormals"),{buffer:U}=V.buffer(i,"geometryTexCoords");T.setVertexBuffer(0,B),T.setVertexBuffer(1,O),T.setVertexBuffer(2,U)},R=(T,...$)=>{let V=$.at(0);if(Le.isNull(V))throw new ReferenceError(`Null ${mt.name} bringing vertex buffers was provided.`);let{buffer:B}=V.buffer(i,"geometry");T.setVertexBuffer(0,B)};this._bindVertex=e.packedVertices?R:H;let A=(T,$,V)=>{if(Le.isNull($))throw new ReferenceError(`Null ${mt.name} bringing world transform buffer was provided.`);let B=$.buffer(i,"objectWorldTransform"),O=B.buffer;Hi.writeBufferConditionally(s,B);let{group:U}=n.bindings("mesh","objectWorldTransform",0),z=this._ensureWorldTransformBindGroup($.item,O,B.fresh,U,V);T.setBindGroup(U,z)};this._bindWorldTransform=(T,...$)=>{let V=$.at(0);A(T,V,!1)},this._bindRaycastWorldTransform=(T,...$)=>{let V=$.at(0);A(T,V,!0)};let P=(T,$,V,B)=>{if(Le.isNull($))throw new ReferenceError(`Null ${mt.name} bringing view projection buffers was provided.`);let O=$.buffer(i,"cameraViewTransform"),U=O.buffer;if(Hi.writeBufferConditionally(s,O),Le.isNull(V))throw new ReferenceError(`Null ${mt.name} bringing interaction buffers was provided.`);let z=V.buffer(i,"interaction"),G=z.buffer;Hi.writeBufferConditionally(s,z);let{group:Z}=n.bindings("camera","cameraViewTransform",0),{group:q}=n.bindings("interaction","interaction",0);if(Z!==q)throw new ReferenceError(`Layout bind group mismatch: ${Z} vs ${q}.`);let Q=this._ensureCameraProjectionAndInteractionDataBindGroup($.item,U,G,O.fresh||z.fresh,Z,B);T.setBindGroup(Z,Q)};this._bindCameraProjectionAndInteractionData=(T,...$)=>{let V=$.at(0),B=$.at(1);P(T,V,B,!1)},this._bindRaycastCameraProjectionAndInteractionData=(T,...$)=>{let V=$.at(0),B=$.at(1);P(T,V,B,!0)},this._bindMaterial=(T,...$)=>{let V=$.at(0);if(Le.isNull(V))throw new ReferenceError(`Null ${mt.name} bringing vertex colors was provided.`);let B=V.buffer(i,"material"),O=B.buffer;Hi.writeBufferConditionally(s,B);let U=V.texture(i),z=U?.texture,G=this._ensureMaterialBindGroup(V.item,O,z,B.fresh,h);T.setBindGroup(h,G),g&&s.queue.copyExternalImageToTexture({source:U.source,flipY:!0},{texture:z},{width:z.width,height:z.height})},this._bindLighting=(T,...$)=>{if(E){let B=Array.from($).map(z=>({buffer:z.buffer(i,"light"),id:z.item.key})),O=B.some(z=>z.buffer.fresh),U=this._ensureLightingBindGroup(B,O,_);for(let z of B)Hi.writeBufferConditionally(s,z.buffer);T.setBindGroup(_,U)}},this._bindPicker=(T,...$)=>{let V=$.at(0);if(Le.isNull(V))throw new ReferenceError(`Null ${mt.name} bringing world transform buffer was provided.`);let B=V.buffer(i,"u32id"),O=B.buffer;Hi.writeBufferConditionally(s,B);let U=2,z=B.fresh,G=this._ensureU32idBindGroup(V.item,O,z);T.setBindGroup(U,G)}}},mk=class a{#e;#t;#r=new Map;constructor(...r){this.add(...r)}reset(){this.#e=null,this.#r.clear()}add(...r){for(let e of r??[])if(Rn(e.item))if(Le.isNull(this.#e))this.#e=e;else throw new Error("Line already added.");else if($r(e.item))this.#t??=e;else if(!Is(e.item))throw new Error("Unknown object type.")}build(){let r=this._computeBasicData(),e=this.key,t=this.vertex(r),n=this.fragment(r);return{vertex:t,fragment:n,key:e,bindings:(...s)=>a.prototype.bindgroup.apply(this,s),metadata:{thickness:r.thickness,dashPattern:r.dashPattern}}}get key(){let r=(this.#e?.item).material?.lineWidth>1;return"line"+(r?"-fat":"")}bindgroup(r,e,t){let i=this.#r.get(r);if(Le.isNull(i))return null;if(Le.isNullOrEmpty(e))return i;let s=i.filter(o=>o.key===e);return isNaN(t)?s:t>=0&&t<i.length?s[t]:s}vertex(r=this._computeBasicData()){return r.thickness>1?RD():DD()}_computeBasicData(){let r=this.#e.item,e=Le.isNull(r)?"line":r.material?.shader??"line",t=r.material,n=t?.lineWidth??1,i=t?.dashArray;return{shader:e,thickness:n,dashPattern:i}}_computeBindGroupsAndReferences(r=this._computeBasicData()){let e=this.#r,t={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},n={key:"material",group:3,binding:0,type:"buffer"},i={key:"geometryPositions",group:2,binding:0,type:"buffer"},s={key:"line",group:2,binding:1,type:"buffer"};e.set("mesh",[t,n,i,s]),e.set("camera",[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}])}fragment(r=this._computeBasicData()){this._computeBindGroupsAndReferences(r);let e={definitions:[],bindings:[],modifiers:[]};if(r.shader==="line")return Pv.fragment(e)}},Lx=class{constructor(r,e,t=new Mx){this._lineBuilder=e;this._cache=t;this._ensureLineU32idBindGroup=(r,e,t)=>{let n=this.context;return this._cache.ensureBindGroup(n,r,[e],t,this._pickLineBindGroupLayout,Pe+"line-colorpick-bind-group")};this._ensureLineMaterialBindGroup=(r,e,t,n=2)=>{let i=this._bindLineGroupLayouts[n];if(i.label!==Pe+"line-material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let s=this.context;return this._cache.ensureBindGroup(s,r,[e],t,i,Pe+"line-material-bind-group")};this._ensureLinePositionsBindGroup=(r,e,t,n)=>{let i=this._bindLineGroupLayouts[n];if(i.label!==Pe+"line-positions-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let s=this.context;return this._cache.ensureBindGroup(s,r,e,t,i,Pe+"line-positions-bind-group")};this._ensureLineWorldTransformBindGroup=(r,e,t,n=1,i=!1)=>{let s=this._bindLineGroupLayouts[n];if(s.label!==Pe+"line-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let o=r.key+"-line-"+(i?1:0),c=`${Pe}${i?"colorpick":""}-line-transforms-bind-group`,d=this.context;return this._cache.ensureBindGroup(d,o,[e],t,s,c)};this._ensureLineCameraProjectionBindGroup=(r,e,t,n=0,i=!1)=>{let s=this._bindLineGroupLayouts[n],o=r.key+"-line-"+(i?1:0),c=`${Pe}${i?"colorpick":""}-line-view-bind-group`,d=this.context;return this._cache.ensureBindGroup(d,o,[e],t,s,c)};this._bindLineGroupLayouts=[];this._bindLinePositions=Fr;this._bindLinePicker=Fr;this._bindLineWorldTransform=Fr;this._bindLineRaycastWorldTransform=Fr;this._bindLineCameraProjection=Fr;this._bindLineRaycastCameraProjection=Fr;this._bindLineMaterial=Fr;this._drawLine=Fr;this.set=r=>{throw new Error("Deprecated.")};this.bind=(r,...e)=>{throw new Error("Deprecated.")};this.draw=(r,...e)=>{throw new Error("Deprecated.")};this.frame=(r,e,t)=>{r.setPipeline(this._linePipeline);try{this._bindLineWorldTransform(r,e),this._bindLineCameraProjection(r,t),this._bindLinePositions(r,e),this._bindLineMaterial(r,e),this._drawLine(r,e)}catch(n){console.error("Pacem.Drawing3D.FrameException",n)}};this.raycast=(r,e,t)=>{r.setPipeline(this._pickLinePipeline);try{this._bindLineRaycastWorldTransform(r,e),this._bindLineRaycastCameraProjection(r,t),this._bindLinePositions(r,e),this._bindLinePicker(r,e),this._drawLine(r,e)}catch{}};this.#e=r,this._lineKey=e.key}#e;get context(){return this.#e}get key(){return this._lineKey}build(r){let e=Le.extend({},jD,r??{}),t=this._lineBuilder,n=t.build(),i=Le.extend({pipeline:this},this.#e),s=i.device,o=n.metadata.thickness>1,c={module:s.createShaderModule({code:n.vertex}),buffers:[]},d=s.createBindGroupLayout({entries:[{binding:0,visibility:1,buffer:{type:"uniform"}}],label:Pe+"line-transforms-bind-group-layout"}),p=s.createBindGroupLayout({entries:[{binding:0,visibility:1,buffer:{type:"uniform"}}],label:Pe+"line-view-bind-group-layout"}),u=[{binding:0,visibility:1,buffer:{type:"read-only-storage"}}];o&&u.push({binding:1,visibility:1,buffer:{type:"uniform"}});let h=s.createBindGroupLayout({entries:u,label:Pe+"line-positions-bind-group-layout"}),m=[d,p,h],f=m.length,g=m.slice(),y={module:s.createShaderModule({code:n.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},v=g.length,_=[{binding:0,visibility:2,buffer:{type:"read-only-storage"}}],C={label:Pe+"line-material-bind-group-layout",entries:_},E=s.createBindGroupLayout(C);g.push(E);let k=o?e.primitive.topology:"line-list",w={label:Pe+"line-render-pipeline",vertex:c,fragment:y,layout:s.createPipelineLayout({label:Pe+"line-render-pipeline-layout",bindGroupLayouts:this._bindLineGroupLayouts=g}),primitive:Le.extend({},e.primitive,{topology:k})};e.multisample&&(w.multisample={count:4},w.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._linePipeline=s.createRenderPipeline(w);let N=this._pickLineBindGroupLayout=s.createBindGroupLayout({label:Pe+"line-colorpick-bind-group-layout",entries:[{visibility:2,binding:0,buffer:{type:"uniform"}}]}),H={label:Pe+"line-colorpick-pipeline",vertex:c,fragment:{module:s.createShaderModule({code:Z0(f)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:Pe+"line-colorpick-pipeline-layout",bindGroupLayouts:m.concat(N)}),primitive:Le.extend({},e.primitive,{topology:k}),depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickLinePipeline=s.createRenderPipeline(H);let R=(P,T,$)=>{if(Le.isNull(T))throw new ReferenceError(`Null ${mt.name} bringing world transform buffer was provided.`);let V=T.buffer(i,"objectWorldTransform"),B=V.buffer;Hi.writeBufferConditionally(s,V);let{group:O}=n.bindings("mesh","objectWorldTransform",0),U=this._ensureLineWorldTransformBindGroup(T.item,B,!1,O,$);P.setBindGroup(O,U)};this._bindLineWorldTransform=(P,...T)=>{let $=T.at(0);R(P,$,!1)},this._bindLineRaycastWorldTransform=(P,...T)=>{let $=T.at(0);R(P,$,!0)};let A=(P,T,$)=>{if(Le.isNull(T))throw new ReferenceError(`Null ${mt.name} bringing view projection buffers was provided.`);let V=T.buffer(i,"cameraViewTransform"),B=V.buffer;Hi.writeBufferConditionally(s,V);let{group:O}=n.bindings("camera","cameraViewTransform",0),U=this._ensureLineCameraProjectionBindGroup(T.item,B,!1,O,$);P.setBindGroup(O,U)};this._bindLineCameraProjection=(P,...T)=>{let $=T.at(0);A(P,$,!1)},this._bindLineRaycastCameraProjection=(P,...T)=>{let $=T.at(0);A(P,$,!0)},this._bindLinePositions=(P,...T)=>{let $=T.at(0);if(Le.isNull($))throw new ReferenceError(`Null ${mt.name} bringing vertex buffers was provided as index 0.`);let V=$.buffer(i,"geometryPositions"),B=V.buffer,O=V.fresh,U=[B];if(Hi.writeBufferConditionally(s,V),o){let Z=$.buffer(i,"line"),q=Z.buffer;O||=Z.fresh,U.push(q),Hi.writeBufferConditionally(s,Z)}let{group:z}=n.bindings("mesh","line",0),G=this._ensureLinePositionsBindGroup($.item,U,O,z);P.setBindGroup(z,G)},this._bindLineMaterial=(P,...T)=>{let $=T.at(0);if(Le.isNull($))throw new ReferenceError(`Null ${mt.name} bringing vertex colors was provided.`);let V=$.buffer(i,"material"),B=V.buffer;Hi.writeBufferConditionally(s,V);let O=this._ensureLineMaterialBindGroup($.item,B,V.fresh,v);P.setBindGroup(v,O)},this._bindLinePicker=(P,...T)=>{let $=T.at(0);if(Le.isNull($))throw new ReferenceError(`Null ${mt.name} bringing world transform buffer was provided.`);let V=$.buffer(i,"u32id"),B=V.buffer,O=V.value;Hi.writeBufferConditionally(s,V);let U=this._ensureLineU32idBindGroup($.item,B,!1);P.setBindGroup(f,U)},this._drawLine=(P,...T)=>{let V=T.at(0).item,B=V.geometry;o?P.draw(6,B.positions.length-1,0,0):P.draw(B.positions.length)}}};import{Utils as jp}from"@pacem/pacem-core";var Vv=class{static{this._memoizer=new WeakMap}static dispose(r){let e=this._memoizer;if(e.has(r)){let t=e.get(r);for(let n of t.values())n.destroy();t.clear(),e.delete(r)}}static createColorPicking(r){let e=this._memoizer;e.has(r)||e.set(r,new Map);let t=e.get(r),n="colorpick";if(t.has(n))return t.get(n);let i=new fk(r);return t.set(n,i),i}},Bv=1,fk=class{constructor(r){this._context=r;this._objects=new Map;this.frame=(r,...e)=>{if(jp.isNull(this._encoder))throw new Error("Null encoder. Maybe you missed to call the 'begin' method first.");let t=Array.from(e);Wp.createColorPicking(this._context,t)?.frame(this._pass,r,...e);for(let i of t)i.item.inert||this._objects.set(i.id,i)};this.end=r=>{if(!jp.isNull(this._handle))return this._handle;let e=this._pass,t=this._encoder,{device:n}=this._context,{render:i}=this._textures,s=i.texture,o=this._ensureBuffer();e.end(),t.copyTextureToBuffer({texture:s,origin:{x:r.x,y:r.y}},{buffer:o,bytesPerRow:(Bv*4+255|0)*256,rowsPerImage:1},{width:Bv}),n.queue.submit([t.finish()]),this._encoder=null;let c=this,d=c._objects,p=()=>{c._handle=null};return this._handle=new Promise((u,h)=>{o.mapAsync(1,0,4*Bv).then(m=>{let g=new Uint32Array(o.getMappedRange(0,4*Bv))[0];o.unmap(),p();let y=d.get(g);u(y?[y.item]:[])})})}}_createTexture(r){let{device:e,canvas:t}=this._context,n=Math.min(e.limits.maxTextureDimension2D,t.clientWidth),i=Math.min(e.limits.maxTextureDimension2D,t.clientHeight);return e.createTexture({size:[n,i,1],format:r,usage:17})}_ensureBuffer(){let r=this._buffer;if(!jp.isNull(r))return r;let{device:e}=this._context;return this._buffer=e.createBuffer({label:Fe+"colorpick-output-buffer",size:Bv*4,usage:9})}_ensureTextures(){let r=this._textures;if(!jp.isNull(r))return r;let e=this._createTexture("r32uint"),t=this._createTexture("depth24plus"),n={texture:e,view:e.createView()},i={texture:t,view:t.createView()};return this._textures={render:n,depth:i}}_destroyTexture(r){jp.isNull(r)||r.texture?.destroy()}destroy(){let r=this._textures,e=this._buffer;if(!jp.isNullOrEmpty(r)){let{render:t,depth:n}=r;this._destroyTexture(t),this._destroyTexture(n),this._textures=null}jp.isNull(e)||(e.destroy(),this._buffer=null)}begin(){let{device:r}=this._context;this._encoder=r.createCommandEncoder({label:Fe+"colorpick-raycaster"});let{render:e,depth:t}=this._ensureTextures(),n={label:Fe+"colorpick-raycaster-pass",colorAttachments:[{view:e.view,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:t.view,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};this._pass=this._encoder.beginRenderPass(n),this._objects.clear()}};var gk=VG.LinearAlgebra.Vector3D;var Nx=class{static create(r,e){return new Promise((t,n)=>{if(!navigator.gpu)n({message:"WebGPU not supported.",cause:0});else{let i=new vk(r);i.init(e).then(s=>t(i),s=>{let c={message:typeof s=="string"?s:s.message,cause:1};n(c)})}})}};function UG(a){return{bottom:-1,top:1,left:-1,right:1,near:.1,far:200,lookAt:gk.from(0,0,0),up:gk.j(),position:gk.from(0,0,1),type:"orthographic",flags:[],stage:a}}function zG(...a){for(let r of a||[])r?.destroy()}var vk=class{constructor(r){this.#n=new WeakMap;this.#i=new WeakMap;this.#a=new WeakMap;this.#l={enableValidation:!1};this.#h=!1;this._logError=r=>{let e=this.#e,t=e.logger;if(!Yt.isNull(t)){let n="error"in r?r.error:r;t.log(HG.LogLevel.Error,n.message,"WebGPU")}};this.#c=!0;this.#u=!1;let e=(this.#e=r).stage,t=document.createElement("canvas");t.id=$G+"_3d_stage_"+Yt.uniqueCode(),e.innerHTML="",e.appendChild(this.#t=t),this.#d=Im.create(this.#p={time:performance.now(),cursor:{x:0,y:0},resolution:{width:0,height:0}})}#e;#t;#r;#n;#i;#a;#s;#o;#l;#h;#d;#p;_buildPassDescriptor({multisample:r,format:e}){let{context:t,device:n}=this.#r,i=t.getCurrentTexture(),s=this.#o;if(Yt.isNull(s)){if(s={},r){let f=n.createTexture({label:Fe+"render-texture",format:e??i.format,usage:16,size:[i.width,i.height],sampleCount:4});s.render={texture:f,view:f.createView({label:Fe+"render-texture-view"})};let g=n.createTexture({label:Fe+"depth-texture",format:"depth24plus",usage:16,size:[i.width,i.height],sampleCount:4});s.depth={texture:g,view:g.createView({label:Fe+"depth-texture-view"})}}this.#o=s}let{transparent:o,background:c}=this.#e,d=o?{r:0,g:0,b:0,a:0}:c?typeof c=="string"?BG.parse(c):c:{r:0,g:0,b:0,a:1},p=ll.flattenVectorArray([d]),u=i.createView({label:Fe+"canvas-texture-view"}),h={view:u,clearValue:p,loadOp:"clear",storeOp:"store"},m={colorAttachments:[h]};if(r){let f=s.render.view,g=s.depth.view;m.depthStencilAttachment={view:g,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store",stencilClearValue:0,stencilReadOnly:!0},h.view=f,h.resolveTarget=u}return m}_buildContext(r=this.#t,e=this.#e.size){e??=r;let t=e.width,n=e.height,i=1;r.width=t*i,r.height=n*i;let s=r.getContext("webgpu"),o=navigator.gpu.getPreferredCanvasFormat();return{context:s,textureFormat:o}}_buildUpContext(r,e,t,n){let{transparent:i}=this.#e;t.configure({alphaMode:i?"premultiplied":"opaque",device:r,format:n}),this.#r={device:r,adapter:e,canvas:this.#t,context:t,format:n},this.#c=!1}async init(r){this.#l=r;let e=await navigator.gpu.requestAdapter();if(Yt.isNull(e))throw new Error("WebGPU adapter unavalable or disabled.");let t=await e.requestDevice();if(Yt.isNull(e))throw new Error("WebGPU device unavalable or disabled.");t.addEventListener("uncapturederror",this._logError),this.#u=!Yt.isNull(r.modifiers?.version)&&!Yt.isNull(r.modifiers)&&(!Yt.isNull(r.modifiers.vertexInput)||!Yt.isNull(r.modifiers.vertexOutput)||!Yt.isNull(r.modifiers.fragment));let{context:n,textureFormat:i}=this._buildContext();this._buildUpContext(t,e,n,i)}#c;#u;render(r){if(this.#c||Yt.isNull(this.#s)||!(this.#t.width>0)||!(this.#t.height>0))return;let e=this.#r,t=e.device,n=this.#s,i=this.#l?.enableValidation??!1;this.#u&&Yt.extend(this.#p,r);let o=this._buildPassDescriptor({multisample:!0}),c=t.createCommandEncoder({label:Fe+"renderer"}),d=c.beginRenderPass(o);n.loop((p,u,h)=>{if(p.item.hide)return!1;i&&t.pushErrorScope("validation");let m=[p,u,...h];return Wp.create(e,m,{multisample:!0,modifiers:this.#l.modifiers}).frame(d,this.#d,...m),i&&t.popErrorScope().then(g=>{g&&this._logError(g)}),!0}),d.end(),t.queue.submit([c.finish()])}set disabled(r){this.#h=r}get disabled(){return this.#h}raycast(r){if(this.#c||Yt.isNull(this.#s))return Promise.resolve([]);let e=this.#r,t=e.device,n=this.#s,i=this.#l?.enableValidation??!1,s=Vv.createColorPicking(e);return s.begin(),n.loop((o,c)=>o.item.hide?!1:(i&&t.pushErrorScope("validation"),s.frame(this.#d,o,c),i&&t.popErrorScope().then(d=>{d&&this._logError(d)}),!0)),s.end(r)}_disposeRenderableJustInCase(r){let e=this.#n;e.has(r)&&(e.get(r)?.destroy(),e.delete(r))}_createOrYieldRenderable(r,e=this.#i,t=this.#a){r.stage??=this.#e;let n=this.#n,i=n.get(r);return Yt.isNull(i)&&n.set(r,i=mt.create(r,e)),i}_createOrYieldGeometry(r){let e=this.#i,t=e.get(r);return Yt.isNull(t)&&e.set(r,t=Im.create(r)),t}_createOrYieldMaterial(r){let e=this.#a,t=e.get(r);return Yt.isNull(t)&&e.set(r,t=Im.create(r)),t}_unwrapBuffers(r,e){e??={meshes:[],lights:[],cameras:[],groups:[]};for(let t of r.children)t.item.stage??=this.#e,Rn(t.item)&&e.meshes.push(t),$r(t.item)&&e.cameras.push(t),Is(t.item)&&e.lights.push(t),vd(t.item)&&(e.groups.push(t),this._unwrapBuffers(t,e));return e}_update(r){let e=[],t=[],n=[],i=d=>this._createOrYieldRenderable(d),s;for(let d of r){if(d.hide){this._disposeRenderableJustInCase(d);continue}if(d.stage??=this.#e,vd(d)){let p=d;p.flags.includes("children")&&this.#n.delete(p),e.push(i(p))}Rn(d)&&d.geometry&&(this._createOrYieldGeometry(d.geometry),Yt.isNull(d.material)||this._createOrYieldMaterial(d.material),t.push(i(d))),Is(d)&&n.push(i(d)),$r(d)&&(s??=d)}s??=UG(this.#e);let o=i(s),c={meshes:t,lights:n,cameras:[o],groups:e};for(let d of e)c=this._unwrapBuffers(d,c);this.#s?.items.meshes.forEach(d=>{t.includes(d)||d.destroy()}),this.#s=new kx(c)}update(...r){this._update(Array.from(r))}dispose(){if(this.#s=null,this._disposeContext()){let{device:r}=this.#r;r.removeEventListener("uncapturederror",this._logError),r.destroy}}_disposeContext(){let r=this.#r;if(Yt.isNull(r))return!1;Vv.dispose(r),Wp.dispose(r);let e=this.#o;if(this.#o=null,!Yt.isNull(e)){let{render:t,depth:n}=e;zG(t?.texture,n?.texture)}return r.context.unconfigure(),!0}resize(r){if(this.#c=!0,this._disposeContext()){let{device:e,adapter:t}=this.#r,{context:n,textureFormat:i}=this._buildContext(this.canvas,r);this._buildUpContext(e,t,n,i),this.#u&&Yt.extend(this.#p,{resolution:r})}}get canvas(){return this.#t}};var XD="WebGPURaycastCallback",bk="WebGPURaycastPixel",qD=Ax.getAttachedPropertyValue,KD=Ax.setAttachedPropertyValue,YG=Ax.deleteAttachedPropertyValue,Yp,Uv,Zc=class extends WG.PacemItemElement{constructor(){super(...arguments);I(this,Yp,"");I(this,Uv,new MutationObserver(()=>{this.wgsl=this.textContent}))}findContainer(){return Ax.findAncestor(this,e=>e instanceof cl)}get version(){return x(this,Yp)}viewActivatedCallback(){super.viewActivatedCallback(),this.wgsl=this.textContent,x(this,Uv).observe(this,{characterData:!0})}propertyChangedCallback(e,t,n,i){super.propertyChangedCallback(e,t,n,i),e==="wgsl"&&this._computeVersion(n)}_computeVersion(e=this.wgsl){jG.hash(e).then(t=>{if(t!==x(this,Yp)){let n=x(this,Yp),i=t;D(this,Yp,i);let s=new _k({propertyName:"version",oldValue:n,currentValue:i,firstChange:Jc.isNullOrEmpty(n)});this.dispatchEvent(s)}})}disconnectedCallback(){x(this,Uv).disconnect(),super.disconnectedCallback()}};Yp=new WeakMap,Uv=new WeakMap,l([Tx({emit:!1,converter:yk.String})],Zc.prototype,"type",2),l([Tx({emit:!1,converter:yk.String})],Zc.prototype,"wgsl",2),Zc=l([JD({tagName:ZD+"-3d-wgsl-script"})],Zc);var Xp,qp,Qc,Vm,Um,zm,cl=class extends Ll{constructor(){super(...arguments);I(this,Xp,[]);this._scriptVersionChangeHandler=e=>{let{propertyName:t}=e.detail;t==="version"&&this._parseWgslModifiers(e.detail.currentValue)};I(this,qp,new Set);I(this,Qc,new Map);I(this,Vm,!0);I(this,Um,!0);I(this,zm,new WeakMap)}invalidateSize(e,t=e.size){this._ensureRenderer(e)?.resize(t)}get items(){return x(this,Xp)}register(e){let t=x(this,Xp);return e instanceof Zc&&!t.includes(e)?(e.addEventListener(YD,this._scriptVersionChangeHandler,!1),t.push(e),this._parseWgslModifiers(this.modifiers?.version),!0):!1}unregister(e){let t=x(this,Xp),n=t.indexOf(e);return n>=0?(e.removeEventListener(YD,this._scriptVersionChangeHandler,!1),t.splice(n,1),this._parseWgslModifiers(this.modifiers?.version),!0):!1}get supported(){return x(this,Vm)}get active(){return x(this,Um)}_webGPUNotSupported(e){x(this,Vm)&&e.cause===0&&(D(this,Vm,!1),this.dispatchEvent(new _k({propertyName:"supported",oldValue:null,currentValue:!1}))),x(this,Um)&&(D(this,Um,!1),this.dispatchEvent(new _k({propertyName:"active",oldValue:null,currentValue:!1})))}initialize(e){let t=x(this,Qc),n=x(this,qp);return n.has(e)||n.add(e),Nx.create(e,{enableValidation:this.enableValidation??!1,modifiers:this.modifiers}).then(i=>(t.get(e)?.update(),t.set(e,i),this._updatePipeline(e),i.canvas),i=>(this.log(FG.LogLevel.Error,i.message),this._webGPUNotSupported(i),null))}_parseWgslModifiers(e){let t=x(this,Xp),n=t.find(p=>p.type=="vertex-input"),i=t.find(p=>p.type=="vertex-output"),s=t.find(p=>p.type=="fragment"),o=n?.wgsl,c=i?.wgsl,d=s?.wgsl;this.modifiers={vertexInput:o,vertexOutput:c,fragment:d,version:e}}propertyChangedCallback(e,t,n,i){if(super.propertyChangedCallback(e,t,n,i),!i)switch(e){case"modifiers":case"enableValidation":this._reinitialize();break}}disconnectedCallback(){let e=x(this,Qc);for(let[t,n]of e)n?.dispose();e.clear(),x(this,qp).clear(),super.disconnectedCallback()}dispose(e){let t=x(this,Qc),n=x(this,qp);t.has(e)&&(t.get(e)?.dispose(),t.delete(e)),n.has(e)&&n.delete(e)}_reinitialize(){for(let e of x(this,qp).values())this.initialize(e)}_ensureRenderer(e){return x(this,Qc).get(e)}_updatePipeline(e){this._ensureRenderer(e)?.update(...e.datasource)}render(e){let t=e.size?.width,n=e.size?.height;if(!(t>0)||!(n>0))return;let i=this._ensureRenderer(e);if(Jc.isNull(i))return;x(this,zm).has(e)&&(x(this,zm).delete(e),this._itemsChangedExec(e));let s=qD(e,bk);if(i.render({cursor:s,time:performance.now(),resolution:{width:t,height:n}}),!e.interactive)return;let o=qD(e,XD);if(!Jc.isNullOrEmpty(o)){if(Jc.isNullOrEmpty(s)){o(null);return}i.raycast(s).then(c=>{if(Jc.isNullOrEmpty(c))o(null);else{let d={object:c[0],point:null};o(d)}})}}snapshot(e,t,n,i){let s=x(this,Qc);if(!s.has(e))return Promise.resolve(null);let{canvas:o}=s.get(e),c=!Jc.isNullOrEmpty(t),d=n??(c?"image/jpeg":null),p=i??(c?.9:null);return new Promise((u,h)=>{this.render(e),Jc.snapshotElement(o,t,d,p).then(u)})}raycast(e,t,n,i){KD(e,XD,i),t.x<0||t.y<0||t.x>=n.width||t.y>=n.height?YG(e,bk):KD(e,bk,t)}_itemsChangedExec(e){this._updatePipeline(e)}_itemsChanged(e,t){x(this,zm).set(e,!0)}addItem(e,t){this._itemsChanged(e,t)}removeItem(e,t){this._itemsChanged(e,t)}updateItem(e,t){(Jc.isNull(t)||t.flags.indexOf("visibility")>=0||t.flags.indexOf("children")>=0)&&this._itemsChanged(e,t)}zoomFit(e,...t){return Promise.resolve()}project(e,t){return{x:0,y:0}}getScene(e){return e}};Xp=new WeakMap,qp=new WeakMap,Qc=new WeakMap,Vm=new WeakMap,Um=new WeakMap,zm=new WeakMap,l([GG(100)],cl.prototype,"_parseWgslModifiers",1),l([Tx({emit:!1})],cl.prototype,"modifiers",2),l([Tx({emit:!1,converter:yk.Boolean})],cl.prototype,"enableValidation",2),cl=l([JD({tagName:ZD+"-3d-webgpu-adapter"})],cl);import{CustomElement as XG,P as qG,Watch as ed,PropertyConverters as Kp,Utils as Jp,CustomEventUtils as xk,avoidHandler as zv,Behaviors as KG,PropertyChangeEventName as QD}from"@pacem/pacem-core";import{Geometry as Ox}from"@pacem/pacem-numerical";var Rr=Ox.LinearAlgebra.Vector3D,td=Ox.LinearAlgebra.Matrix3D,Dx=Ox.LinearAlgebra.Quaternion,ybe=Ox.LinearAlgebra.Spherical;function JG(a){return $r(a)?a.stage:null}var ZG=1,QG=1,eF=.05,Gv=.001,Fv={maxAzimuth:180,minAzimuth:-180,inertia:!1,maxPolar:1/0,minPolar:-1/0,zoom:{enabled:!0},pan:{enabled:!0,button:2},rotation:{enabled:!0,button:0}},Rx=class a{constructor(r,e){this._config=e;this._input={rho:0,theta:0,phi:0,x:0,y:0};this._progress={rho:0,theta:0,phi:0,x:0,y:0};this._startHandler=r=>{let{rotation:e,pan:t}=this._config,n=r.pointerType==="mouse",i=e.enabled&&n&&r.button===e.button&&xk.matchModifiers(r,e.modifiers),s=t.enabled&&n&&r.button===t.button&&xk.matchModifiers(r,t.modifiers);!i&&!s||(this.#t=i,(this.#e=s)&&(this._currentState=a._buildState(this._camera),Jp.extend(this._input,Rr.zero()),this._progress.x=this._progress.y=0),zv(r),window.addEventListener("pointerup",this._endHandler,!1),window.addEventListener("pointermove",this._moveHandler,!1),window.addEventListener("contextmenu",this._avoidHandler,!1))};this._avoidHandler=r=>zv(r);this._endHandler=r=>{zv(r),window.setTimeout(()=>{window.removeEventListener("pointerup",this._endHandler),window.removeEventListener("pointermove",this._moveHandler),window.removeEventListener("contextmenu",this._avoidHandler)},20)};this._zoomHandler=r=>{let{zoom:e}=this._config;if(!(e.enabled&&xk.matchModifiers(r,e.modifiers)))return;zv(r);let n=this._input;n.rho-=Math.sign(r.deltaY)};this._moveHandler=r=>{zv(r);let{height:e,width:t}=this._scene.size,n=this._input,i=Math.min(e,t);if(this.#t){let s=-ZG*360/i,{phi:o,theta:c}=n,{maxPolar:d,minPolar:p,maxAzimuth:u,minAzimuth:h}=this._config;n.phi=(o+r.movementX*s).clamp(p,d),n.theta=(c+r.movementY*s).clamp(h,u)}else if(this.#e){let s=this._currentState.radius/i;n.x+=-r.movementX*s,n.y+=r.movementY*s}};this._renderHandler=r=>{this._update()};let t=this._scene=(this._camera=r).stage;this._initialState=this._currentState=a._buildState(r);let n=this._canvas=t.stage;n.addEventListener("pointerdown",this._startHandler,!1),n.addEventListener("wheel",this._zoomHandler,{passive:!1}),t.addEventListener("render",this._renderHandler,!1)}static _buildState(r){let e=Rr.subtract(r.position,r.lookAt),t=Rr.mag(e);return{target:r.lookAt,versor:Rr.unit(e),up:r.up,radius:t,position:r.position}}static tryAttach(r,e){e??=Fv;let t=JG(r)?.stage;if(Jp.isNull(t))return null;{let{position:n,lookAt:i}=r;return Jp.isNull(n)||Jp.isNull(i)||Rr.areClose(n,i)?null:new a(r,e)}}get configuration(){return this._config}set configuration(r){this._config=r}#e;#t;_getSafeAzimuth({theta:r}){return a._modAngle(r)}_getSafePolar({phi:r}){return a._modAngle(r)}static _modAngle(r){for(;r<0;)r+=360;return r%360}static _getViewXYZ(r){let{versor:e,up:t}=r,n=Rr.cross(e,t),i=Rr.cross(n,e);return Rr.normalize(n),Rr.normalize(i),{right:n,up:i,versor:e}}#r;_update(){if(this.#r)return;this.#r=!0;let r=this._camera,{radius:e,versor:t,target:n,up:i}=this._initialState,{target:s}=this._currentState,{theta:o,phi:c,rho:d,x:p,y:u}=this._input,h=this._progress,{theta:m,phi:f,rho:g,x:y,y:v}=h,_=Math.abs(f-c)>Gv||Math.abs(m-o)>Gv,C=Math.abs(g-d)>Gv,E=Math.abs(p-y)>Gv||Math.abs(u-v)>Gv;if(C||_||E){let k=typeof this._config.inertia=="boolean"?this._config.inertia?eF:0:this._config.inertia,w=k>0&&k<1,{right:N,up:H}=a._getViewXYZ(this._initialState),R=n,A=i,P=s,T=g;w?T+=(d-g)*k:T=d,h.rho=T;let $=Math.pow(.95,T*QG),V=Rr.scale(t,-$*e);R=Rr.add(R,V);let B=f,O=m;w?(B+=(c-f)*k,O+=(o-m)*k):(B=c,O=o);let U=this._getSafePolar({phi:h.phi=B}),z=this._getSafeAzimuth({theta:h.theta=O}),G=Rr.negate(n),Z=td.translate(td.identity(),G),q=Dx.fromAxisAngle(H,U),Q=Dx.fromAxisAngle(N,z),Ne=td.multiply(Dx.toRotationMatrix(Q),Dx.toRotationMatrix(q));Z=td.multiply(Z,Ne),Z=td.translate(Z,Rr.negate(G)),R=td.transform(R,Z),A=td.transform(A,td.clone(Z,jr=>{jr.offsetX=jr.offsetY=jr.offsetZ=0}));let ne=y,pe=v,ee=ne,J=pe;w?(ee+=(p-ne)*k,J+=(u-pe)*k):(ee=p,J=u),h.x=ee,h.y=J;let{right:$e,up:ue}=a._getViewXYZ(this._currentState),Te=Rr.scale($e,ee),He=Rr.scale(ue,J),Ge=Rr.add(Te,He);P=Rr.add(s,Ge),r.lookAt=P,r.position=R,r.up=A,r.flags.push("camera")}this.#r=!1}dispose(){let r=this._canvas,e=this._scene;Jp.isNull(r)||(r.removeEventListener("pointerdown",this._startHandler),r.removeEventListener("wheel",this._zoomHandler)),e.removeEventListener("render",this._renderHandler,!1)}},Zp,ni=class extends KG.PacemBehavior{constructor(){super(...arguments);I(this,Zp,new Map);this._readyHandler=e=>{if(e.detail.propertyName==="isReady"&&e.detail.currentValue===!0){let t=e.currentTarget;t.removeEventListener(QD,this._readyHandler),this._decorateCore(t)}}}propertyChangedCallback(e,t,n,i){switch(super.propertyChangedCallback(e,t,n,i),e){case"maxAzimuth":case"minAzimuth":case"inertia":case"zoomControl":case"panControl":case"rotationControl":let s=this._buildConfig(),o=x(this,Zp);for(let c of o.values())c.configuration=s;break}}disconnectedCallback(){let e=x(this,Zp);for(let t of e.values())t.dispose();e.clear(),super.disconnectedCallback()}_buildConfig(){return Jp.extend({},Fv,{maxAzimuth:this.maxAzimuth??1/0,minAzimuth:this.minAzimuth??-1/0,minPolar:this.minPolar??-1/0,maxPolar:this.maxPolar??1/0,inertia:this.inertia??!1,zoom:this.zoomControl??Fv.zoom,pan:this.panControl??Fv.pan,rotation:this.rotationControl??Fv.rotation})}_decorateCore(e){let t=Rx.tryAttach(e,this._buildConfig());Jp.isNull(t)||x(this,Zp).set(e,t)}decorate(e){e.isConnected?this._decorateCore(e):e.addEventListener(QD,this._readyHandler,!1)}undecorate(e){let t=x(this,Zp);t.has(e)&&(t.get(e).dispose(),t.delete(e))}};Zp=new WeakMap,l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"maxAzimuth",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"maxPolar",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"minAzimuth",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"minPolar",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"zoomControl",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"rotationControl",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"panControl",2),l([ed({emit:!1,converter:DC})],ni.prototype,"inertia",2),ni=l([XG({tagName:qG+"-"+"3d"+"-orbit-camera"})],ni);import{CustomElement as tF,Defaults as rF,P as sr,PCSS as dl,ViewChild as eR,Watch as tR,PropertyConverters as rR}from"@pacem/pacem-core";import{Components as nF}from"@pacem/pacem-ui";var iF=nF.UI,pl=class extends iF.PacemAdaptedIterativeElement{constructor(){super(...arguments);this.interval=4e3}};l([eR(sr+"-adapter")],pl.prototype,"adapter",2),l([eR(sr+"-slideshow")],pl.prototype,"slideshow",2),l([tR({converter:rR.Number})],pl.prototype,"interval",2),l([tR({converter:rR.Boolean})],pl.prototype,"pausable",2),pl=l([tF({tagName:sr+"-carousel",shadow:rF.USE_SHADOW_ROOT,template:`<${sr}-repeater datasource="{{ :host.datasource }}">
|
|
926
|
+
}`],bindings:[`@group(${r}) @binding(${e}) var<uniform> ${n}: AmbientLight;`],modifiers:[`${s} = computeAmbient(${i}, ${n});`]}}import{Utils as Me}from"@pacem/pacem-core";import{Colors as ak}from"@pacem/pacem-foundation";import{Geometry as GD}from"@pacem/pacem-numerical";import{Geometry as BD}from"@pacem/pacem-numerical";var $i=BD.LinearAlgebra.Vector3D,sk=BD.LinearAlgebra.Matrix3D,VD={width:1,height:1},wx=class{static create(r){if(Hb(r))return new ik(r);if(Bb(r))return new nk(r);throw new TypeError(`Camera type '${r.type}' not supported.`)}};function UD(a,r,e){let t=$i.subtract(r,a),n=$i.cross(e,t),i=$i.cross(t,n);$i.normalize(n),$i.normalize(t),$i.normalize(i);let s=-$i.dot(n,a),o=-$i.dot(i,a),c=-$i.dot(t,a);return sk.from(n.x,i.x,t.x,0,n.y,i.y,t.y,0,n.z,i.z,t.z,0,s,o,c,1)}function zD(a,r){if(a<=0)throw new RangeError("Near plane distance must be positive.");if(r<=a)throw new RangeError("Far plane distance must be greater than near plane distance.")}function DG(a=120,r=1,e=.1,t=1e3){zD(e,t);let n=Math.tan(.5*Math.PI*(1-a/180)),i=n/r,s=Number.isFinite(t),o=s?t/(e-t):-1,c=s?t*e/(e-t):-e;return sk.from(i,0,0,0,0,n,0,0,0,0,o,-1,0,0,c,0)}function RG(a,r,e,t,n=.1,i=1e3){return zD(n,i),sk.from(2/(r-a),0,0,0,0,2/(e-t),0,0,0,0,1/(n-i),0,(a+r)/(a-r),(e+t)/(t-e),n/(n-i),1)}var nk=class a{constructor(r){this._camera=r}static view(r){return UD(r.position,r.lookAt,r.up)}static projection(r,e=VD){let t=r.position,n=r.lookAt,i=$i.subtract(n,t);$i.normalize(i);let s=$i.dot(i,t),{height:o,width:c}=e,d=c/o,p=.5*s,u=p*d,h=p,m=r.top*h,f=r.bottom*h,g=r.right*u,y=r.left*u;return RG(y,g,m,f,r.near,r.far)}view(){return a.view(this._camera)}projection(r){return a.projection(this._camera,r)}},ik=class a{constructor(r){this._camera=r}static view(r){return UD(r.position,r.lookAt,r.up)}static projection(r,e=VD){let t=e.width/e.height/r.aspectRatio;return DG(r.fov,t,r.near,r.far)}view(){return a.view(this._camera)}projection(r){return a.projection(this._camera,r)}};var ok=GD.LinearAlgebra.Vector3D,ri=GD.LinearAlgebra.Matrix3D;function Bm(a,r){throw typeof r=="function"&&(r=r.name),new RangeError(`Buffer '${a}' not available for ${r}.`)}function FD(a,r,...e){if(a.stage??=r?.item.stage,vd(a))return a.key??="group_"+Me.uniqueCode(),new lk(a,r,...e);if(Rn(a))return a.key??="mesh_"+Me.uniqueCode(),new pk(a,r,...e);if($r(a))return a.key??="camera_"+Me.uniqueCode(),new ck(a);if(Is(a))return a.key??="light_"+a.type+"_"+Me.uniqueCode(),new uk(a);throw new Error("Renderable is not supported.")}var kx=class{constructor(r){this._set=r}get items(){return this._set}loop(r){let{meshes:e,cameras:t,groups:n,lights:i}=this._set,s=t[0],o=!1,c=!1;for(let d of e)d.disposed||!r(d,s,i)||(mt.clearFlags(d),o||(mt.clearFlags(s),o=!0),c||(i.forEach(u=>mt.clearFlags(u)),c=!0));for(let d of n)mt.clearFlags(d)}},Im=class{static create(r){if(yf(r))return r.key??="geometry_"+Me.uniqueCode(),new $v(r);if(pi(r))return new Hv(r);if(Vb(r))return new dk(r);throw new Error("Object is not supported.")}},mt=class a{static create(r,...e){return FD(r,null,...e)}static clearFlags(r,e=!1){if(r.item.flags.splice(0),e){let t=r;Me.isNull(t.parent)||a.clearFlags(t.parent,!0)}}static allFlags(r){let e=r,t=e.parent,n=Me.isNull(t)?[]:a.allFlags(t);return e.item.flags.union(n)}},$m=class{#e;constructor(r){this.#e=r}get item(){return this.#e}#t=!1;lock(){this.#t=!0}unlock(){this.#t=!1;let r=this.#r;for(;r.length>0;){let e=r.shift();this._destroyUnsafe(e)}}#r=[];_destroyUnsafe(r){"texture"in r?r.texture.destroy():"buffer"in r&&r.buffer.destroy()}destroySafely(...r){for(let e of Array.from(r).concat(...this.#r.splice(0)))e&&(this.#t?this.#r.push(e):this._destroyUnsafe(e))}#n=!1;destroy(){this.dispose(),this.#n=!0}get disposed(){return this.#n}},Hm=class extends $m{constructor(r,e){super(r),this.#t=e,this.#e=Me.uniqueId()%4294967295}#e;#t;#r=new Map;get parent(){return this.#t}get id(){return this.#e}allFlags(){let r=this.parent;return this.item.flags.union(r?.allFlags()??[])}buildParentWorldTransform(){let r=ri.identity(),e=this;for(;!Me.isNull(e.parent);){let t=e.parent.item,n=ri.translate(t.transformMatrix??ri.identity(),t.position??ok.zero());r=ri.multiply(r,n),e=e.parent}return r}buildWorldTransform(){let r=ri.translate(this.item.transformMatrix??ri.identity(),this.item.position??ok.zero()),e=this.buildParentWorldTransform();return ri.multiply(r,e)}#n=new Map;version(r){return this.#n.get(r)??0}buffer(r,e){if(e==="u32id"){let n=this.#r,{pipeline:i,device:s}=r;if(n.has(i))return Me.extend({fresh:!1},n.get(i));let o=new Uint32Array([this.id]),c=_r.createUniform(s,o,Fe+"u32id-buffer"),d=Me.extend({buffer:c,value:o,version:performance.now()},{fresh:!0});return this.#r.set(i,d),d}let t=this.specificBuffer(r,e);return this.#n.set(e,t.version),t}},PG={shader:"basic",color:"#c0c0c0",flags:[]},lk=class extends Hm{#e;constructor(r,e,...t){super(r,e),this.#e=r.childRenderables.map(n=>FD(n,this,...t))}get children(){return this.#e}specificBuffer(r,e){return null}texture(r){throw new Error("Method not implemented.")}dispose(){this.#e.forEach(r=>r.destroy())}},ck=class a extends Hm{#e=new Map;#t;constructor(r){super(r)}texture(r){throw new Error("Method not implemented.")}specificBuffer(r,e){let t=!1;(this.allFlags().length>0||Me.isNull(this.#t))&&(t=!0,this.#e.clear(),this._rebuildMatrices(r));let{pipeline:n}=r;if(this.#e.has(n)||(t=!0,this.#e.set(n,this.#t)),mt.clearFlags(this),e==="cameraViewTransform")return Me.extend(this.#t,{fresh:t});Bm(e,a)}_rebuildMatrices({device:r,canvas:e}){let t=this.item,n=wx.create(t),{x:i,y:s,z:o}=t.position,c=n.view(),d=n.projection(e),p=ri.multiply(c,d),u=new Float32Array(36);if(u.set(ri.toArray(c),0),u.set(ri.toArray(p),16),u.set([i,s,o],32),Me.isNull(this.#t)){let h=_r.createUniform(r,u,Fe+"view-buffer");this.#t={buffer:h,value:u,version:performance.now().roundoff()}}else this.#t.value=u,this.#t.version=performance.now().roundoff()}_destroyView(){this.#e.clear();let r=this.#t;this.#t=null,this.destroySafely(r)}dispose(){this._destroyView()}},$v=class a extends $m{#e={};#t={positions:!0,normals:!0,uv:!0,packed:!0};#r;constructor(r){super(r),r.flags??=[]}buffer(r,e){let t=this.item.flags??[];(Me.isNull(this.#r)||t.includes("geometry"))&&(t.splice(0),this.#e={},this._rebuildGeometryBuffers(r));let n=this.#t,i=this.#r,{pipeline:s}=r,o=this.#e[e]??=new Map,c=!o.has(s),d=p=>(c&&o.set(s,p),p);switch(e){case"geometryPositions":let{positions:p}=i,u=n.positions;return n.positions=!1,Me.extend(d(p),{fresh:u||c});case"geometryNormals":let{normals:h}=i,m=n.normals;return n.normals=!1,Me.extend(d(h),{fresh:m||c});case"geometryTexCoords":let{uv:f}=i,g=n.uv;return n.uv=!1,Me.extend({fresh:g||c},d(f));case"geometry":let{packed:y}=i,v=n.packed;return n.packed=!1,Me.extend(d(y),{fresh:v||c});default:Bm(e,a)}}texture(r){throw new Error("Method not implemented.")}_rebuildGeometryBuffers({device:r}){this._destroyBuffers();let e=performance.now(),t=this.item,n=t.key;if(Au(t)){let i=t,o=!Me.isNullOrEmpty(i.triangleIndices)?i.triangleIndices.map(_=>i.positions[_]):i.positions,c=o.length*2,d=c+o.length,p=new Float32Array(d),u=new Float32Array(d),h=new Float32Array(c),m=new Float32Array(2*d+c);for(let _=0;_<o.length;_++){let C=2*_,E=3*_,{x:k,y:w,z:N}=o[_],{x:H,y:R,z:A}=i.normals[_],{x:P,y:T}=i.textureCoordinates[_];p.set([k,w,N],E),u.set([H,R,A],E),h.set([P,T],C),m.set([k,w,N,H,R,A,P,T],E*2+C)}let f=_r.create(r,p,Fe+"meshgeometry-"+n+"-positions-buffer"),g=_r.create(r,u,Fe+"meshgeometry-"+n+"-normals-buffer"),y=_r.create(r,h,Fe+"meshgeometry-"+n+"-uvmap-buffer"),v=_r.create(r,m,Fe+"meshgeometry-"+n+"-buffer");this.#r={packed:{buffer:v,value:m,version:e},positions:{buffer:f,value:p,version:e},normals:{buffer:g,value:u,version:e},uv:{buffer:y,value:h,version:e}},this.#t={positions:!0,normals:!0,uv:!0,packed:!0}}else{let i=new Float32Array(ll.flattenVectorArray(t.positions)),s=_r.createStorage(r,i,Fe+"nodegeometry-"+n+"-positions-buffer");this.#r={positions:{buffer:s,value:i,version:e},packed:{buffer:s,value:i,version:e}},this.#t={positions:!0,packed:!0}}}_destroyBuffers(){this.#e={};let r=this.#r;Me.isNull(r)||this.destroySafely(r.positions,r.normals,r.uv)}dispose(){this._destroyBuffers()}},Hv=class a extends $m{#e={};#t={};#r;#n=new Map;#i=new Map;constructor(r){super(r),r.flags??=[],r.flags.indexOf("material")===-1&&r.flags.push("material")}buffer(r,e){let t=this.item.flags??[],n=Me.isNull(this.#r);t.includes("material")&&(this.#e={},t.splice(0),n=!0,this.#i.clear(),this._resetMaterialBuffers());let{pipeline:i}=r,s=this.#e[e]??=new Map;switch(e){case"material":case"line":let o=this._ensureMaterialBuffer(r,e);return o?(s.has(i)||(n=!0,s.set(i,o)),Me.extend(o,{fresh:n})):null;default:Bm(e,a)}}_ensureMaterialBuffer(r,e="material"){let t=this.#n,n=t.get(e);return n||(t.has(e)?null:(n=this.#r?.buffer(r,e),n&&t.set(e,n),n))}_resetMaterialBuffers(){this.#r=fx.create(this.item),this._destroyBuffers()}texture(r,e="texture"){let t=this.#i,n=t.get(e),i=!1;if(!n){if(n=this.#r?.texture(r,e),!n)return null;t.set(e,n),i=!0,this.#t={}}let{pipeline:s}=r,o=this.#t[e]??=new Map;return o.has(s)||(i=!0,o.set(s,n)),Me.extend(n,{fresh:i})}dispose(){this._destroyBuffers()}_destroyBuffers(){this.#e={},this.#t={};let r=this.#n.values();this.#n.clear(),this.destroySafely(...r);let e=this.#i.values();this.#i.clear(),e.forEach(t=>t.texture.destroy())}},dk=class a extends $m{#e={time:0,cursor:{x:0,y:0},resolution:{width:0,height:0}};#t;#r=new Map;constructor(r){super(r),Me.extend(this.#e,r)}buffer(r,e){if(e==="interaction")return this._ensureInteractionBuffer(r);Bm(e,a)}texture(r){throw new Error("Method not implemented.")}_ensureInteractionBuffer(r,e="interaction"){let t=this.#e,n=this.item,i=!this.#t||n.time!==t.time||n.resolution?.width!==t.resolution.width||n.resolution?.height!==t.resolution.height;if(!i&&!Me.isNull(n.cursor)&&(i=n.cursor.x!==t.cursor.x||n.cursor.y!==t.cursor.y),i){let c=new Float32Array([n.cursor?.x??0,n.cursor?.y??0,n.resolution.width,n.resolution.height,n.time,0]),d=_r.createUniform(r.device,c,Fe+"interaction-buffer");this.#t={buffer:d,value:c,version:performance.now()},this.#r.clear()}let{pipeline:s}=r,o=this.#r;return o.has(s)||(i=!0,o.set(s,this.#t)),Me.extend(this.#t,{fresh:i})}_destroyBuffers(){this.#r.clear();let r=this.#t;Me.isNull(r)||this.destroySafely(r)}dispose(){this._destroyBuffers()}},pk=class a extends Hm{#e;#t;#r;#n;#i;#a={geometry:!0,material:!0,transform:!0};#s=new Map;constructor(r,e,t,n){super(r,e),r.flags??=[],r.flags.indexOf("geometry")===-1&&r.flags.push("geometry"),r.flags.indexOf("material")===-1&&r.flags.push("material"),r.flags.indexOf("position")===-1&&r.flags.indexOf("transform")===-1&&r.flags.push("transform"),this.#e=t,this.#r=n}texture(r,e){return this.#n?.texture(r,e)}specificBuffer(r,e){let t=this.#a,n=this.allFlags();(Me.isNull(this.#i)||n.includes("position")||n.includes("transform"))&&(this.#s.clear(),t.transform=!0,this._rebuildWorldMatrices(r)),(Me.isNull(this.#t)||n.includes("geometry"))&&(t.geometry=!0,this._ensureGeometryBuffer()),(Me.isNull(this.#n)||n.includes("material"))&&(t.material=!0,this._ensureMaterialBuffer()),mt.clearFlags(this);let i=this.#t,s=this.#n;switch(e){case"geometryPositions":case"geometryNormals":case"geometryTexCoords":case"geometry":return i.buffer(r,e);case"material":case"line":return s.buffer(r,e);case"objectWorldTransform":let o=this.#i,c=t.transform;t.transform=!1;let d=this.#s,{pipeline:p}=r,u=!d.has(p);return u&&d.set(p,o),Me.extend(o,{fresh:c||u});default:Bm(e,a)}}_ensureGeometryBuffer(){let r=this.#t,e=this.#e,n=this.item.geometry;if(Me.isNull(e))r?.destroy(),this.#t=new $v(n);else{let i=e?.get(n);i?.disposed!==!1&&(i=new $v(n),e.set(n,i)),this.#t=i}}_ensureMaterialBuffer(){let r=this.#n,e=this.#r,n=this.item.material??PG;if(Me.isNull(e))r?.destroy(),this.#n=new Hv(n);else{let i=e?.get(n);i?.disposed!==!1&&(i=new Hv(n),e.set(n,i)),this.#n=i}}_rebuildWorldMatrices({device:r}){let e=this.item,t=this.buildWorldTransform(),n=ri.transpose(ri.invert(t)),i=new Float32Array(28);if(i.set(ri.toArray(t),0),i.set([n.m11,n.m12,n.m13,0,n.m21,n.m22,n.m23,0,n.m31,n.m32,n.m33,0],16),Me.isNull(this.#i)){let s=_r.createUniform(r,i,Fe+"mesh-"+e.key+"-worldmatrix-buffer");this.#i={buffer:s,value:i,version:performance.now().roundoff()}}else this.#i.value=i,this.#i.version=performance.now().roundoff()}dispose(){this.#s.clear();let r=this.#i;this.#i=null,this.destroySafely(r);let e=this.#n;this.#n=null,e?.destroy();let t=this.#t;this.#t=null,t?.destroy()}},uk=class a extends Hm{#e;#t=new Map;constructor(r){super(r),r.flags.push("light")}_rebuildAmbientLightBuffer({device:r}){let e=this.item,t=4,n=1,i=0,s=4,o=24,c=new Float32Array(o),{r:d,g:p,b:u,a:h}=ak.parse(e.color??"#fff");c.set([d,p,u,h],i),c.set([e.intensity],s),this.#e={value:c,buffer:_r.createUniform(r,c,Fe+"ambient-light-buffer"),version:performance.now()}}_rebuildDirectionalLightBuffer({device:r}){let e=this.item,t=1,n=4,i=3,s=0,o=4,c=7,d=c+t,p=new Float32Array(d),{r:u,g:h,b:m,a:f}=ak.parse(e.color??"#fff");p.set([u,h,m,f],s),p.set([e.intensity],c);let g=ok.subtract(e.position,e.target);p.set([g.x,g.y,g.z],o),this.#e={value:p,buffer:_r.createUniform(r,p,Fe+"directional-light-buffer"),version:performance.now()}}_rebuildOmniLightBuffer({device:r}){let e=this.item,t=1,n=4,i=3,s=0,o=4,c=7,d=c+t,p=new Float32Array(d),{r:u,g:h,b:m,a:f}=ak.parse(e.color??"#fff");p.set([u,h,m,f],s),p.set([e.intensity],c),p.set([e.position.x,e.position.y,e.position.z],o),this.#e={value:p,buffer:_r.createUniform(r,p,Fe+"omni-light-buffer"),version:performance.now()}}_rebuildLight(r){this.destroySafely(this.#e);let e=this.item;switch(e.type){case"direction":this._rebuildDirectionalLightBuffer(r);break;case"omni":this._rebuildOmniLightBuffer(r);break;case"ambient":this._rebuildAmbientLightBuffer(r);break;default:throw new Error(`Light '${e.type}' is not supported.`)}}texture(r){throw new Error("Method not implemented.")}specificBuffer(r,e){let t=this.#t,n=Me.isNull(this.#e)||this.allFlags().length>0;n&&(t.clear(),this._rebuildLight(r)),mt.clearFlags(this);let{pipeline:i}=r;if(t.has(i)||(n=!0,t.set(i,this.#e)),e==="light")return Me.extend(this.#e,{fresh:n});Bm(e,a)}dispose(){this.#t.clear();let r=this.#e;this.#e=null,this.destroySafely(r)}};var Pe=Fe,jD={multisample:!0,packedVertices:!0,primitive:{topology:"triangle-list",frontFace:"ccw",cullMode:"back"}},Fr=a=>{},Wp=class a{static{this._memoizer=new WeakMap}static dispose(r){let e=this._memoizer,t=e.get(r);Le.isNull(t)||(t.clear(),e.delete(r))}static createColorPicking(r,e){let t=a.create(r,e);return t instanceof Sx||t instanceof Lx?{frame:t.raycast}:null}static create(r,[e,t,...n],i){let s=a._memoizer,o=s.get(r);if(Le.isNull(o)&&s.set(r,o=new Map),Le.isNull(e))throw new Error("Pipeline not implemented, given the provided arguments.");if(Rn(e.item)){let c=Au(e.item.geometry),d=!c&&Tl(e.item.material);if(!c&&!d)throw new Error("Pipeline not implemented, given the provided mesh argument.");let p=c?new hk(e,t,...n):new mk(e,t),u=p.key+(i?.modifiers?.version??""),h=o.get(u);if(h)return h;let m=c?new Sx(r,p):new Lx(r,p);m.build(i);let f=m;return Le.extend(f,{id:u+"-"+r.canvas.width+"x"+r.canvas.height+"-"+Le.Dates.now().toISOString()}),o.set(u,f),f}else throw new ReferenceError("Pipeline not implemented, given thst the first argument is not a mesh.")}},Mx=class{constructor(){this.#e=new Map}#e;ensureBindGroup({device:r},e,t,n,i,s,o=()=>{}){let c=this.#e,d=typeof e=="string"?e:e.key,p=c.get(d);if(Le.isNull(p)&&c.set(d,p=new Map),n||!p.has(s)){let u=t.map((f,g)=>({binding:g,resource:{buffer:f}})),h={label:s,layout:i,entries:u};o(h);let m=r.createBindGroup(h);return p.set(s,m),m}else return p.get(s)}},hk=class a{#e=[];#t;#r;#n=new Map;#i={shader:"basic",lights:""};constructor(...r){this.add(...r)}reset(){this.#e.splice(0),this.#t=null,this.#n.clear(),this.#i={shader:"basic",lights:""}}add(...r){for(let e of r??[])if(Rn(e.item))if(Le.isNull(this.#t)){this.#t=e;let t=e.item.material??{shader:"basic"};this.#i.shader=t.shader+"-"+(t.map?"map":"nomap")}else throw new Error("Mesh already added.");else if(Is(e.item))this.#e.push(e),this.#i.lights+="-"+e.item.type;else if($r(e.item))this.#r??=e;else throw new Error("Unknown object type.")}build(r){let e=this._computeBasicData(),t=this.key,n=this.vertex({inputModifier:r?.vertexInput,outputModifier:r?.vertexOutput}),i=this.fragment(e,{modifier:r?.fragment}),s=(...c)=>a.prototype.bindgroup.apply(this,c),o={lightCount:this.#e.length,mapCount:this.#t.item.material?.map?1:0};return{vertex:n,fragment:i,key:t,bindings:s,metadata:o}}get key(){let{shader:r,lights:e}=this.#i;return"mesh-"+r+e}bindgroup(r,e,t){let i=this.#n.get(r);if(Le.isNull(i))return null;if(Le.isNullOrEmpty(e))return i;let s=i.filter(o=>o.key===e);return isNaN(t)?s:t>=0&&t<i.length?s[t]:s}vertex(r){return ND(r)}_computeBasicData(){let r=this.#t.item,e=this.#e,t=r.material,n=!Le.isNull(t?.texture),i=!Le.isNullOrEmpty(e),s=Le.isNull(r)?"basic":r.material?.shader??"basic";return{hasTexture:n,hasLighting:i,shader:s,materialBindGroupIndex:2,lightingBindGroupIndex:3}}_computeBindGroupsAndReferences(r=this._computeBasicData()){let{hasTexture:e,materialBindGroupIndex:t,lightingBindGroupIndex:n}=r,i=this.#n,s=this.#e,o={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},c={key:"material",group:t,binding:0,type:"buffer"};e?i.set("mesh",[o,c,{key:"texture",group:t,type:"texture"}]):i.set("mesh",[o,c]),i.set("camera",[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}]);let d=s.map((p,u)=>({key:"light",group:n,binding:u,type:"buffer"}));d.push(...d),i.set("interaction",[{key:"interaction",group:0,type:"buffer",binding:1}])}fragment(r=this._computeBasicData(),e){this._computeBindGroupsAndReferences(r);let t={definitions:[],bindings:[],modifiers:[]},n=i=>{for(let s of i.definitions??[])t.definitions.indexOf(s)===-1&&t.definitions.push(s);Le.isNullOrEmpty(i.bindings)||t.bindings.push(...i.bindings),Le.isNullOrEmpty(i.modifiers)||t.modifiers.push(...i.modifiers)};switch(r.shader){case"basic":if(r.hasTexture){let o=r.materialBindGroupIndex,c=PD({inputColor:Gp,outputColors:[Gp],uv:"uv"},o);n(c)}let i=0,s=this.#e;for(let o of s){switch(o.item.type){case"direction":let d=ID({outputColor:Dv,normal:"normal"},r.lightingBindGroupIndex,i);n(d);break;case"omni":let p=$D({outputColor:Dv,normal:"normal",position:"vertex"},r.lightingBindGroupIndex,i);n(p);break;case"ambient":let u=HD({inputColor:Gp,outputColor:mx},r.lightingBindGroupIndex,i);n(u);break}i++}return Ov.fragment(t,e)}}},Hi={writeBufferConditionally:(a,r)=>{r.fresh&&a.queue.writeBuffer(r.buffer,0,r.value)}},Sx=class{constructor(r,e,t=new Mx){this._context=r;this._builder=e;this._cache=t;this._ensureU32idBindGroup=(r,e,t)=>this._cache.ensureBindGroup(this._context,r,[e],t,this._pickBindGroupLayout,Pe+"mesh-colorpick-bind-group");this._ensureMaterialBindGroup=(r,e,t,n,i=2)=>{let s=this._bindGroupLayouts[i],o=Pe+"material-bind-group";if(s.label!==Pe+"material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");return this._cache.ensureBindGroup(this._context,r,[e],n,s,o,c=>{let{device:d}=this.context,p=c.entries;t&&p.push({binding:1,resource:d.createSampler({addressModeU:"repeat",addressModeV:"repeat",magFilter:"linear",minFilter:"linear"})},{binding:2,resource:t.createView()})})};this._ensureWorldTransformBindGroup=(r,e,t,n=1,i=!1)=>{let s=this._bindGroupLayouts[n];if(s.label!==Pe+"mesh-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let o=r.key+"-"+(i?1:0),c=`${Pe}${i?"colorpick":"mesh"}-transforms-bind-group`;return this._cache.ensureBindGroup(this._context,o,[e],t,s,c)};this._ensureCameraProjectionAndInteractionDataBindGroup=(r,e,t,n,i=0,s=!1)=>{let o=this._bindGroupLayouts[i],c=r.key+"-"+(s?1:0),d=`${Pe}${s?"colorpick":"mesh"}-view-bind-group`;return this._cache.ensureBindGroup(this._context,c,[e,t],n,o,d)};this._ensureLightingBindGroup=(r,e,t=3)=>{let n=this._bindGroupLayouts[t],i=r.map(o=>o.id).join(":"),s=r.map(o=>o.buffer.buffer);return this._cache.ensureBindGroup(this._context,i,s,e,n,Pe+"mesh-lighting-bind-group")};this._bindGroupLayouts=[];this._bindVertex=Fr;this._bindPicker=Fr;this._bindWorldTransform=Fr;this._bindRaycastWorldTransform=Fr;this._bindCameraProjectionAndInteractionData=Fr;this._bindRaycastCameraProjectionAndInteractionData=Fr;this._bindLighting=Fr;this._bindMaterial=Fr;this.set=r=>{throw new Error("Deprecated.")};this.bind=(r,...e)=>{throw new Error("Deprecated.")};this.draw=(r,...e)=>{throw new Error("Deprecated.")};this.frame=(r,e,t,n,...i)=>{r.setPipeline(this._pipeline);try{this._bindVertex(r,t),this._bindWorldTransform(r,t),this._bindMaterial(r,t),this._bindCameraProjectionAndInteractionData(r,n,e),this._bindLighting(r,...i);let s=t.item,o=s.geometry;r.draw(o.triangleIndices?.length||o.positions.length)}catch(s){console.error("Pacem.Drawing3D.FrameException",s)}};this.raycast=(r,e,t,n)=>{r.setPipeline(this._pickPipeline);try{this._bindVertex(r,t),this._bindRaycastWorldTransform(r,t),this._bindRaycastCameraProjectionAndInteractionData(r,n,e),this._bindPicker(r,t);let i=t.item,s=i.geometry;r.draw(s.triangleIndices.length)}catch{}};this._key=e.key}get context(){return this._context}get key(){return this._key}build(r){let e=Le.extend({},jD,r??{}),t=this._builder,n=t.build(e.modifiers),i=Le.extend({pipeline:this},this._context),s=i.device,o={module:s.createShaderModule({code:n.vertex}),buffers:e.packedVertices?[Fp.createVertex(0,3,3,2)]:[Fp.createVertex(0,3),Fp.createVertex(1,3),Fp.createVertex(2,2)]},c=s.createBindGroupLayout({entries:[{binding:0,visibility:3,buffer:{type:"uniform"}},{binding:1,visibility:3,buffer:{type:"uniform"}}],label:Pe+"mesh-view-bind-group-layout"}),d=s.createBindGroupLayout({entries:[{binding:0,visibility:1,buffer:{type:"uniform"}}],label:Pe+"mesh-transforms-bind-group-layout"}),p=[c,d],u={module:s.createShaderModule({code:n.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},h=p.length,m=[{binding:0,visibility:2,buffer:{type:"read-only-storage"}}],{mapCount:f}=n.metadata,g=f>0;g&&m.push({visibility:2,binding:1,sampler:{}},...Array(f).keys().map(T=>({visibility:2,binding:2+T,texture:{}})));let y={label:Pe+"material-bind-group-layout",entries:m},v=s.createBindGroupLayout(y);p.push(v);let _=p.length,{lightCount:C}=n.metadata,E=C>0;if(E){let T=s.createBindGroupLayout({entries:[...Array(C).keys()].map(($,V)=>({visibility:2,binding:V,buffer:{type:"uniform"}})),label:Pe+"lighting-bind-group-layout"});p.push(T)}let k={label:Pe+"mesh-render-pipeline",vertex:o,fragment:u,layout:s.createPipelineLayout({label:Pe+"mesh-render-pipeline-layout",bindGroupLayouts:this._bindGroupLayouts=p}),primitive:e.primitive};e.multisample&&(k.multisample={count:4},k.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._pipeline=s.createRenderPipeline(k);let w=this._pickBindGroupLayout=s.createBindGroupLayout({label:Pe+"mesh-colorpick-bind-group-layout",entries:[{visibility:2,binding:0,buffer:{type:"uniform"}}]}),N={label:Pe+"mesh-colorpick-pipeline",vertex:o,fragment:{module:s.createShaderModule({code:Z0(2)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:Pe+"mesh-colorpick-pipeline-layout",bindGroupLayouts:[c,d,w]}),primitive:e.primitive,depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickPipeline=s.createRenderPipeline(N);let H=(T,...$)=>{let V=$.at(0);if(Le.isNull(V))throw new ReferenceError(`Null ${mt.name} bringing vertex buffers was provided.`);let{buffer:B}=V.buffer(i,"geometryPositions"),{buffer:O}=V.buffer(i,"geometryNormals"),{buffer:U}=V.buffer(i,"geometryTexCoords");T.setVertexBuffer(0,B),T.setVertexBuffer(1,O),T.setVertexBuffer(2,U)},R=(T,...$)=>{let V=$.at(0);if(Le.isNull(V))throw new ReferenceError(`Null ${mt.name} bringing vertex buffers was provided.`);let{buffer:B}=V.buffer(i,"geometry");T.setVertexBuffer(0,B)};this._bindVertex=e.packedVertices?R:H;let A=(T,$,V)=>{if(Le.isNull($))throw new ReferenceError(`Null ${mt.name} bringing world transform buffer was provided.`);let B=$.buffer(i,"objectWorldTransform"),O=B.buffer;Hi.writeBufferConditionally(s,B);let{group:U}=n.bindings("mesh","objectWorldTransform",0),z=this._ensureWorldTransformBindGroup($.item,O,B.fresh,U,V);T.setBindGroup(U,z)};this._bindWorldTransform=(T,...$)=>{let V=$.at(0);A(T,V,!1)},this._bindRaycastWorldTransform=(T,...$)=>{let V=$.at(0);A(T,V,!0)};let P=(T,$,V,B)=>{if(Le.isNull($))throw new ReferenceError(`Null ${mt.name} bringing view projection buffers was provided.`);let O=$.buffer(i,"cameraViewTransform"),U=O.buffer;if(Hi.writeBufferConditionally(s,O),Le.isNull(V))throw new ReferenceError(`Null ${mt.name} bringing interaction buffers was provided.`);let z=V.buffer(i,"interaction"),G=z.buffer;Hi.writeBufferConditionally(s,z);let{group:Z}=n.bindings("camera","cameraViewTransform",0),{group:q}=n.bindings("interaction","interaction",0);if(Z!==q)throw new ReferenceError(`Layout bind group mismatch: ${Z} vs ${q}.`);let Q=this._ensureCameraProjectionAndInteractionDataBindGroup($.item,U,G,O.fresh||z.fresh,Z,B);T.setBindGroup(Z,Q)};this._bindCameraProjectionAndInteractionData=(T,...$)=>{let V=$.at(0),B=$.at(1);P(T,V,B,!1)},this._bindRaycastCameraProjectionAndInteractionData=(T,...$)=>{let V=$.at(0),B=$.at(1);P(T,V,B,!0)},this._bindMaterial=(T,...$)=>{let V=$.at(0);if(Le.isNull(V))throw new ReferenceError(`Null ${mt.name} bringing vertex colors was provided.`);let B=V.buffer(i,"material"),O=B.buffer;Hi.writeBufferConditionally(s,B);let U=V.texture(i),z=U?.texture,G=this._ensureMaterialBindGroup(V.item,O,z,B.fresh,h);T.setBindGroup(h,G),g&&s.queue.copyExternalImageToTexture({source:U.source,flipY:!0},{texture:z},{width:z.width,height:z.height})},this._bindLighting=(T,...$)=>{if(E){let B=Array.from($).map(z=>({buffer:z.buffer(i,"light"),id:z.item.key})),O=B.some(z=>z.buffer.fresh),U=this._ensureLightingBindGroup(B,O,_);for(let z of B)Hi.writeBufferConditionally(s,z.buffer);T.setBindGroup(_,U)}},this._bindPicker=(T,...$)=>{let V=$.at(0);if(Le.isNull(V))throw new ReferenceError(`Null ${mt.name} bringing world transform buffer was provided.`);let B=V.buffer(i,"u32id"),O=B.buffer;Hi.writeBufferConditionally(s,B);let U=2,z=B.fresh,G=this._ensureU32idBindGroup(V.item,O,z);T.setBindGroup(U,G)}}},mk=class a{#e;#t;#r=new Map;constructor(...r){this.add(...r)}reset(){this.#e=null,this.#r.clear()}add(...r){for(let e of r??[])if(Rn(e.item))if(Le.isNull(this.#e))this.#e=e;else throw new Error("Line already added.");else if($r(e.item))this.#t??=e;else if(!Is(e.item))throw new Error("Unknown object type.")}build(){let r=this._computeBasicData(),e=this.key,t=this.vertex(r),n=this.fragment(r);return{vertex:t,fragment:n,key:e,bindings:(...s)=>a.prototype.bindgroup.apply(this,s),metadata:{thickness:r.thickness,dashPattern:r.dashPattern}}}get key(){let r=(this.#e?.item).material?.lineWidth>1;return"line"+(r?"-fat":"")}bindgroup(r,e,t){let i=this.#r.get(r);if(Le.isNull(i))return null;if(Le.isNullOrEmpty(e))return i;let s=i.filter(o=>o.key===e);return isNaN(t)?s:t>=0&&t<i.length?s[t]:s}vertex(r=this._computeBasicData()){return r.thickness>1?RD():DD()}_computeBasicData(){let r=this.#e.item,e=Le.isNull(r)?"line":r.material?.shader??"line",t=r.material,n=t?.lineWidth??1,i=t?.dashArray;return{shader:e,thickness:n,dashPattern:i}}_computeBindGroupsAndReferences(r=this._computeBasicData()){let e=this.#r,t={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},n={key:"material",group:3,binding:0,type:"buffer"},i={key:"geometryPositions",group:2,binding:0,type:"buffer"},s={key:"line",group:2,binding:1,type:"buffer"};e.set("mesh",[t,n,i,s]),e.set("camera",[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}])}fragment(r=this._computeBasicData()){this._computeBindGroupsAndReferences(r);let e={definitions:[],bindings:[],modifiers:[]};if(r.shader==="line")return Pv.fragment(e)}},Lx=class{constructor(r,e,t=new Mx){this._lineBuilder=e;this._cache=t;this._ensureLineU32idBindGroup=(r,e,t)=>{let n=this.context;return this._cache.ensureBindGroup(n,r,[e],t,this._pickLineBindGroupLayout,Pe+"line-colorpick-bind-group")};this._ensureLineMaterialBindGroup=(r,e,t,n=2)=>{let i=this._bindLineGroupLayouts[n];if(i.label!==Pe+"line-material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let s=this.context;return this._cache.ensureBindGroup(s,r,[e],t,i,Pe+"line-material-bind-group")};this._ensureLinePositionsBindGroup=(r,e,t,n)=>{let i=this._bindLineGroupLayouts[n];if(i.label!==Pe+"line-positions-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let s=this.context;return this._cache.ensureBindGroup(s,r,e,t,i,Pe+"line-positions-bind-group")};this._ensureLineWorldTransformBindGroup=(r,e,t,n=1,i=!1)=>{let s=this._bindLineGroupLayouts[n];if(s.label!==Pe+"line-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let o=r.key+"-line-"+(i?1:0),c=`${Pe}${i?"colorpick":""}-line-transforms-bind-group`,d=this.context;return this._cache.ensureBindGroup(d,o,[e],t,s,c)};this._ensureLineCameraProjectionBindGroup=(r,e,t,n=0,i=!1)=>{let s=this._bindLineGroupLayouts[n],o=r.key+"-line-"+(i?1:0),c=`${Pe}${i?"colorpick":""}-line-view-bind-group`,d=this.context;return this._cache.ensureBindGroup(d,o,[e],t,s,c)};this._bindLineGroupLayouts=[];this._bindLinePositions=Fr;this._bindLinePicker=Fr;this._bindLineWorldTransform=Fr;this._bindLineRaycastWorldTransform=Fr;this._bindLineCameraProjection=Fr;this._bindLineRaycastCameraProjection=Fr;this._bindLineMaterial=Fr;this._drawLine=Fr;this.set=r=>{throw new Error("Deprecated.")};this.bind=(r,...e)=>{throw new Error("Deprecated.")};this.draw=(r,...e)=>{throw new Error("Deprecated.")};this.frame=(r,e,t,n)=>{r.setPipeline(this._linePipeline);try{this._bindLineWorldTransform(r,t),this._bindLineCameraProjection(r,n),this._bindLinePositions(r,t),this._bindLineMaterial(r,t),this._drawLine(r,t)}catch(i){console.error("Pacem.Drawing3D.FrameException",i)}};this.raycast=(r,e,t,n)=>{r.setPipeline(this._pickLinePipeline);try{this._bindLineRaycastWorldTransform(r,t),this._bindLineRaycastCameraProjection(r,n),this._bindLinePositions(r,t),this._bindLinePicker(r,t),this._drawLine(r,t)}catch{}};this.#e=r,this._lineKey=e.key}#e;get context(){return this.#e}get key(){return this._lineKey}build(r){let e=Le.extend({},jD,r??{}),t=this._lineBuilder,n=t.build(),i=Le.extend({pipeline:this},this.#e),s=i.device,o=n.metadata.thickness>1,c={module:s.createShaderModule({code:n.vertex}),buffers:[]},d=s.createBindGroupLayout({entries:[{binding:0,visibility:1,buffer:{type:"uniform"}}],label:Pe+"line-transforms-bind-group-layout"}),p=s.createBindGroupLayout({entries:[{binding:0,visibility:1,buffer:{type:"uniform"}}],label:Pe+"line-view-bind-group-layout"}),u=[{binding:0,visibility:1,buffer:{type:"read-only-storage"}}];o&&u.push({binding:1,visibility:1,buffer:{type:"uniform"}});let h=s.createBindGroupLayout({entries:u,label:Pe+"line-positions-bind-group-layout"}),m=[p,d,h],f=m.length,g=m.slice(),y={module:s.createShaderModule({code:n.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},v=g.length,_=[{binding:0,visibility:2,buffer:{type:"read-only-storage"}}],C={label:Pe+"line-material-bind-group-layout",entries:_},E=s.createBindGroupLayout(C);g.push(E);let k=o?e.primitive.topology:"line-list",w={label:Pe+"line-render-pipeline",vertex:c,fragment:y,layout:s.createPipelineLayout({label:Pe+"line-render-pipeline-layout",bindGroupLayouts:this._bindLineGroupLayouts=g}),primitive:Le.extend({},e.primitive,{topology:k})};e.multisample&&(w.multisample={count:4},w.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._linePipeline=s.createRenderPipeline(w);let N=this._pickLineBindGroupLayout=s.createBindGroupLayout({label:Pe+"line-colorpick-bind-group-layout",entries:[{visibility:2,binding:0,buffer:{type:"uniform"}}]}),H={label:Pe+"line-colorpick-pipeline",vertex:c,fragment:{module:s.createShaderModule({code:Z0(f)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:Pe+"line-colorpick-pipeline-layout",bindGroupLayouts:m.concat(N)}),primitive:Le.extend({},e.primitive,{topology:k}),depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickLinePipeline=s.createRenderPipeline(H);let R=(P,T,$)=>{if(Le.isNull(T))throw new ReferenceError(`Null ${mt.name} bringing world transform buffer was provided.`);let V=T.buffer(i,"objectWorldTransform"),B=V.buffer;Hi.writeBufferConditionally(s,V);let{group:O}=n.bindings("mesh","objectWorldTransform",0),U=this._ensureLineWorldTransformBindGroup(T.item,B,!1,O,$);P.setBindGroup(O,U)};this._bindLineWorldTransform=(P,...T)=>{let $=T.at(0);R(P,$,!1)},this._bindLineRaycastWorldTransform=(P,...T)=>{let $=T.at(0);R(P,$,!0)};let A=(P,T,$)=>{if(Le.isNull(T))throw new ReferenceError(`Null ${mt.name} bringing view projection buffers was provided.`);let V=T.buffer(i,"cameraViewTransform"),B=V.buffer;Hi.writeBufferConditionally(s,V);let{group:O}=n.bindings("camera","cameraViewTransform",0),U=this._ensureLineCameraProjectionBindGroup(T.item,B,!1,O,$);P.setBindGroup(O,U)};this._bindLineCameraProjection=(P,...T)=>{let $=T.at(0);A(P,$,!1)},this._bindLineRaycastCameraProjection=(P,...T)=>{let $=T.at(0);A(P,$,!0)},this._bindLinePositions=(P,...T)=>{let $=T.at(0);if(Le.isNull($))throw new ReferenceError(`Null ${mt.name} bringing vertex buffers was provided as index 0.`);let V=$.buffer(i,"geometryPositions"),B=V.buffer,O=V.fresh,U=[B];if(Hi.writeBufferConditionally(s,V),o){let Z=$.buffer(i,"line"),q=Z.buffer;O||=Z.fresh,U.push(q),Hi.writeBufferConditionally(s,Z)}let{group:z}=n.bindings("mesh","line",0),G=this._ensureLinePositionsBindGroup($.item,U,O,z);P.setBindGroup(z,G)},this._bindLineMaterial=(P,...T)=>{let $=T.at(0);if(Le.isNull($))throw new ReferenceError(`Null ${mt.name} bringing vertex colors was provided.`);let V=$.buffer(i,"material"),B=V.buffer;Hi.writeBufferConditionally(s,V);let O=this._ensureLineMaterialBindGroup($.item,B,V.fresh,v);P.setBindGroup(v,O)},this._bindLinePicker=(P,...T)=>{let $=T.at(0);if(Le.isNull($))throw new ReferenceError(`Null ${mt.name} bringing world transform buffer was provided.`);let V=$.buffer(i,"u32id"),B=V.buffer,O=V.value;Hi.writeBufferConditionally(s,V);let U=this._ensureLineU32idBindGroup($.item,B,!1);P.setBindGroup(f,U)},this._drawLine=(P,...T)=>{let V=T.at(0).item,B=V.geometry;o?P.draw(6,B.positions.length-1,0,0):P.draw(B.positions.length)}}};import{Utils as jp}from"@pacem/pacem-core";var Vv=class{static{this._memoizer=new WeakMap}static dispose(r){let e=this._memoizer;if(e.has(r)){let t=e.get(r);for(let n of t.values())n.destroy();t.clear(),e.delete(r)}}static createColorPicking(r){let e=this._memoizer;e.has(r)||e.set(r,new Map);let t=e.get(r),n="colorpick";if(t.has(n))return t.get(n);let i=new fk(r);return t.set(n,i),i}},Bv=1,fk=class{constructor(r){this._context=r;this._objects=new Map;this.frame=(r,...e)=>{if(jp.isNull(this._encoder))throw new Error("Null encoder. Maybe you missed to call the 'begin' method first.");let t=Array.from(e);Wp.createColorPicking(this._context,t)?.frame(this._pass,r,...e);for(let i of t)i.item.inert||this._objects.set(i.id,i)};this.end=r=>{if(!jp.isNull(this._handle))return this._handle;let e=this._pass,t=this._encoder,{device:n}=this._context,{render:i}=this._textures,s=i.texture,o=this._ensureBuffer();e.end(),t.copyTextureToBuffer({texture:s,origin:{x:r.x,y:r.y}},{buffer:o,bytesPerRow:(Bv*4+255|0)*256,rowsPerImage:1},{width:Bv}),n.queue.submit([t.finish()]),this._encoder=null;let c=this,d=c._objects,p=()=>{c._handle=null};return this._handle=new Promise((u,h)=>{o.mapAsync(1,0,4*Bv).then(m=>{let g=new Uint32Array(o.getMappedRange(0,4*Bv))[0];o.unmap(),p();let y=d.get(g);u(y?[y.item]:[])})})}}_createTexture(r){let{device:e,canvas:t}=this._context,n=Math.min(e.limits.maxTextureDimension2D,t.clientWidth),i=Math.min(e.limits.maxTextureDimension2D,t.clientHeight);return e.createTexture({size:[n,i,1],format:r,usage:17})}_ensureBuffer(){let r=this._buffer;if(!jp.isNull(r))return r;let{device:e}=this._context;return this._buffer=e.createBuffer({label:Fe+"colorpick-output-buffer",size:Bv*4,usage:9})}_ensureTextures(){let r=this._textures;if(!jp.isNull(r))return r;let e=this._createTexture("r32uint"),t=this._createTexture("depth24plus"),n={texture:e,view:e.createView()},i={texture:t,view:t.createView()};return this._textures={render:n,depth:i}}_destroyTexture(r){jp.isNull(r)||r.texture?.destroy()}destroy(){let r=this._textures,e=this._buffer;if(!jp.isNullOrEmpty(r)){let{render:t,depth:n}=r;this._destroyTexture(t),this._destroyTexture(n),this._textures=null}jp.isNull(e)||(e.destroy(),this._buffer=null)}begin(){let{device:r}=this._context;this._encoder=r.createCommandEncoder({label:Fe+"colorpick-raycaster"});let{render:e,depth:t}=this._ensureTextures(),n={label:Fe+"colorpick-raycaster-pass",colorAttachments:[{view:e.view,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:t.view,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};this._pass=this._encoder.beginRenderPass(n),this._objects.clear()}};var gk=VG.LinearAlgebra.Vector3D;var Nx=class{static create(r,e){return new Promise((t,n)=>{if(!navigator.gpu)n({message:"WebGPU not supported.",cause:0});else{let i=new vk(r);i.init(e).then(s=>t(i),s=>{let c={message:typeof s=="string"?s:s.message,cause:1};n(c)})}})}};function UG(a){return{bottom:-1,top:1,left:-1,right:1,near:.1,far:200,lookAt:gk.from(0,0,0),up:gk.j(),position:gk.from(0,0,1),type:"orthographic",flags:[],stage:a}}function zG(...a){for(let r of a||[])r?.destroy()}var vk=class{constructor(r){this.#n=new WeakMap;this.#i=new WeakMap;this.#a=new WeakMap;this.#l={enableValidation:!1};this.#h=!1;this._logError=r=>{let e=this.#e,t=e.logger;if(!Yt.isNull(t)){let n="error"in r?r.error:r;t.log(HG.LogLevel.Error,n.message,"WebGPU")}};this.#c=!0;this.#u=!1;let e=(this.#e=r).stage,t=document.createElement("canvas");t.id=$G+"_3d_stage_"+Yt.uniqueCode(),e.innerHTML="",e.appendChild(this.#t=t),this.#d=Im.create(this.#p={time:performance.now(),cursor:{x:0,y:0},resolution:{width:0,height:0}})}#e;#t;#r;#n;#i;#a;#s;#o;#l;#h;#d;#p;_buildPassDescriptor({multisample:r,format:e}){let{context:t,device:n}=this.#r,i=t.getCurrentTexture(),s=this.#o;if(Yt.isNull(s)){if(s={},r){let f=n.createTexture({label:Fe+"render-texture",format:e??i.format,usage:16,size:[i.width,i.height],sampleCount:4});s.render={texture:f,view:f.createView({label:Fe+"render-texture-view"})};let g=n.createTexture({label:Fe+"depth-texture",format:"depth24plus",usage:16,size:[i.width,i.height],sampleCount:4});s.depth={texture:g,view:g.createView({label:Fe+"depth-texture-view"})}}this.#o=s}let{transparent:o,background:c}=this.#e,d=o?{r:0,g:0,b:0,a:0}:c?typeof c=="string"?BG.parse(c):c:{r:0,g:0,b:0,a:1},p=ll.flattenVectorArray([d]),u=i.createView({label:Fe+"canvas-texture-view"}),h={view:u,clearValue:p,loadOp:"clear",storeOp:"store"},m={colorAttachments:[h]};if(r){let f=s.render.view,g=s.depth.view;m.depthStencilAttachment={view:g,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store",stencilClearValue:0,stencilReadOnly:!0},h.view=f,h.resolveTarget=u}return m}_buildContext(r=this.#t,e=this.#e.size){e??=r;let t=e.width,n=e.height,i=1;r.width=t*i,r.height=n*i;let s=r.getContext("webgpu"),o=navigator.gpu.getPreferredCanvasFormat();return{context:s,textureFormat:o}}_buildUpContext(r,e,t,n){let{transparent:i}=this.#e;t.configure({alphaMode:i?"premultiplied":"opaque",device:r,format:n}),this.#r={device:r,adapter:e,canvas:this.#t,context:t,format:n},this.#c=!1}async init(r){this.#l=r;let e=await navigator.gpu.requestAdapter();if(Yt.isNull(e))throw new Error("WebGPU adapter unavalable or disabled.");let t=await e.requestDevice();if(Yt.isNull(e))throw new Error("WebGPU device unavalable or disabled.");t.addEventListener("uncapturederror",this._logError),this.#u=!Yt.isNull(r.modifiers?.version)&&!Yt.isNull(r.modifiers)&&(!Yt.isNull(r.modifiers.vertexInput)||!Yt.isNull(r.modifiers.vertexOutput)||!Yt.isNull(r.modifiers.fragment));let{context:n,textureFormat:i}=this._buildContext();this._buildUpContext(t,e,n,i)}#c;#u;render(r){if(this.#c||Yt.isNull(this.#s)||!(this.#t.width>0)||!(this.#t.height>0))return;let e=this.#r,t=e.device,n=this.#s,i=this.#l?.enableValidation??!1;this.#u&&Yt.extend(this.#p,r);let o=this._buildPassDescriptor({multisample:!0}),c=t.createCommandEncoder({label:Fe+"renderer"}),d=c.beginRenderPass(o);n.loop((p,u,h)=>{if(p.item.hide)return!1;i&&t.pushErrorScope("validation");let m=[p,u,...h];return Wp.create(e,m,{multisample:!0,modifiers:this.#l.modifiers}).frame(d,this.#d,...m),i&&t.popErrorScope().then(g=>{g&&this._logError(g)}),!0}),d.end(),t.queue.submit([c.finish()])}set disabled(r){this.#h=r}get disabled(){return this.#h}raycast(r){if(this.#c||Yt.isNull(this.#s))return Promise.resolve([]);let e=this.#r,t=e.device,n=this.#s,i=this.#l?.enableValidation??!1,s=Vv.createColorPicking(e);return s.begin(),n.loop((o,c)=>o.item.hide?!1:(i&&t.pushErrorScope("validation"),s.frame(this.#d,o,c),i&&t.popErrorScope().then(d=>{d&&this._logError(d)}),!0)),s.end(r)}_disposeRenderableJustInCase(r){let e=this.#n;e.has(r)&&(e.get(r)?.destroy(),e.delete(r))}_createOrYieldRenderable(r,e=this.#i,t=this.#a){r.stage??=this.#e;let n=this.#n,i=n.get(r);return Yt.isNull(i)&&n.set(r,i=mt.create(r,e)),i}_createOrYieldGeometry(r){let e=this.#i,t=e.get(r);return Yt.isNull(t)&&e.set(r,t=Im.create(r)),t}_createOrYieldMaterial(r){let e=this.#a,t=e.get(r);return Yt.isNull(t)&&e.set(r,t=Im.create(r)),t}_unwrapBuffers(r,e){e??={meshes:[],lights:[],cameras:[],groups:[]};for(let t of r.children)t.item.stage??=this.#e,Rn(t.item)&&e.meshes.push(t),$r(t.item)&&e.cameras.push(t),Is(t.item)&&e.lights.push(t),vd(t.item)&&(e.groups.push(t),this._unwrapBuffers(t,e));return e}_update(r){let e=[],t=[],n=[],i=d=>this._createOrYieldRenderable(d),s;for(let d of r){if(d.hide){this._disposeRenderableJustInCase(d);continue}if(d.stage??=this.#e,vd(d)){let p=d;p.flags.includes("children")&&this.#n.delete(p),e.push(i(p))}Rn(d)&&d.geometry&&(this._createOrYieldGeometry(d.geometry),Yt.isNull(d.material)||this._createOrYieldMaterial(d.material),t.push(i(d))),Is(d)&&n.push(i(d)),$r(d)&&(s??=d)}s??=UG(this.#e);let o=i(s),c={meshes:t,lights:n,cameras:[o],groups:e};for(let d of e)c=this._unwrapBuffers(d,c);this.#s?.items.meshes.forEach(d=>{t.includes(d)||d.destroy()}),this.#s=new kx(c)}update(...r){this._update(Array.from(r))}dispose(){if(this.#s=null,this._disposeContext()){let{device:r}=this.#r;r.removeEventListener("uncapturederror",this._logError),r.destroy}}_disposeContext(){let r=this.#r;if(Yt.isNull(r))return!1;Vv.dispose(r),Wp.dispose(r);let e=this.#o;if(this.#o=null,!Yt.isNull(e)){let{render:t,depth:n}=e;zG(t?.texture,n?.texture)}return r.context.unconfigure(),!0}resize(r){if(this.#c=!0,this._disposeContext()){let{device:e,adapter:t}=this.#r,{context:n,textureFormat:i}=this._buildContext(this.canvas,r);this._buildUpContext(e,t,n,i),this.#u&&Yt.extend(this.#p,{resolution:r})}}get canvas(){return this.#t}};var XD="WebGPURaycastCallback",bk="WebGPURaycastPixel",qD=Ax.getAttachedPropertyValue,KD=Ax.setAttachedPropertyValue,YG=Ax.deleteAttachedPropertyValue,Yp,Uv,Zc=class extends WG.PacemItemElement{constructor(){super(...arguments);I(this,Yp,"");I(this,Uv,new MutationObserver(()=>{this.wgsl=this.textContent}))}findContainer(){return Ax.findAncestor(this,e=>e instanceof cl)}get version(){return x(this,Yp)}viewActivatedCallback(){super.viewActivatedCallback(),this.wgsl=this.textContent,x(this,Uv).observe(this,{characterData:!0})}propertyChangedCallback(e,t,n,i){super.propertyChangedCallback(e,t,n,i),e==="wgsl"&&this._computeVersion(n)}_computeVersion(e=this.wgsl){jG.hash(e).then(t=>{if(t!==x(this,Yp)){let n=x(this,Yp),i=t;D(this,Yp,i);let s=new _k({propertyName:"version",oldValue:n,currentValue:i,firstChange:Jc.isNullOrEmpty(n)});this.dispatchEvent(s)}})}disconnectedCallback(){x(this,Uv).disconnect(),super.disconnectedCallback()}};Yp=new WeakMap,Uv=new WeakMap,l([Tx({emit:!1,converter:yk.String})],Zc.prototype,"type",2),l([Tx({emit:!1,converter:yk.String})],Zc.prototype,"wgsl",2),Zc=l([JD({tagName:ZD+"-3d-wgsl-script"})],Zc);var Xp,qp,Qc,Vm,Um,zm,cl=class extends Ll{constructor(){super(...arguments);I(this,Xp,[]);this._scriptVersionChangeHandler=e=>{let{propertyName:t}=e.detail;t==="version"&&this._parseWgslModifiers(e.detail.currentValue)};I(this,qp,new Set);I(this,Qc,new Map);I(this,Vm,!0);I(this,Um,!0);I(this,zm,new WeakMap)}invalidateSize(e,t=e.size){this._ensureRenderer(e)?.resize(t)}get items(){return x(this,Xp)}register(e){let t=x(this,Xp);return e instanceof Zc&&!t.includes(e)?(e.addEventListener(YD,this._scriptVersionChangeHandler,!1),t.push(e),this._parseWgslModifiers(this.modifiers?.version),!0):!1}unregister(e){let t=x(this,Xp),n=t.indexOf(e);return n>=0?(e.removeEventListener(YD,this._scriptVersionChangeHandler,!1),t.splice(n,1),this._parseWgslModifiers(this.modifiers?.version),!0):!1}get supported(){return x(this,Vm)}get active(){return x(this,Um)}_webGPUNotSupported(e){x(this,Vm)&&e.cause===0&&(D(this,Vm,!1),this.dispatchEvent(new _k({propertyName:"supported",oldValue:null,currentValue:!1}))),x(this,Um)&&(D(this,Um,!1),this.dispatchEvent(new _k({propertyName:"active",oldValue:null,currentValue:!1})))}initialize(e){let t=x(this,Qc),n=x(this,qp);return n.has(e)||n.add(e),Nx.create(e,{enableValidation:this.enableValidation??!1,modifiers:this.modifiers}).then(i=>(t.get(e)?.update(),t.set(e,i),this._updatePipeline(e),i.canvas),i=>(this.log(FG.LogLevel.Error,i.message),this._webGPUNotSupported(i),null))}_parseWgslModifiers(e){let t=x(this,Xp),n=t.find(p=>p.type=="vertex-input"),i=t.find(p=>p.type=="vertex-output"),s=t.find(p=>p.type=="fragment"),o=n?.wgsl,c=i?.wgsl,d=s?.wgsl;this.modifiers={vertexInput:o,vertexOutput:c,fragment:d,version:e}}propertyChangedCallback(e,t,n,i){if(super.propertyChangedCallback(e,t,n,i),!i)switch(e){case"modifiers":case"enableValidation":this._reinitialize();break}}disconnectedCallback(){let e=x(this,Qc);for(let[t,n]of e)n?.dispose();e.clear(),x(this,qp).clear(),super.disconnectedCallback()}dispose(e){let t=x(this,Qc),n=x(this,qp);t.has(e)&&(t.get(e)?.dispose(),t.delete(e)),n.has(e)&&n.delete(e)}_reinitialize(){for(let e of x(this,qp).values())this.initialize(e)}_ensureRenderer(e){return x(this,Qc).get(e)}_updatePipeline(e){this._ensureRenderer(e)?.update(...e.datasource)}render(e){let t=e.size?.width,n=e.size?.height;if(!(t>0)||!(n>0))return;let i=this._ensureRenderer(e);if(Jc.isNull(i))return;x(this,zm).has(e)&&(x(this,zm).delete(e),this._itemsChangedExec(e));let s=qD(e,bk);if(i.render({cursor:s,time:performance.now(),resolution:{width:t,height:n}}),!e.interactive)return;let o=qD(e,XD);if(!Jc.isNullOrEmpty(o)){if(Jc.isNullOrEmpty(s)){o(null);return}i.raycast(s).then(c=>{if(Jc.isNullOrEmpty(c))o(null);else{let d={object:c[0],point:null};o(d)}})}}snapshot(e,t,n,i){let s=x(this,Qc);if(!s.has(e))return Promise.resolve(null);let{canvas:o}=s.get(e),c=!Jc.isNullOrEmpty(t),d=n??(c?"image/jpeg":null),p=i??(c?.9:null);return new Promise((u,h)=>{this.render(e),Jc.snapshotElement(o,t,d,p).then(u)})}raycast(e,t,n,i){KD(e,XD,i),t.x<0||t.y<0||t.x>=n.width||t.y>=n.height?YG(e,bk):KD(e,bk,t)}_itemsChangedExec(e){this._updatePipeline(e)}_itemsChanged(e,t){x(this,zm).set(e,!0)}addItem(e,t){this._itemsChanged(e,t)}removeItem(e,t){this._itemsChanged(e,t)}updateItem(e,t){(Jc.isNull(t)||t.flags.indexOf("visibility")>=0||t.flags.indexOf("children")>=0)&&this._itemsChanged(e,t)}zoomFit(e,...t){return Promise.resolve()}project(e,t){return{x:0,y:0}}getScene(e){return e}};Xp=new WeakMap,qp=new WeakMap,Qc=new WeakMap,Vm=new WeakMap,Um=new WeakMap,zm=new WeakMap,l([GG(100)],cl.prototype,"_parseWgslModifiers",1),l([Tx({emit:!1})],cl.prototype,"modifiers",2),l([Tx({emit:!1,converter:yk.Boolean})],cl.prototype,"enableValidation",2),cl=l([JD({tagName:ZD+"-3d-webgpu-adapter"})],cl);import{CustomElement as XG,P as qG,Watch as ed,PropertyConverters as Kp,Utils as Jp,CustomEventUtils as xk,avoidHandler as zv,Behaviors as KG,PropertyChangeEventName as QD}from"@pacem/pacem-core";import{Geometry as Ox}from"@pacem/pacem-numerical";var Rr=Ox.LinearAlgebra.Vector3D,td=Ox.LinearAlgebra.Matrix3D,Dx=Ox.LinearAlgebra.Quaternion,ybe=Ox.LinearAlgebra.Spherical;function JG(a){return $r(a)?a.stage:null}var ZG=1,QG=1,eF=.05,Gv=.001,Fv={maxAzimuth:180,minAzimuth:-180,inertia:!1,maxPolar:1/0,minPolar:-1/0,zoom:{enabled:!0},pan:{enabled:!0,button:2},rotation:{enabled:!0,button:0}},Rx=class a{constructor(r,e){this._config=e;this._input={rho:0,theta:0,phi:0,x:0,y:0};this._progress={rho:0,theta:0,phi:0,x:0,y:0};this._startHandler=r=>{let{rotation:e,pan:t}=this._config,n=r.pointerType==="mouse",i=e.enabled&&n&&r.button===e.button&&xk.matchModifiers(r,e.modifiers),s=t.enabled&&n&&r.button===t.button&&xk.matchModifiers(r,t.modifiers);!i&&!s||(this.#t=i,(this.#e=s)&&(this._currentState=a._buildState(this._camera),Jp.extend(this._input,Rr.zero()),this._progress.x=this._progress.y=0),zv(r),window.clearTimeout(this.#r),window.addEventListener("pointerup",this._endHandler,!1),window.addEventListener("pointermove",this._moveHandler,!1),window.addEventListener("contextmenu",this._avoidHandler,!1))};this._avoidHandler=r=>zv(r);this._endHandler=r=>{zv(r),this.#r=window.setTimeout(()=>{window.removeEventListener("pointerup",this._endHandler),window.removeEventListener("pointermove",this._moveHandler),window.removeEventListener("contextmenu",this._avoidHandler)},20)};this._zoomHandler=r=>{let{zoom:e}=this._config;if(!(e.enabled&&xk.matchModifiers(r,e.modifiers)))return;zv(r);let n=this._input;n.rho-=Math.sign(r.deltaY)};this._moveHandler=r=>{zv(r);let{height:e,width:t}=this._scene.size,n=this._input,i=Math.min(e,t);if(this.#t){let s=-ZG*360/i,{phi:o,theta:c}=n,{maxPolar:d,minPolar:p,maxAzimuth:u,minAzimuth:h}=this._config;n.phi=(o+r.movementX*s).clamp(p,d),n.theta=(c+r.movementY*s).clamp(h,u)}else if(this.#e){let s=this._currentState.radius/i;n.x+=-r.movementX*s,n.y+=r.movementY*s}};this._renderHandler=r=>{this._update()};let t=this._scene=(this._camera=r).stage;this._initialState=this._currentState=a._buildState(r);let n=this._canvas=t.stage;n.addEventListener("pointerdown",this._startHandler,!1),n.addEventListener("wheel",this._zoomHandler,{passive:!1}),t.addEventListener("render",this._renderHandler,!1)}static _buildState(r){let e=Rr.subtract(r.position,r.lookAt),t=Rr.mag(e);return{target:r.lookAt,versor:Rr.unit(e),up:r.up,radius:t,position:r.position}}static tryAttach(r,e){e??=Fv;let t=JG(r)?.stage;if(Jp.isNull(t))return null;{let{position:n,lookAt:i}=r;return Jp.isNull(n)||Jp.isNull(i)||Rr.areClose(n,i)?null:new a(r,e)}}get configuration(){return this._config}set configuration(r){this._config=r}#e;#t;#r;_getSafeAzimuth({theta:r}){return a._modAngle(r)}_getSafePolar({phi:r}){return a._modAngle(r)}static _modAngle(r){for(;r<0;)r+=360;return r%360}static _getViewXYZ(r){let{versor:e,up:t}=r,n=Rr.cross(e,t),i=Rr.cross(n,e);return Rr.normalize(n),Rr.normalize(i),{right:n,up:i,versor:e}}#n;_update(){if(this.#n)return;this.#n=!0;let r=this._camera,{radius:e,versor:t,target:n,up:i}=this._initialState,{target:s}=this._currentState,{theta:o,phi:c,rho:d,x:p,y:u}=this._input,h=this._progress,{theta:m,phi:f,rho:g,x:y,y:v}=h,_=Math.abs(f-c)>Gv||Math.abs(m-o)>Gv,C=Math.abs(g-d)>Gv,E=Math.abs(p-y)>Gv||Math.abs(u-v)>Gv;if(C||_||E){let k=typeof this._config.inertia=="boolean"?this._config.inertia?eF:0:this._config.inertia,w=k>0&&k<1,{right:N,up:H}=a._getViewXYZ(this._initialState),R=n,A=i,P=s,T=g;w?T+=(d-g)*k:T=d,h.rho=T;let $=Math.pow(.95,T*QG),V=Rr.scale(t,-$*e);R=Rr.add(R,V);let B=f,O=m;w?(B+=(c-f)*k,O+=(o-m)*k):(B=c,O=o);let U=this._getSafePolar({phi:h.phi=B}),z=this._getSafeAzimuth({theta:h.theta=O}),G=Rr.negate(n),Z=td.translate(td.identity(),G),q=Dx.fromAxisAngle(H,U),Q=Dx.fromAxisAngle(N,z),Ne=td.multiply(Dx.toRotationMatrix(Q),Dx.toRotationMatrix(q));Z=td.multiply(Z,Ne),Z=td.translate(Z,Rr.negate(G)),R=td.transform(R,Z),A=td.transform(A,td.clone(Z,jr=>{jr.offsetX=jr.offsetY=jr.offsetZ=0}));let ne=y,pe=v,ee=ne,J=pe;w?(ee+=(p-ne)*k,J+=(u-pe)*k):(ee=p,J=u),h.x=ee,h.y=J;let{right:$e,up:ue}=a._getViewXYZ(this._currentState),Te=Rr.scale($e,ee),He=Rr.scale(ue,J),Ge=Rr.add(Te,He);P=Rr.add(s,Ge),r.lookAt=P,r.position=R,r.up=A,r.flags.push("camera")}this.#n=!1}dispose(){let r=this._canvas,e=this._scene;Jp.isNull(r)||(r.removeEventListener("pointerdown",this._startHandler),r.removeEventListener("wheel",this._zoomHandler)),e.removeEventListener("render",this._renderHandler,!1)}},Zp,ni=class extends KG.PacemBehavior{constructor(){super(...arguments);I(this,Zp,new Map);this._readyHandler=e=>{if(e.detail.propertyName==="isReady"&&e.detail.currentValue===!0){let t=e.currentTarget;t.removeEventListener(QD,this._readyHandler),this._decorateCore(t)}}}propertyChangedCallback(e,t,n,i){switch(super.propertyChangedCallback(e,t,n,i),e){case"maxAzimuth":case"minAzimuth":case"inertia":case"zoomControl":case"panControl":case"rotationControl":let s=this._buildConfig(),o=x(this,Zp);for(let c of o.values())c.configuration=s;break}}disconnectedCallback(){let e=x(this,Zp);for(let t of e.values())t.dispose();e.clear(),super.disconnectedCallback()}_buildConfig(){return Jp.extend({},Fv,{maxAzimuth:this.maxAzimuth??1/0,minAzimuth:this.minAzimuth??-1/0,minPolar:this.minPolar??-1/0,maxPolar:this.maxPolar??1/0,inertia:this.inertia??!1,zoom:this.zoomControl??Fv.zoom,pan:this.panControl??Fv.pan,rotation:this.rotationControl??Fv.rotation})}_decorateCore(e){let t=Rx.tryAttach(e,this._buildConfig());Jp.isNull(t)||x(this,Zp).set(e,t)}decorate(e){e.isConnected?this._decorateCore(e):e.addEventListener(QD,this._readyHandler,!1)}undecorate(e){let t=x(this,Zp);t.has(e)&&(t.get(e).dispose(),t.delete(e))}};Zp=new WeakMap,l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"maxAzimuth",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"maxPolar",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"minAzimuth",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"minPolar",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"zoomControl",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"rotationControl",2),l([ed({emit:!1,converter:Kp.Number})],ni.prototype,"panControl",2),l([ed({emit:!1,converter:DC})],ni.prototype,"inertia",2),ni=l([XG({tagName:qG+"-"+"3d"+"-orbit-camera"})],ni);import{CustomElement as tF,Defaults as rF,P as sr,PCSS as dl,ViewChild as eR,Watch as tR,PropertyConverters as rR}from"@pacem/pacem-core";import{Components as nF}from"@pacem/pacem-ui";var iF=nF.UI,pl=class extends iF.PacemAdaptedIterativeElement{constructor(){super(...arguments);this.interval=4e3}};l([eR(sr+"-adapter")],pl.prototype,"adapter",2),l([eR(sr+"-slideshow")],pl.prototype,"slideshow",2),l([tR({converter:rR.Number})],pl.prototype,"interval",2),l([tR({converter:rR.Boolean})],pl.prototype,"pausable",2),pl=l([tF({tagName:sr+"-carousel",shadow:rF.USE_SHADOW_ROOT,template:`<${sr}-repeater datasource="{{ :host.datasource }}">
|
|
927
927
|
<${sr}-slideshow class="${dl}-carousel" adapter="{{ ::adapter }}" index="{{ :host.index, twoway }}" on-load="this.focus()">
|
|
928
928
|
|
|
929
929
|
<template>
|
package/dist/bundle/pacem.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem v1.0.0-
|
|
2
|
+
* @pacem/pacem v1.0.0-fermat (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
@@ -45186,7 +45186,7 @@ var LineRenderPipelineClass = class {
|
|
|
45186
45186
|
this.draw = (pass, ...buffers) => {
|
|
45187
45187
|
throw new Error("Deprecated.");
|
|
45188
45188
|
};
|
|
45189
|
-
this.frame = (pass, meshBuffer, cameraBuffer) => {
|
|
45189
|
+
this.frame = (pass, interactionBuffer, meshBuffer, cameraBuffer) => {
|
|
45190
45190
|
pass.setPipeline(this._linePipeline);
|
|
45191
45191
|
try {
|
|
45192
45192
|
this._bindLineWorldTransform(pass, meshBuffer);
|
|
@@ -45198,7 +45198,7 @@ var LineRenderPipelineClass = class {
|
|
|
45198
45198
|
console.error("Pacem.Drawing3D.FrameException", e);
|
|
45199
45199
|
}
|
|
45200
45200
|
};
|
|
45201
|
-
this.raycast = (pass, meshBuffer, cameraBuffer) => {
|
|
45201
|
+
this.raycast = (pass, interactionBuffer, meshBuffer, cameraBuffer) => {
|
|
45202
45202
|
pass.setPipeline(this._pickLinePipeline);
|
|
45203
45203
|
try {
|
|
45204
45204
|
this._bindLineRaycastWorldTransform(pass, meshBuffer);
|
|
@@ -45252,6 +45252,14 @@ var LineRenderPipelineClass = class {
|
|
|
45252
45252
|
type: "uniform"
|
|
45253
45253
|
}
|
|
45254
45254
|
}
|
|
45255
|
+
// interaction
|
|
45256
|
+
/*{
|
|
45257
|
+
binding: UNIFORM_BINDING_INDEX_INTERACTION,
|
|
45258
|
+
visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,
|
|
45259
|
+
buffer: {
|
|
45260
|
+
type: 'uniform'
|
|
45261
|
+
}
|
|
45262
|
+
}*/
|
|
45255
45263
|
],
|
|
45256
45264
|
label: labelPrefix + "line-view-bind-group-layout"
|
|
45257
45265
|
});
|
|
@@ -45281,7 +45289,7 @@ var LineRenderPipelineClass = class {
|
|
|
45281
45289
|
entries: lineEntries,
|
|
45282
45290
|
label: labelPrefix + "line-positions-bind-group-layout"
|
|
45283
45291
|
});
|
|
45284
|
-
const vertexBindGroupLayouts = [
|
|
45292
|
+
const vertexBindGroupLayouts = [viewBindGroupLayout, worldBindGroupLayout, lineBindGroupLayout];
|
|
45285
45293
|
const raycastLayoutIndex = vertexBindGroupLayouts.length;
|
|
45286
45294
|
const bindGroupLayouts = vertexBindGroupLayouts.slice();
|
|
45287
45295
|
const fragment = {
|
|
@@ -46453,6 +46461,7 @@ var OrbitCameraBehavior = class _OrbitCameraBehavior {
|
|
|
46453
46461
|
this._progress.x = this._progress.y = 0;
|
|
46454
46462
|
}
|
|
46455
46463
|
avoidHandler19(evt);
|
|
46464
|
+
window.clearTimeout(this.#handle);
|
|
46456
46465
|
window.addEventListener("pointerup", this._endHandler, false);
|
|
46457
46466
|
window.addEventListener("pointermove", this._moveHandler, false);
|
|
46458
46467
|
window.addEventListener("contextmenu", this._avoidHandler, false);
|
|
@@ -46460,7 +46469,7 @@ var OrbitCameraBehavior = class _OrbitCameraBehavior {
|
|
|
46460
46469
|
this._avoidHandler = (evt) => avoidHandler19(evt);
|
|
46461
46470
|
this._endHandler = (evt) => {
|
|
46462
46471
|
avoidHandler19(evt);
|
|
46463
|
-
window.setTimeout(() => {
|
|
46472
|
+
this.#handle = window.setTimeout(() => {
|
|
46464
46473
|
window.removeEventListener("pointerup", this._endHandler);
|
|
46465
46474
|
window.removeEventListener("pointermove", this._moveHandler);
|
|
46466
46475
|
window.removeEventListener("contextmenu", this._avoidHandler);
|
|
@@ -46534,6 +46543,7 @@ var OrbitCameraBehavior = class _OrbitCameraBehavior {
|
|
|
46534
46543
|
}
|
|
46535
46544
|
#panning;
|
|
46536
46545
|
#rotating;
|
|
46546
|
+
#handle;
|
|
46537
46547
|
_getSafeAzimuth({ theta }) {
|
|
46538
46548
|
return _OrbitCameraBehavior._modAngle(theta);
|
|
46539
46549
|
}
|