@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.
Files changed (37) hide show
  1. package/dist/browser/pacem-2d.js +1 -1
  2. package/dist/browser/pacem-2d.min.js +1 -1
  3. package/dist/browser/pacem-3d.js +16 -6
  4. package/dist/browser/pacem-3d.js.map +1 -1
  5. package/dist/browser/pacem-3d.min.js +2 -2
  6. package/dist/browser/pacem-charts.js +1 -1
  7. package/dist/browser/pacem-charts.min.js +1 -1
  8. package/dist/browser/pacem-cms.js +1 -1
  9. package/dist/browser/pacem-cms.min.js +1 -1
  10. package/dist/browser/pacem-core.js +1 -1
  11. package/dist/browser/pacem-core.min.js +1 -1
  12. package/dist/browser/pacem-foundation.js +1 -1
  13. package/dist/browser/pacem-foundation.min.js +1 -1
  14. package/dist/browser/pacem-fx.js +1 -1
  15. package/dist/browser/pacem-fx.min.js +1 -1
  16. package/dist/browser/pacem-logging.js +1 -1
  17. package/dist/browser/pacem-logging.min.js +1 -1
  18. package/dist/browser/pacem-maps.js +1 -1
  19. package/dist/browser/pacem-maps.min.js +1 -1
  20. package/dist/browser/pacem-media.js +1 -1
  21. package/dist/browser/pacem-media.min.js +1 -1
  22. package/dist/browser/pacem-networking.js +1 -1
  23. package/dist/browser/pacem-networking.min.js +1 -1
  24. package/dist/browser/pacem-numerical.js +1 -1
  25. package/dist/browser/pacem-numerical.min.js +1 -1
  26. package/dist/browser/pacem-plus.js +1 -1
  27. package/dist/browser/pacem-plus.min.js +1 -1
  28. package/dist/browser/pacem-scaffolding.js +1 -1
  29. package/dist/browser/pacem-scaffolding.min.js +1 -1
  30. package/dist/browser/pacem-ui.js +1 -1
  31. package/dist/browser/pacem-ui.min.js +1 -1
  32. package/dist/bundle/pacem.min.mjs +2 -2
  33. package/dist/bundle/pacem.mjs +15 -5
  34. package/dist/bundle/pacem.mjs.map +2 -2
  35. package/dist/typings/index.d.ts +1 -1
  36. package/dist/vscode.html-custom.json +1 -1
  37. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
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 = [worldBindGroupLayout, viewBindGroupLayout, lineBindGroupLayout];
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
  }