@pacem/pacem-3d 1.0.4 → 1.0.5-bartels

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.
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * @pacem/pacem-3d v1.0.4 (https://js.pacem.it)
2
+ * @pacem/pacem-3d v1.0.5-bartels (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
6
- var Un=Object.defineProperty;var Oo=(n,e)=>{for(var t in e)Un(n,t,{get:e[t],enumerable:!0})};var Sn={};Oo(Sn,{Drawing3D:()=>Bi});var Bi={};Oo(Bi,{AdapterUtils:()=>We,BasicMaterialElement:()=>$o,DragEvent:()=>mt,KnownShader:()=>U,LambertMaterialElement:()=>Ht,LineMaterialElement:()=>yt,MaterialElement:()=>Q,OrbitCameraBehavior:()=>Po,Pacem3DAdapterElement:()=>Je,Pacem3DCameraElement:()=>Ce,Pacem3DDetector:()=>Vo,Pacem3DElement:()=>xe,Pacem3DGroupElement:()=>Ze,Pacem3DLightElement:()=>Ie,Pacem3DMeshElement:()=>ke,Pacem3DObjectElement:()=>Fe,Pacem3DOrthographicCameraElement:()=>Be,Pacem3DPerspectiveCameraElement:()=>qe,Pacem3DPrimitiveElement:()=>ee,Pacem3DThreeAdapterElement:()=>lo,Pacem3DWebgpuAdapterElement:()=>Pt,Pacem3DWgslScriptElement:()=>sr,PacemBoxElement:()=>Ae,PacemConeElement:()=>tt,PacemCylinderElement:()=>rt,PacemDodecahedronElement:()=>Ko,PacemHexahedronElement:()=>qo,PacemIcosahedronElement:()=>Jo,PacemLineElement:()=>Qr,PacemOctahedronElement:()=>Zo,PacemOrbitCameraBehaviorElement:()=>Pe,PacemPlaneElement:()=>Ct,PacemSphereElement:()=>Er,PacemTetrahedronElement:()=>Yo,PacemTorusElement:()=>Rt,PhongMaterialElement:()=>He,PolyhedronElement:()=>je,RenderableElement:()=>be,RenderableEvent:()=>gt,StalePropertyFlag:()=>I,StandardMaterialElement:()=>Qe,UI3DEvent:()=>$t,Ui3DElement:()=>ae,computePlaneNormal:()=>So,computeSharpVertexNormals:()=>ce,isBasicMaterial:()=>Fr,isCamera:()=>pe,isGeometry:()=>cr,isGroup:()=>vt,isInteraction:()=>kr,isLambertMaterial:()=>Xr,isLight:()=>Se,isLineMaterial:()=>Ke,isMaterial:()=>Ne,isMesh:()=>Ee,isMeshGeometry:()=>kt,isOrthographicCamera:()=>Ur,isPerspectiveCamera:()=>zr,isPhongMaterial:()=>Hr,isRenderable:()=>ar,isShaderMaterial:()=>Yi,isStage:()=>Bo,isStandardMaterial:()=>jr,isUi3DObject:()=>Ut});import{Watch as k,PropertyConverters as J,CustomElement as zt,PacemEventTarget as Wn,PropertyChangeEvent as Yn,CustomElementUtils as Wi,CustomUIEvent as Zn,P as _t,Utils as Ge,Components as qn}from"@pacem/pacem-core";import{Geometry as De}from"@pacem/pacem-numerical";import{Utils as kn}from"@pacem/pacem-core";import{parseAsNumericalArray as ki}from"@pacem/pacem-foundation";import{Geometry as Sr}from"@pacem/pacem-numerical";var $e={convert:n=>Sr.LinearAlgebra.Vector3D.parse(n),convertBack:n=>`${n.x||0} ${n.y||0} ${n.z||0}`},Vr={convert:n=>{let e=ki(n),t=()=>{throw new Error(`Cannot parse "${n}" as a valid Vector3D.`)};if(kn.isNullOrEmpty(e)&&t(),e.length===3)return Sr.LinearAlgebra.Vector3D.from(...e);if(e.length===1){let o=e[0];return Sr.LinearAlgebra.Vector3D.from(o,o,o)}t()},convertBack:n=>`${n.x||0} ${n.y||0} ${n.z||0}`},Do={convert:n=>Sr.LinearAlgebra.Quaternion.parse(n),convertBack:n=>`${n.x||0} ${n.y||0} ${n.z||0} ${n.w||0}`},Go={convert:n=>n==="true"?!0:n==="false"?!1:ki(n)[0],convertBack:n=>n.toString()};import{CustomElement as Fn,P as Bt,PCSS as Hi,Defaults as Xn,ViewChild as ji,Watch as St,PropertyConverters as Vt,Utils as ge,Components as Fi,PropertyChangeEventName as Xi,Logging as Hn,Animations as jn,UI as $r}from"@pacem/pacem-core";var ze=Math.PI/180;var Ue=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},xe=class extends Fi.PacemItemsContainerElement{constructor(){super(...arguments),this._itemPropertyChangeHandler=e=>{let t=e.target;this.adapter&&this.adapter.updateItem(this,t),t.flags.splice(0)},this._clickHandler=e=>{let t=this;if(!t.interactive||ge.isNull(t._lastHitResult))return;let o=e.type.replace(/^mouse/,""),r=t._lastHitResult,i=r.object,s=r.point;this._itemDispatch(i,s,o,e)},this._hitTestCallback=(e,t)=>{let o=this;if(e!=o._lastHitResult){if(e?.object!=o._lastHitResult?.object){let r=e?.object,i=o._lastHitResult?.object,s=e?.point;ge.isNull(i)||this._itemDispatch(i,s,"out",t),ge.isNull(r)||this._itemDispatch(r,s,"over",t)}o._lastHitResult=e}},this._moveHandler=e=>{let t=this;if(!t.adapter||!t.interactive)return;let o=t._resizer.currentSize,r=s=>t._hitTestCallback(s,e),i=e.type==="mousemove"?{x:e.pageX-o.left,y:e.pageY-o.top}:{x:-1,y:-1};t.adapter.raycast(this,i,o,r)},this._resizeHandler=e=>{let t=this.#e,o=e.detail;if(!ge.isNull(t)&&t.height===o.height&&t.width===o.width)return;this.#e=o;let r=this.adapter;ge.isNull(r)||(this.adapter.invalidateSize(this,o),this.dispatchEvent(new Fi.ResizeEvent(o)))}}validate(e){return e instanceof be}get stage(){return this._container}get scene(){return this.adapter&&this.adapter.getScene(this)}register(e){let t=super.register(e);return t&&(this._add(e),e.addEventListener(Xi,this._itemPropertyChangeHandler,!1)),t}unregister(e){let t=super.unregister(e);return t&&(e.removeEventListener(Xi,this._itemPropertyChangeHandler,!1),this._erase(e)),t}_refreshDatasource(e=this.datasource){this.adapter?.updateItem(this,void 0)}_buildUpDatasourceFromDOM(e=this.items){ge.isNullOrEmpty(e)||(this.datasource=e.slice())}_add(e){this.adapter&&this.adapter.addItem(this,e)}_erase(e){this.adapter&&this.adapter.removeItem(this,e)}_initializeAdapter(e,t){return new Promise((o,r)=>{let i=this.datasource||[];ge.isNull(e)||i.forEach(s=>e.removeItem(this,s)),!ge.isNull(this._container)&&!ge.isNull(t)?t.initialize(this).then(s=>{(i||[]).forEach(a=>this._add(a)),o()},s=>{this.log(Hn.LogLevel.Error,s?.toString()),r(s)}):o()})}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"adapter":this._initializeAdapter(t,o);break;case"items":this._buildUpDatasourceFromDOM(o);break;case"transparent":this.adapter?.invalidateSize(this,this.size);break;case"datasource":this._refreshDatasource(o);case"disabled":case"background":this.render();break}}viewActivatedCallback(){super.viewActivatedCallback();let e=this._container,t=this._resizer;t.addEventListener("resize",this._resizeHandler,!1),t.target=e,this._initializeAdapter(null,this.adapter).then(o=>{e.addEventListener("mousemove",this._moveHandler,!1),e.addEventListener("click",this._clickHandler,!1),e.addEventListener("mouseup",this._clickHandler,!1),e.addEventListener("mousedown",this._clickHandler,!1),e.addEventListener("mouseout",this._moveHandler,!1),this._buildUpDatasourceFromDOM(),this.render()})}_itemDispatch(e,t,o,r){if(!ge.isNull(e)){var i,s,a;r instanceof Event?s=r:i={item:e,offset:r},typeof o=="string"?a=o:(a=o.type,s=o.originalEvent);let l=t,u=()=>r instanceof Event?new gt(a,e,s,l):new mt(a,{detail:i,cancelable:a===$r.DragDropEventType.Init||a===$r.DragDropEventType.Drag},s,l),p=r instanceof Event?new gt("item"+a,e,s,l):new mt("item"+a,{detail:i,cancelable:a===$r.DragDropEventType.Init||a===$r.DragDropEventType.Drag},s,l);var c=!1;if(e instanceof EventTarget){let f=u();e.dispatchEvent(f),c=f.defaultPrevented}return e.stage.dispatchEvent(p),c||p.defaultPrevented}return!1}disconnectedCallback(){this.#t?.stop();let e=this._resizer,t=this._container;ge.isNull(t)||(t.removeEventListener("click",this._clickHandler,!1),t.removeEventListener("mouseup",this._clickHandler,!1),t.removeEventListener("mousedown",this._clickHandler,!1),t.removeEventListener("mousemove",this._moveHandler,!1),t.removeEventListener("mouseout",this._moveHandler,!1)),ge.isNull(e)||e.removeEventListener("resize",this._resizeHandler,!1),super.disconnectedCallback()}#e;get size(){return this.#e}render(e,t,o=performance.now()){if(ge.isNull(e))this.#t?.stop(),this.#t=jn.Timer.run(r=>this._doRender());else{let r=this.adapter;ge.isNull(r)||r.updateItem(this,e)}}#t;_doRender(){if(!this.disabled&&!ge.isNull(this.adapter)){let e=this.adapter.getScene(this),t=new CustomEvent("prerender",{detail:{scene:e},cancelable:!0});this.dispatchEvent(t),t.defaultPrevented||(this.adapter.render(this),this.dispatchEvent(new CustomEvent("render",{detail:{scene:e}})))}}};Ue([ji(`.${Hi}-3d`)],xe.prototype,"_container",void 0);Ue([ji(Bt+"-resize")],xe.prototype,"_resizer",void 0);Ue([St({emit:!1,converter:Vt.Boolean})],xe.prototype,"interactive",void 0);Ue([St({emit:!1,converter:Vt.Boolean})],xe.prototype,"transparent",void 0);Ue([St({emit:!1,converter:Vt.String})],xe.prototype,"background",void 0);Ue([St({emit:!1,converter:Vt.Element})],xe.prototype,"adapter",void 0);Ue([St({emit:!1,converter:Vt.Json})],xe.prototype,"datasource",void 0);Ue([St({emit:!1,converter:Vt.Boolean})],xe.prototype,"orbit",void 0);xe=Ue([Fn({tagName:Bt+"-"+"3d",shadow:Xn.USE_SHADOW_ROOT,template:`<${Bt}-resize watch-position="true"></${Bt}-resize><div class="${Hi}-3d"></div><${Bt}-content></${Bt}-content>`})],xe);var S=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i};function Bo(n){return!Ge.isNull(n)&&"render"in n&&typeof n.render=="function"}function ar(n){return Bo(n?.stage)}function Ut(n){return"transformMatrix"in n&&ar(n)}function pe(n){return"type"in n&&"up"in n&&"lookAt"in n&&ar(n)}function zr(n){return pe(n)&&"type"in n&&n.type==="perspective"}function Ur(n){return pe(n)&&"type"in n&&n.type==="orthographic"}function Se(n){return"type"in n&&(n.type==="ambient"||n.type==="omni"||n.type==="direction"||n.type=="spot")&&ar(n)}function Ee(n){return"geometry"in n&&Ut(n)}function cr(n){return"positions"in n&&Ge.isArray(n.positions)}function kt(n){return("triangleIndices"in n&&Ge.isArray(n.triangleIndices)||"normals"in n&&Ge.isArray(n.normals)||"textureCoordinates"in n&&Ge.isArray(n.textureCoordinates))&&cr(n)}function vt(n){return"childRenderables"in n&&Ge.isArray(n.childRenderables)&&Ut(n)}function ce(n){let e=[];if(!Ge.isNullOrEmpty(n)){let t=n.triangleIndices;if(t.length%3!==0)throw new RangeError(`Invalid mesh geometry: ${t.length} is not multiple of 3.`);for(let o=2;o<t.length;o+=3){let r=t[o-2],i=t[o-1],s=t[o],a=n.positions[r],c=n.positions[i],l=n.positions[s],u=So(a,c,l);e.push(u,u,u)}}n.normals=e}function So(n,e,t){let o=De.LinearAlgebra.Vector3D.subtract(n,e),r=De.LinearAlgebra.Vector3D.subtract(n,t),i=De.LinearAlgebra.Vector3D.cross(o,r);return De.LinearAlgebra.Vector3D.unit(i)}var $t=class extends Zn{constructor(e,t,o,r){super(e,t,o),this.#e=r}#e;get point(){return this.#e}},mt=class extends $t{},gt=class extends $t{constructor(e,t,o,r){super(e,{detail:t,bubbles:!0,cancelable:!0},o,r)}},I;(function(n){n.Position="position",n.Transform="transform",n.Geometry="geometry",n.Children="children",n.Material="material",n.Light="light",n.Camera="camera",n.Visibility="visibility"})(I||(I={}));function kr(n){return typeof n=="object"&&"time"in n&&typeof n.time=="number"}var Xe={OBJECT_SELECTOR:_t+"-"+"3d"+"-object",LIGHT_SELECTOR:_t+"-"+"3d"+"-light",PERSPECTIVE_CAMERA_SELECTOR:_t+"-"+"3d"+"-perspective-camera",ORTHO_CAMERA_SELECTOR:_t+"-"+"3d"+"-orthographic-camera",LINE_SELECTOR:_t+"-"+"3d"+"-line",MESH_SELECTOR:_t+"-"+"3d"+"-mesh",GROUP_SELECTOR:_t+"-"+"3d"+"-group",DEFAULT_COORDS:{x:0,y:0,z:0}},be=class n extends qn.PacemCrossItemsContainerElement{constructor(){super(...arguments),this.position=Xe.DEFAULT_COORDS,this.#e=[]}validate(e){return!1}findContainer(){return this.parent||this.stage}get stage(){return this._scene=this._scene||Wi.findAncestorOfType(this,xe)}get parent(){return this._drawableParent=this._drawableParent||Wi.findAncestor(this,e=>e instanceof n)}disconnectedCallback(){delete this._scene,delete this._drawableParent,super.disconnectedCallback()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"hide":this.setAsDirty(I.Visibility);break;case"items":this.setAsDirty(I.Children);break;case"position":this.setAsDirty(I.Position);break}}#e;get flags(){return this.#e}setAsDirty(...e){for(let t of e)this.flags.includes(t)||this.flags.push(t);this.stage?.render(this)}};S([k({emit:!1,converter:$e})],be.prototype,"position",void 0);S([k({emit:!1,reflectBack:!0,converter:J.String})],be.prototype,"tag",void 0);S([k({emit:!1,converter:J.Boolean})],be.prototype,"inert",void 0);var ae=class extends be{propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"transformMatrix":this.setAsDirty(I.Transform);break;case"translateZ":case"translateX":case"translateY":this.offset={x:this.translateX,y:this.translateY,z:this.translateZ};break;case"scaleX":case"scaleY":case"scaleZ":this.scale={x:this.scaleX,y:this.scaleY,z:this.scaleZ};break;case"scale":case"offset":case"rotate":this._computeTransformMatrix();break}}_computeTransformMatrix(){let e=De.LinearAlgebra.Matrix3D,t=De.LinearAlgebra.Vector3D,o=De.LinearAlgebra.Quaternion,r=this.scale??t.from(1,1,1),i=e.scale(e.identity(),r);if(!Ge.isNull(this.rotate)){let a=o.toRotationMatrix(this.rotate);i=e.multiply(i,a)}let s=this.offset??t.from(0,0,0);i=e.translate(i,s),this.transformMatrix=i}};S([k({emit:!1,converter:Do})],ae.prototype,"rotate",void 0);S([k({emit:!1,converter:Vr})],ae.prototype,"scale",void 0);S([k({emit:!1,converter:Vr})],ae.prototype,"offset",void 0);S([k({emit:!1})],ae.prototype,"transformMatrix",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"scaleX",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"scaleY",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"scaleZ",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"translateX",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"translateY",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"translateZ",void 0);var Ze=class extends ae{validate(e){return e instanceof be}#e=[];get childRenderables(){return this.#e}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"items":case"datasource":this.#e=o||[],this.setAsDirty(I.Children);break}}};S([k({emit:!1})],Ze.prototype,"datasource",void 0);Ze=S([zt({tagName:Xe.GROUP_SELECTOR})],Ze);var ke=class extends ae{propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"geometry":this.setAsDirty(I.Geometry);break;case"material":case"backMaterial":this.setAsDirty(I.Material);break}}};S([k({emit:!1,converter:J.Json})],ke.prototype,"geometry",void 0);S([k({emit:!1,converter:J.Json})],ke.prototype,"material",void 0);S([k({emit:!1,converter:J.Json})],ke.prototype,"backMaterial",void 0);ke=S([zt({tagName:Xe.MESH_SELECTOR})],ke);var Fe=class extends ae{propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),(e==="content"||e==="type")&&this.setAsDirty(I.Geometry,I.Material)}};S([k({emit:!1})],Fe.prototype,"content",void 0);S([k({emit:!1,converter:J.String})],Fe.prototype,"type",void 0);Fe=S([zt({tagName:Xe.OBJECT_SELECTOR})],Fe);var Ie=class extends be{constructor(){super(...arguments),this.intensity=.85,this.target=Xe.DEFAULT_COORDS,this.color="#fff",this.type="omni"}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"type":case"color":case"intensity":case"target":this.setAsDirty(I.Light);break}}};S([k({emit:!1,converter:J.Number})],Ie.prototype,"intensity",void 0);S([k({emit:!1,converter:$e})],Ie.prototype,"target",void 0);S([k({emit:!1,converter:J.String})],Ie.prototype,"color",void 0);S([k({emit:!1,converter:J.String})],Ie.prototype,"type",void 0);Ie=S([zt({tagName:Xe.LIGHT_SELECTOR})],Ie);var Ce=class extends be{constructor(){super(...arguments),this.near=.1,this.far=1e3,this.up=De.LinearAlgebra.Vector3D.j(),this.lookAt=Xe.DEFAULT_COORDS}#e;_resetBoundingSphere(){let e=this.#e,t=this.position,o=this.lookAt,r=Ge.isNullOrEmpty(t)||Ge.isNullOrEmpty(o)?0:De.LinearAlgebra.Vector3D.mag(De.LinearAlgebra.Vector3D.subtract(t,o)),i=this.#e={center:o,radius:r};this.dispatchEvent(new Yn({currentValue:i,propertyName:"boundingSphere",oldValue:e}))}get boundingSphere(){return this.#e}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"lookAt":case"position":this._resetBoundingSphere();case"near":case"far":case"up":this.setAsDirty(I.Camera);break}}};S([k({emit:!1,converter:J.Number})],Ce.prototype,"near",void 0);S([k({emit:!1,converter:J.Number})],Ce.prototype,"far",void 0);S([k({emit:!1,converter:$e})],Ce.prototype,"up",void 0);S([k({emit:!1,converter:$e})],Ce.prototype,"lookAt",void 0);var qe=class extends Ce{constructor(){super(...arguments),this.fov=45,this.aspect=1}get type(){return"perspective"}get aspectRatio(){return this.aspect}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"fov":case"aspect":this.setAsDirty(I.Camera);break}}};S([k({emit:!1,converter:J.Number})],qe.prototype,"fov",void 0);S([k({emit:!1,converter:J.Number})],qe.prototype,"aspect",void 0);qe=S([zt({tagName:Xe.PERSPECTIVE_CAMERA_SELECTOR})],qe);var Be=class extends Ce{constructor(){super(...arguments),this.top=1,this.left=-1,this.bottom=-1,this.right=1}get type(){return"orthographic"}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"top":case"left":case"bottom":case"right":this.setAsDirty(I.Camera);break}}};S([k({emit:!1,converter:J.Number})],Be.prototype,"top",void 0);S([k({emit:!1,converter:J.Number})],Be.prototype,"left",void 0);S([k({emit:!1,converter:J.Number})],Be.prototype,"bottom",void 0);S([k({emit:!1,converter:J.Number})],Be.prototype,"right",void 0);Be=S([zt({tagName:Xe.ORTHO_CAMERA_SELECTOR})],Be);var Je=class extends Wn{};var Vo=class{constructor(){this._detected={supported:!1,info:{}};let e=document.createElement("canvas"),t=["webgl","experimental-webgl","moz-webgl","webkit-3d"],o,r=function(a){if(a)return o.getParameter(a)},i=(a,c,l)=>{let u=this._detected;var p=u.info[a]=u.info[a]||{};c=c.replace(/[^\w]+/g,""),c=c.substring(0,1).toLowerCase()+c.substring(1),p[c]=l};if(navigator.userAgent.indexOf("MSIE")>=0)try{o=window.WebGLHelper.CreateGLContext(e,"canvas")}catch{}else for(var s=0;s<t.length;s++)try{if(o=e.getContext(t[s]),o){i("main","Context Name",t[s]);break}}catch{}this._detected.supported=!!o,i("main","Platform",navigator.platform),i("main","Agent",navigator.userAgent),o&&(i("main","Vendor",r(o.VENDOR)),i("main","Version",r(o.VERSION)),i("main","Renderer",r(o.RENDERER)),i("main","Shading Language Version",r(o.SHADING_LANGUAGE_VERSION)),i("bits","Rgba Bits",r(o.RED_BITS)+", "+r(o.GREEN_BITS)+", "+r(o.BLUE_BITS)+", "+r(o.ALPHA_BITS)),i("bits","Depth Bits",r(o.DEPTH_BITS)),i("shader","Max Vertex Attribs",r(o.MAX_VERTEX_ATTRIBS)),i("shader","Max Vertex Texture Image Units",r(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)),i("shader","Max Varying Vectors",r(o.MAX_VARYING_VECTORS)),i("shader","Max Uniform Vectors",r(o.MAX_VERTEX_UNIFORM_VECTORS)),i("tex","Max Combined Texture Image Units",r(o.MAX_COMBINED_TEXTURE_IMAGE_UNITS)),i("tex","Max Texture Size",r(o.MAX_TEXTURE_SIZE)),i("tex","Max Cube Map Texture Size",r(o.MAX_CUBE_MAP_TEXTURE_SIZE)),i("tex","Num. Compressed Texture Formats",r(o.COMPRESSED_TEXTURE_FORMATS)),i("misc","Max Render Buffer Size",r(o.MAX_RENDERBUFFER_SIZE)),i("misc","Max Viewport Dimensions",r(o.MAX_VIEWPORT_DIMS)),i("misc","Aliased Line Width Range",r(o.ALIASED_LINE_WIDTH_RANGE)),i("misc","Aliased Point Size Range",r(o.ALIASED_POINT_SIZE_RANGE)),i("misc","Supported Extensions",o.getSupportedExtensions()||[]))}get info(){return this._detected.info}get supported(){return this._detected.supported}};import{PacemEventTarget as Jn,Utils as lr,Watch as Xt,PropertyConverters as ur,PCSS as Kn}from"@pacem/pacem-core";import{Imaging as Qn}from"@pacem/pacem-foundation";var Ft=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},U;(function(n){n.Basic="basic",n.Lambert="lambert",n.Phong="phong",n.Standard="standard",n.Line="line",n.Custom="custom"})(U||(U={}));function Ne(n){return"shader"in n}function Fr(n){return Ne(n)&&n.shader===U.Basic}function Ke(n){return Ne(n)&&n.shader===U.Line}function Xr(n){return Ne(n)&&n.shader===U.Lambert}function Hr(n){return Ne(n)&&n.shader===U.Phong}function jr(n){return Ne(n)&&n.shader===U.Standard}function Yi(n){return Ne(n)&&n.shader===U.Custom}var Q=class extends Jn{constructor(e){super(),this.#e=e}#e;get shader(){return this.#e}async _loadMap(e,t=this.material?.texture){if(lr.isNull(t)||t.close(),lr.isNullOrEmpty(e))return null;let o=await Qn.loadImage(e);return lr.isNull(o)?null:await createImageBitmap(o)}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"map":case"opacity":case"wireframe":case"color":case"hide":this.updateMaterial();break}}viewActivatedCallback(){super.viewActivatedCallback(),this.updateMaterial()}updateMaterial(){this.createMaterial().then(e=>{this.material=lr.extend(e,{flags:[I.Material]})})}async createMaterial(){return{opacity:this.opacity??1,wireframe:this.wireframe??!1,color:this.color||lr.Css.getVariableValue(`--${Kn}-color-primary`),visible:!(this.hide??!1),map:this.map,texture:await this._loadMap(this.map),shader:this.shader,flags:[]}}};Ft([Xt()],Q.prototype,"material",void 0);Ft([Xt({emit:!1,converter:ur.Number})],Q.prototype,"opacity",void 0);Ft([Xt({emit:!1,converter:ur.Boolean})],Q.prototype,"wireframe",void 0);Ft([Xt({emit:!1,converter:ur.String})],Q.prototype,"color",void 0);Ft([Xt({emit:!1,converter:ur.Boolean})],Q.prototype,"hide",void 0);Ft([Xt({emit:!1,converter:ur.String})],Q.prototype,"map",void 0);import{CustomElement as ts,P as rs}from"@pacem/pacem-core";var es=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},$o=class extends Q{constructor(){super(U.Basic)}};$o=es([ts({tagName:`${rs}-${"3d"}-material-basic`})],$o);import{CustomElement as os,P as is,Watch as zo,PropertyConverters as Uo,Utils as ns}from"@pacem/pacem-core";var Wr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Ht=class extends Q{constructor(){super(U.Lambert)}async createMaterial(){return ns.extend({emissiveColor:this.emissiveColor||"#000",reflectivity:this.reflectivity??0,refractionRatio:this.refractionRatio??0},await super.createMaterial())}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"emissiveColor":case"reflectivity":case"refractionRatio":this.updateMaterial();break}}};Wr([zo({emit:!1,converter:Uo.String})],Ht.prototype,"emissiveColor",void 0);Wr([zo({emit:!1,converter:Uo.Number})],Ht.prototype,"reflectivity",void 0);Wr([zo({emit:!1,converter:Uo.Number})],Ht.prototype,"refractionRatio",void 0);Ht=Wr([os({tagName:`${is}-${"3d"}-material-lambert`})],Ht);import{CustomElement as ss,P as as,Watch as Yr,PropertyConverters as ko,Utils as cs}from"@pacem/pacem-core";var pr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},yt=class extends Q{constructor(){super(U.Line)}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"lineWidth":case"lineJoin":case"lineCap":case"dashArray":this.updateMaterial();break}}async createMaterial(){return cs.extend({lineWidth:this.lineWidth??1,lineJoin:this.lineJoin??"round",lineCap:this.lineCap??"round",dashArray:this.dashArray},await super.createMaterial())}};pr([Yr({emit:!1,converter:ko.Number})],yt.prototype,"lineWidth",void 0);pr([Yr({emit:!1,converter:ko.String})],yt.prototype,"lineJoin",void 0);pr([Yr({emit:!1,converter:ko.String})],yt.prototype,"lineCap",void 0);pr([Yr({emit:!1,converter:{convert:n=>n?.split(",").map(e=>parseInt(e)).filter(e=>!Number.isNaN(e)),convertBack:n=>n?.join(",")}})],yt.prototype,"dashArray",void 0);yt=pr([ss({tagName:`${as}-${"3d"}-material-line`})],yt);import{CustomElement as ls,P as us,Watch as jt,PropertyConverters as Wt,Utils as ps}from"@pacem/pacem-core";var xt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},He=class extends Q{constructor(){super(U.Phong)}async createMaterial(){return ps.extend({emissiveColor:this.emissiveColor||"#000",reflectivity:this.reflectivity??0,refractionRatio:this.refractionRatio??0,specularColor:this.specularColor||"#000",shininess:this.shininess??0,flatShading:this.flatShading??!0},await super.createMaterial())}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"emissiveColor":case"reflectivity":case"refractionRatio":case"specularColor":case"shininess":case"flatShading":this.updateMaterial();break}}};xt([jt({emit:!1,converter:Wt.String})],He.prototype,"emissiveColor",void 0);xt([jt({emit:!1,converter:Wt.Number})],He.prototype,"reflectivity",void 0);xt([jt({emit:!1,converter:Wt.Number})],He.prototype,"refractionRatio",void 0);xt([jt({emit:!1,converter:Wt.String})],He.prototype,"specularColor",void 0);xt([jt({emit:!1,converter:Wt.Number})],He.prototype,"shininess",void 0);xt([jt({emit:!1,converter:Wt.Boolean})],He.prototype,"flatShading",void 0);He=xt([ls({tagName:`${us}-${"3d"}-material-phong`})],He);import{CustomElement as fs,P as hs,Watch as fr,PropertyConverters as hr,Utils as ds}from"@pacem/pacem-core";var Yt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Qe=class extends Q{constructor(){super(U.Standard)}async createMaterial(){return ds.extend({emissiveColor:this.emissiveColor||"#000",refractionRatio:this.refractionRatio??0,metalness:this.metalness??0,roughness:this.roughness??0,flatShading:this.flatShading??!1},await super.createMaterial())}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"emissiveColor":case"roughness":case"metalness":case"refractionRatio":case"flatShading":this.updateMaterial();break}}};Yt([fr({emit:!1,converter:hr.String})],Qe.prototype,"emissiveColor",void 0);Yt([fr({emit:!1,converter:hr.Number})],Qe.prototype,"refractionRatio",void 0);Yt([fr({emit:!1,converter:hr.Number})],Qe.prototype,"roughness",void 0);Yt([fr({emit:!1,converter:hr.Number})],Qe.prototype,"metalness",void 0);Yt([fr({emit:!1,converter:hr.Boolean})],Qe.prototype,"flatShading",void 0);Qe=Yt([fs({tagName:`${hs}-${"3d"}-material-standard`})],Qe);import{PacemEventTarget as gs,Watch as _s,PropertyConverters as vs,Utils as ys}from"@pacem/pacem-core";var ms=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},ee=class extends gs{viewActivatedCallback(){super.viewActivatedCallback(),ys.isNull(this.geometry)&&(this.geometry=this.createDefaultGeometry())}};ms([_s({converter:vs.Json})],ee.prototype,"geometry",void 0);import{CustomElement as bs,P as Es,Watch as qt,PropertyConverters as Jt}from"@pacem/pacem-core";import{Utils as Zi}from"@pacem/pacem-core";import{Utils as xs}from"@pacem/pacem-core";function bt(n){return(e,t,o)=>{let r=`_${t}_${xs.uniqueCode()}_backingField`;function i(){return this[r]}function s(a){if(a!==this[r]){let c=this[r];this[r]=a,n.call(this,t,c,a)}}Object.defineProperty(e,t,{get:function(){return i.call(this)},set:function(a){s.call(this,a)},enumerable:!0,configurable:!1})}}var dr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Et=class{constructor(e=[]){this.positions=e}static barycenter(e){var t={x:0,y:0,z:0};if(!Zi.isNullOrEmpty(e)){for(var o=e.length,r=0;r<e.length;r++){var i=e[r];t.x+=i.x,t.y+=i.y,t.z+=i.z}var s=1*o;t.x/=s,t.y/=s,t.z/=s}return t}static boundingBox(e){let t={minX:1/0,minY:1/0,minZ:1/0,maxX:-1/0,maxY:-1/0,maxZ:-1/0};if(!Zi.isNullOrEmpty(e))for(var o=0;o<e.length;o++){var r=e[o];t.minX=Math.min(t.minX,r.x),t.minY=Math.min(t.minY,r.y),t.minZ=Math.min(t.minZ,r.z),t.maxX=Math.max(t.maxX,r.x),t.maxY=Math.max(t.maxY,r.y),t.maxZ=Math.max(t.maxZ,r.z)}return t}setAsDirty(){Zt.call(this)}};function Zt(){let n=this;n.flags=[I.Geometry]}var et=class extends Et{};dr([bt(Zt)],et.prototype,"positions",void 0);var W=class extends Et{#e;#t;#r;get barycenter(){return this.#r??=Et.barycenter(this.positions)}set barycenter(e){this.#r=e}get boundingBox(){return this.#e??=Et.boundingBox(this.positions)}set boundingBox(e){this.#e=e}get boundingSphere(){return this.#t}set boundingSphere(e){this.#t=e}constructor(e,t,o=[],r=[]){super(e),this.triangleIndices=t,this.textureCoordinates=o,this.normals=r}};dr([bt(Zt)],W.prototype,"positions",void 0);dr([bt(Zt)],W.prototype,"triangleIndices",void 0);dr([bt(Zt)],W.prototype,"textureCoordinates",void 0);dr([bt(Zt)],W.prototype,"normals",void 0);var wt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Zr,Ae=Zr=class extends ee{static createMeshGeometry(e,t,o,r,i,s){let a=e||1,c=t||1,l=o||1,u=r||1,p=i||1,f=s||1,h=[],b=[],C=[];for(var x=0;x<=p;x++)for(var d=c/2-c*(1*x)/(1*p),_=0;_<=f;_++)for(var T=-l/2+l*(1*_)/(1*f),N=0;N<=u;N++){var E=-a/2+a*(1*N)/(1*u);(N==0||N==u||_==0||_==f||x==0||x==p)&&h.push({x:E,y:d,z:T})}for(var v=function(se,ue,re){for(var Y=1e-5,de=0;de<h.length;de++){var me=h[de];if(Math.abs(me.x-se)<Y&&Math.abs(me.y-ue)<Y&&Math.abs(me.z-re)<Y)return de}return-1},A=function(se,ue,re,Y,de,me,Le,Oe){C.push(se),C.push(ue),C.push(re),C.push(se),C.push(re),C.push(Y),b.push({x:de,y:Oe}),b.push({x:Le,y:Oe}),b.push({x:Le,y:me}),b.push({x:de,y:Oe}),b.push({x:Le,y:me}),b.push({x:de,y:me})},_=0;_<f;_++)for(var d=c/2,T=-l/2+l*(1*_)/(1*f),L=-l/2+l*(1*(_+1))/(1*f),N=0;N<u;N++){var E=-a/2+1*N*a/(1*u),P=-a/2+1*(N+1)*a/(1*u),G=v(E,d,L),R=v(P,d,L),m=v(P,d,T),g=v(E,d,T),y=1*(N+1)/(1*u),w=1*N/(1*u),M=1-1*(_+1)/(1*f),O=1-1*_/(1*f);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-1*x*c/(1*p),D=c/2-(x+1)*c/(1*p),T=-l/2,N=0;N<u;N++){var E=a/2-1*N*a/(1*u),P=a/2-(N+1)*a/(1*u),G=v(E,D,T),R=v(P,D,T),m=v(P,d,T),g=v(E,d,T),y=(N+1)/(1*u),w=1*N/(1*u),M=1-(x+1)/(1*p),O=1-1*x/(1*p);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-1*x*c/(1*p),D=c/2-(x+1)*c/(1*p),E=-a/2,_=0;_<f;_++){var T=-l/2+_*l/(1*f),L=-l/2+(_+1)*l/(1*f),G=v(E,D,T),R=v(E,D,L),m=v(E,d,L),g=v(E,d,T),y=(_+1)/(1*f),w=1*_/(1*f),M=1-(x+1)/(1*p),O=1-x/(1*p);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-x*c/(1*p),D=c/2-(x+1)*c/(1*p),T=l/2,N=0;N<u;N++){var E=-a/2+N*a/(1*u),P=-a/2+(N+1)*a/(1*u),G=v(E,D,T),R=v(P,D,T),m=v(P,d,T),g=v(E,d,T),y=(N+1)/(1*u),w=1*N/(1*u),M=1-(x+1)/(1*p),O=1-1*x/(1*p);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-x*c/(1*p),D=c/2-(x+1)*c/(1*p),E=a/2,_=0;_<f;_++){var T=l/2-_*l/(1*f),L=l/2-(_+1)*l/(1*f),G=v(E,D,T),R=v(E,D,L),m=v(E,d,L),g=v(E,d,T),y=(_+1)/(1*f),w=1*_/(1*f),M=1-(x+1)/(1*p),O=1-1*x/(1*p);A(G,R,m,g,w,O,y,M)}for(var _=0;_<f;_++)for(var d=-c/2,T=l/2-l*_/(1*f),L=l/2-l*(_+1)/(1*f),N=0;N<u;N++){var E=-a/2+N*a/(1*u),P=-a/2+(N+1)*a/(1*u),G=v(E,d,L),R=v(P,d,L),m=v(P,d,T),g=v(E,d,T),y=(N+1)/(1*u),w=1*N/(1*u),M=1-(_+1)/(1*f),O=1-1*_/(1*f);A(G,R,m,g,w,O,y,M)}let X=new W(h,C,b);X.key=`box_${e}x${t}x${o}_w${r}_h${i}_d${s}`,ce(X);let H={x:0,y:0,z:0},K=e/2,ie=t/2,he=o/2;return X.barycenter=H,X.boundingBox={maxX:K,maxY:ie,maxZ:he,minX:-K,minY:-ie,minZ:-he},X.boundingSphere={center:H,radius:Math.sqrt(Math.pow(K,2)+Math.pow(ie,2)+Math.pow(he,2))},X}createDefaultGeometry(){return Zr.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"width":case"height":case"depth":case"widthSegments":case"heightSegments":case"depthSegments":this.geometry=Zr.createMeshGeometry(this.width,this.height,this.depth,this.widthSegments,this.heightSegments,this.depthSegments);break}}};wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"width",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"height",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"depth",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"widthSegments",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"heightSegments",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"depthSegments",void 0);Ae=Zr=wt([bs({tagName:Es+"-"+"3d"+"-primitive-box"})],Ae);import{CustomElement as ws,P as Cs,Watch as mr,PropertyConverters as gr}from"@pacem/pacem-core";var Kt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},qr,tt=qr=class extends ee{static createMeshGeometry(e=1,t=1,o=18,r=5,i=1){let s=e,a=[],c=[],l=[],u=ze*(360/o),p=s/t,f=t/r,h=1/o;a.push({x:0,y:t,z:0});for(let d=1;d<=r;d++){let _=t-f*d,T=_/t,N=(t-_)*p,v=(_+f)/t;for(let A=0;A<o;A++){let L=u*A,P=Math.cos(L)*N,G=-Math.sin(L)*N;a.push({x:P,y:_,z:G});let R=1+o*(d-1)+A,m=A==0?R+o-1:R-1,g=A*h,y=A==0?1-h:h*(A-1);if(d==1){l.push(0,m,R),c.push({x:g,y:1},{x:y,y:T},{x:g,y:T});continue}let w=1+o*(d-2)+A,O=A==0?w+o-1:w-1,D=m,X=R,H=w;l.push(X,O,D),l.push(X,H,O);let K={x:y,y:v},ie={x:y,y:T},he={x:g,y:T},se={x:g,y:v};c.push(he,K,ie),c.push(he,se,K)}}let b=1+(r-1)*o;a.push({x:0,y:0,z:0});let C=b+o;for(let d=1;d<=i;d++){let _=d/i,T=e*_,N=(d-1)/i;for(let E=0;E<o;E++){let v=u*E,A=Math.cos(v),L=Math.sin(v),P=v-u,G=Math.cos(P),R=Math.sin(P),m=.5*(1+A*_),g=.5*(1+L*_),y=.5*(1+G*_),w=.5*(1+R*_),M,O;if(d!=i){let Gt=Math.cos(v)*T,dt=-Math.sin(v)*T;a.push({x:Gt,y:0,z:dt}),M=C+1+(d-1)*o+E,O=E==0?M+o-1:M-1}else M=b+E,O=E==0?b+o-1:M-1;if(d==1){l.push(C,M,O),c.push({x:.5,y:.5},{x:m,y:g},{x:y,y:w});continue}let D=.5*(1+A*N),X=.5*(1+L*N),H=.5*(1+G*N),K=.5*(1+R*N),ie=C+1+(d-2)*o+E,se=E==0?ie+o-1:ie-1,ue=O,re=M,Y=ie;l.push(se,Y,ue),l.push(ue,Y,re);let de={x:H,y:K},me={x:y,y:w},Le={x:m,y:g},Oe={x:D,y:X};c.push(de,Oe,me),c.push(me,Oe,Le)}}let x=new W(a,l,c);return x.key=`cone_${e}x${t}_s${o}_h${r}_c${i}`,ce(x),x}createDefaultGeometry(){return qr.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"height":case"sides":case"heightSegments":case"capSegments":this.geometry=qr.createMeshGeometry(this.radius,this.height,this.sides,this.heightSegments,this.capSegments);break}}};Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"radius",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"height",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"sides",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"heightSegments",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"capSegments",void 0);tt=qr=Kt([ws({tagName:Cs+"-"+"3d"+"-primitive-cone"})],tt);import{CustomElement as Ns,P as Rs,Watch as _r,PropertyConverters as vr}from"@pacem/pacem-core";var Qt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Jr,rt=Jr=class extends ee{static createMeshGeometry(e=1,t=1,o=18,r=5,i=1){let s=e,a=[],c=[],l=[],u=ze*(360/o);a.push({x:0,y:t,z:0}),a.push({x:0,y:0,z:0});let p=s/i;for(let v=1;v<=i;v++)for(var f=p*v,h=0;h<o;h++){let A=2+2*o*(v-1),L=h==0?A+2*(o-1):A+2*(h-1),P=A+2*h,G=Math.cos(u*h),R=-Math.sin(u*h),m=Math.cos(u*(h-1)),g=-Math.sin(u*(h-1)),y=f*G,w=f*R,M={x:y,y:t,z:w},O={x:y,y:0,z:w};a.push(M),a.push(O);let D=.5*f/s,X=G*D,H=R*D,K=m*D,ie=g*D;if(v==1){let he=[0,L,P],se=[1,P+1,L+1],ue=[{x:.5,y:.5},{x:.5+K,y:.5-ie},{x:.5+X,y:.5-H}],re=[{x:.5,y:.5},{x:.5+X,y:.5+H},{x:.5+K,y:.5+ie}];l.push(...he),l.push(...se);for(let Y=0;Y<ue.length;Y++)c.push(ue[Y]);for(let Y=0;Y<re.length;Y++)c.push(re[Y])}else{let he=2+2*o*(v-2),se=h==0?he+2*(o-1):he+2*(h-1),ue=he+2*h,re=.5*((v-1)/i),Y=G*re,de=R*re,me=m*re,Le=g*re,Oe={x:.5+K,y:.5-ie},Gt={x:.5+X,y:.5-H},dt={x:.5+Y,y:.5-de},$i={x:.5+me,y:.5-Le},zi={x:.5+K,y:.5+ie},$n={x:.5+X,y:.5+H},Ui={x:.5+Y,y:.5+de},zn={x:.5+me,y:.5+Le};l.push(L),l.push(P),l.push(se),l.push(se),l.push(P),l.push(ue),l.push(ue+1),l.push(P+1),l.push(L+1),l.push(ue+1),l.push(L+1),l.push(se+1),c.push(Oe),c.push(Gt),c.push($i),c.push($i),c.push(Gt),c.push(dt),c.push(Ui),c.push($n),c.push(zi),c.push(Ui),c.push(zi),c.push(zn)}}let b=2+2*o*i,C=2+2*o*(i-1),x=1/o,d=1/r;for(let v=1;v<=r;v++)for(let A=0;A<o;A++){if(v!=r){var _=s*Math.cos(u*A),T=-s*Math.sin(u*A),N=t*v/r;a.push({x:_,y:N,z:T})}let L=A==0?o-1:A-1,P=v==1?C+2*L+1:b+o*(v-2)+L,G=v==1?C+2*A+1:b+o*(v-2)+A,R=v==r?C+2*A:b+o*(v-1)+A,m=v==r?C+2*L:b+o*(v-1)+L,g=L*x,y=(v-1)*d,w=A==0?1:A*x,M=v*d,O={x:g,y},D={x:w,y},X={x:w,y:M},H={x:g,y:M};l.push(P),l.push(G),l.push(R),l.push(P),l.push(R),l.push(m),c.push(O),c.push(D),c.push(X),c.push(O),c.push(X),c.push(H)}let E=new W(a,l,c);return E.key=`cylinder_${e}x${t}_s${o}_h${r}_c${i}`,ce(E),E}createDefaultGeometry(){return Jr.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"height":case"sides":case"heightSegments":case"capSegments":this.geometry=Jr.createMeshGeometry(this.radius,this.height,this.sides,this.heightSegments,this.capSegments);break}}};Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"radius",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"height",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"sides",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"heightSegments",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"capSegments",void 0);rt=Jr=Qt([Ns({tagName:Rs+"-"+"3d"+"-primitive-cylinder"})],rt);import{CustomElement as Ts,P as Ms,Watch as Is,PropertyConverters as As}from"@pacem/pacem-core";var qi=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Kr,Ps=[{x:0,y:0,z:0},{x:0,y:1,z:0}],Qr=Kr=class extends ee{static createLineGeometry(e){return new et(e||Ps)}createDefaultGeometry(){return Kr.createLineGeometry()}propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="positions"&&(this.geometry=Kr.createLineGeometry(o))}};qi([Is({emit:!1,converter:As.Json})],Qr.prototype,"positions",void 0);Qr=Kr=qi([Ts({tagName:Ms+"-"+"3d"+"-primitive-line"})],Qr);import{CustomElement as Ls,P as Os,Watch as to,PropertyConverters as ro}from"@pacem/pacem-core";import{Geometry as Ds}from"@pacem/pacem-numerical";var yr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},eo,Ct=eo=class extends ee{static createMeshGeometry(e,t,o,r){e||=1,t||=1,o||=4,r||=4;let i=e*.5,s=t*.5,a=[],c=[],l=[],u=[],p=Ds.LinearAlgebra.Vector3D.from(0,0,1);for(let h=0;h<=r;h++)for(let b=0;b<=o;b++){let C=-i+b*e/(1*o),x=0,d=-s+h*t/(1*r);if(a.push({x:C,y:x,z:d}),h<r&&b<o){let _=o+1,T=(b+1)/(1*o),N=1*b/(1*o),E=1-(h+1)/(1*r),v=1-1*h/(1*r);l.push((h+1)*_+b),l.push((h+1)*_+b+1),l.push(h*_+b+1),l.push((h+1)*_+b),l.push(h*_+b+1),l.push(h*_+b),c.push({x:N,y:E}),c.push({x:T,y:E}),c.push({x:T,y:v}),c.push({x:N,y:E}),c.push({x:T,y:v}),c.push({x:N,y:v}),u.push(p,p,p,p,p,p)}}let f=new W(a,l,c,u);return f.key=`plane_${e}x${t}_w${o}_l${r}`,f}createDefaultGeometry(){return eo.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"width":case"length":case"widthSegments":case"lengthSegments":this.geometry=eo.createMeshGeometry(this.width,this.length,this.widthSegments,this.lengthSegments);break}}};yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"width",void 0);yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"length",void 0);yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"widthSegments",void 0);yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"lengthSegments",void 0);Ct=eo=yr([Ls({tagName:Os+"-"+"3d"+"-primitive-plane"})],Ct);import{CustomElement as xr,P as br,Watch as Gs,PropertyConverters as Bs}from"@pacem/pacem-core";import{Geometry as Ss}from"@pacem/pacem-numerical";var er=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Fo,Xo,Ho,jo,Wo,Nt={parseFloats:function(n){let e=/([\d.-]+)/i;var t=e.exec(n);let o=[];for(;t!=null;){let r=t[0],i=parseFloat(r);o.push(i),n=n.replace(r,""),t=e.exec(n)}return o}},Z=Ss.LinearAlgebra.Vector3D,je=class extends ee{propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="radius"&&this._assignMeshGeometry(o)}_assignMeshGeometry(e){this.geometry=this.createMeshGeometry(e>0?e:1)}createDefaultGeometry(){return this.createMeshGeometry(1)}};er([Gs({emit:!1,converter:Bs.Number})],je.prototype,"radius",void 0);var Yo=Fo=class extends je{static createMeshGeometry(e){e||=1;let o="0 0.5774 -0.8165, 0 0.5774 0.8165, 0.8165 -0.5774 0, -0.8165 -0.5774 0".split(","),r=[];for(let p=0;p<o.length;p++){let f=o[p],h=Nt.parseFloats(f);r.push({x:h[0]*e,y:h[1]*e,z:h[2]*e})}let i=[1,2,0,2,3,0,3,1,0,3,2,1],a="0.5 0.9995, 0.5 0.0004995, 0.0004995 0.5, 0.9995 0.5, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995".split(","),c=[4,5,6,7,8,9,10,11,0,3,2,1],l=[];for(let p=0;p<c.length;p++){let f=c[p],h=Nt.parseFloats(a[f]);l.push({x:h[0],y:h[1]})}let u=new W(r,i,l);return u.key=`tetrahedron_${e}`,ce(u),u.boundingSphere={center:Z.zero(),radius:e},u}createMeshGeometry(e=this.radius){return Fo.createMeshGeometry(e)}};Yo=Fo=er([xr({tagName:br+"-"+"3d"+"-primitive-tetrahedron"})],Yo);var Zo=Xo=class extends je{static createMeshGeometry(e){e||=1;let t="0 0.7071 -0.7071, 0 0.7071 0.7071, 1 0 0, 0 -0.7071 -0.7071, -1 0 0, 0 -0.7071 0.7071",o=[1,2,0,2,3,0,3,4,0,4,1,0,4,5,1,5,2,1,2,5,3,4,3,5],r="0.5 0.9995, 0.5 0.9995, 0.0004995 0.5, 0.5 0.9995, 0.9995 0.5, 0.5 0.0004995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995, 0.5 0.9995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995, 0.0004995 0.5, 0.5 0.0004995, 0.5 0.9995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.0004995, 0.5 0.9995",i=[6,7,8,9,10,11,12,13,14,15,16,0,17,18,19,20,21,1,2,22,23,4,3,5],s=t.split(","),a=[];for(let p=0;p<s.length;p++){let f=s[p],h=Nt.parseFloats(f);a.push({x:h[0]*e,y:h[1]*e,z:h[2]*e})}let c=r.split(","),l=[];for(let p=0;p<i.length;p++){let f=i[p],h=Nt.parseFloats(c[f]);l.push({x:h[0],y:h[1]})}let u=new W(a,o,l);return u.key=`octahedron_${e}`,ce(u),u.boundingSphere={center:Z.zero(),radius:e},u}createMeshGeometry(e=this.radius){return Xo.createMeshGeometry(e)}};Zo=Xo=er([xr({tagName:br+"-"+"3d"+"-primitive-octahedron"})],Zo);var qo=Ho=class extends je{static createMeshGeometry(e){e||=1;let t=1/Math.sqrt(3),o=2*e*t,r=Ae.createMeshGeometry(o,o,o);return r.key=`hexahedron_${e}`,r}createMeshGeometry(e=this.radius){return Ho.createMeshGeometry(e)}};qo=Ho=er([xr({tagName:br+"-"+"3d"+"-primitive-hexahedron"})],qo);var Jo=jo=class extends je{static createMeshGeometry(e){e||=1;let t="0 0.850651 -0.525731, 0 0.850651 0.525731, 0.850651 0.525731 0, 0.525731 0 -0.850651, -0.525731 0 -0.850651, -0.850651 0.525731 0, -0.525731 0 0.850651, 0.525731 0 0.850651, 0.850651 -0.525731 0, 0 -0.850651 0.525731, 0 -0.850651 -0.525731, -0.850651 -0.525731 0",o=[1,2,0,2,3,0,3,4,0,4,5,0,5,1,0,5,6,1,6,7,1,7,2,1,2,8,3,2,7,8,6,9,7,9,8,7,8,10,3,8,9,10,6,11,9,11,10,9,10,4,3,10,11,4,6,5,11,5,4,11],r="0.5 0.808708, 0.5 0.999501, 0.5 0.808708, 0.191292 0.5, 0.000499547 0.5, 0.5 0.808708, 0.9995 0.5, 0.808708 0.5,0.000499487 0.5, 0.5 0.191292, 0.5 0.000499487, 0.5 0.191292,0.5 0.191292, 0.999501 0.5, 0.5 0.808708, 0.5 0.808708,0.9995 0.5, 0.808708 0.999501, 0.191292 0.5, 0.808708 0.5,0.5 0.999501, 0.808708 0.5, 0.999501 0.808708, 0.5 0.999501,0.000499487 0.5, 0.5 0.191292, 0.5 0.808708, 0.9995 0.5,0.808708 0.999501, 0.191292 0.5, 0.808708 0.5, 0.5 0.999501,0.808708 0.5, 0.999501 0.808708, 0.5 0.808708, 0.5 0.191292,0.9995 0.5, 0.000499547 0.5, 0.5 0.191292, 0.191292 0.5,0.5 0.000499487, 0.808708 0.5, 0.5 0.000499487, 0.999501 0.191292,0.5 0.191292, 0.808708 0.000499487, 0.9995 0.5, 0.5 0.191292,0.5 0.808708, 0.9995 0.5, 0.5 0.191292, 0.808708 0.000499487,0.999501 0.5, 0.5 0.808708, 0.5 0.000499487, 0.808708 0.5,0.999501 0.191292, 0.808708 0.5, 0.5 0.808708, 0.5 0.191292",i=[12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,28,29,30,31,32,33,1,34,35,36,2,37,38,39,40,41,42,43,7,44,45,46,8,47,48,49,50,51,52,53,9,54,55,3,10,56,57,6,58,59,5,4,11],s=t.split(","),a=[];for(let p=0;p<s.length;p++){let f=s[p],h=Nt.parseFloats(f);a.push({x:h[0]*e,y:h[1]*e,z:h[2]*e})}let c=r.split(","),l=[];for(let p=0;p<i.length;p++){let f=i[p],h=Nt.parseFloats(c[f]);l.push({x:h[0],y:h[1]})}let u=new W(a,o,l);return u.key=`icosahedron_${e}`,ce(u),u.boundingSphere={center:Z.zero(),radius:e},u}createMeshGeometry(e=this.radius){return jo.createMeshGeometry(e)}};Jo=jo=er([xr({tagName:br+"-"+"3d"+"-primitive-icosahedron"})],Jo);var Ko=Wo=class extends je{static createMeshGeometry(e){e||=1;let t=Z.from(.356822*e,.934172*e,0*e),o=Z.from(-.356822*e,.934172*e,0*e),r=Z.from(.57735*e,.57735*e,-.57735*e),i=Z.from(0*e,.356822*e,-.934172*e),s=Z.from(-.57735*e,.57735*e,-.57735*e),a=Z.from(-.57735*e,.57735*e,.57735*e),c=Z.from(0*e,.356822*e,.934172*e),l=Z.from(.57735*e,.57735*e,.57735*e),u=Z.from(.934172*e,0*e,-.356822*e),p=Z.from(.934172*e,0*e,.356822*e),f=Z.from(0*e,-.356822*e,.934172*e),h=Z.from(.57735*e,-.57735*e,.57735*e),b=Z.from(.57735*e,-.57735*e,-.57735*e),C=Z.from(.356822*e,-.934172*e,0*e),x=Z.from(-.57735*e,-.57735*e,.57735*e),d=Z.from(-.356822*e,-.934172*e,0*e),_=Z.from(0*e,-.356822*e,-.934172*e),T=Z.from(-.57735*e,-.57735*e,-.57735*e),N=Z.from(-.934172*e,0*e,.356822*e),E=Z.from(-.934172*e,0*e,-.356822*e),v=[t,o,r,i,s,a,c,l,u,p,f,h,b,C,x,d,_,T,N,E],A=[0,2,3,0,3,4,0,4,1,1,5,6,1,6,7,1,7,0,7,9,8,7,8,2,7,2,0,7,6,10,7,10,11,7,11,9,11,13,12,11,12,8,11,8,9,11,10,14,11,14,15,11,15,13,15,17,16,15,16,12,15,12,13,15,14,18,15,18,19,15,19,17,19,4,3,19,3,16,19,16,17,19,18,5,19,5,1,19,1,4,18,14,10,18,10,6,18,6,5,3,2,8,3,8,12,3,12,16],L=`0.5 0.999501, 0.5 0.999501, 0.191292 0.808708, 0.5 0.690792,
6
+ var Un=Object.defineProperty;var Oo=(n,e)=>{for(var t in e)Un(n,t,{get:e[t],enumerable:!0})};var qi={};Oo(qi,{BooleanOrNumberConverter:()=>Go,DragEvent:()=>mt,KnownShader:()=>U,LineGeometry:()=>Ke,MaterialElement:()=>Q,MeshGeometry:()=>W,NodeGeometry:()=>xt,NotifyChange:()=>yt,Pacem3DAdapterElement:()=>Je,Pacem3DCameraElement:()=>Ce,Pacem3DGroupElement:()=>Ze,Pacem3DLightElement:()=>Ie,Pacem3DMeshElement:()=>ke,Pacem3DObjectElement:()=>Fe,Pacem3DOrthographicCameraElement:()=>Be,Pacem3DPerspectiveCameraElement:()=>qe,Point3DConverter:()=>$e,Point3DOrNumberConverter:()=>Vr,QuaternionConverter:()=>Do,RenderableElement:()=>be,RenderableEvent:()=>gt,StalePropertyFlag:()=>I,UI3DEvent:()=>$t,Ui3DElement:()=>ae,computePlaneNormal:()=>So,computeSharpVertexNormals:()=>ce,isBasicMaterial:()=>Fr,isCamera:()=>pe,isGeometry:()=>cr,isGroup:()=>vt,isInteraction:()=>kr,isLambertMaterial:()=>Xr,isLight:()=>Se,isLineMaterial:()=>Qe,isMaterial:()=>Ne,isMesh:()=>Ee,isMeshGeometry:()=>kt,isOrthographicCamera:()=>Ur,isPerspectiveCamera:()=>zr,isPhongMaterial:()=>Hr,isRenderable:()=>ar,isShaderMaterial:()=>Zi,isStage:()=>Bo,isStandardMaterial:()=>jr,isUi3DObject:()=>Ut});import{Watch as k,PropertyConverters as J,CustomElement as zt,PacemEventTarget as Wn,PropertyChangeEvent as Yn,CustomElementUtils as Wi,CustomUIEvent as Zn,P as _t,Utils as Ge,Components as qn}from"@pacem/pacem-core";import{Geometry as De}from"@pacem/pacem-numerical";import{Utils as kn}from"@pacem/pacem-core";import{parseAsNumericalArray as ki}from"@pacem/pacem-foundation";import{Geometry as Sr}from"@pacem/pacem-numerical";var $e={convert:n=>Sr.LinearAlgebra.Vector3D.parse(n),convertBack:n=>`${n.x||0} ${n.y||0} ${n.z||0}`},Vr={convert:n=>{let e=ki(n),t=()=>{throw new Error(`Cannot parse "${n}" as a valid Vector3D.`)};if(kn.isNullOrEmpty(e)&&t(),e.length===3)return Sr.LinearAlgebra.Vector3D.from(...e);if(e.length===1){let o=e[0];return Sr.LinearAlgebra.Vector3D.from(o,o,o)}t()},convertBack:n=>`${n.x||0} ${n.y||0} ${n.z||0}`},Do={convert:n=>Sr.LinearAlgebra.Quaternion.parse(n),convertBack:n=>`${n.x||0} ${n.y||0} ${n.z||0} ${n.w||0}`},Go={convert:n=>n==="true"?!0:n==="false"?!1:ki(n)[0],convertBack:n=>n.toString()};import{CustomElement as Fn,P as Bt,PCSS as Hi,Defaults as Xn,ViewChild as ji,Watch as St,PropertyConverters as Vt,Utils as ge,Components as Fi,PropertyChangeEventName as Xi,Logging as Hn,Animations as jn,UI as $r}from"@pacem/pacem-core";var ze=Math.PI/180;var Ue=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},xe=class extends Fi.PacemItemsContainerElement{constructor(){super(...arguments),this._itemPropertyChangeHandler=e=>{let t=e.target;this.adapter&&this.adapter.updateItem(this,t),t.flags.splice(0)},this._clickHandler=e=>{let t=this;if(!t.interactive||ge.isNull(t._lastHitResult))return;let o=e.type.replace(/^mouse/,""),r=t._lastHitResult,i=r.object,s=r.point;this._itemDispatch(i,s,o,e)},this._hitTestCallback=(e,t)=>{let o=this;if(e!=o._lastHitResult){if(e?.object!=o._lastHitResult?.object){let r=e?.object,i=o._lastHitResult?.object,s=e?.point;ge.isNull(i)||this._itemDispatch(i,s,"out",t),ge.isNull(r)||this._itemDispatch(r,s,"over",t)}o._lastHitResult=e}},this._moveHandler=e=>{let t=this;if(!t.adapter||!t.interactive)return;let o=t._resizer.currentSize,r=s=>t._hitTestCallback(s,e),i=e.type==="mousemove"?{x:e.pageX-o.left,y:e.pageY-o.top}:{x:-1,y:-1};t.adapter.raycast(this,i,o,r)},this._resizeHandler=e=>{let t=this.#e,o=e.detail;if(!ge.isNull(t)&&t.height===o.height&&t.width===o.width)return;this.#e=o;let r=this.adapter;ge.isNull(r)||(this.adapter.invalidateSize(this,o),this.dispatchEvent(new Fi.ResizeEvent(o)))}}validate(e){return e instanceof be}get stage(){return this._container}get scene(){return this.adapter&&this.adapter.getScene(this)}register(e){let t=super.register(e);return t&&(this._add(e),e.addEventListener(Xi,this._itemPropertyChangeHandler,!1)),t}unregister(e){let t=super.unregister(e);return t&&(e.removeEventListener(Xi,this._itemPropertyChangeHandler,!1),this._erase(e)),t}_refreshDatasource(e=this.datasource){this.adapter?.updateItem(this,void 0)}_buildUpDatasourceFromDOM(e=this.items){ge.isNullOrEmpty(e)||(this.datasource=e.slice())}_add(e){this.adapter&&this.adapter.addItem(this,e)}_erase(e){this.adapter&&this.adapter.removeItem(this,e)}_initializeAdapter(e,t){return new Promise((o,r)=>{let i=this.datasource||[];ge.isNull(e)||i.forEach(s=>e.removeItem(this,s)),!ge.isNull(this._container)&&!ge.isNull(t)?t.initialize(this).then(s=>{(i||[]).forEach(a=>this._add(a)),o()},s=>{this.log(Hn.LogLevel.Error,s?.toString()),r(s)}):o()})}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"adapter":this._initializeAdapter(t,o);break;case"items":this._buildUpDatasourceFromDOM(o);break;case"transparent":this.adapter?.invalidateSize(this,this.size);break;case"datasource":this._refreshDatasource(o);case"disabled":case"background":this.render();break}}viewActivatedCallback(){super.viewActivatedCallback();let e=this._container,t=this._resizer;t.addEventListener("resize",this._resizeHandler,!1),t.target=e,this._initializeAdapter(null,this.adapter).then(o=>{e.addEventListener("mousemove",this._moveHandler,!1),e.addEventListener("click",this._clickHandler,!1),e.addEventListener("mouseup",this._clickHandler,!1),e.addEventListener("mousedown",this._clickHandler,!1),e.addEventListener("mouseout",this._moveHandler,!1),this._buildUpDatasourceFromDOM(),this.render()})}_itemDispatch(e,t,o,r){if(!ge.isNull(e)){var i,s,a;r instanceof Event?s=r:i={item:e,offset:r},typeof o=="string"?a=o:(a=o.type,s=o.originalEvent);let l=t,u=()=>r instanceof Event?new gt(a,e,s,l):new mt(a,{detail:i,cancelable:a===$r.DragDropEventType.Init||a===$r.DragDropEventType.Drag},s,l),p=r instanceof Event?new gt("item"+a,e,s,l):new mt("item"+a,{detail:i,cancelable:a===$r.DragDropEventType.Init||a===$r.DragDropEventType.Drag},s,l);var c=!1;if(e instanceof EventTarget){let f=u();e.dispatchEvent(f),c=f.defaultPrevented}return e.stage.dispatchEvent(p),c||p.defaultPrevented}return!1}disconnectedCallback(){this.#t?.stop();let e=this._resizer,t=this._container;ge.isNull(t)||(t.removeEventListener("click",this._clickHandler,!1),t.removeEventListener("mouseup",this._clickHandler,!1),t.removeEventListener("mousedown",this._clickHandler,!1),t.removeEventListener("mousemove",this._moveHandler,!1),t.removeEventListener("mouseout",this._moveHandler,!1)),ge.isNull(e)||e.removeEventListener("resize",this._resizeHandler,!1),super.disconnectedCallback()}#e;get size(){return this.#e}render(e,t,o=performance.now()){if(ge.isNull(e))this.#t?.stop(),this.#t=jn.Timer.run(r=>this._doRender());else{let r=this.adapter;ge.isNull(r)||r.updateItem(this,e)}}#t;_doRender(){if(!this.disabled&&!ge.isNull(this.adapter)){let e=this.adapter.getScene(this),t=new CustomEvent("prerender",{detail:{scene:e},cancelable:!0});this.dispatchEvent(t),t.defaultPrevented||(this.adapter.render(this),this.dispatchEvent(new CustomEvent("render",{detail:{scene:e}})))}}};Ue([ji(`.${Hi}-3d`)],xe.prototype,"_container",void 0);Ue([ji(Bt+"-resize")],xe.prototype,"_resizer",void 0);Ue([St({emit:!1,converter:Vt.Boolean})],xe.prototype,"interactive",void 0);Ue([St({emit:!1,converter:Vt.Boolean})],xe.prototype,"transparent",void 0);Ue([St({emit:!1,converter:Vt.String})],xe.prototype,"background",void 0);Ue([St({emit:!1,converter:Vt.Element})],xe.prototype,"adapter",void 0);Ue([St({emit:!1,converter:Vt.Json})],xe.prototype,"datasource",void 0);Ue([St({emit:!1,converter:Vt.Boolean})],xe.prototype,"orbit",void 0);xe=Ue([Fn({tagName:Bt+"-"+"3d",shadow:Xn.USE_SHADOW_ROOT,template:`<${Bt}-resize watch-position="true"></${Bt}-resize><div class="${Hi}-3d"></div><${Bt}-content></${Bt}-content>`})],xe);var S=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i};function Bo(n){return!Ge.isNull(n)&&"render"in n&&typeof n.render=="function"}function ar(n){return Bo(n?.stage)}function Ut(n){return"transformMatrix"in n&&ar(n)}function pe(n){return"type"in n&&"up"in n&&"lookAt"in n&&ar(n)}function zr(n){return pe(n)&&"type"in n&&n.type==="perspective"}function Ur(n){return pe(n)&&"type"in n&&n.type==="orthographic"}function Se(n){return"type"in n&&(n.type==="ambient"||n.type==="omni"||n.type==="direction"||n.type=="spot")&&ar(n)}function Ee(n){return"geometry"in n&&Ut(n)}function cr(n){return"positions"in n&&Ge.isArray(n.positions)}function kt(n){return("triangleIndices"in n&&Ge.isArray(n.triangleIndices)||"normals"in n&&Ge.isArray(n.normals)||"textureCoordinates"in n&&Ge.isArray(n.textureCoordinates))&&cr(n)}function vt(n){return"childRenderables"in n&&Ge.isArray(n.childRenderables)&&Ut(n)}function ce(n){let e=[];if(!Ge.isNullOrEmpty(n)){let t=n.triangleIndices;if(t.length%3!==0)throw new RangeError(`Invalid mesh geometry: ${t.length} is not multiple of 3.`);for(let o=2;o<t.length;o+=3){let r=t[o-2],i=t[o-1],s=t[o],a=n.positions[r],c=n.positions[i],l=n.positions[s],u=So(a,c,l);e.push(u,u,u)}}n.normals=e}function So(n,e,t){let o=De.LinearAlgebra.Vector3D.subtract(n,e),r=De.LinearAlgebra.Vector3D.subtract(n,t),i=De.LinearAlgebra.Vector3D.cross(o,r);return De.LinearAlgebra.Vector3D.unit(i)}var $t=class extends Zn{constructor(e,t,o,r){super(e,t,o),this.#e=r}#e;get point(){return this.#e}},mt=class extends $t{},gt=class extends $t{constructor(e,t,o,r){super(e,{detail:t,bubbles:!0,cancelable:!0},o,r)}},I;(function(n){n.Position="position",n.Transform="transform",n.Geometry="geometry",n.Children="children",n.Material="material",n.Light="light",n.Camera="camera",n.Visibility="visibility"})(I||(I={}));function kr(n){return typeof n=="object"&&"time"in n&&typeof n.time=="number"}var Xe={OBJECT_SELECTOR:_t+"-"+"3d"+"-object",LIGHT_SELECTOR:_t+"-"+"3d"+"-light",PERSPECTIVE_CAMERA_SELECTOR:_t+"-"+"3d"+"-perspective-camera",ORTHO_CAMERA_SELECTOR:_t+"-"+"3d"+"-orthographic-camera",LINE_SELECTOR:_t+"-"+"3d"+"-line",MESH_SELECTOR:_t+"-"+"3d"+"-mesh",GROUP_SELECTOR:_t+"-"+"3d"+"-group",DEFAULT_COORDS:{x:0,y:0,z:0}},be=class n extends qn.PacemCrossItemsContainerElement{constructor(){super(...arguments),this.position=Xe.DEFAULT_COORDS,this.#e=[]}validate(e){return!1}findContainer(){return this.parent||this.stage}get stage(){return this._scene=this._scene||Wi.findAncestorOfType(this,xe)}get parent(){return this._drawableParent=this._drawableParent||Wi.findAncestor(this,e=>e instanceof n)}disconnectedCallback(){delete this._scene,delete this._drawableParent,super.disconnectedCallback()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"hide":this.setAsDirty(I.Visibility);break;case"items":this.setAsDirty(I.Children);break;case"position":this.setAsDirty(I.Position);break}}#e;get flags(){return this.#e}setAsDirty(...e){for(let t of e)this.flags.includes(t)||this.flags.push(t);this.stage?.render(this)}};S([k({emit:!1,converter:$e})],be.prototype,"position",void 0);S([k({emit:!1,reflectBack:!0,converter:J.String})],be.prototype,"tag",void 0);S([k({emit:!1,converter:J.Boolean})],be.prototype,"inert",void 0);var ae=class extends be{propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"transformMatrix":this.setAsDirty(I.Transform);break;case"translateZ":case"translateX":case"translateY":this.offset={x:this.translateX,y:this.translateY,z:this.translateZ};break;case"scaleX":case"scaleY":case"scaleZ":this.scale={x:this.scaleX,y:this.scaleY,z:this.scaleZ};break;case"scale":case"offset":case"rotate":this._computeTransformMatrix();break}}_computeTransformMatrix(){let e=De.LinearAlgebra.Matrix3D,t=De.LinearAlgebra.Vector3D,o=De.LinearAlgebra.Quaternion,r=this.scale??t.from(1,1,1),i=e.scale(e.identity(),r);if(!Ge.isNull(this.rotate)){let a=o.toRotationMatrix(this.rotate);i=e.multiply(i,a)}let s=this.offset??t.from(0,0,0);i=e.translate(i,s),this.transformMatrix=i}};S([k({emit:!1,converter:Do})],ae.prototype,"rotate",void 0);S([k({emit:!1,converter:Vr})],ae.prototype,"scale",void 0);S([k({emit:!1,converter:Vr})],ae.prototype,"offset",void 0);S([k({emit:!1})],ae.prototype,"transformMatrix",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"scaleX",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"scaleY",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"scaleZ",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"translateX",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"translateY",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"translateZ",void 0);var Ze=class extends ae{validate(e){return e instanceof be}#e=[];get childRenderables(){return this.#e}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"items":case"datasource":this.#e=o||[],this.setAsDirty(I.Children);break}}};S([k({emit:!1})],Ze.prototype,"datasource",void 0);Ze=S([zt({tagName:Xe.GROUP_SELECTOR})],Ze);var ke=class extends ae{propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"geometry":this.setAsDirty(I.Geometry);break;case"material":case"backMaterial":this.setAsDirty(I.Material);break}}};S([k({emit:!1,converter:J.Json})],ke.prototype,"geometry",void 0);S([k({emit:!1,converter:J.Json})],ke.prototype,"material",void 0);S([k({emit:!1,converter:J.Json})],ke.prototype,"backMaterial",void 0);ke=S([zt({tagName:Xe.MESH_SELECTOR})],ke);var Fe=class extends ae{propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),(e==="content"||e==="type")&&this.setAsDirty(I.Geometry,I.Material)}};S([k({emit:!1})],Fe.prototype,"content",void 0);S([k({emit:!1,converter:J.String})],Fe.prototype,"type",void 0);Fe=S([zt({tagName:Xe.OBJECT_SELECTOR})],Fe);var Ie=class extends be{constructor(){super(...arguments),this.intensity=.85,this.target=Xe.DEFAULT_COORDS,this.color="#fff",this.type="omni"}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"type":case"color":case"intensity":case"target":this.setAsDirty(I.Light);break}}};S([k({emit:!1,converter:J.Number})],Ie.prototype,"intensity",void 0);S([k({emit:!1,converter:$e})],Ie.prototype,"target",void 0);S([k({emit:!1,converter:J.String})],Ie.prototype,"color",void 0);S([k({emit:!1,converter:J.String})],Ie.prototype,"type",void 0);Ie=S([zt({tagName:Xe.LIGHT_SELECTOR})],Ie);var Ce=class extends be{constructor(){super(...arguments),this.near=.1,this.far=1e3,this.up=De.LinearAlgebra.Vector3D.j(),this.lookAt=Xe.DEFAULT_COORDS}#e;_resetBoundingSphere(){let e=this.#e,t=this.position,o=this.lookAt,r=Ge.isNullOrEmpty(t)||Ge.isNullOrEmpty(o)?0:De.LinearAlgebra.Vector3D.mag(De.LinearAlgebra.Vector3D.subtract(t,o)),i=this.#e={center:o,radius:r};this.dispatchEvent(new Yn({currentValue:i,propertyName:"boundingSphere",oldValue:e}))}get boundingSphere(){return this.#e}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"lookAt":case"position":this._resetBoundingSphere();case"near":case"far":case"up":this.setAsDirty(I.Camera);break}}};S([k({emit:!1,converter:J.Number})],Ce.prototype,"near",void 0);S([k({emit:!1,converter:J.Number})],Ce.prototype,"far",void 0);S([k({emit:!1,converter:$e})],Ce.prototype,"up",void 0);S([k({emit:!1,converter:$e})],Ce.prototype,"lookAt",void 0);var qe=class extends Ce{constructor(){super(...arguments),this.fov=45,this.aspect=1}get type(){return"perspective"}get aspectRatio(){return this.aspect}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"fov":case"aspect":this.setAsDirty(I.Camera);break}}};S([k({emit:!1,converter:J.Number})],qe.prototype,"fov",void 0);S([k({emit:!1,converter:J.Number})],qe.prototype,"aspect",void 0);qe=S([zt({tagName:Xe.PERSPECTIVE_CAMERA_SELECTOR})],qe);var Be=class extends Ce{constructor(){super(...arguments),this.top=1,this.left=-1,this.bottom=-1,this.right=1}get type(){return"orthographic"}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"top":case"left":case"bottom":case"right":this.setAsDirty(I.Camera);break}}};S([k({emit:!1,converter:J.Number})],Be.prototype,"top",void 0);S([k({emit:!1,converter:J.Number})],Be.prototype,"left",void 0);S([k({emit:!1,converter:J.Number})],Be.prototype,"bottom",void 0);S([k({emit:!1,converter:J.Number})],Be.prototype,"right",void 0);Be=S([zt({tagName:Xe.ORTHO_CAMERA_SELECTOR})],Be);var Je=class extends Wn{};import{Utils as Yi}from"@pacem/pacem-core";import{Utils as Jn}from"@pacem/pacem-core";function yt(n){return(e,t,o)=>{let r=`_${t}_${Jn.uniqueCode()}_backingField`;function i(){return this[r]}function s(a){if(a!==this[r]){let c=this[r];this[r]=a,n.call(this,t,c,a)}}Object.defineProperty(e,t,{get:function(){return i.call(this)},set:function(a){s.call(this,a)},enumerable:!0,configurable:!1})}}var lr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},xt=class{constructor(e=[]){this.positions=e}static barycenter(e){var t={x:0,y:0,z:0};if(!Yi.isNullOrEmpty(e)){for(var o=e.length,r=0;r<e.length;r++){var i=e[r];t.x+=i.x,t.y+=i.y,t.z+=i.z}var s=1*o;t.x/=s,t.y/=s,t.z/=s}return t}static boundingBox(e){let t={minX:1/0,minY:1/0,minZ:1/0,maxX:-1/0,maxY:-1/0,maxZ:-1/0};if(!Yi.isNullOrEmpty(e))for(var o=0;o<e.length;o++){var r=e[o];t.minX=Math.min(t.minX,r.x),t.minY=Math.min(t.minY,r.y),t.minZ=Math.min(t.minZ,r.z),t.maxX=Math.max(t.maxX,r.x),t.maxY=Math.max(t.maxY,r.y),t.maxZ=Math.max(t.maxZ,r.z)}return t}setAsDirty(){Ft.call(this)}};function Ft(){let n=this;n.flags=[I.Geometry]}var Ke=class extends xt{};lr([yt(Ft)],Ke.prototype,"positions",void 0);var W=class extends xt{#e;#t;#r;get barycenter(){return this.#r??=xt.barycenter(this.positions)}set barycenter(e){this.#r=e}get boundingBox(){return this.#e??=xt.boundingBox(this.positions)}set boundingBox(e){this.#e=e}get boundingSphere(){return this.#t}set boundingSphere(e){this.#t=e}constructor(e,t,o=[],r=[]){super(e),this.triangleIndices=t,this.textureCoordinates=o,this.normals=r}};lr([yt(Ft)],W.prototype,"positions",void 0);lr([yt(Ft)],W.prototype,"triangleIndices",void 0);lr([yt(Ft)],W.prototype,"textureCoordinates",void 0);lr([yt(Ft)],W.prototype,"normals",void 0);import{PacemEventTarget as Kn,Utils as ur,Watch as Ht,PropertyConverters as pr,PCSS as Qn}from"@pacem/pacem-core";import{Imaging as es}from"@pacem/pacem-foundation";var Xt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},U;(function(n){n.Basic="basic",n.Lambert="lambert",n.Phong="phong",n.Standard="standard",n.Line="line",n.Custom="custom"})(U||(U={}));function Ne(n){return"shader"in n}function Fr(n){return Ne(n)&&n.shader===U.Basic}function Qe(n){return Ne(n)&&n.shader===U.Line}function Xr(n){return Ne(n)&&n.shader===U.Lambert}function Hr(n){return Ne(n)&&n.shader===U.Phong}function jr(n){return Ne(n)&&n.shader===U.Standard}function Zi(n){return Ne(n)&&n.shader===U.Custom}var Q=class extends Kn{constructor(e){super(),this.#e=e}#e;get shader(){return this.#e}async _loadMap(e,t=this.material?.texture){if(ur.isNull(t)||t.close(),ur.isNullOrEmpty(e))return null;let o=await es.loadImage(e);return ur.isNull(o)?null:await createImageBitmap(o)}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"map":case"opacity":case"wireframe":case"color":case"hide":this.updateMaterial();break}}viewActivatedCallback(){super.viewActivatedCallback(),this.updateMaterial()}updateMaterial(){this.createMaterial().then(e=>{this.material=ur.extend(e,{flags:[I.Material]})})}async createMaterial(){return{opacity:this.opacity??1,wireframe:this.wireframe??!1,color:this.color||ur.Css.getVariableValue(`--${Qn}-color-primary`),visible:!(this.hide??!1),map:this.map,texture:await this._loadMap(this.map),shader:this.shader,flags:[]}}};Xt([Ht()],Q.prototype,"material",void 0);Xt([Ht({emit:!1,converter:pr.Number})],Q.prototype,"opacity",void 0);Xt([Ht({emit:!1,converter:pr.Boolean})],Q.prototype,"wireframe",void 0);Xt([Ht({emit:!1,converter:pr.String})],Q.prototype,"color",void 0);Xt([Ht({emit:!1,converter:pr.Boolean})],Q.prototype,"hide",void 0);Xt([Ht({emit:!1,converter:pr.String})],Q.prototype,"map",void 0);import{Transformer as rs}from"@pacem/pacem-core";import{Point as os}from"@pacem/pacem-foundation";var ts=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Vo=class{static parse(e){let t=[],o=/^v((\s+-?[\d\.]+){3})/gm,r=o.exec(e);for(;r&&r.length;)t.push($e.convert(r[1])),r=o.exec(e);let i=[],s=/^vt((\s+-?[\d\.]+){2})/gm;for(r=s.exec(e);r&&r.length;)i.push(os.parse(r[1])),r=s.exec(e);let a=[],c=/^vn((\s+-?[\d\.]+){3})/gm;for(r=c.exec(e);r&&r.length;)a.push($e.convert(r[1])),r=c.exec(e);let l=[],u=[],p=[],f=/^f((\s+([\d]+\/[\d]+\/[\d]+)){3,})/gm;for(r=f.exec(e);r&&r.length;){let T=/([\d]+)\/([\d]+)\/([\d]+)/g,N=r[1],E=T.exec(N),v=0;for(var h,b,C,x,d,_;E&&E.length;)v>2&&(p.push(h),u.push(i[b]),l.push(a[C]),p.push(x),u.push(i[d]),l.push(a[_])),x=parseInt(E[1])-1,d=parseInt(E[2])-1,_=parseInt(E[3])-1,p.push(x),u.push(i[d]),l.push(a[_]),v===0&&(h=x,b=d,C=_),v++,E=T.exec(N);r=f.exec(e)}return new W(t,p,u,l)}},$o=class{static parseGeometry(e,t){if(t.toLowerCase()==="obj")return Vo.parse(e);throw new Error(`Type '${t}' is not supported.`)}};ts([rs("parse3D")],$o,"parseGeometry",null);var Vn={};Oo(Vn,{Drawing3D:()=>Vi});var Vi={};Oo(Vi,{AdapterUtils:()=>We,BasicMaterialElement:()=>Uo,DragEvent:()=>mt,KnownShader:()=>U,LambertMaterialElement:()=>jt,LineMaterialElement:()=>bt,MaterialElement:()=>Q,OrbitCameraBehavior:()=>Po,Pacem3DAdapterElement:()=>Je,Pacem3DCameraElement:()=>Ce,Pacem3DDetector:()=>zo,Pacem3DElement:()=>xe,Pacem3DGroupElement:()=>Ze,Pacem3DLightElement:()=>Ie,Pacem3DMeshElement:()=>ke,Pacem3DObjectElement:()=>Fe,Pacem3DOrthographicCameraElement:()=>Be,Pacem3DPerspectiveCameraElement:()=>qe,Pacem3DPrimitiveElement:()=>ee,Pacem3DThreeAdapterElement:()=>lo,Pacem3DWebgpuAdapterElement:()=>Pt,Pacem3DWgslScriptElement:()=>sr,PacemBoxElement:()=>Ae,PacemConeElement:()=>tt,PacemCylinderElement:()=>rt,PacemDodecahedronElement:()=>ei,PacemHexahedronElement:()=>Ko,PacemIcosahedronElement:()=>Qo,PacemLineElement:()=>Qr,PacemOctahedronElement:()=>Jo,PacemOrbitCameraBehaviorElement:()=>Pe,PacemPlaneElement:()=>Ct,PacemSphereElement:()=>Er,PacemTetrahedronElement:()=>qo,PacemTorusElement:()=>Rt,PhongMaterialElement:()=>He,PolyhedronElement:()=>je,RenderableElement:()=>be,RenderableEvent:()=>gt,StalePropertyFlag:()=>I,StandardMaterialElement:()=>et,UI3DEvent:()=>$t,Ui3DElement:()=>ae,computePlaneNormal:()=>So,computeSharpVertexNormals:()=>ce,isBasicMaterial:()=>Fr,isCamera:()=>pe,isGeometry:()=>cr,isGroup:()=>vt,isInteraction:()=>kr,isLambertMaterial:()=>Xr,isLight:()=>Se,isLineMaterial:()=>Qe,isMaterial:()=>Ne,isMesh:()=>Ee,isMeshGeometry:()=>kt,isOrthographicCamera:()=>Ur,isPerspectiveCamera:()=>zr,isPhongMaterial:()=>Hr,isRenderable:()=>ar,isShaderMaterial:()=>Zi,isStage:()=>Bo,isStandardMaterial:()=>jr,isUi3DObject:()=>Ut});var zo=class{constructor(){this._detected={supported:!1,info:{}};let e=document.createElement("canvas"),t=["webgl","experimental-webgl","moz-webgl","webkit-3d"],o,r=function(a){if(a)return o.getParameter(a)},i=(a,c,l)=>{let u=this._detected;var p=u.info[a]=u.info[a]||{};c=c.replace(/[^\w]+/g,""),c=c.substring(0,1).toLowerCase()+c.substring(1),p[c]=l};if(navigator.userAgent.indexOf("MSIE")>=0)try{o=window.WebGLHelper.CreateGLContext(e,"canvas")}catch{}else for(var s=0;s<t.length;s++)try{if(o=e.getContext(t[s]),o){i("main","Context Name",t[s]);break}}catch{}this._detected.supported=!!o,i("main","Platform",navigator.platform),i("main","Agent",navigator.userAgent),o&&(i("main","Vendor",r(o.VENDOR)),i("main","Version",r(o.VERSION)),i("main","Renderer",r(o.RENDERER)),i("main","Shading Language Version",r(o.SHADING_LANGUAGE_VERSION)),i("bits","Rgba Bits",r(o.RED_BITS)+", "+r(o.GREEN_BITS)+", "+r(o.BLUE_BITS)+", "+r(o.ALPHA_BITS)),i("bits","Depth Bits",r(o.DEPTH_BITS)),i("shader","Max Vertex Attribs",r(o.MAX_VERTEX_ATTRIBS)),i("shader","Max Vertex Texture Image Units",r(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)),i("shader","Max Varying Vectors",r(o.MAX_VARYING_VECTORS)),i("shader","Max Uniform Vectors",r(o.MAX_VERTEX_UNIFORM_VECTORS)),i("tex","Max Combined Texture Image Units",r(o.MAX_COMBINED_TEXTURE_IMAGE_UNITS)),i("tex","Max Texture Size",r(o.MAX_TEXTURE_SIZE)),i("tex","Max Cube Map Texture Size",r(o.MAX_CUBE_MAP_TEXTURE_SIZE)),i("tex","Num. Compressed Texture Formats",r(o.COMPRESSED_TEXTURE_FORMATS)),i("misc","Max Render Buffer Size",r(o.MAX_RENDERBUFFER_SIZE)),i("misc","Max Viewport Dimensions",r(o.MAX_VIEWPORT_DIMS)),i("misc","Aliased Line Width Range",r(o.ALIASED_LINE_WIDTH_RANGE)),i("misc","Aliased Point Size Range",r(o.ALIASED_POINT_SIZE_RANGE)),i("misc","Supported Extensions",o.getSupportedExtensions()||[]))}get info(){return this._detected.info}get supported(){return this._detected.supported}};import{CustomElement as ns,P as ss}from"@pacem/pacem-core";var is=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Uo=class extends Q{constructor(){super(U.Basic)}};Uo=is([ns({tagName:`${ss}-${"3d"}-material-basic`})],Uo);import{CustomElement as as,P as cs,Watch as ko,PropertyConverters as Fo,Utils as ls}from"@pacem/pacem-core";var Wr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},jt=class extends Q{constructor(){super(U.Lambert)}async createMaterial(){return ls.extend({emissiveColor:this.emissiveColor||"#000",reflectivity:this.reflectivity??0,refractionRatio:this.refractionRatio??0},await super.createMaterial())}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"emissiveColor":case"reflectivity":case"refractionRatio":this.updateMaterial();break}}};Wr([ko({emit:!1,converter:Fo.String})],jt.prototype,"emissiveColor",void 0);Wr([ko({emit:!1,converter:Fo.Number})],jt.prototype,"reflectivity",void 0);Wr([ko({emit:!1,converter:Fo.Number})],jt.prototype,"refractionRatio",void 0);jt=Wr([as({tagName:`${cs}-${"3d"}-material-lambert`})],jt);import{CustomElement as us,P as ps,Watch as Yr,PropertyConverters as Xo,Utils as fs}from"@pacem/pacem-core";var fr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},bt=class extends Q{constructor(){super(U.Line)}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"lineWidth":case"lineJoin":case"lineCap":case"dashArray":this.updateMaterial();break}}async createMaterial(){return fs.extend({lineWidth:this.lineWidth??1,lineJoin:this.lineJoin??"round",lineCap:this.lineCap??"round",dashArray:this.dashArray},await super.createMaterial())}};fr([Yr({emit:!1,converter:Xo.Number})],bt.prototype,"lineWidth",void 0);fr([Yr({emit:!1,converter:Xo.String})],bt.prototype,"lineJoin",void 0);fr([Yr({emit:!1,converter:Xo.String})],bt.prototype,"lineCap",void 0);fr([Yr({emit:!1,converter:{convert:n=>n?.split(",").map(e=>parseInt(e)).filter(e=>!Number.isNaN(e)),convertBack:n=>n?.join(",")}})],bt.prototype,"dashArray",void 0);bt=fr([us({tagName:`${ps}-${"3d"}-material-line`})],bt);import{CustomElement as hs,P as ds,Watch as Wt,PropertyConverters as Yt,Utils as ms}from"@pacem/pacem-core";var Et=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},He=class extends Q{constructor(){super(U.Phong)}async createMaterial(){return ms.extend({emissiveColor:this.emissiveColor||"#000",reflectivity:this.reflectivity??0,refractionRatio:this.refractionRatio??0,specularColor:this.specularColor||"#000",shininess:this.shininess??0,flatShading:this.flatShading??!0},await super.createMaterial())}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"emissiveColor":case"reflectivity":case"refractionRatio":case"specularColor":case"shininess":case"flatShading":this.updateMaterial();break}}};Et([Wt({emit:!1,converter:Yt.String})],He.prototype,"emissiveColor",void 0);Et([Wt({emit:!1,converter:Yt.Number})],He.prototype,"reflectivity",void 0);Et([Wt({emit:!1,converter:Yt.Number})],He.prototype,"refractionRatio",void 0);Et([Wt({emit:!1,converter:Yt.String})],He.prototype,"specularColor",void 0);Et([Wt({emit:!1,converter:Yt.Number})],He.prototype,"shininess",void 0);Et([Wt({emit:!1,converter:Yt.Boolean})],He.prototype,"flatShading",void 0);He=Et([hs({tagName:`${ds}-${"3d"}-material-phong`})],He);import{CustomElement as gs,P as _s,Watch as hr,PropertyConverters as dr,Utils as vs}from"@pacem/pacem-core";var Zt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},et=class extends Q{constructor(){super(U.Standard)}async createMaterial(){return vs.extend({emissiveColor:this.emissiveColor||"#000",refractionRatio:this.refractionRatio??0,metalness:this.metalness??0,roughness:this.roughness??0,flatShading:this.flatShading??!1},await super.createMaterial())}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"emissiveColor":case"roughness":case"metalness":case"refractionRatio":case"flatShading":this.updateMaterial();break}}};Zt([hr({emit:!1,converter:dr.String})],et.prototype,"emissiveColor",void 0);Zt([hr({emit:!1,converter:dr.Number})],et.prototype,"refractionRatio",void 0);Zt([hr({emit:!1,converter:dr.Number})],et.prototype,"roughness",void 0);Zt([hr({emit:!1,converter:dr.Number})],et.prototype,"metalness",void 0);Zt([hr({emit:!1,converter:dr.Boolean})],et.prototype,"flatShading",void 0);et=Zt([gs({tagName:`${_s}-${"3d"}-material-standard`})],et);import{PacemEventTarget as xs,Watch as bs,PropertyConverters as Es,Utils as ws}from"@pacem/pacem-core";var ys=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},ee=class extends xs{viewActivatedCallback(){super.viewActivatedCallback(),ws.isNull(this.geometry)&&(this.geometry=this.createDefaultGeometry())}};ys([bs({converter:Es.Json})],ee.prototype,"geometry",void 0);import{CustomElement as Cs,P as Ns,Watch as qt,PropertyConverters as Jt}from"@pacem/pacem-core";var wt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Zr,Ae=Zr=class extends ee{static createMeshGeometry(e,t,o,r,i,s){let a=e||1,c=t||1,l=o||1,u=r||1,p=i||1,f=s||1,h=[],b=[],C=[];for(var x=0;x<=p;x++)for(var d=c/2-c*(1*x)/(1*p),_=0;_<=f;_++)for(var T=-l/2+l*(1*_)/(1*f),N=0;N<=u;N++){var E=-a/2+a*(1*N)/(1*u);(N==0||N==u||_==0||_==f||x==0||x==p)&&h.push({x:E,y:d,z:T})}for(var v=function(se,ue,re){for(var Y=1e-5,de=0;de<h.length;de++){var me=h[de];if(Math.abs(me.x-se)<Y&&Math.abs(me.y-ue)<Y&&Math.abs(me.z-re)<Y)return de}return-1},A=function(se,ue,re,Y,de,me,Le,Oe){C.push(se),C.push(ue),C.push(re),C.push(se),C.push(re),C.push(Y),b.push({x:de,y:Oe}),b.push({x:Le,y:Oe}),b.push({x:Le,y:me}),b.push({x:de,y:Oe}),b.push({x:Le,y:me}),b.push({x:de,y:me})},_=0;_<f;_++)for(var d=c/2,T=-l/2+l*(1*_)/(1*f),L=-l/2+l*(1*(_+1))/(1*f),N=0;N<u;N++){var E=-a/2+1*N*a/(1*u),P=-a/2+1*(N+1)*a/(1*u),G=v(E,d,L),R=v(P,d,L),m=v(P,d,T),g=v(E,d,T),y=1*(N+1)/(1*u),w=1*N/(1*u),M=1-1*(_+1)/(1*f),O=1-1*_/(1*f);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-1*x*c/(1*p),D=c/2-(x+1)*c/(1*p),T=-l/2,N=0;N<u;N++){var E=a/2-1*N*a/(1*u),P=a/2-(N+1)*a/(1*u),G=v(E,D,T),R=v(P,D,T),m=v(P,d,T),g=v(E,d,T),y=(N+1)/(1*u),w=1*N/(1*u),M=1-(x+1)/(1*p),O=1-1*x/(1*p);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-1*x*c/(1*p),D=c/2-(x+1)*c/(1*p),E=-a/2,_=0;_<f;_++){var T=-l/2+_*l/(1*f),L=-l/2+(_+1)*l/(1*f),G=v(E,D,T),R=v(E,D,L),m=v(E,d,L),g=v(E,d,T),y=(_+1)/(1*f),w=1*_/(1*f),M=1-(x+1)/(1*p),O=1-x/(1*p);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-x*c/(1*p),D=c/2-(x+1)*c/(1*p),T=l/2,N=0;N<u;N++){var E=-a/2+N*a/(1*u),P=-a/2+(N+1)*a/(1*u),G=v(E,D,T),R=v(P,D,T),m=v(P,d,T),g=v(E,d,T),y=(N+1)/(1*u),w=1*N/(1*u),M=1-(x+1)/(1*p),O=1-1*x/(1*p);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-x*c/(1*p),D=c/2-(x+1)*c/(1*p),E=a/2,_=0;_<f;_++){var T=l/2-_*l/(1*f),L=l/2-(_+1)*l/(1*f),G=v(E,D,T),R=v(E,D,L),m=v(E,d,L),g=v(E,d,T),y=(_+1)/(1*f),w=1*_/(1*f),M=1-(x+1)/(1*p),O=1-1*x/(1*p);A(G,R,m,g,w,O,y,M)}for(var _=0;_<f;_++)for(var d=-c/2,T=l/2-l*_/(1*f),L=l/2-l*(_+1)/(1*f),N=0;N<u;N++){var E=-a/2+N*a/(1*u),P=-a/2+(N+1)*a/(1*u),G=v(E,d,L),R=v(P,d,L),m=v(P,d,T),g=v(E,d,T),y=(N+1)/(1*u),w=1*N/(1*u),M=1-(_+1)/(1*f),O=1-1*_/(1*f);A(G,R,m,g,w,O,y,M)}let X=new W(h,C,b);X.key=`box_${e}x${t}x${o}_w${r}_h${i}_d${s}`,ce(X);let H={x:0,y:0,z:0},K=e/2,ie=t/2,he=o/2;return X.barycenter=H,X.boundingBox={maxX:K,maxY:ie,maxZ:he,minX:-K,minY:-ie,minZ:-he},X.boundingSphere={center:H,radius:Math.sqrt(Math.pow(K,2)+Math.pow(ie,2)+Math.pow(he,2))},X}createDefaultGeometry(){return Zr.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"width":case"height":case"depth":case"widthSegments":case"heightSegments":case"depthSegments":this.geometry=Zr.createMeshGeometry(this.width,this.height,this.depth,this.widthSegments,this.heightSegments,this.depthSegments);break}}};wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"width",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"height",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"depth",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"widthSegments",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"heightSegments",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"depthSegments",void 0);Ae=Zr=wt([Cs({tagName:Ns+"-"+"3d"+"-primitive-box"})],Ae);import{CustomElement as Rs,P as Ts,Watch as mr,PropertyConverters as gr}from"@pacem/pacem-core";var Kt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},qr,tt=qr=class extends ee{static createMeshGeometry(e=1,t=1,o=18,r=5,i=1){let s=e,a=[],c=[],l=[],u=ze*(360/o),p=s/t,f=t/r,h=1/o;a.push({x:0,y:t,z:0});for(let d=1;d<=r;d++){let _=t-f*d,T=_/t,N=(t-_)*p,v=(_+f)/t;for(let A=0;A<o;A++){let L=u*A,P=Math.cos(L)*N,G=-Math.sin(L)*N;a.push({x:P,y:_,z:G});let R=1+o*(d-1)+A,m=A==0?R+o-1:R-1,g=A*h,y=A==0?1-h:h*(A-1);if(d==1){l.push(0,m,R),c.push({x:g,y:1},{x:y,y:T},{x:g,y:T});continue}let w=1+o*(d-2)+A,O=A==0?w+o-1:w-1,D=m,X=R,H=w;l.push(X,O,D),l.push(X,H,O);let K={x:y,y:v},ie={x:y,y:T},he={x:g,y:T},se={x:g,y:v};c.push(he,K,ie),c.push(he,se,K)}}let b=1+(r-1)*o;a.push({x:0,y:0,z:0});let C=b+o;for(let d=1;d<=i;d++){let _=d/i,T=e*_,N=(d-1)/i;for(let E=0;E<o;E++){let v=u*E,A=Math.cos(v),L=Math.sin(v),P=v-u,G=Math.cos(P),R=Math.sin(P),m=.5*(1+A*_),g=.5*(1+L*_),y=.5*(1+G*_),w=.5*(1+R*_),M,O;if(d!=i){let Gt=Math.cos(v)*T,dt=-Math.sin(v)*T;a.push({x:Gt,y:0,z:dt}),M=C+1+(d-1)*o+E,O=E==0?M+o-1:M-1}else M=b+E,O=E==0?b+o-1:M-1;if(d==1){l.push(C,M,O),c.push({x:.5,y:.5},{x:m,y:g},{x:y,y:w});continue}let D=.5*(1+A*N),X=.5*(1+L*N),H=.5*(1+G*N),K=.5*(1+R*N),ie=C+1+(d-2)*o+E,se=E==0?ie+o-1:ie-1,ue=O,re=M,Y=ie;l.push(se,Y,ue),l.push(ue,Y,re);let de={x:H,y:K},me={x:y,y:w},Le={x:m,y:g},Oe={x:D,y:X};c.push(de,Oe,me),c.push(me,Oe,Le)}}let x=new W(a,l,c);return x.key=`cone_${e}x${t}_s${o}_h${r}_c${i}`,ce(x),x}createDefaultGeometry(){return qr.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"height":case"sides":case"heightSegments":case"capSegments":this.geometry=qr.createMeshGeometry(this.radius,this.height,this.sides,this.heightSegments,this.capSegments);break}}};Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"radius",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"height",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"sides",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"heightSegments",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"capSegments",void 0);tt=qr=Kt([Rs({tagName:Ts+"-"+"3d"+"-primitive-cone"})],tt);import{CustomElement as Ms,P as Is,Watch as _r,PropertyConverters as vr}from"@pacem/pacem-core";var Qt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Jr,rt=Jr=class extends ee{static createMeshGeometry(e=1,t=1,o=18,r=5,i=1){let s=e,a=[],c=[],l=[],u=ze*(360/o);a.push({x:0,y:t,z:0}),a.push({x:0,y:0,z:0});let p=s/i;for(let v=1;v<=i;v++)for(var f=p*v,h=0;h<o;h++){let A=2+2*o*(v-1),L=h==0?A+2*(o-1):A+2*(h-1),P=A+2*h,G=Math.cos(u*h),R=-Math.sin(u*h),m=Math.cos(u*(h-1)),g=-Math.sin(u*(h-1)),y=f*G,w=f*R,M={x:y,y:t,z:w},O={x:y,y:0,z:w};a.push(M),a.push(O);let D=.5*f/s,X=G*D,H=R*D,K=m*D,ie=g*D;if(v==1){let he=[0,L,P],se=[1,P+1,L+1],ue=[{x:.5,y:.5},{x:.5+K,y:.5-ie},{x:.5+X,y:.5-H}],re=[{x:.5,y:.5},{x:.5+X,y:.5+H},{x:.5+K,y:.5+ie}];l.push(...he),l.push(...se);for(let Y=0;Y<ue.length;Y++)c.push(ue[Y]);for(let Y=0;Y<re.length;Y++)c.push(re[Y])}else{let he=2+2*o*(v-2),se=h==0?he+2*(o-1):he+2*(h-1),ue=he+2*h,re=.5*((v-1)/i),Y=G*re,de=R*re,me=m*re,Le=g*re,Oe={x:.5+K,y:.5-ie},Gt={x:.5+X,y:.5-H},dt={x:.5+Y,y:.5-de},$i={x:.5+me,y:.5-Le},zi={x:.5+K,y:.5+ie},$n={x:.5+X,y:.5+H},Ui={x:.5+Y,y:.5+de},zn={x:.5+me,y:.5+Le};l.push(L),l.push(P),l.push(se),l.push(se),l.push(P),l.push(ue),l.push(ue+1),l.push(P+1),l.push(L+1),l.push(ue+1),l.push(L+1),l.push(se+1),c.push(Oe),c.push(Gt),c.push($i),c.push($i),c.push(Gt),c.push(dt),c.push(Ui),c.push($n),c.push(zi),c.push(Ui),c.push(zi),c.push(zn)}}let b=2+2*o*i,C=2+2*o*(i-1),x=1/o,d=1/r;for(let v=1;v<=r;v++)for(let A=0;A<o;A++){if(v!=r){var _=s*Math.cos(u*A),T=-s*Math.sin(u*A),N=t*v/r;a.push({x:_,y:N,z:T})}let L=A==0?o-1:A-1,P=v==1?C+2*L+1:b+o*(v-2)+L,G=v==1?C+2*A+1:b+o*(v-2)+A,R=v==r?C+2*A:b+o*(v-1)+A,m=v==r?C+2*L:b+o*(v-1)+L,g=L*x,y=(v-1)*d,w=A==0?1:A*x,M=v*d,O={x:g,y},D={x:w,y},X={x:w,y:M},H={x:g,y:M};l.push(P),l.push(G),l.push(R),l.push(P),l.push(R),l.push(m),c.push(O),c.push(D),c.push(X),c.push(O),c.push(X),c.push(H)}let E=new W(a,l,c);return E.key=`cylinder_${e}x${t}_s${o}_h${r}_c${i}`,ce(E),E}createDefaultGeometry(){return Jr.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"height":case"sides":case"heightSegments":case"capSegments":this.geometry=Jr.createMeshGeometry(this.radius,this.height,this.sides,this.heightSegments,this.capSegments);break}}};Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"radius",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"height",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"sides",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"heightSegments",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"capSegments",void 0);rt=Jr=Qt([Ms({tagName:Is+"-"+"3d"+"-primitive-cylinder"})],rt);import{CustomElement as As,P as Ps,Watch as Ls,PropertyConverters as Os}from"@pacem/pacem-core";var Ji=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Kr,Ds=[{x:0,y:0,z:0},{x:0,y:1,z:0}],Qr=Kr=class extends ee{static createLineGeometry(e){return new Ke(e||Ds)}createDefaultGeometry(){return Kr.createLineGeometry()}propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="positions"&&(this.geometry=Kr.createLineGeometry(o))}};Ji([Ls({emit:!1,converter:Os.Json})],Qr.prototype,"positions",void 0);Qr=Kr=Ji([As({tagName:Ps+"-"+"3d"+"-primitive-line"})],Qr);import{CustomElement as Gs,P as Bs,Watch as to,PropertyConverters as ro}from"@pacem/pacem-core";import{Geometry as Ss}from"@pacem/pacem-numerical";var yr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},eo,Ct=eo=class extends ee{static createMeshGeometry(e,t,o,r){e||=1,t||=1,o||=4,r||=4;let i=e*.5,s=t*.5,a=[],c=[],l=[],u=[],p=Ss.LinearAlgebra.Vector3D.from(0,0,1);for(let h=0;h<=r;h++)for(let b=0;b<=o;b++){let C=-i+b*e/(1*o),x=0,d=-s+h*t/(1*r);if(a.push({x:C,y:x,z:d}),h<r&&b<o){let _=o+1,T=(b+1)/(1*o),N=1*b/(1*o),E=1-(h+1)/(1*r),v=1-1*h/(1*r);l.push((h+1)*_+b),l.push((h+1)*_+b+1),l.push(h*_+b+1),l.push((h+1)*_+b),l.push(h*_+b+1),l.push(h*_+b),c.push({x:N,y:E}),c.push({x:T,y:E}),c.push({x:T,y:v}),c.push({x:N,y:E}),c.push({x:T,y:v}),c.push({x:N,y:v}),u.push(p,p,p,p,p,p)}}let f=new W(a,l,c,u);return f.key=`plane_${e}x${t}_w${o}_l${r}`,f}createDefaultGeometry(){return eo.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"width":case"length":case"widthSegments":case"lengthSegments":this.geometry=eo.createMeshGeometry(this.width,this.length,this.widthSegments,this.lengthSegments);break}}};yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"width",void 0);yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"length",void 0);yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"widthSegments",void 0);yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"lengthSegments",void 0);Ct=eo=yr([Gs({tagName:Bs+"-"+"3d"+"-primitive-plane"})],Ct);import{CustomElement as xr,P as br,Watch as Vs,PropertyConverters as $s}from"@pacem/pacem-core";import{Geometry as zs}from"@pacem/pacem-numerical";var er=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Ho,jo,Wo,Yo,Zo,Nt={parseFloats:function(n){let e=/([\d.-]+)/i;var t=e.exec(n);let o=[];for(;t!=null;){let r=t[0],i=parseFloat(r);o.push(i),n=n.replace(r,""),t=e.exec(n)}return o}},Z=zs.LinearAlgebra.Vector3D,je=class extends ee{propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="radius"&&this._assignMeshGeometry(o)}_assignMeshGeometry(e){this.geometry=this.createMeshGeometry(e>0?e:1)}createDefaultGeometry(){return this.createMeshGeometry(1)}};er([Vs({emit:!1,converter:$s.Number})],je.prototype,"radius",void 0);var qo=Ho=class extends je{static createMeshGeometry(e){e||=1;let o="0 0.5774 -0.8165, 0 0.5774 0.8165, 0.8165 -0.5774 0, -0.8165 -0.5774 0".split(","),r=[];for(let p=0;p<o.length;p++){let f=o[p],h=Nt.parseFloats(f);r.push({x:h[0]*e,y:h[1]*e,z:h[2]*e})}let i=[1,2,0,2,3,0,3,1,0,3,2,1],a="0.5 0.9995, 0.5 0.0004995, 0.0004995 0.5, 0.9995 0.5, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995".split(","),c=[4,5,6,7,8,9,10,11,0,3,2,1],l=[];for(let p=0;p<c.length;p++){let f=c[p],h=Nt.parseFloats(a[f]);l.push({x:h[0],y:h[1]})}let u=new W(r,i,l);return u.key=`tetrahedron_${e}`,ce(u),u.boundingSphere={center:Z.zero(),radius:e},u}createMeshGeometry(e=this.radius){return Ho.createMeshGeometry(e)}};qo=Ho=er([xr({tagName:br+"-"+"3d"+"-primitive-tetrahedron"})],qo);var Jo=jo=class extends je{static createMeshGeometry(e){e||=1;let t="0 0.7071 -0.7071, 0 0.7071 0.7071, 1 0 0, 0 -0.7071 -0.7071, -1 0 0, 0 -0.7071 0.7071",o=[1,2,0,2,3,0,3,4,0,4,1,0,4,5,1,5,2,1,2,5,3,4,3,5],r="0.5 0.9995, 0.5 0.9995, 0.0004995 0.5, 0.5 0.9995, 0.9995 0.5, 0.5 0.0004995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995, 0.5 0.9995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995, 0.0004995 0.5, 0.5 0.0004995, 0.5 0.9995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.0004995, 0.5 0.9995",i=[6,7,8,9,10,11,12,13,14,15,16,0,17,18,19,20,21,1,2,22,23,4,3,5],s=t.split(","),a=[];for(let p=0;p<s.length;p++){let f=s[p],h=Nt.parseFloats(f);a.push({x:h[0]*e,y:h[1]*e,z:h[2]*e})}let c=r.split(","),l=[];for(let p=0;p<i.length;p++){let f=i[p],h=Nt.parseFloats(c[f]);l.push({x:h[0],y:h[1]})}let u=new W(a,o,l);return u.key=`octahedron_${e}`,ce(u),u.boundingSphere={center:Z.zero(),radius:e},u}createMeshGeometry(e=this.radius){return jo.createMeshGeometry(e)}};Jo=jo=er([xr({tagName:br+"-"+"3d"+"-primitive-octahedron"})],Jo);var Ko=Wo=class extends je{static createMeshGeometry(e){e||=1;let t=1/Math.sqrt(3),o=2*e*t,r=Ae.createMeshGeometry(o,o,o);return r.key=`hexahedron_${e}`,r}createMeshGeometry(e=this.radius){return Wo.createMeshGeometry(e)}};Ko=Wo=er([xr({tagName:br+"-"+"3d"+"-primitive-hexahedron"})],Ko);var Qo=Yo=class extends je{static createMeshGeometry(e){e||=1;let t="0 0.850651 -0.525731, 0 0.850651 0.525731, 0.850651 0.525731 0, 0.525731 0 -0.850651, -0.525731 0 -0.850651, -0.850651 0.525731 0, -0.525731 0 0.850651, 0.525731 0 0.850651, 0.850651 -0.525731 0, 0 -0.850651 0.525731, 0 -0.850651 -0.525731, -0.850651 -0.525731 0",o=[1,2,0,2,3,0,3,4,0,4,5,0,5,1,0,5,6,1,6,7,1,7,2,1,2,8,3,2,7,8,6,9,7,9,8,7,8,10,3,8,9,10,6,11,9,11,10,9,10,4,3,10,11,4,6,5,11,5,4,11],r="0.5 0.808708, 0.5 0.999501, 0.5 0.808708, 0.191292 0.5, 0.000499547 0.5, 0.5 0.808708, 0.9995 0.5, 0.808708 0.5,0.000499487 0.5, 0.5 0.191292, 0.5 0.000499487, 0.5 0.191292,0.5 0.191292, 0.999501 0.5, 0.5 0.808708, 0.5 0.808708,0.9995 0.5, 0.808708 0.999501, 0.191292 0.5, 0.808708 0.5,0.5 0.999501, 0.808708 0.5, 0.999501 0.808708, 0.5 0.999501,0.000499487 0.5, 0.5 0.191292, 0.5 0.808708, 0.9995 0.5,0.808708 0.999501, 0.191292 0.5, 0.808708 0.5, 0.5 0.999501,0.808708 0.5, 0.999501 0.808708, 0.5 0.808708, 0.5 0.191292,0.9995 0.5, 0.000499547 0.5, 0.5 0.191292, 0.191292 0.5,0.5 0.000499487, 0.808708 0.5, 0.5 0.000499487, 0.999501 0.191292,0.5 0.191292, 0.808708 0.000499487, 0.9995 0.5, 0.5 0.191292,0.5 0.808708, 0.9995 0.5, 0.5 0.191292, 0.808708 0.000499487,0.999501 0.5, 0.5 0.808708, 0.5 0.000499487, 0.808708 0.5,0.999501 0.191292, 0.808708 0.5, 0.5 0.808708, 0.5 0.191292",i=[12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,28,29,30,31,32,33,1,34,35,36,2,37,38,39,40,41,42,43,7,44,45,46,8,47,48,49,50,51,52,53,9,54,55,3,10,56,57,6,58,59,5,4,11],s=t.split(","),a=[];for(let p=0;p<s.length;p++){let f=s[p],h=Nt.parseFloats(f);a.push({x:h[0]*e,y:h[1]*e,z:h[2]*e})}let c=r.split(","),l=[];for(let p=0;p<i.length;p++){let f=i[p],h=Nt.parseFloats(c[f]);l.push({x:h[0],y:h[1]})}let u=new W(a,o,l);return u.key=`icosahedron_${e}`,ce(u),u.boundingSphere={center:Z.zero(),radius:e},u}createMeshGeometry(e=this.radius){return Yo.createMeshGeometry(e)}};Qo=Yo=er([xr({tagName:br+"-"+"3d"+"-primitive-icosahedron"})],Qo);var ei=Zo=class extends je{static createMeshGeometry(e){e||=1;let t=Z.from(.356822*e,.934172*e,0*e),o=Z.from(-.356822*e,.934172*e,0*e),r=Z.from(.57735*e,.57735*e,-.57735*e),i=Z.from(0*e,.356822*e,-.934172*e),s=Z.from(-.57735*e,.57735*e,-.57735*e),a=Z.from(-.57735*e,.57735*e,.57735*e),c=Z.from(0*e,.356822*e,.934172*e),l=Z.from(.57735*e,.57735*e,.57735*e),u=Z.from(.934172*e,0*e,-.356822*e),p=Z.from(.934172*e,0*e,.356822*e),f=Z.from(0*e,-.356822*e,.934172*e),h=Z.from(.57735*e,-.57735*e,.57735*e),b=Z.from(.57735*e,-.57735*e,-.57735*e),C=Z.from(.356822*e,-.934172*e,0*e),x=Z.from(-.57735*e,-.57735*e,.57735*e),d=Z.from(-.356822*e,-.934172*e,0*e),_=Z.from(0*e,-.356822*e,-.934172*e),T=Z.from(-.57735*e,-.57735*e,-.57735*e),N=Z.from(-.934172*e,0*e,.356822*e),E=Z.from(-.934172*e,0*e,-.356822*e),v=[t,o,r,i,s,a,c,l,u,p,f,h,b,C,x,d,_,T,N,E],A=[0,2,3,0,3,4,0,4,1,1,5,6,1,6,7,1,7,0,7,9,8,7,8,2,7,2,0,7,6,10,7,10,11,7,11,9,11,13,12,11,12,8,11,8,9,11,10,14,11,14,15,11,15,13,15,17,16,15,16,12,15,12,13,15,14,18,15,18,19,15,19,17,19,4,3,19,3,16,19,16,17,19,18,5,19,5,1,19,1,4,18,14,10,18,10,6,18,6,5,3,2,8,3,8,12,3,12,16],L=`0.5 0.999501, 0.5 0.999501, 0.191292 0.808708, 0.5 0.690792,
7
7
  0.191292 0.808708, 0.191292 0.808708, 0.5 0.690792,
8
8
  0.808708 0.808708, 0.000499517 0.5, 0.309208 0.5, 0.5 0.309208,
9
9
  0.191292 0.191292, 0.191292 0.191292, 0.309208 0.5,
@@ -32,10 +32,10 @@ var Un=Object.defineProperty;var Oo=(n,e)=>{for(var t in e)Un(n,t,{get:e[t],enum
32
32
  0.808708 0.808708, 0.309208 0.5, 0.808708 0.808708,
33
33
  0.5 0.999501, 0.000499517 0.5, 0.5 0.309208, 0.000499517 0.5,
34
34
  0.5 0.690792, 0.5 0.690792, 0.000499517 0.5, 0.5 0.690792,
35
- 0.191292 0.191292`,P=[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,0,46,47,48,49,50,51,7,52,53,54,55,56,57,58,59,60,61,9,62,63,64,65,66,67,11,68,69,70,71,72,73,74,75,76,77,13,78,79,80,81,82,83,15,84,85,86,87,88,89,90,91,92,93,17,94,95,96,97,98,99,19,1,4,100,14,101,102,10,103,18,6,5,104,2,105,106,8,107,3,12,16],G=L.split(","),R=[];for(let g=0;g<P.length;g++){let y=P[g],w=Nt.parseFloats(G[y]);R.push({x:w[0],y:w[1]})}let m=new W(v,A,R);return m.key=`dodecahedron_${e}`,ce(m),m.boundingSphere={center:Z.zero(),radius:e},m}createMeshGeometry(e=this.radius){return Wo.createMeshGeometry(e)}};Ko=Wo=er([xr({tagName:br+"-"+"3d"+"-primitive-dodecahedron"})],Ko);import{CustomElement as Vs,P as $s,Watch as Ji,PropertyConverters as Ki}from"@pacem/pacem-core";var Qo=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},oo,Er=oo=class extends ee{static createMeshGeometry(e=1,t=8){let o=[],r=[],i=[],s=e,a=t,c=ze*(360/a),l=a%2==0?a/2:(a-1)/2;o.push({x:0,y:s,z:0});for(let f=1;f<l;f++){let h=c*f,b=Math.cos(h),C=Math.sin(h),x=1-1*f/l;for(let d=0;d<a;d++){let _=c*d-Math.PI/2,T=Math.cos(_),N=Math.sin(_),E=s*C*T,v=s*b,A=s*C*N;o.push({x:E,y:v,z:A});let L=d==0?a-1:d-1,P=d==0?0:1-1*d/a,G=1-1*L/a;if(f==1)i.push(1+d),i.push(1+L),i.push(0),r.push({x:P,y:x}),r.push({x:G,y:x}),r.push({x:.5,y:1});else{i.push((f-1)*a+d+1),i.push((f-1)*a+L+1),i.push((f-2)*a+L+1),i.push((f-1)*a+d+1),i.push((f-2)*a+L+1),i.push((f-2)*a+d+1);let R=1-(f-1)/l;r.push({x:P,y:x}),r.push({x:G,y:x}),r.push({x:G,y:R}),r.push({x:P,y:x}),r.push({x:G,y:R}),r.push({x:P,y:R})}}}o.push({x:0,y:-s,z:0});let u=o.length-1;for(let f=0;f<a;f++){let h=l-2,b=f==0?a-1:f-1,C=f==0?0:1-1*f/a,x=1-1*b/a,d=1-(h+1)/l;i.push(u),i.push(h*a+1+b),i.push(h*a+1+f),r.push({x:.5,y:0}),r.push({x,y:d}),r.push({x:C,y:d})}let p=new W(o,i,r);return p.key=`sphere_${e}_s${t}`,ce(p),p}createDefaultGeometry(){return oo.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"segments":this.geometry=oo.createMeshGeometry(this.radius,this.segments);break}}};Qo([Ji({emit:!1,converter:Ki.Number})],Er.prototype,"radius",void 0);Qo([Ji({emit:!1,converter:Ki.Number})],Er.prototype,"segments",void 0);Er=oo=Qo([Vs({tagName:$s+"-"+"3d"+"-primitive-sphere"})],Er);import{CustomElement as zs,P as Us,Watch as no,PropertyConverters as so}from"@pacem/pacem-core";var wr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},io,Rt=io=class extends ee{static createMeshGeometry(e=1,t=.25,o=24,r=12){let i=[],s=[],a=[],c=ze*(360/o),l=ze*(360/r),u=e,p=t;for(let h=0;h<o;h++){let b=c*h-Math.PI/2,C=Math.sin(b),x=Math.cos(b);for(let d=0;d<r;d++){let _=l*d+Math.PI,T=Math.cos(_),N=u*x+p*T*x,E=p*Math.sin(_),v=u*C+p*T*C;i.push({x:N,y:E,z:v});let A=h>0?h-1:o-1,L=d>0?d-1:r-1,P=h==0?0:1-1*h/o,G=d>0?1*d/r:1,R=h>0?1-(h-1)/o:1/o,m=d>0?(d-1)/r:1-1/r;a.push(h*r+L),a.push(A*r+L),a.push(A*r+d),a.push(h*r+L),a.push(A*r+d),a.push(h*r+d),s.push({x:P,y:m}),s.push({x:R,y:m}),s.push({x:R,y:G}),s.push({x:P,y:m}),s.push({x:R,y:G}),s.push({x:P,y:G})}}let f=new W(i,a,s);return f.key=`torus_${e}x${t}_t${o}_s${r}`,ce(f),f}createDefaultGeometry(){return io.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"innerRadius":case"segments":case"sides":this.geometry=io.createMeshGeometry(this.radius,this.innerRadius,this.segments,this.sides);break}}};wr([no({emit:!1,converter:so.Number})],Rt.prototype,"radius",void 0);wr([no({emit:!1,converter:so.Number})],Rt.prototype,"innerRadius",void 0);wr([no({emit:!1,converter:so.Number})],Rt.prototype,"segments",void 0);wr([no({emit:!1,converter:so.Number})],Rt.prototype,"sides",void 0);Rt=io=wr([zs({tagName:Us+"-"+"3d"+"-primitive-torus"})],Rt);import{CustomEventUtils as ks,Utils as ei}from"@pacem/pacem-core";import{Point as Fs}from"@pacem/pacem-foundation";function Xs(n,e){let t,o;if(Fs.isPoint(n))t=n.x,o=n.y;else{let{page:s}=ks.getEventCoordinates(n),a={x:s.x-e.x,y:s.y-e.y};t=a.x,o=a.y}let r=t/e.width*2-1,i=o/e.height*-2+1;return{x:r,y:i}}var We=class n{static isMeshGeometry(e){return"positions"in e&&ei.isArray(e.positions)&&"triangleIndices"in e&&ei.isArray(e.triangleIndices)}static isVector3D(e){return"x"in e&&typeof e.x=="number"&&"y"in e&&typeof e.y=="number"&&"z"in e&&typeof e.z=="number"}static isRgba(e){return"r"in e&&typeof e.r=="number"&&"g"in e&&typeof e.g=="number"&&"b"in e&&typeof e.b=="number"}static flattenVectorArray(e){let t=[];for(let o of e)n.isVector3D(o)?t.push(o.x,o.y,o.z):n.isRgba(o)?t.push(o.r,o.g,o.b,o.a??1):t.push(o.x,o.y);return t}static findCamera(e){return(e||[]).find(t=>pe(t)&&!t.hide)}clipPixel(e,t){return t instanceof HTMLElement&&(t=ei.offsetRect(t)),Xs(e,t)}};import{CustomElement as Hs,P as js,Watch as Ws,PropertyConverters as Ys,Utils as V,CustomElementUtils as ti}from"@pacem/pacem-core";import{Colors as ri}from"@pacem/pacem-foundation";import{Geometry as Qi}from"@pacem/pacem-numerical";var nn=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i};function ao(n){return We.flattenVectorArray(n)}var en="0.152.2",Zs="0.147.0",co={VERSION:en,API_URI:`https://unpkg.com/three@${en}/build/three.min.js`,ORBIT_URI:`https://unpkg.com/three@${Zs}/examples/js/controls/OrbitControls.js`,LOADERS:[],DEFAULT_MATERIAL:function(){return new THREE.MeshStandardMaterial({color:"#069",flatShading:!0})}};function qs(n,e,t,o=1.333){let r=new THREE.Box3;for(let h of t)r.expandByObject(h);let i=r.getSize(new THREE.Vector3),s=r.getCenter(new THREE.Vector3),c=Math.max(i.x,i.y,i.z)/(2*Math.atan(Math.PI*n.fov/360)),l=c/n.aspect,u=o*Math.max(c,l),p=!V.isNull(e);var f;p&&(f=e.target.clone().sub(n.position).normalize().multiplyScalar(u),e.maxDistance=u*10,e.target.copy(s)),n.near=u/100,n.far=u*100,n.updateProjectionMatrix(),p&&(n.position.copy(e.target).sub(f),e.update())}function Js(n){return[n.m11,n.m21,n.m31,n.offsetX,n.m12,n.m22,n.m32,n.offsetY,n.m13,n.m23,n.m33,n.offsetZ,n.m14,n.m24,n.m34,n.m44]}function Ks(n){let e=new THREE.BufferGeometry,t=ao(n.positions);if(e.setAttribute("position",new THREE.Float32BufferAttribute(t,3)),n instanceof W){V.isNullOrEmpty(n.triangleIndices)||e.setIndex(n.triangleIndices);let o=ao(n.positions);e.setAttribute("position",new THREE.Float32BufferAttribute(o,3));let r=ao(n.textureCoordinates);if(e.setAttribute("uv",new THREE.Float32BufferAttribute(r,2)),V.isNullOrEmpty(n.normals))e.computeVertexNormals();else{let i=ao(n.normals);e.setAttribute("normal",new THREE.Float32BufferAttribute(i,3))}}return e}function Qs(n){var e;if(n.type==="spot"){let t=new THREE.SpotLight;t.target.position.set(n.target.x,n.target.y,n.target.z),e=t}else e=new THREE.PointLight;return e}function tn(n){if(V.isNull(n))return null;let e={color:typeof n.color=="string"?n.color:ri.stringify(n.color),opacity:n.opacity??1,transparent:!0,wireframe:n.wireframe??!1,visible:n.visible??!0},t=V.extend({},e,{wireframe:n.wireframe??!1}),o=r=>(n.map&&(r.map=new THREE.TextureLoader().load(n.map,i=>{r.needsUpdate=!0})),r);if(jr(n))return o(new THREE.MeshStandardMaterial(V.extend(t,{roughness:n.roughness,metalness:n.metalness,emissive:n.emissiveColor,flatShading:n.flatShading,refractionRatio:n.refractionRatio})));if(Hr(n))return o(new THREE.MeshPhongMaterial(V.extend(t,{shininess:n.shininess,emissive:n.emissiveColor,flatShading:n.flatShading,specular:n.specularColor,reflectivity:n.reflectivity,refractionRatio:n.refractionRatio})));if(Xr(n))return o(new THREE.MeshLambertMaterial(V.extend(t,{emissive:n.emissiveColor,reflectivity:n.reflectivity,refractionRatio:n.refractionRatio})));if(Ke(n)){let r=n.dashArray&&n.dashArray[0]||null,i=n.dashArray&&n.dashArray.length>1&&n.dashArray[1]||r,s=V.extend(e,{linecap:n.lineCap??"round",linejoin:n.lineJoin??"round",linewidth:n.lineWidth??1});return V.isNullOrEmpty(n.dashArray)?new THREE.LineBasicMaterial(s):new THREE.LineDashedMaterial(V.extend({dashSize:r,gapSize:i},s))}else return Ne(n)?o(new THREE.MeshBasicMaterial(t)):null}function ea(n,e,t){let o=t,r=[],i=tn(n);if(V.isNull(i)||(i.side=THREE.FrontSide,r.push(i)),!V.isNull(e))if(e==n)i.side=THREE.DoubleSide;else{let s=tn(e);V.isNull(s)||(s.side=THREE.BackSide,r.push(s))}return o&&r.length>1?r:i}function rn(n){if(V.isNullOrEmpty(n.content))throw new Error("Missing content.");return n.type?.toLowerCase()==="obj"?new THREE.OBJLoader().parse(n.content):new THREE.ObjectLoader().parse(n.content)}function ta(n){return n instanceof et?THREE.Line:THREE.Mesh}function on(n){if(V.isNullOrEmpty(n.geometry))return null;let e=ta(n.geometry);return new e}function Cr(){return"THREE"in window}async function ra(...n){let e=Date.now();var t=!1;do{t=Cr();for(let o of n)t&&=o();t||await new Promise(o=>setTimeout(o,500))}while(!t&&Date.now()-e<3e4);if(!t)throw new Error("The wait for THREE adapter initialization timed out.")}var lo=class extends Je{constructor(){super(...arguments),this._renderer=null,this._camera=null,this._scene=null,this._orbitCtrls=null,this._objects=new WeakMap,this._dict={},this._orbitControlsDelegate=e=>{},this._ensureAndRefresh=(e,t,o)=>{if(t.matrixAutoUpdate=!1,t.visible=!e.hide){if(Ee(e)){let i=t;if(e.flags.indexOf(I.Geometry)>=0){i.geometry.dispose();let s=on(e);s.constructor.name!==i.constructor.name&&(o.remove(t),delete this._dict[t.id],t=i=s),i.geometry=Ks(e.geometry)}if(e.flags.indexOf(I.Material)>=0){if(V.isArray(i.material))for(let s of i.material)s.dispose();else i.material.dispose();i.material=ea(e.material)||co.DEFAULT_MATERIAL()}}else if(e instanceof Fe&&(e.flags.indexOf(I.Material)>=0||e.flags.indexOf(I.Geometry)>=0))t.parent&&t.parent.remove(t),t=rn(e);else if(e instanceof Ze){if(e.flags.indexOf(I.Children)>=0){for(let i=t.children.length-1;i>=0;i--){let s=t.children[i];t.remove(s)}for(let i of e.items)this._addOrUpdateItem(i,t)}}else if(e instanceof Ie){let i=t;e.flags.indexOf(I.Light)>=0&&(i.color=new THREE.Color(e.color),i.intensity=e.intensity)}let r=e.position;if(Ut(e)&&!V.isNull(e.transformMatrix)&&(e.flags.indexOf(I.Position)>=0||e.flags.indexOf(I.Transform)>=0)){let i=Qi.LinearAlgebra.Matrix3D.from(1,0,0,0,0,1,0,0,0,0,1,0,r.x,r.y,r.z,1),s=Qi.LinearAlgebra.Matrix3D.multiply(e.transformMatrix,i);THREE.Matrix4.prototype.set.apply(t.matrix,Js(s))}else e.flags.indexOf(I.Position)>=0&&(t.position.set(r.x,r.y,r.z),t.updateMatrix())}return t.userData=e.tag,V.isNull(o.getObjectById(t.id))&&(o.add(t),this._dict[t.id]=e),e.flags.splice(0),t}}_assertMonoStage(e){if(e!=this._3d&&!V.isNull(this._3d))throw new Error("Stage mismatch.")}dispose(e){}snapshot(e,t,o,r){if(e!=this._3d)return Promise.resolve(null);let i=!V.isNullOrEmpty(t),s=o??(i?"image/jpeg":null),a=r??(i?.9:null);return new Promise((c,l)=>{this.render(),V.snapshotElement(this._stage,t,s,a).then(c)})}project(e,t){if(this._assertMonoStage(e),V.isNull(this._camera)||V.isNull(this._stage))return null;let o=this._stage,r=new THREE.Vector3(t.x,t.y,t.z),i=o.width,s=o.height,a=i/2,c=s/2,l=r.project(this._camera),u=l.x*a+a,p=-(l.y*c)+c;return{x:u,y:p}}zoomFit(e,...t){return this._assertMonoStage(e),new Promise((o,r)=>{let i=this._camera,s=this._objects,a=t.filter(c=>s.has(c)).map(c=>s.get(c));(V.isNull(i)||V.isNullOrEmpty(a))&&o(),qs(i,this._orbitCtrls,a),o()})}getScene(e){return this._assertMonoStage(e),this._scene}raycast(e,t,o,r){if(this._assertMonoStage(e),Cr()&&!V.isNull(this._camera)){let i=this._camera,s=new THREE.Vector2(t.x/o.width*2-1,-(t.y/o.height)*2+1),a=new THREE.Raycaster;a.setFromCamera(s,i);let c=a.intersectObjects(this._scene.children,!0),l,u,p=0;for(;c.length>p&&(u=c[p++])&&(l=u.object);){if(this._dict[l.id].inert)continue;let h=u.point,b=h.x,C=h.y,x=h.z,d={x:b,y:C,z:x};r({object:this._dict[l.id],point:d});return}}r(null)}async initialize(e){if(!V.isNull(this._stage))return this._stage;this._3d=e;let t=e.stage,o=this._stage=document.createElement("canvas");t.innerHTML="",t.appendChild(o),Cr()||(await ti.importjs(co.API_URI),await ra(),await Promise.all([ti.importjs(co.ORBIT_URI)].concat(co.LOADERS.map(a=>ti.importjs(a))))),this._scene=new THREE.Scene,this.invalidateSize(e);let r=this._stage.width,i=this._stage.height,s={canvas:o,antialias:!0,stencil:!1,alpha:e.transparent??!0};if(this._renderer=new THREE.WebGLRenderer(s),this._renderer.setSize(r,i),e.background&&!e.transparent){let a=e.background;typeof a=="string"&&(a=ri.parse(a));let c=new THREE.Color(a.r,a.g,a.b);this._renderer.setClearColor(c,a.a)}return this.orbit=e.orbit,o}_setCamera(e){this._camera=e,this.invalidateSize(this._3d),this._disposeOrbitControls(),this.orbit&&this._initOrbitControls()}propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="orbit"&&(o===!0?this._initOrbitControls():this._disposeOrbitControls())}_initOrbitControls(){let e=this._camera;if(V.isNull(this._3d)||V.isNull(e))return;(this._orbitCtrls=new THREE.OrbitControls(e,this._3d.stage)).addEventListener("change",this._orbitControlsDelegate)}_disposeOrbitControls(){let e=this._orbitCtrls;V.isNull(e)||(e.removeEventListener("change",this._orbitControlsDelegate),e.dispose())}_updateRenderer(e,t=this._renderer){if(e.transparent)t.setClearAlpha(0);else if(e.background){let o=e.background;typeof o=="string"&&(o=ri.parse(o));let r=new THREE.Color(o.r,o.g,o.b);t.setClearColor(r,o.a)}else t.setClearColor(null)}invalidateSize(e,t=e.size){if(this._assertMonoStage(e),!Cr()||V.isNull(t))return;let o=t.width,r=t.height;this._stage.width=o,this._stage.height=r;let i=this._camera;i instanceof THREE.PerspectiveCamera&&(i.aspect=o/r,i.updateProjectionMatrix()),this._renderer&&(this._renderer.setSize(o,r),this._updateRenderer(e))}removeItem(e,t){this._assertMonoStage(e);let o=this._objects,r=o.get(t);V.isNull(r)||(this._scene.remove(r),delete this._dict[r.id],o.delete(t))}updateItem(e,t){this._assertMonoStage(e);let o=this._objects;if(!V.isNull(t.parent)&&o.has(t.parent)){let r=o.get(t.parent);this._addOrUpdateItem(t,r)}else this._addOrUpdateItem(t)}addItem(e,t){this._assertMonoStage(e),this._addOrUpdateItem(t)}_addOrUpdateItem(e,t=this._scene){if(!(!Cr()||V.isNull(t)))if(e instanceof Ce)if(e instanceof qe){var o;if(this._camera instanceof THREE.PerspectiveCamera)var o=this._camera;else o=new THREE.PerspectiveCamera;let i=new THREE.Vector3(e.lookAt.x,e.lookAt.y,e.lookAt.z);o.lookAt(i),o.position.set(e.position.x,e.position.y,e.position.z),o.fov=e.fov,o.aspect=e.aspect,o.near=e.near,o.far=e.far,this._setCamera(o);let s=this._orbitCtrls;!V.isNull(s)&&s.object===o&&(s.target=i,s.update())}else if(e instanceof Be){var r;if(this._camera instanceof THREE.OrthographicCamera)var r=this._camera;else r=new THREE.OrthographicCamera;let i=new THREE.Vector3(e.lookAt.x,e.lookAt.y,e.lookAt.z);r.lookAt(i),r.position.set(e.position.x,e.position.y,e.position.z),r.left=e.left,r.right=e.right,r.top=e.top,r.bottom=e.bottom,r.near=e.near,r.far=e.far,this._setCamera(r);let s=this._orbitCtrls;!V.isNull(s)&&s.object===r&&(s.target=i,s.update())}else throw new Error(`Camera ${e} not supported.`);else if(this._objects.has(e)){let i=this._objects.get(e),s=this._ensureAndRefresh(e,i,t);s!=i&&this._objects.set(e,s)}else{let i=s=>{s&&(s=this._ensureAndRefresh(e,s,t),this._objects.set(e,s))};if(e instanceof Fe){let s=rn(e);i(s)}else if(e instanceof ke){let s=on(e);i(s)}else if(e instanceof Ie){let s=Qs(e);i(s)}else if(e instanceof Ze){let s=new THREE.Group;i(s)}}}render(){this._camera&&this._renderer.render(this._scene,this._camera)}};nn([Ws({emit:!1,converter:Ys.Boolean})],lo.prototype,"orbit",void 0);lo=nn([Hs({tagName:js+"-3d-three-adapter"})],lo);import{CustomElementUtils as Mo,CustomElement as Dn,P as Gn,Watch as Io,PropertyConverters as Di,PropertyChangeEvent as Oi,PropertyChangeEventName as An,Debounce as wa,Utils as pt,Logging as Ca,Components as Na}from"@pacem/pacem-core";import{Strings as Ra}from"@pacem/pacem-foundation";import{Utils as te,P as _a,Logging as va}from"@pacem/pacem-core";import{Colors as ya}from"@pacem/pacem-foundation";import{Geometry as xa}from"@pacem/pacem-numerical";var j="pacem-3d-";var Tt="color",po="ambient",Nr="lighting",Ve="VertexInput",_e="VertexOutput",ot="InteractionData",ye;(function(n){n[n.COPY_SRC=4]="COPY_SRC",n[n.COPY_DST=8]="COPY_DST",n[n.INDEX=16]="INDEX",n[n.INDIRECT=256]="INDIRECT",n[n.MAP_READ=1]="MAP_READ",n[n.MAP_WRITE=2]="MAP_WRITE",n[n.QUERY_RESOLVE=512]="QUERY_RESOLVE",n[n.STORAGE=128]="STORAGE",n[n.UNIFORM=64]="UNIFORM",n[n.VERTEX=32]="VERTEX"})(ye||(ye={}));var Re;(function(n){n[n.COPY_SRC=1]="COPY_SRC",n[n.COPY_DST=2]="COPY_DST",n[n.RENDER_ATTACHMENT=16]="RENDER_ATTACHMENT",n[n.STORAGE_BINDING=8]="STORAGE_BINDING",n[n.TEXTURE_BINDING=4]="TEXTURE_BINDING"})(Re||(Re={}));var oe;(function(n){n[n.VERTEX=1]="VERTEX",n[n.FRAGMENT=2]="FRAGMENT",n[n.COMPUTE=4]="COMPUTE"})(oe||(oe={}));var uo;(function(n){n[n.READ=1]="READ",n[n.WRITE=2]="WRITE"})(uo||(uo={}));import{Utils as z}from"@pacem/pacem-core";var ve;(function(n){n.Mesh="mesh",n.Camera="camera",n.Texture="texture",n.Light="light",n.Interaction="interaction"})(ve||(ve={}));var ne=class{static create(e,t,o=""){let r=e.createBuffer({size:t.byteLength,label:o,usage:ye.VERTEX|ye.COPY_DST,mappedAtCreation:!0});return new Float32Array(r.getMappedRange()).set(t),r.unmap(),r}static createUniform(e,t,o=""){return e.createBuffer({size:t.byteLength,label:o,usage:ye.UNIFORM|ye.COPY_DST})}static createStorage(e,t,o=""){return e.createBuffer({size:t.byteLength,label:o,usage:ye.STORAGE|ye.COPY_DST})}static createIndexed(e,t,o=""){let r=e.createBuffer({size:t.byteLength,label:o,usage:ye.INDEX|ye.COPY_DST,mappedAtCreation:!0});return new Uint16Array(r.getMappedRange()).set(t),r.unmap(),r}},Mt=class{static createVertex(e=0,t=3,...o){let r=[],i=0,s=0;for(let a of[t].concat(o))r.push({shaderLocation:e+s,offset:i*Float32Array.BYTES_PER_ELEMENT,format:`float32x${a}`}),i+=a,s++;return{arrayStride:i*Float32Array.BYTES_PER_ELEMENT,attributes:r,stepMode:"vertex"}}};import{Utils as li}from"@pacem/pacem-core";import{Colors as aa}from"@pacem/pacem-foundation";import{Utils as oa}from"@pacem/pacem-core";var sn={outputNormalLocation:0,outputVertexLocation:1,outputUvLocation:2,outputVertexIndexLocation:3,outputRayIndexLocation:4,outputInstanceIndexLocation:5,storageMaterialGroupIndex:2,storageMaterialBindingIndex:0};function an(n=[]){return n.join(`\r
36
- `)}function ia(n=[]){let e="";for(let t of n){let o=t.trim();o.endsWith(";")?e+=o+`\r
35
+ 0.191292 0.191292`,P=[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,0,46,47,48,49,50,51,7,52,53,54,55,56,57,58,59,60,61,9,62,63,64,65,66,67,11,68,69,70,71,72,73,74,75,76,77,13,78,79,80,81,82,83,15,84,85,86,87,88,89,90,91,92,93,17,94,95,96,97,98,99,19,1,4,100,14,101,102,10,103,18,6,5,104,2,105,106,8,107,3,12,16],G=L.split(","),R=[];for(let g=0;g<P.length;g++){let y=P[g],w=Nt.parseFloats(G[y]);R.push({x:w[0],y:w[1]})}let m=new W(v,A,R);return m.key=`dodecahedron_${e}`,ce(m),m.boundingSphere={center:Z.zero(),radius:e},m}createMeshGeometry(e=this.radius){return Zo.createMeshGeometry(e)}};ei=Zo=er([xr({tagName:br+"-"+"3d"+"-primitive-dodecahedron"})],ei);import{CustomElement as Us,P as ks,Watch as Ki,PropertyConverters as Qi}from"@pacem/pacem-core";var ti=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},oo,Er=oo=class extends ee{static createMeshGeometry(e=1,t=8){let o=[],r=[],i=[],s=e,a=t,c=ze*(360/a),l=a%2==0?a/2:(a-1)/2;o.push({x:0,y:s,z:0});for(let f=1;f<l;f++){let h=c*f,b=Math.cos(h),C=Math.sin(h),x=1-1*f/l;for(let d=0;d<a;d++){let _=c*d-Math.PI/2,T=Math.cos(_),N=Math.sin(_),E=s*C*T,v=s*b,A=s*C*N;o.push({x:E,y:v,z:A});let L=d==0?a-1:d-1,P=d==0?0:1-1*d/a,G=1-1*L/a;if(f==1)i.push(1+d),i.push(1+L),i.push(0),r.push({x:P,y:x}),r.push({x:G,y:x}),r.push({x:.5,y:1});else{i.push((f-1)*a+d+1),i.push((f-1)*a+L+1),i.push((f-2)*a+L+1),i.push((f-1)*a+d+1),i.push((f-2)*a+L+1),i.push((f-2)*a+d+1);let R=1-(f-1)/l;r.push({x:P,y:x}),r.push({x:G,y:x}),r.push({x:G,y:R}),r.push({x:P,y:x}),r.push({x:G,y:R}),r.push({x:P,y:R})}}}o.push({x:0,y:-s,z:0});let u=o.length-1;for(let f=0;f<a;f++){let h=l-2,b=f==0?a-1:f-1,C=f==0?0:1-1*f/a,x=1-1*b/a,d=1-(h+1)/l;i.push(u),i.push(h*a+1+b),i.push(h*a+1+f),r.push({x:.5,y:0}),r.push({x,y:d}),r.push({x:C,y:d})}let p=new W(o,i,r);return p.key=`sphere_${e}_s${t}`,ce(p),p}createDefaultGeometry(){return oo.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"segments":this.geometry=oo.createMeshGeometry(this.radius,this.segments);break}}};ti([Ki({emit:!1,converter:Qi.Number})],Er.prototype,"radius",void 0);ti([Ki({emit:!1,converter:Qi.Number})],Er.prototype,"segments",void 0);Er=oo=ti([Us({tagName:ks+"-"+"3d"+"-primitive-sphere"})],Er);import{CustomElement as Fs,P as Xs,Watch as no,PropertyConverters as so}from"@pacem/pacem-core";var wr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},io,Rt=io=class extends ee{static createMeshGeometry(e=1,t=.25,o=24,r=12){let i=[],s=[],a=[],c=ze*(360/o),l=ze*(360/r),u=e,p=t;for(let h=0;h<o;h++){let b=c*h-Math.PI/2,C=Math.sin(b),x=Math.cos(b);for(let d=0;d<r;d++){let _=l*d+Math.PI,T=Math.cos(_),N=u*x+p*T*x,E=p*Math.sin(_),v=u*C+p*T*C;i.push({x:N,y:E,z:v});let A=h>0?h-1:o-1,L=d>0?d-1:r-1,P=h==0?0:1-1*h/o,G=d>0?1*d/r:1,R=h>0?1-(h-1)/o:1/o,m=d>0?(d-1)/r:1-1/r;a.push(h*r+L),a.push(A*r+L),a.push(A*r+d),a.push(h*r+L),a.push(A*r+d),a.push(h*r+d),s.push({x:P,y:m}),s.push({x:R,y:m}),s.push({x:R,y:G}),s.push({x:P,y:m}),s.push({x:R,y:G}),s.push({x:P,y:G})}}let f=new W(i,a,s);return f.key=`torus_${e}x${t}_t${o}_s${r}`,ce(f),f}createDefaultGeometry(){return io.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"innerRadius":case"segments":case"sides":this.geometry=io.createMeshGeometry(this.radius,this.innerRadius,this.segments,this.sides);break}}};wr([no({emit:!1,converter:so.Number})],Rt.prototype,"radius",void 0);wr([no({emit:!1,converter:so.Number})],Rt.prototype,"innerRadius",void 0);wr([no({emit:!1,converter:so.Number})],Rt.prototype,"segments",void 0);wr([no({emit:!1,converter:so.Number})],Rt.prototype,"sides",void 0);Rt=io=wr([Fs({tagName:Xs+"-"+"3d"+"-primitive-torus"})],Rt);import{CustomEventUtils as Hs,Utils as ri}from"@pacem/pacem-core";import{Point as js}from"@pacem/pacem-foundation";function Ws(n,e){let t,o;if(js.isPoint(n))t=n.x,o=n.y;else{let{page:s}=Hs.getEventCoordinates(n),a={x:s.x-e.x,y:s.y-e.y};t=a.x,o=a.y}let r=t/e.width*2-1,i=o/e.height*-2+1;return{x:r,y:i}}var We=class n{static isMeshGeometry(e){return"positions"in e&&ri.isArray(e.positions)&&"triangleIndices"in e&&ri.isArray(e.triangleIndices)}static isVector3D(e){return"x"in e&&typeof e.x=="number"&&"y"in e&&typeof e.y=="number"&&"z"in e&&typeof e.z=="number"}static isRgba(e){return"r"in e&&typeof e.r=="number"&&"g"in e&&typeof e.g=="number"&&"b"in e&&typeof e.b=="number"}static flattenVectorArray(e){let t=[];for(let o of e)n.isVector3D(o)?t.push(o.x,o.y,o.z):n.isRgba(o)?t.push(o.r,o.g,o.b,o.a??1):t.push(o.x,o.y);return t}static findCamera(e){return(e||[]).find(t=>pe(t)&&!t.hide)}clipPixel(e,t){return t instanceof HTMLElement&&(t=ri.offsetRect(t)),Ws(e,t)}};import{CustomElement as Ys,P as Zs,Watch as qs,PropertyConverters as Js,Utils as V,CustomElementUtils as oi}from"@pacem/pacem-core";import{Colors as ii}from"@pacem/pacem-foundation";import{Geometry as en}from"@pacem/pacem-numerical";var sn=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i};function ao(n){return We.flattenVectorArray(n)}var tn="0.152.2",Ks="0.147.0",co={VERSION:tn,API_URI:`https://unpkg.com/three@${tn}/build/three.min.js`,ORBIT_URI:`https://unpkg.com/three@${Ks}/examples/js/controls/OrbitControls.js`,LOADERS:[],DEFAULT_MATERIAL:function(){return new THREE.MeshStandardMaterial({color:"#069",flatShading:!0})}};function Qs(n,e,t,o=1.333){let r=new THREE.Box3;for(let h of t)r.expandByObject(h);let i=r.getSize(new THREE.Vector3),s=r.getCenter(new THREE.Vector3),c=Math.max(i.x,i.y,i.z)/(2*Math.atan(Math.PI*n.fov/360)),l=c/n.aspect,u=o*Math.max(c,l),p=!V.isNull(e);var f;p&&(f=e.target.clone().sub(n.position).normalize().multiplyScalar(u),e.maxDistance=u*10,e.target.copy(s)),n.near=u/100,n.far=u*100,n.updateProjectionMatrix(),p&&(n.position.copy(e.target).sub(f),e.update())}function ea(n){return[n.m11,n.m21,n.m31,n.offsetX,n.m12,n.m22,n.m32,n.offsetY,n.m13,n.m23,n.m33,n.offsetZ,n.m14,n.m24,n.m34,n.m44]}function ta(n){let e=new THREE.BufferGeometry,t=ao(n.positions);if(e.setAttribute("position",new THREE.Float32BufferAttribute(t,3)),n instanceof W){V.isNullOrEmpty(n.triangleIndices)||e.setIndex(n.triangleIndices);let o=ao(n.positions);e.setAttribute("position",new THREE.Float32BufferAttribute(o,3));let r=ao(n.textureCoordinates);if(e.setAttribute("uv",new THREE.Float32BufferAttribute(r,2)),V.isNullOrEmpty(n.normals))e.computeVertexNormals();else{let i=ao(n.normals);e.setAttribute("normal",new THREE.Float32BufferAttribute(i,3))}}return e}function ra(n){var e;if(n.type==="spot"){let t=new THREE.SpotLight;t.target.position.set(n.target.x,n.target.y,n.target.z),e=t}else e=new THREE.PointLight;return e}function rn(n){if(V.isNull(n))return null;let e={color:typeof n.color=="string"?n.color:ii.stringify(n.color),opacity:n.opacity??1,transparent:!0,wireframe:n.wireframe??!1,visible:n.visible??!0},t=V.extend({},e,{wireframe:n.wireframe??!1}),o=r=>(n.map&&(r.map=new THREE.TextureLoader().load(n.map,i=>{r.needsUpdate=!0})),r);if(jr(n))return o(new THREE.MeshStandardMaterial(V.extend(t,{roughness:n.roughness,metalness:n.metalness,emissive:n.emissiveColor,flatShading:n.flatShading,refractionRatio:n.refractionRatio})));if(Hr(n))return o(new THREE.MeshPhongMaterial(V.extend(t,{shininess:n.shininess,emissive:n.emissiveColor,flatShading:n.flatShading,specular:n.specularColor,reflectivity:n.reflectivity,refractionRatio:n.refractionRatio})));if(Xr(n))return o(new THREE.MeshLambertMaterial(V.extend(t,{emissive:n.emissiveColor,reflectivity:n.reflectivity,refractionRatio:n.refractionRatio})));if(Qe(n)){let r=n.dashArray&&n.dashArray[0]||null,i=n.dashArray&&n.dashArray.length>1&&n.dashArray[1]||r,s=V.extend(e,{linecap:n.lineCap??"round",linejoin:n.lineJoin??"round",linewidth:n.lineWidth??1});return V.isNullOrEmpty(n.dashArray)?new THREE.LineBasicMaterial(s):new THREE.LineDashedMaterial(V.extend({dashSize:r,gapSize:i},s))}else return Ne(n)?o(new THREE.MeshBasicMaterial(t)):null}function oa(n,e,t){let o=t,r=[],i=rn(n);if(V.isNull(i)||(i.side=THREE.FrontSide,r.push(i)),!V.isNull(e))if(e==n)i.side=THREE.DoubleSide;else{let s=rn(e);V.isNull(s)||(s.side=THREE.BackSide,r.push(s))}return o&&r.length>1?r:i}function on(n){if(V.isNullOrEmpty(n.content))throw new Error("Missing content.");return n.type?.toLowerCase()==="obj"?new THREE.OBJLoader().parse(n.content):new THREE.ObjectLoader().parse(n.content)}function ia(n){return n instanceof Ke?THREE.Line:THREE.Mesh}function nn(n){if(V.isNullOrEmpty(n.geometry))return null;let e=ia(n.geometry);return new e}function Cr(){return"THREE"in window}async function na(...n){let e=Date.now();var t=!1;do{t=Cr();for(let o of n)t&&=o();t||await new Promise(o=>setTimeout(o,500))}while(!t&&Date.now()-e<3e4);if(!t)throw new Error("The wait for THREE adapter initialization timed out.")}var lo=class extends Je{constructor(){super(...arguments),this._renderer=null,this._camera=null,this._scene=null,this._orbitCtrls=null,this._objects=new WeakMap,this._dict={},this._orbitControlsDelegate=e=>{},this._ensureAndRefresh=(e,t,o)=>{if(t.matrixAutoUpdate=!1,t.visible=!e.hide){if(Ee(e)){let i=t;if(e.flags.indexOf(I.Geometry)>=0){i.geometry.dispose();let s=nn(e);s.constructor.name!==i.constructor.name&&(o.remove(t),delete this._dict[t.id],t=i=s),i.geometry=ta(e.geometry)}if(e.flags.indexOf(I.Material)>=0){if(V.isArray(i.material))for(let s of i.material)s.dispose();else i.material.dispose();i.material=oa(e.material)||co.DEFAULT_MATERIAL()}}else if(e instanceof Fe&&(e.flags.indexOf(I.Material)>=0||e.flags.indexOf(I.Geometry)>=0))t.parent&&t.parent.remove(t),t=on(e);else if(e instanceof Ze){if(e.flags.indexOf(I.Children)>=0){for(let i=t.children.length-1;i>=0;i--){let s=t.children[i];t.remove(s)}for(let i of e.items)this._addOrUpdateItem(i,t)}}else if(e instanceof Ie){let i=t;e.flags.indexOf(I.Light)>=0&&(i.color=new THREE.Color(e.color),i.intensity=e.intensity)}let r=e.position;if(Ut(e)&&!V.isNull(e.transformMatrix)&&(e.flags.indexOf(I.Position)>=0||e.flags.indexOf(I.Transform)>=0)){let i=en.LinearAlgebra.Matrix3D.from(1,0,0,0,0,1,0,0,0,0,1,0,r.x,r.y,r.z,1),s=en.LinearAlgebra.Matrix3D.multiply(e.transformMatrix,i);THREE.Matrix4.prototype.set.apply(t.matrix,ea(s))}else e.flags.indexOf(I.Position)>=0&&(t.position.set(r.x,r.y,r.z),t.updateMatrix())}return t.userData=e.tag,V.isNull(o.getObjectById(t.id))&&(o.add(t),this._dict[t.id]=e),e.flags.splice(0),t}}_assertMonoStage(e){if(e!=this._3d&&!V.isNull(this._3d))throw new Error("Stage mismatch.")}dispose(e){}snapshot(e,t,o,r){if(e!=this._3d)return Promise.resolve(null);let i=!V.isNullOrEmpty(t),s=o??(i?"image/jpeg":null),a=r??(i?.9:null);return new Promise((c,l)=>{this.render(),V.snapshotElement(this._stage,t,s,a).then(c)})}project(e,t){if(this._assertMonoStage(e),V.isNull(this._camera)||V.isNull(this._stage))return null;let o=this._stage,r=new THREE.Vector3(t.x,t.y,t.z),i=o.width,s=o.height,a=i/2,c=s/2,l=r.project(this._camera),u=l.x*a+a,p=-(l.y*c)+c;return{x:u,y:p}}zoomFit(e,...t){return this._assertMonoStage(e),new Promise((o,r)=>{let i=this._camera,s=this._objects,a=t.filter(c=>s.has(c)).map(c=>s.get(c));(V.isNull(i)||V.isNullOrEmpty(a))&&o(),Qs(i,this._orbitCtrls,a),o()})}getScene(e){return this._assertMonoStage(e),this._scene}raycast(e,t,o,r){if(this._assertMonoStage(e),Cr()&&!V.isNull(this._camera)){let i=this._camera,s=new THREE.Vector2(t.x/o.width*2-1,-(t.y/o.height)*2+1),a=new THREE.Raycaster;a.setFromCamera(s,i);let c=a.intersectObjects(this._scene.children,!0),l,u,p=0;for(;c.length>p&&(u=c[p++])&&(l=u.object);){if(this._dict[l.id].inert)continue;let h=u.point,b=h.x,C=h.y,x=h.z,d={x:b,y:C,z:x};r({object:this._dict[l.id],point:d});return}}r(null)}async initialize(e){if(!V.isNull(this._stage))return this._stage;this._3d=e;let t=e.stage,o=this._stage=document.createElement("canvas");t.innerHTML="",t.appendChild(o),Cr()||(await oi.importjs(co.API_URI),await na(),await Promise.all([oi.importjs(co.ORBIT_URI)].concat(co.LOADERS.map(a=>oi.importjs(a))))),this._scene=new THREE.Scene,this.invalidateSize(e);let r=this._stage.width,i=this._stage.height,s={canvas:o,antialias:!0,stencil:!1,alpha:e.transparent??!0};if(this._renderer=new THREE.WebGLRenderer(s),this._renderer.setSize(r,i),e.background&&!e.transparent){let a=e.background;typeof a=="string"&&(a=ii.parse(a));let c=new THREE.Color(a.r,a.g,a.b);this._renderer.setClearColor(c,a.a)}return this.orbit=e.orbit,o}_setCamera(e){this._camera=e,this.invalidateSize(this._3d),this._disposeOrbitControls(),this.orbit&&this._initOrbitControls()}propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="orbit"&&(o===!0?this._initOrbitControls():this._disposeOrbitControls())}_initOrbitControls(){let e=this._camera;if(V.isNull(this._3d)||V.isNull(e))return;(this._orbitCtrls=new THREE.OrbitControls(e,this._3d.stage)).addEventListener("change",this._orbitControlsDelegate)}_disposeOrbitControls(){let e=this._orbitCtrls;V.isNull(e)||(e.removeEventListener("change",this._orbitControlsDelegate),e.dispose())}_updateRenderer(e,t=this._renderer){if(e.transparent)t.setClearAlpha(0);else if(e.background){let o=e.background;typeof o=="string"&&(o=ii.parse(o));let r=new THREE.Color(o.r,o.g,o.b);t.setClearColor(r,o.a)}else t.setClearColor(null)}invalidateSize(e,t=e.size){if(this._assertMonoStage(e),!Cr()||V.isNull(t))return;let o=t.width,r=t.height;this._stage.width=o,this._stage.height=r;let i=this._camera;i instanceof THREE.PerspectiveCamera&&(i.aspect=o/r,i.updateProjectionMatrix()),this._renderer&&(this._renderer.setSize(o,r),this._updateRenderer(e))}removeItem(e,t){this._assertMonoStage(e);let o=this._objects,r=o.get(t);V.isNull(r)||(this._scene.remove(r),delete this._dict[r.id],o.delete(t))}updateItem(e,t){this._assertMonoStage(e);let o=this._objects;if(!V.isNull(t.parent)&&o.has(t.parent)){let r=o.get(t.parent);this._addOrUpdateItem(t,r)}else this._addOrUpdateItem(t)}addItem(e,t){this._assertMonoStage(e),this._addOrUpdateItem(t)}_addOrUpdateItem(e,t=this._scene){if(!(!Cr()||V.isNull(t)))if(e instanceof Ce)if(e instanceof qe){var o;if(this._camera instanceof THREE.PerspectiveCamera)var o=this._camera;else o=new THREE.PerspectiveCamera;let i=new THREE.Vector3(e.lookAt.x,e.lookAt.y,e.lookAt.z);o.lookAt(i),o.position.set(e.position.x,e.position.y,e.position.z),o.fov=e.fov,o.aspect=e.aspect,o.near=e.near,o.far=e.far,this._setCamera(o);let s=this._orbitCtrls;!V.isNull(s)&&s.object===o&&(s.target=i,s.update())}else if(e instanceof Be){var r;if(this._camera instanceof THREE.OrthographicCamera)var r=this._camera;else r=new THREE.OrthographicCamera;let i=new THREE.Vector3(e.lookAt.x,e.lookAt.y,e.lookAt.z);r.lookAt(i),r.position.set(e.position.x,e.position.y,e.position.z),r.left=e.left,r.right=e.right,r.top=e.top,r.bottom=e.bottom,r.near=e.near,r.far=e.far,this._setCamera(r);let s=this._orbitCtrls;!V.isNull(s)&&s.object===r&&(s.target=i,s.update())}else throw new Error(`Camera ${e} not supported.`);else if(this._objects.has(e)){let i=this._objects.get(e),s=this._ensureAndRefresh(e,i,t);s!=i&&this._objects.set(e,s)}else{let i=s=>{s&&(s=this._ensureAndRefresh(e,s,t),this._objects.set(e,s))};if(e instanceof Fe){let s=on(e);i(s)}else if(e instanceof ke){let s=nn(e);i(s)}else if(e instanceof Ie){let s=ra(e);i(s)}else if(e instanceof Ze){let s=new THREE.Group;i(s)}}}render(){this._camera&&this._renderer.render(this._scene,this._camera)}};sn([qs({emit:!1,converter:Js.Boolean})],lo.prototype,"orbit",void 0);lo=sn([Ys({tagName:Zs+"-3d-three-adapter"})],lo);import{CustomElementUtils as Mo,CustomElement as Gn,P as Bn,Watch as Io,PropertyConverters as Bi,PropertyChangeEvent as Gi,PropertyChangeEventName as Pn,Debounce as Ra,Utils as pt,Logging as Ta,Components as Ma}from"@pacem/pacem-core";import{Strings as Ia}from"@pacem/pacem-foundation";import{Utils as te,P as xa,Logging as ba}from"@pacem/pacem-core";import{Colors as Ea}from"@pacem/pacem-foundation";import{Geometry as wa}from"@pacem/pacem-numerical";var j="pacem-3d-";var Tt="color",po="ambient",Nr="lighting",Ve="VertexInput",_e="VertexOutput",ot="InteractionData",ye;(function(n){n[n.COPY_SRC=4]="COPY_SRC",n[n.COPY_DST=8]="COPY_DST",n[n.INDEX=16]="INDEX",n[n.INDIRECT=256]="INDIRECT",n[n.MAP_READ=1]="MAP_READ",n[n.MAP_WRITE=2]="MAP_WRITE",n[n.QUERY_RESOLVE=512]="QUERY_RESOLVE",n[n.STORAGE=128]="STORAGE",n[n.UNIFORM=64]="UNIFORM",n[n.VERTEX=32]="VERTEX"})(ye||(ye={}));var Re;(function(n){n[n.COPY_SRC=1]="COPY_SRC",n[n.COPY_DST=2]="COPY_DST",n[n.RENDER_ATTACHMENT=16]="RENDER_ATTACHMENT",n[n.STORAGE_BINDING=8]="STORAGE_BINDING",n[n.TEXTURE_BINDING=4]="TEXTURE_BINDING"})(Re||(Re={}));var oe;(function(n){n[n.VERTEX=1]="VERTEX",n[n.FRAGMENT=2]="FRAGMENT",n[n.COMPUTE=4]="COMPUTE"})(oe||(oe={}));var uo;(function(n){n[n.READ=1]="READ",n[n.WRITE=2]="WRITE"})(uo||(uo={}));import{Utils as z}from"@pacem/pacem-core";var ve;(function(n){n.Mesh="mesh",n.Camera="camera",n.Texture="texture",n.Light="light",n.Interaction="interaction"})(ve||(ve={}));var ne=class{static create(e,t,o=""){let r=e.createBuffer({size:t.byteLength,label:o,usage:ye.VERTEX|ye.COPY_DST,mappedAtCreation:!0});return new Float32Array(r.getMappedRange()).set(t),r.unmap(),r}static createUniform(e,t,o=""){return e.createBuffer({size:t.byteLength,label:o,usage:ye.UNIFORM|ye.COPY_DST})}static createStorage(e,t,o=""){return e.createBuffer({size:t.byteLength,label:o,usage:ye.STORAGE|ye.COPY_DST})}static createIndexed(e,t,o=""){let r=e.createBuffer({size:t.byteLength,label:o,usage:ye.INDEX|ye.COPY_DST,mappedAtCreation:!0});return new Uint16Array(r.getMappedRange()).set(t),r.unmap(),r}},Mt=class{static createVertex(e=0,t=3,...o){let r=[],i=0,s=0;for(let a of[t].concat(o))r.push({shaderLocation:e+s,offset:i*Float32Array.BYTES_PER_ELEMENT,format:`float32x${a}`}),i+=a,s++;return{arrayStride:i*Float32Array.BYTES_PER_ELEMENT,attributes:r,stepMode:"vertex"}}};import{Utils as pi}from"@pacem/pacem-core";import{Colors as ua}from"@pacem/pacem-foundation";import{Utils as sa}from"@pacem/pacem-core";var an={outputNormalLocation:0,outputVertexLocation:1,outputUvLocation:2,outputVertexIndexLocation:3,outputRayIndexLocation:4,outputInstanceIndexLocation:5,storageMaterialGroupIndex:2,storageMaterialBindingIndex:0};function cn(n=[]){return n.join(`\r
36
+ `)}function aa(n=[]){let e="";for(let t of n){let o=t.trim();o.endsWith(";")?e+=o+`\r
37
37
  `:e+=`${Tt} = ${o};\r
38
- `}return e}function cn(n={},e=sn){let t=oa.extend({},sn,e),o=an(n.definitions),r=an(n.bindings),i=ia(n.modifiers),s=Tt,a=Nr,c=po;return`// definitions
38
+ `}return e}function ln(n={},e=an){let t=sa.extend({},an,e),o=cn(n.definitions),r=cn(n.bindings),i=aa(n.modifiers),s=Tt,a=Nr,c=po;return`// definitions
39
39
 
40
40
  ${o}
41
41
 
@@ -64,10 +64,10 @@ const white = vec4f(1,1,1,1);
64
64
 
65
65
  ${a} = select(white, ${a}, ${a}.a > 0);
66
66
  return ${s} * ${a} + ${c};
67
- }`}import{Utils as na}from"@pacem/pacem-core";var ln={outputInstanceIndexLocation:0,outputVertexIndexLocation:1,storageMaterialGroupIndex:3,storageMaterialBindingIndex:0};function un(n=[]){return n.join(`\r
68
- `)}function sa(n=[]){let e="";for(let t of n){let o=t.trim();o.endsWith(";")?e+=o+`\r
67
+ }`}import{Utils as ca}from"@pacem/pacem-core";var un={outputInstanceIndexLocation:0,outputVertexIndexLocation:1,storageMaterialGroupIndex:3,storageMaterialBindingIndex:0};function pn(n=[]){return n.join(`\r
68
+ `)}function la(n=[]){let e="";for(let t of n){let o=t.trim();o.endsWith(";")?e+=o+`\r
69
69
  `:e+=`output = ${o};\r
70
- `}return e}function pn(n={},e=ln){let t=na.extend({},ln,e),o=un(n.definitions),r=un(n.bindings),i=sa(n.modifiers);return`// definitions
70
+ `}return e}function fn(n={},e=un){let t=ca.extend({},un,e),o=pn(n.definitions),r=pn(n.bindings),i=la(n.modifiers);return`// definitions
71
71
  ${o}
72
72
 
73
73
  // bindings
@@ -91,9 +91,9 @@ fn getVertexColor(index: u32) -> vec4f {
91
91
  ${i}
92
92
 
93
93
  return output;
94
- }`}var fo=class{static create(e){if(Fr(e))return new Tr(e);if(Ke(e))return new Mr(e);throw new TypeError(`Material type '${e.shader}' not supported.`)}},ca={},ho=class{constructor(e){if(li.isNull(this.#e=e))throw new ReferenceError("Null material provided.")}#e;get material(){return this.#e}get wgsl(){return ca}buffer({device:e},t=j+"material-"+this.shader+"-buffer"){let{r:o,g:r,b:i,a:s}=this._diffuseColor(),a=new Float32Array([o,r,i,s]);return{buffer:ne.createStorage(e,a,t),value:a,version:performance.now()}}_diffuseColor(){let{visible:e,opacity:t,color:o}=this.material;if(!(e??!0))return{r:0,g:0,b:0,a:0};let r=typeof o=="string"?aa.parse(o):o??{r:1,g:1,b:1,a:1};return t>=0&&t<=1?li.extend(r,{a:r.a*t}):r}},Tr=class extends ho{get shader(){return U.Basic}constructor(e){if(super(e),e.shader!=this.shader)throw new TypeError("Basic material expected.")}texture({device:e},t="texture"){let o=this.material;if(t==="texture"&&!li.isNull(o.texture)){let r=o.texture;return{texture:e.createTexture({format:"rgba8unorm",usage:Re.TEXTURE_BINDING|Re.RENDER_ATTACHMENT|Re.COPY_DST,size:[r.width,r.height]}),source:r}}return null}static{this.fragment=cn}},Mr=class extends ho{get shader(){return U.Line}constructor(e){if(super(e),e.shader!=this.shader)throw new TypeError("Line material expected.")}buffer(e,t){if(t==="line"){let{device:o,canvas:r}=e,i=this.material,s=new Float32Array([r.clientWidth,r.clientHeight,i.lineWidth/2]);return{buffer:ne.createUniform(o,s,j+"line-"+this.shader+"-buffer"),value:s,version:performance.now()}}else return super.buffer(e)}texture(e){return null}static{this.fragment=pn}};import{Utils as mo}from"@pacem/pacem-core";var la=["input","data"];function ui(n){typeof n!="string"&&(n=n(...la));let e=new RegExp(`fn\\s+(\\w+)\\s*\\(([^)]*)\\)\\s*->\\s*(${Ve}|${_e})\\s*{((.|\\n)+)}\\s*$`),t=n.match(e);if(t){let o=t[1],r=t[2].split(",").map(s=>{let a=s.split(":");return{name:a[0].trim(),type:a[1].trim()}});if(r.length!==2||r[0].type!==t[3]||r[1].type!==ot)throw new Error(`Invalid modifier function. Invalid signature types (arg1: ${r[0]?.type}, arg2: ${r[1]?.type})`);let i=t[4].trim();return{name:o,args:r.map(s=>s.name),body:i}}else throw new Error(`Invalid modifier function. Must be a valid WGSL function with the signature: fn name(arg1: ${Ve}|${_e}, arg2: ${ot}) -> ${Ve}|${_e}`)}var go={outputNormalLocation:0,outputVertexLocation:1,outputUvLocation:2,outputVertexIndexLocation:3,outputInstanceIndexLocation:5,outputRayLocation:4,inputPositionLocation:0,inputNormalLocation:1,inputUvLocation:2,uniformViewBindingIndex:0,uniformViewGroupIndex:0,uniformWorldBindingIndex:0,uniformWorldGroupIndex:1,uniformInteractionBindingIndex:1,uniformInteractionGroupIndex:0};function fn(n=go){n!=go&&(n=mo.extend({},go,n));let e=n.inputModifier,t="vertexInput",o="";if(!mo.isNullOrEmpty(e)){let{name:c,args:[l,u],body:p}=ui(e);t=`${c}(vertexInput, interaction)`,o=`fn ${c} (${l}: ${Ve}, ${u}: ${ot}) -> ${Ve} {
94
+ }`}var fo=class{static create(e){if(Fr(e))return new Tr(e);if(Qe(e))return new Mr(e);throw new TypeError(`Material type '${e.shader}' not supported.`)}},pa={},ho=class{constructor(e){if(pi.isNull(this.#e=e))throw new ReferenceError("Null material provided.")}#e;get material(){return this.#e}get wgsl(){return pa}buffer({device:e},t=j+"material-"+this.shader+"-buffer"){let{r:o,g:r,b:i,a:s}=this._diffuseColor(),a=new Float32Array([o,r,i,s]);return{buffer:ne.createStorage(e,a,t),value:a,version:performance.now()}}_diffuseColor(){let{visible:e,opacity:t,color:o}=this.material;if(!(e??!0))return{r:0,g:0,b:0,a:0};let r=typeof o=="string"?ua.parse(o):o??{r:1,g:1,b:1,a:1};return t>=0&&t<=1?pi.extend(r,{a:r.a*t}):r}},Tr=class extends ho{get shader(){return U.Basic}constructor(e){if(super(e),e.shader!=this.shader)throw new TypeError("Basic material expected.")}texture({device:e},t="texture"){let o=this.material;if(t==="texture"&&!pi.isNull(o.texture)){let r=o.texture;return{texture:e.createTexture({format:"rgba8unorm",usage:Re.TEXTURE_BINDING|Re.RENDER_ATTACHMENT|Re.COPY_DST,size:[r.width,r.height]}),source:r}}return null}static{this.fragment=ln}},Mr=class extends ho{get shader(){return U.Line}constructor(e){if(super(e),e.shader!=this.shader)throw new TypeError("Line material expected.")}buffer(e,t){if(t==="line"){let{device:o,canvas:r}=e,i=this.material,s=new Float32Array([r.clientWidth,r.clientHeight,i.lineWidth/2]);return{buffer:ne.createUniform(o,s,j+"line-"+this.shader+"-buffer"),value:s,version:performance.now()}}else return super.buffer(e)}texture(e){return null}static{this.fragment=fn}};import{Utils as mo}from"@pacem/pacem-core";var fa=["input","data"];function fi(n){typeof n!="string"&&(n=n(...fa));let e=new RegExp(`fn\\s+(\\w+)\\s*\\(([^)]*)\\)\\s*->\\s*(${Ve}|${_e})\\s*{((.|\\n)+)}\\s*$`),t=n.match(e);if(t){let o=t[1],r=t[2].split(",").map(s=>{let a=s.split(":");return{name:a[0].trim(),type:a[1].trim()}});if(r.length!==2||r[0].type!==t[3]||r[1].type!==ot)throw new Error(`Invalid modifier function. Invalid signature types (arg1: ${r[0]?.type}, arg2: ${r[1]?.type})`);let i=t[4].trim();return{name:o,args:r.map(s=>s.name),body:i}}else throw new Error(`Invalid modifier function. Must be a valid WGSL function with the signature: fn name(arg1: ${Ve}|${_e}, arg2: ${ot}) -> ${Ve}|${_e}`)}var go={outputNormalLocation:0,outputVertexLocation:1,outputUvLocation:2,outputVertexIndexLocation:3,outputInstanceIndexLocation:5,outputRayLocation:4,inputPositionLocation:0,inputNormalLocation:1,inputUvLocation:2,uniformViewBindingIndex:0,uniformViewGroupIndex:0,uniformWorldBindingIndex:0,uniformWorldGroupIndex:1,uniformInteractionBindingIndex:1,uniformInteractionGroupIndex:0};function hn(n=go){n!=go&&(n=mo.extend({},go,n));let e=n.inputModifier,t="vertexInput",o="";if(!mo.isNullOrEmpty(e)){let{name:c,args:[l,u],body:p}=fi(e);t=`${c}(vertexInput, interaction)`,o=`fn ${c} (${l}: ${Ve}, ${u}: ${ot}) -> ${Ve} {
95
95
  ${p}
96
- }`}let r=n.outputModifier,i="output",s="";if(!mo.isNullOrEmpty(r)){let{name:c,args:[l,u],body:p}=ui(r);i=`${c}(output, interaction)`,s=`fn ${c} (${l}: ${Ve}, ${u}: ${ot}) -> ${_e} {
96
+ }`}let r=n.outputModifier,i="output",s="";if(!mo.isNullOrEmpty(r)){let{name:c,args:[l,u],body:p}=fi(r);i=`${c}(output, interaction)`,s=`fn ${c} (${l}: ${Ve}, ${u}: ${ot}) -> ${_e} {
97
97
  ${p}
98
98
  }`}let a=mo.extend({},go,n);return`struct ${_e} {
99
99
  @builtin(position) position : vec4f, // clip space position
@@ -158,11 +158,11 @@ ${s}
158
158
  input.instance
159
159
  );
160
160
  return ${i};
161
- }`}import{Utils as hn}from"@pacem/pacem-core";var xo={inputPositionLocation:0,outputInstanceIndexLocation:0,outputVertexIndexLocation:1,storagePositionsGroupIndex:2,storagePositionsBindingIndex:0,uniformDimensionsGroupIndex:2,uniformDimensionsBindingIndex:1,uniformViewGroupIndex:0,uniformViewBindingIndex:0,uniformWorldGroupIndex:1,uniformWorldBindingIndex:0};function dn(n){return`struct ${_e} {
161
+ }`}import{Utils as dn}from"@pacem/pacem-core";var xo={inputPositionLocation:0,outputInstanceIndexLocation:0,outputVertexIndexLocation:1,storagePositionsGroupIndex:2,storagePositionsBindingIndex:0,uniformDimensionsGroupIndex:2,uniformDimensionsBindingIndex:1,uniformViewGroupIndex:0,uniformViewBindingIndex:0,uniformWorldGroupIndex:1,uniformWorldBindingIndex:0};function mn(n){return`struct ${_e} {
162
162
  @builtin(position) position : vec4f, // clip space position
163
163
  @location(${n.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index
164
164
  @location(${n.outputVertexIndexLocation}) @interpolate(flat) index : u32, // vertex index
165
- }`}function mn(n=xo){let e=hn.extend({},xo,n);return`${dn(e)}
165
+ }`}function gn(n=xo){let e=dn.extend({},xo,n);return`${mn(e)}
166
166
 
167
167
  struct Transforms {
168
168
  world: mat4x4f,
@@ -194,7 +194,7 @@ struct Camera {
194
194
  worldViewProjectionTransform * position4,
195
195
  instance,
196
196
  index);
197
- }`}function gn(n=xo){let e=hn.extend({},xo,n);return`${dn(e)}
197
+ }`}function _n(n=xo){let e=dn.extend({},xo,n);return`${mn(e)}
198
198
 
199
199
  struct Transforms {
200
200
  world: mat4x4f,
@@ -304,7 +304,7 @@ fn computeOffsetPosition(p0: vec4f, p1: vec4f, index: u32) -> vec4f {
304
304
  instance,
305
305
  index
306
306
  );
307
- }`}function fi(n=2){return`struct ColorPicker {
307
+ }`}function di(n=2){return`struct ColorPicker {
308
308
  id: u32,
309
309
  };
310
310
 
@@ -314,7 +314,7 @@ fn computeOffsetPosition(p0: vec4f, p1: vec4f, index: u32) -> vec4f {
314
314
  fn main(@builtin(position) position: vec4f) -> @location(0) u32 {
315
315
  return colorPicker.id;
316
316
  }
317
- `}import{Utils as hi}from"@pacem/pacem-core";var _n={uv:"uv"};function vn(n=_n,e,t=1){let o=hi.uniqueCode(),r=`sampler_${o}`,i=`tex_${o}`,s=hi.extend({},_n,n),a=s.inputColor,c=s.outputColors;if(hi.isNullOrEmpty(a))throw new Error("Must provide either input and output vertex color parameter names.");let l=c?c.map((u,p)=>p===0?`${u} = textureSample(${i}, ${r}, ${s.uv}) * ${a};`:`${u} = ${c[0]};`):[`textureSample(${i}, ${r}, ${s.uv}) * ${a}`];return{bindings:[`@group(${e}) @binding(${t}) var ${r}: sampler;`,`@group(${e}) @binding(${t+1}) var ${i}: texture_2d<f32>;`],modifiers:l}}import{Utils as di}from"@pacem/pacem-core";var ua={normal:"normal",inputColor:"white"};function yn(n,e,t){let r=`directional_${di.uniqueCode()}`,i=di.extend({},ua,n),s=i.inputColor,a=i.outputColor,c=i.normal??"normal";if(di.isNullOrEmpty(s))throw new Error("Must provide input vertex color parameter name.");return{definitions:[`struct DirectionalLight {
317
+ `}import{Utils as mi}from"@pacem/pacem-core";var vn={uv:"uv"};function yn(n=vn,e,t=1){let o=mi.uniqueCode(),r=`sampler_${o}`,i=`tex_${o}`,s=mi.extend({},vn,n),a=s.inputColor,c=s.outputColors;if(mi.isNullOrEmpty(a))throw new Error("Must provide either input and output vertex color parameter names.");let l=c?c.map((u,p)=>p===0?`${u} = textureSample(${i}, ${r}, ${s.uv}) * ${a};`:`${u} = ${c[0]};`):[`textureSample(${i}, ${r}, ${s.uv}) * ${a}`];return{bindings:[`@group(${e}) @binding(${t}) var ${r}: sampler;`,`@group(${e}) @binding(${t+1}) var ${i}: texture_2d<f32>;`],modifiers:l}}import{Utils as gi}from"@pacem/pacem-core";var ha={normal:"normal",inputColor:"white"};function xn(n,e,t){let r=`directional_${gi.uniqueCode()}`,i=gi.extend({},ha,n),s=i.inputColor,a=i.outputColor,c=i.normal??"normal";if(gi.isNullOrEmpty(s))throw new Error("Must provide input vertex color parameter name.");return{definitions:[`struct DirectionalLight {
318
318
  color: vec4f,
319
319
  direction: vec3f,
320
320
  intensity: f32
@@ -324,7 +324,7 @@ fn computeOffsetPosition(p0: vec4f, p1: vec4f, index: u32) -> vec4f {
324
324
  let factor = light.intensity * .5 * (1.0 + dot(n, -d));
325
325
  let output = color.rgb * light.color.rgb * factor;
326
326
  return vec4f(output, color.a);
327
- }`],bindings:[`@group(${e}) @binding(${t}) var<uniform> ${r}: DirectionalLight;`],modifiers:a?[`${a} += computeDirectional(${c}, ${s}, ${r});`]:[`computeDirectional(${c}, ${s}, ${r})`]}}import{Utils as mi}from"@pacem/pacem-core";var pa={normal:"normal",position:"vertex",ray:"ray",inputColor:"white",specularColor:"empty",shininess:"0"};function xn(n,e,t){let r=`omni_${mi.uniqueCode()}`,i=mi.extend({},pa,n),s=i.inputColor,a=i.outputColor,c=i.normal,l=i.ray,u=i.position,p=i.shininess,f=i.specularColor;if(mi.isNullOrEmpty(s))throw new Error("Must provide input vertex color parameter name.");return{definitions:[`struct OmniLight {
327
+ }`],bindings:[`@group(${e}) @binding(${t}) var<uniform> ${r}: DirectionalLight;`],modifiers:a?[`${a} += computeDirectional(${c}, ${s}, ${r});`]:[`computeDirectional(${c}, ${s}, ${r})`]}}import{Utils as _i}from"@pacem/pacem-core";var da={normal:"normal",position:"vertex",ray:"ray",inputColor:"white",specularColor:"empty",shininess:"0"};function bn(n,e,t){let r=`omni_${_i.uniqueCode()}`,i=_i.extend({},da,n),s=i.inputColor,a=i.outputColor,c=i.normal,l=i.ray,u=i.position,p=i.shininess,f=i.specularColor;if(_i.isNullOrEmpty(s))throw new Error("Must provide input vertex color parameter name.");return{definitions:[`struct OmniLight {
328
328
  color: vec4f,
329
329
  position: vec3f,
330
330
  intensity: f32
@@ -342,9 +342,9 @@ fn computeOffsetPosition(p0: vec4f, p1: vec4f, index: u32) -> vec4f {
342
342
 
343
343
  let output = color.rgb * light.color.rgb * factor + specular;
344
344
  return vec4f(output, color.a);
345
- }`],bindings:[`@group(${e}) @binding(${t}) var<uniform> ${r}: OmniLight;`],modifiers:a?[`${a} += computeOmni(${u}, ${c}, ${l}, ${s}, ${f}, ${p}, ${r});`]:[`computeOmni(${u}, ${c}, ${l}, ${s}, ${f}, ${p}, ${r})`]}}import{Utils as gi}from"@pacem/pacem-core";function bn(n,e,t){let r=`ambient_${gi.uniqueCode()}`,i=n.inputColor,s=n.outputColor;if(gi.isNullOrEmpty(i)||gi.isNullOrEmpty(s))throw new Error("Must provide either input and output vertex color parameter names.");return{definitions:[`struct AmbientLight {
345
+ }`],bindings:[`@group(${e}) @binding(${t}) var<uniform> ${r}: OmniLight;`],modifiers:a?[`${a} += computeOmni(${u}, ${c}, ${l}, ${s}, ${f}, ${p}, ${r});`]:[`computeOmni(${u}, ${c}, ${l}, ${s}, ${f}, ${p}, ${r})`]}}import{Utils as vi}from"@pacem/pacem-core";function En(n,e,t){let r=`ambient_${vi.uniqueCode()}`,i=n.inputColor,s=n.outputColor;if(vi.isNullOrEmpty(i)||vi.isNullOrEmpty(s))throw new Error("Must provide either input and output vertex color parameter names.");return{definitions:[`struct AmbientLight {
346
346
  color: vec4f,
347
347
  intensity: f32
348
348
  }`,`fn computeAmbient(color: vec4f, light: AmbientLight) -> vec4f {
349
349
  return vec4f(light.intensity * color.rgb * light.color.rgb, color.a);
350
- }`],bindings:[`@group(${e}) @binding(${t}) var<uniform> ${r}: AmbientLight;`],modifiers:[`${s} = computeAmbient(${i}, ${r});`]}}import{Utils as $}from"@pacem/pacem-core";import{Colors as xi}from"@pacem/pacem-foundation";import{Geometry as Rn}from"@pacem/pacem-numerical";import{Geometry as En}from"@pacem/pacem-numerical";var Te=En.LinearAlgebra.Vector3D,yi=En.LinearAlgebra.Matrix3D,wn={width:1,height:1},Eo=class{static create(e){if(zr(e))return new vi(e);if(Ur(e))return new _i(e);throw new TypeError(`Camera type '${e.type}' not supported.`)}};function Cn(n,e,t){let o=Te.subtract(e,n),r=Te.cross(t,o),i=Te.cross(o,r);Te.normalize(r),Te.normalize(o),Te.normalize(i);let s=-Te.dot(r,n),a=-Te.dot(i,n),c=-Te.dot(o,n);return yi.from(r.x,i.x,o.x,0,r.y,i.y,o.y,0,r.z,i.z,o.z,0,s,a,c,1)}function Nn(n,e){if(n<=0)throw new RangeError("Near plane distance must be positive.");if(e<=n)throw new RangeError("Far plane distance must be greater than near plane distance.")}function fa(n=120,e=1,t=.1,o=1e3){Nn(t,o);let r=Math.tan(.5*Math.PI*(1-n/180)),i=r/e,s=Number.isFinite(o),a=s?o/(t-o):-1,c=s?o*t/(t-o):-t;return yi.from(i,0,0,0,0,r,0,0,0,0,a,-1,0,0,c,0)}function ha(n,e,t,o,r=.1,i=1e3){return Nn(r,i),yi.from(2/(e-n),0,0,0,0,2/(t-o),0,0,0,0,1/(r-i),0,(n+e)/(n-e),(t+o)/(o-t),r/(r-i),1)}var _i=class n{constructor(e){this._camera=e}static view(e){return Cn(e.position,e.lookAt,e.up)}static projection(e,t=wn){let o=e.position,r=e.lookAt,i=Te.subtract(r,o);Te.normalize(i);let s=Te.dot(i,o),{height:a,width:c}=t,l=c/a,u=.5*s,p=u*l,f=u,h=e.top*f,b=e.bottom*f,C=e.right*p,x=e.left*p;return ha(x,C,h,b,e.near,e.far)}view(){return n.view(this._camera)}projection(e){return n.projection(this._camera,e)}},vi=class n{constructor(e){this._camera=e}static view(e){return Cn(e.position,e.lookAt,e.up)}static projection(e,t=wn){let o=t.width/t.height/e.aspectRatio;return fa(e.fov,o,e.near,e.far)}view(){return n.view(this._camera)}projection(e){return n.projection(this._camera,e)}};var bi=Rn.LinearAlgebra.Vector3D,we=Rn.LinearAlgebra.Matrix3D;function ir(n,e){throw typeof e=="function"&&(e=e.name),new RangeError(`Buffer '${n}' not available for ${e}.`)}function Tn(n,e,...t){if(n.stage??=e?.item.stage,vt(n))return n.key??="group_"+$.uniqueCode(),new Ei(n,e,...t);if(Ee(n))return n.key??="mesh_"+$.uniqueCode(),new Ni(n,e,...t);if(pe(n))return n.key??="camera_"+$.uniqueCode(),new wi(n);if(Se(n))return n.key??="light_"+n.type+"_"+$.uniqueCode(),new Ri(n);throw new Error("Renderable is not supported.")}var wo=class{constructor(e){this._set=e}get items(){return this._set}loop(e){let{meshes:t,cameras:o,groups:r,lights:i}=this._set,s=o[0],a=!1,c=!1;for(let l of t)l.disposed||!e(l,s,i)||(q.clearFlags(l),a||(q.clearFlags(s),a=!0),c||(i.forEach(p=>q.clearFlags(p)),c=!0));for(let l of r)q.clearFlags(l)}},tr=class{static create(e){if(cr(e))return e.key??="geometry_"+$.uniqueCode(),new Ar(e);if(Ne(e))return new Pr(e);if(kr(e))return new Ci(e);throw new Error("Object is not supported.")}},q=class n{static create(e,...t){return Tn(e,null,...t)}static clearFlags(e,t=!1){if(e.item.flags.splice(0),t){let o=e;$.isNull(o.parent)||n.clearFlags(o.parent,!0)}}static allFlags(e){let t=e,o=t.parent,r=$.isNull(o)?[]:n.allFlags(o);return t.item.flags.union(r)}},rr=class{#e;constructor(e){this.#e=e}get item(){return this.#e}#t=!1;lock(){this.#t=!0}unlock(){this.#t=!1;let e=this.#r;for(;e.length>0;){let t=e.shift();this._destroyUnsafe(t)}}#r=[];_destroyUnsafe(e){"texture"in e?e.texture.destroy():"buffer"in e&&e.buffer.destroy()}destroySafely(...e){for(let t of Array.from(e).concat(...this.#r.splice(0)))t&&(this.#t?this.#r.push(t):this._destroyUnsafe(t))}#o=!1;destroy(){this.dispose(),this.#o=!0}get disposed(){return this.#o}},or=class extends rr{constructor(e,t){super(e),this.#t=t,this.#e=$.uniqueId()%4294967295}#e;#t;#r=new Map;get parent(){return this.#t}get id(){return this.#e}allFlags(){let e=this.parent;return this.item.flags.union(e?.allFlags()??[])}buildParentWorldTransform(){let e=we.identity(),t=this;for(;!$.isNull(t.parent);){let o=t.parent.item,r=we.translate(o.transformMatrix??we.identity(),o.position??bi.zero());e=we.multiply(e,r),t=t.parent}return e}buildWorldTransform(){let e=we.translate(this.item.transformMatrix??we.identity(),this.item.position??bi.zero()),t=this.buildParentWorldTransform();return we.multiply(e,t)}#o=new Map;version(e){return this.#o.get(e)??0}buffer(e,t){if(t==="u32id"){let r=this.#r,{pipeline:i,device:s}=e;if(r.has(i))return $.extend({fresh:!1},r.get(i));let a=new Uint32Array([this.id]),c=ne.createUniform(s,a,j+"u32id-buffer"),l=$.extend({buffer:c,value:a,version:performance.now()},{fresh:!0});return this.#r.set(i,l),l}let o=this.specificBuffer(e,t);return this.#o.set(t,o.version),o}},ma={shader:U.Basic,color:"#c0c0c0",flags:[]},Ei=class extends or{#e;constructor(e,t,...o){super(e,t),this.#e=e.childRenderables.map(r=>Tn(r,this,...o))}get children(){return this.#e}specificBuffer(e,t){return null}texture(e){throw new Error("Method not implemented.")}dispose(){this.#e.forEach(e=>e.destroy())}},wi=class n extends or{#e=new Map;#t;constructor(e){super(e)}texture(e){throw new Error("Method not implemented.")}specificBuffer(e,t){let o=!1;(this.allFlags().length>0||$.isNull(this.#t))&&(o=!0,this.#e.clear(),this._rebuildMatrices(e));let{pipeline:r}=e;if(this.#e.has(r)||(o=!0,this.#e.set(r,this.#t)),q.clearFlags(this),t==="cameraViewTransform")return $.extend(this.#t,{fresh:o});ir(t,n)}_rebuildMatrices({device:e,canvas:t}){let o=this.item,r=Eo.create(o),{x:i,y:s,z:a}=o.position,c=r.view(),l=r.projection(t),u=we.multiply(c,l),p=new Float32Array(36);if(p.set(we.toArray(c),0),p.set(we.toArray(u),16),p.set([i,s,a],32),$.isNull(this.#t)){let f=ne.createUniform(e,p,j+"view-buffer");this.#t={buffer:f,value:p,version:performance.now().roundoff()}}else this.#t.value=p,this.#t.version=performance.now().roundoff()}_destroyView(){this.#e.clear();let e=this.#t;this.#t=null,this.destroySafely(e)}dispose(){this._destroyView()}},Ar=class n extends rr{#e={};#t={positions:!0,normals:!0,uv:!0,packed:!0};#r;constructor(e){super(e),e.flags??=[]}buffer(e,t){let o=this.item.flags??[];($.isNull(this.#r)||o.includes(I.Geometry))&&(o.splice(0),this.#e={},this._rebuildGeometryBuffers(e));let r=this.#t,i=this.#r,{pipeline:s}=e,a=this.#e[t]??=new Map,c=!a.has(s),l=u=>(c&&a.set(s,u),u);switch(t){case"geometryPositions":let{positions:u}=i,p=r.positions;return r.positions=!1,$.extend(l(u),{fresh:p||c});case"geometryNormals":let{normals:f}=i,h=r.normals;return r.normals=!1,$.extend(l(f),{fresh:h||c});case"geometryTexCoords":let{uv:b}=i,C=r.uv;return r.uv=!1,$.extend({fresh:C||c},l(b));case"geometry":let{packed:x}=i,d=r.packed;return r.packed=!1,$.extend(l(x),{fresh:d||c});default:ir(t,n)}}texture(e){throw new Error("Method not implemented.")}_rebuildGeometryBuffers({device:e}){this._destroyBuffers();let t=performance.now(),o=this.item,r=o.key;if(kt(o)){let i=o,a=!$.isNullOrEmpty(i.triangleIndices)?i.triangleIndices.map(_=>i.positions[_]):i.positions,c=a.length*2,l=c+a.length,u=new Float32Array(l),p=new Float32Array(l),f=new Float32Array(c),h=new Float32Array(2*l+c);for(let _=0;_<a.length;_++){let T=2*_,N=3*_,{x:E,y:v,z:A}=a[_],{x:L,y:P,z:G}=i.normals[_],{x:R,y:m}=i.textureCoordinates[_];u.set([E,v,A],N),p.set([L,P,G],N),f.set([R,m],T),h.set([E,v,A,L,P,G,R,m],N*2+T)}let b=ne.create(e,u,j+"meshgeometry-"+r+"-positions-buffer"),C=ne.create(e,p,j+"meshgeometry-"+r+"-normals-buffer"),x=ne.create(e,f,j+"meshgeometry-"+r+"-uvmap-buffer"),d=ne.create(e,h,j+"meshgeometry-"+r+"-buffer");this.#r={packed:{buffer:d,value:h,version:t},positions:{buffer:b,value:u,version:t},normals:{buffer:C,value:p,version:t},uv:{buffer:x,value:f,version:t}},this.#t={positions:!0,normals:!0,uv:!0,packed:!0}}else{let i=new Float32Array(We.flattenVectorArray(o.positions)),s=ne.createStorage(e,i,j+"nodegeometry-"+r+"-positions-buffer");this.#r={positions:{buffer:s,value:i,version:t},packed:{buffer:s,value:i,version:t}},this.#t={positions:!0,packed:!0}}}_destroyBuffers(){this.#e={};let e=this.#r;$.isNull(e)||this.destroySafely(e.positions,e.normals,e.uv)}dispose(){this._destroyBuffers()}},Pr=class n extends rr{#e={};#t={};#r;#o=new Map;#i=new Map;constructor(e){super(e),e.flags??=[],e.flags.indexOf(I.Material)===-1&&e.flags.push(I.Material)}buffer(e,t){let o=this.item.flags??[],r=$.isNull(this.#r);o.includes(I.Material)&&(this.#e={},o.splice(0),r=!0,this.#i.clear(),this._resetMaterialBuffers());let{pipeline:i}=e,s=this.#e[t]??=new Map;switch(t){case"material":case"line":let a=this._ensureMaterialBuffer(e,t);return a?(s.has(i)||(r=!0,s.set(i,a)),$.extend(a,{fresh:r})):null;default:ir(t,n)}}_ensureMaterialBuffer(e,t="material"){let o=this.#o,r=o.get(t);return r||(o.has(t)?null:(r=this.#r?.buffer(e,t),r&&o.set(t,r),r))}_resetMaterialBuffers(){this.#r=fo.create(this.item),this._destroyBuffers()}texture(e,t="texture"){let o=this.#i,r=o.get(t),i=!1;if(!r){if(r=this.#r?.texture(e,t),!r)return null;o.set(t,r),i=!0,this.#t={}}let{pipeline:s}=e,a=this.#t[t]??=new Map;return a.has(s)||(i=!0,a.set(s,r)),$.extend(r,{fresh:i})}dispose(){this._destroyBuffers()}_destroyBuffers(){this.#e={},this.#t={};let e=this.#o.values();this.#o.clear(),this.destroySafely(...e);let t=this.#i.values();this.#i.clear(),t.forEach(o=>o.texture.destroy())}},Ci=class n extends rr{#e={time:0,cursor:{x:0,y:0},resolution:{width:0,height:0}};#t;#r=new Map;constructor(e){super(e),$.extend(this.#e,e)}buffer(e,t){if(t==="interaction")return this._ensureInteractionBuffer(e);ir(t,n)}texture(e){throw new Error("Method not implemented.")}_ensureInteractionBuffer(e,t="interaction"){let o=this.#e,r=this.item,i=!this.#t||r.time!==o.time||r.resolution?.width!==o.resolution.width||r.resolution?.height!==o.resolution.height;if(!i&&!$.isNull(r.cursor)&&(i=r.cursor.x!==o.cursor.x||r.cursor.y!==o.cursor.y),i){let c=new Float32Array([r.cursor?.x??0,r.cursor?.y??0,r.resolution.width,r.resolution.height,r.time,0]),l=ne.createUniform(e.device,c,j+"interaction-buffer");this.#t={buffer:l,value:c,version:performance.now()},this.#r.clear()}let{pipeline:s}=e,a=this.#r;return a.has(s)||(i=!0,a.set(s,this.#t)),$.extend(this.#t,{fresh:i})}_destroyBuffers(){this.#r.clear();let e=this.#t;$.isNull(e)||this.destroySafely(e)}dispose(){this._destroyBuffers()}},Ni=class n extends or{#e;#t;#r;#o;#i;#s={geometry:!0,material:!0,transform:!0};#n=new Map;constructor(e,t,o,r){super(e,t),e.flags??=[],e.flags.indexOf(I.Geometry)===-1&&e.flags.push(I.Geometry),e.flags.indexOf(I.Material)===-1&&e.flags.push(I.Material),e.flags.indexOf(I.Position)===-1&&e.flags.indexOf(I.Transform)===-1&&e.flags.push(I.Transform),this.#e=o,this.#r=r}texture(e,t){return this.#o?.texture(e,t)}specificBuffer(e,t){let o=this.#s,r=this.allFlags();($.isNull(this.#i)||r.includes(I.Position)||r.includes(I.Transform))&&(this.#n.clear(),o.transform=!0,this._rebuildWorldMatrices(e)),($.isNull(this.#t)||r.includes(I.Geometry))&&(o.geometry=!0,this._ensureGeometryBuffer()),($.isNull(this.#o)||r.includes(I.Material))&&(o.material=!0,this._ensureMaterialBuffer()),q.clearFlags(this);let i=this.#t,s=this.#o;switch(t){case"geometryPositions":case"geometryNormals":case"geometryTexCoords":case"geometry":return i.buffer(e,t);case"material":case"line":return s.buffer(e,t);case"objectWorldTransform":let a=this.#i,c=o.transform;o.transform=!1;let l=this.#n,{pipeline:u}=e,p=!l.has(u);return p&&l.set(u,a),$.extend(a,{fresh:c||p});default:ir(t,n)}}_ensureGeometryBuffer(){let e=this.#t,t=this.#e,r=this.item.geometry;if($.isNull(t))e?.destroy(),this.#t=new Ar(r);else{let i=t?.get(r);i?.disposed!==!1&&(i=new Ar(r),t.set(r,i)),this.#t=i}}_ensureMaterialBuffer(){let e=this.#o,t=this.#r,r=this.item.material??ma;if($.isNull(t))e?.destroy(),this.#o=new Pr(r);else{let i=t?.get(r);i?.disposed!==!1&&(i=new Pr(r),t.set(r,i)),this.#o=i}}_rebuildWorldMatrices({device:e}){let t=this.item,o=this.buildWorldTransform(),r=we.transpose(we.invert(o)),i=new Float32Array(28);if(i.set(we.toArray(o),0),i.set([r.m11,r.m12,r.m13,0,r.m21,r.m22,r.m23,0,r.m31,r.m32,r.m33,0],16),$.isNull(this.#i)){let s=ne.createUniform(e,i,j+"mesh-"+t.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.#n.clear();let e=this.#i;this.#i=null,this.destroySafely(e);let t=this.#o;this.#o=null,t?.destroy();let o=this.#t;this.#t=null,o?.destroy()}},Ri=class n extends or{#e;#t=new Map;constructor(e){super(e),e.flags.push(I.Light)}_rebuildAmbientLightBuffer({device:e}){let t=this.item,o=4,r=1,i=0,s=4,a=24,c=new Float32Array(a),{r:l,g:u,b:p,a:f}=xi.parse(t.color??"#fff");c.set([l,u,p,f],i),c.set([t.intensity],s),this.#e={value:c,buffer:ne.createUniform(e,c,j+"ambient-light-buffer"),version:performance.now()}}_rebuildDirectionalLightBuffer({device:e}){let t=this.item,o=1,r=4,i=3,s=0,a=4,c=7,l=c+o,u=new Float32Array(l),{r:p,g:f,b:h,a:b}=xi.parse(t.color??"#fff");u.set([p,f,h,b],s),u.set([t.intensity],c);let C=bi.subtract(t.position,t.target);u.set([C.x,C.y,C.z],a),this.#e={value:u,buffer:ne.createUniform(e,u,j+"directional-light-buffer"),version:performance.now()}}_rebuildOmniLightBuffer({device:e}){let t=this.item,o=1,r=4,i=3,s=0,a=4,c=7,l=c+o,u=new Float32Array(l),{r:p,g:f,b:h,a:b}=xi.parse(t.color??"#fff");u.set([p,f,h,b],s),u.set([t.intensity],c),u.set([t.position.x,t.position.y,t.position.z],a),this.#e={value:u,buffer:ne.createUniform(e,u,j+"omni-light-buffer"),version:performance.now()}}_rebuildLight(e){this.destroySafely(this.#e);let t=this.item;switch(t.type){case"direction":this._rebuildDirectionalLightBuffer(e);break;case"omni":this._rebuildOmniLightBuffer(e);break;case"ambient":this._rebuildAmbientLightBuffer(e);break;default:throw new Error(`Light '${t.type}' is not supported.`)}}texture(e){throw new Error("Method not implemented.")}specificBuffer(e,t){let o=this.#t,r=$.isNull(this.#e)||this.allFlags().length>0;r&&(o.clear(),this._rebuildLight(e)),q.clearFlags(this);let{pipeline:i}=e;if(o.has(i)||(r=!0,o.set(i,this.#e)),t==="light")return $.extend(this.#e,{fresh:r});ir(t,n)}dispose(){this.#t.clear();let e=this.#e;this.#e=null,this.destroySafely(e)}};var F=j,In={multisample:!0,packedVertices:!0,primitive:{topology:"triangle-list",frontFace:"ccw",cullMode:"back"}},fe=n=>{},It=class n{static{this._memoizer=new WeakMap}static dispose(e){let t=this._memoizer,o=t.get(e);z.isNull(o)||(o.clear(),t.delete(e))}static createColorPicking(e,t){let o=n.create(e,t);return o instanceof No||o instanceof Ro?{frame:o.raycast}:null}static create(e,[t,o,...r],i){let s=n._memoizer,a=s.get(e);if(z.isNull(a)&&s.set(e,a=new Map),z.isNull(t))throw new Error("Pipeline not implemented, given the provided arguments.");if(Ee(t.item)){let c=kt(t.item.geometry),l=!c&&Ke(t.item.material);if(!c&&!l)throw new Error("Pipeline not implemented, given the provided mesh argument.");let u=c?new Ti(t,o,...r):new Mi(t,o),p=u.key+(i?.modifiers?.version??""),f=a.get(p);if(f)return f;let h=c?new No(e,u):new Ro(e,u);h.build(i);let b=h;return z.extend(b,{id:p+"-"+e.canvas.width+"x"+e.canvas.height+"-"+z.Dates.now().toISOString()}),a.set(p,b),b}else throw new ReferenceError("Pipeline not implemented, given thst the first argument is not a mesh.")}},Co=class{constructor(){this.#e=new Map}#e;ensureBindGroup({device:e},t,o,r,i,s,a=()=>{}){let c=this.#e,l=typeof t=="string"?t:t.key,u=c.get(l);if(z.isNull(u)&&c.set(l,u=new Map),r||!u.has(s)){let p=o.map((b,C)=>({binding:C,resource:{buffer:b}})),f={label:s,layout:i,entries:p};a(f);let h=e.createBindGroup(f);return u.set(s,h),h}else return u.get(s)}},Ti=class n{#e=[];#t;#r;#o=new Map;#i={shader:"basic",lights:""};constructor(...e){this.add(...e)}reset(){this.#e.splice(0),this.#t=null,this.#o.clear(),this.#i={shader:"basic",lights:""}}add(...e){for(let t of e??[])if(Ee(t.item))if(z.isNull(this.#t)){this.#t=t;let o=t.item.material??{shader:U.Basic};this.#i.shader=o.shader+"-"+(o.map?"map":"nomap")}else throw new Error("Mesh already added.");else if(Se(t.item))this.#e.push(t),this.#i.lights+="-"+t.item.type;else if(pe(t.item))this.#r??=t;else throw new Error("Unknown object type.")}build(e){let t=this._computeBasicData(),o=this.key,r=this.vertex({inputModifier:e?.vertexInput,outputModifier:e?.vertexOutput}),i=this.fragment(t,{modifier:e?.fragment}),s=(...c)=>n.prototype.bindgroup.apply(this,c),a={lightCount:this.#e.length,mapCount:this.#t.item.material?.map?1:0};return{vertex:r,fragment:i,key:o,bindings:s,metadata:a}}get key(){let{shader:e,lights:t}=this.#i;return"mesh-"+e+t}bindgroup(e,t,o){let i=this.#o.get(e);if(z.isNull(i))return null;if(z.isNullOrEmpty(t))return i;let s=i.filter(a=>a.key===t);return isNaN(o)?s:o>=0&&o<i.length?s[o]:s}vertex(e){return fn(e)}_computeBasicData(){let e=this.#t.item,t=this.#e,o=e.material,r=!z.isNull(o?.texture),i=!z.isNullOrEmpty(t),s=z.isNull(e)?U.Basic:e.material?.shader??U.Basic;return{hasTexture:r,hasLighting:i,shader:s,materialBindGroupIndex:2,lightingBindGroupIndex:3}}_computeBindGroupsAndReferences(e=this._computeBasicData()){let{hasTexture:t,materialBindGroupIndex:o,lightingBindGroupIndex:r}=e,i=this.#o,s=this.#e,a={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},c={key:"material",group:o,binding:0,type:"buffer"};t?i.set(ve.Mesh,[a,c,{key:"texture",group:o,type:"texture"}]):i.set(ve.Mesh,[a,c]),i.set(ve.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}]);let l=s.map((u,p)=>({key:"light",group:r,binding:p,type:"buffer"}));l.push(...l),i.set(ve.Interaction,[{key:"interaction",group:0,type:"buffer",binding:1}])}fragment(e=this._computeBasicData(),t){this._computeBindGroupsAndReferences(e);let o={definitions:[],bindings:[],modifiers:[]},r=i=>{for(let s of i.definitions??[])o.definitions.indexOf(s)===-1&&o.definitions.push(s);z.isNullOrEmpty(i.bindings)||o.bindings.push(...i.bindings),z.isNullOrEmpty(i.modifiers)||o.modifiers.push(...i.modifiers)};switch(e.shader){case U.Basic:if(e.hasTexture){let a=e.materialBindGroupIndex,c=vn({inputColor:Tt,outputColors:[Tt],uv:"uv"},a);r(c)}let i=0,s=this.#e;for(let a of s){switch(a.item.type){case"direction":let l=yn({outputColor:Nr,normal:"normal"},e.lightingBindGroupIndex,i);r(l);break;case"omni":let u=xn({outputColor:Nr,normal:"normal",position:"vertex"},e.lightingBindGroupIndex,i);r(u);break;case"ambient":let p=bn({inputColor:Tt,outputColor:po},e.lightingBindGroupIndex,i);r(p);break}i++}return Tr.fragment(o,t)}}},Me={writeBufferConditionally:(n,e)=>{e.fresh&&n.queue.writeBuffer(e.buffer,0,e.value)}},No=class{constructor(e,t,o=new Co){this._context=e,this._builder=t,this._cache=o,this._ensureU32idBindGroup=(r,i,s)=>this._cache.ensureBindGroup(this._context,r,[i],s,this._pickBindGroupLayout,F+"mesh-colorpick-bind-group"),this._ensureMaterialBindGroup=(r,i,s,a,c=2)=>{let l=this._bindGroupLayouts[c],u=F+"material-bind-group";if(l.label!==F+"material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");return this._cache.ensureBindGroup(this._context,r,[i],a,l,u,p=>{let{device:f}=this.context,h=p.entries;s&&h.push({binding:1,resource:f.createSampler({addressModeU:"repeat",addressModeV:"repeat",magFilter:"linear",minFilter:"linear"})},{binding:2,resource:s.createView()})})},this._ensureWorldTransformBindGroup=(r,i,s,a=1,c=!1)=>{let l=this._bindGroupLayouts[a];if(l.label!==F+"mesh-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let u=r.key+"-"+(c?1:0),p=`${F}${c?"colorpick":"mesh"}-transforms-bind-group`;return this._cache.ensureBindGroup(this._context,u,[i],s,l,p)},this._ensureCameraProjectionAndInteractionDataBindGroup=(r,i,s,a,c=0,l=!1)=>{let u=this._bindGroupLayouts[c],p=r.key+"-"+(l?1:0),f=`${F}${l?"colorpick":"mesh"}-view-bind-group`;return this._cache.ensureBindGroup(this._context,p,[i,s],a,u,f)},this._ensureLightingBindGroup=(r,i,s=3)=>{let a=this._bindGroupLayouts[s],c=r.map(u=>u.id).join(":"),l=r.map(u=>u.buffer.buffer);return this._cache.ensureBindGroup(this._context,c,l,i,a,F+"mesh-lighting-bind-group")},this._bindGroupLayouts=[],this._bindVertex=fe,this._bindPicker=fe,this._bindWorldTransform=fe,this._bindRaycastWorldTransform=fe,this._bindCameraProjectionAndInteractionData=fe,this._bindRaycastCameraProjectionAndInteractionData=fe,this._bindLighting=fe,this._bindMaterial=fe,this.set=r=>{throw new Error("Deprecated.")},this.bind=(r,...i)=>{throw new Error("Deprecated.")},this.draw=(r,...i)=>{throw new Error("Deprecated.")},this.frame=(r,i,s,a,...c)=>{r.setPipeline(this._pipeline);try{this._bindVertex(r,s),this._bindWorldTransform(r,s),this._bindMaterial(r,s),this._bindCameraProjectionAndInteractionData(r,a,i),this._bindLighting(r,...c);let l=s.item,u=l.geometry;r.draw(u.triangleIndices?.length||u.positions.length)}catch(l){console.error("Pacem.Drawing3D.FrameException",l)}},this.raycast=(r,i,s,a)=>{r.setPipeline(this._pickPipeline);try{this._bindVertex(r,s),this._bindRaycastWorldTransform(r,s),this._bindRaycastCameraProjectionAndInteractionData(r,a,i),this._bindPicker(r,s);let c=s.item,l=c.geometry;r.draw(l.triangleIndices.length)}catch{}},this._key=t.key}get context(){return this._context}get key(){return this._key}build(e){let t=z.extend({},In,e??{}),o=this._builder,r=o.build(t.modifiers),i=z.extend({pipeline:this},this._context),s=i.device,a={module:s.createShaderModule({code:r.vertex}),buffers:t.packedVertices?[Mt.createVertex(0,3,3,2)]:[Mt.createVertex(0,3),Mt.createVertex(1,3),Mt.createVertex(2,2)]},c=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX|oe.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:oe.VERTEX|oe.FRAGMENT,buffer:{type:"uniform"}}],label:F+"mesh-view-bind-group-layout"}),l=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"mesh-transforms-bind-group-layout"}),u=[c,l],p={module:s.createShaderModule({code:r.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},f=u.length,h=[{binding:0,visibility:oe.FRAGMENT,buffer:{type:"read-only-storage"}}],{mapCount:b}=r.metadata,C=b>0;C&&h.push({visibility:oe.FRAGMENT,binding:1,sampler:{}},...Array(b).keys().map(m=>({visibility:oe.FRAGMENT,binding:2+m,texture:{}})));let x={label:F+"material-bind-group-layout",entries:h},d=s.createBindGroupLayout(x);u.push(d);let _=u.length,{lightCount:T}=r.metadata,N=T>0;if(N){let m=s.createBindGroupLayout({entries:[...Array(T).keys()].map((g,y)=>({visibility:oe.FRAGMENT,binding:y,buffer:{type:"uniform"}})),label:F+"lighting-bind-group-layout"});u.push(m)}let E={label:F+"mesh-render-pipeline",vertex:a,fragment:p,layout:s.createPipelineLayout({label:F+"mesh-render-pipeline-layout",bindGroupLayouts:this._bindGroupLayouts=u}),primitive:t.primitive};t.multisample&&(E.multisample={count:4},E.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._pipeline=s.createRenderPipeline(E);let v=this._pickBindGroupLayout=s.createBindGroupLayout({label:F+"mesh-colorpick-bind-group-layout",entries:[{visibility:oe.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),A={label:F+"mesh-colorpick-pipeline",vertex:a,fragment:{module:s.createShaderModule({code:fi(2)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:F+"mesh-colorpick-pipeline-layout",bindGroupLayouts:[c,l,v]}),primitive:t.primitive,depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickPipeline=s.createRenderPipeline(A);let L=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided.`);let{buffer:w}=y.buffer(i,"geometryPositions"),{buffer:M}=y.buffer(i,"geometryNormals"),{buffer:O}=y.buffer(i,"geometryTexCoords");m.setVertexBuffer(0,w),m.setVertexBuffer(1,M),m.setVertexBuffer(2,O)},P=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided.`);let{buffer:w}=y.buffer(i,"geometry");m.setVertexBuffer(0,w)};this._bindVertex=t.packedVertices?P:L;let G=(m,g,y)=>{if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let w=g.buffer(i,"objectWorldTransform"),M=w.buffer;Me.writeBufferConditionally(s,w);let{group:O}=r.bindings(ve.Mesh,"objectWorldTransform",0),D=this._ensureWorldTransformBindGroup(g.item,M,w.fresh,O,y);m.setBindGroup(O,D)};this._bindWorldTransform=(m,...g)=>{let y=g.at(0);G(m,y,!1)},this._bindRaycastWorldTransform=(m,...g)=>{let y=g.at(0);G(m,y,!0)};let R=(m,g,y,w)=>{if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing view projection buffers was provided.`);let M=g.buffer(i,"cameraViewTransform"),O=M.buffer;if(Me.writeBufferConditionally(s,M),z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing interaction buffers was provided.`);let D=y.buffer(i,"interaction"),X=D.buffer;Me.writeBufferConditionally(s,D);let{group:H}=r.bindings(ve.Camera,"cameraViewTransform",0),{group:K}=r.bindings(ve.Interaction,"interaction",0);if(H!==K)throw new ReferenceError(`Layout bind group mismatch: ${H} vs ${K}.`);let ie=this._ensureCameraProjectionAndInteractionDataBindGroup(g.item,O,X,M.fresh||D.fresh,H,w);m.setBindGroup(H,ie)};this._bindCameraProjectionAndInteractionData=(m,...g)=>{let y=g.at(0),w=g.at(1);R(m,y,w,!1)},this._bindRaycastCameraProjectionAndInteractionData=(m,...g)=>{let y=g.at(0),w=g.at(1);R(m,y,w,!0)},this._bindMaterial=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex colors was provided.`);let w=y.buffer(i,"material"),M=w.buffer;Me.writeBufferConditionally(s,w);let O=y.texture(i),D=O?.texture,X=this._ensureMaterialBindGroup(y.item,M,D,w.fresh,f);m.setBindGroup(f,X),C&&s.queue.copyExternalImageToTexture({source:O.source,flipY:!0},{texture:D},{width:D.width,height:D.height})},this._bindLighting=(m,...g)=>{if(N){let w=Array.from(g).map(D=>({buffer:D.buffer(i,"light"),id:D.item.key})),M=w.some(D=>D.buffer.fresh),O=this._ensureLightingBindGroup(w,M,_);for(let D of w)Me.writeBufferConditionally(s,D.buffer);m.setBindGroup(_,O)}},this._bindPicker=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let w=y.buffer(i,"u32id"),M=w.buffer;Me.writeBufferConditionally(s,w);let O=2,D=w.fresh,X=this._ensureU32idBindGroup(y.item,M,D);m.setBindGroup(O,X)}}},Mi=class n{#e;#t;#r=new Map;constructor(...e){this.add(...e)}reset(){this.#e=null,this.#r.clear()}add(...e){for(let t of e??[])if(Ee(t.item))if(z.isNull(this.#e))this.#e=t;else throw new Error("Line already added.");else if(pe(t.item))this.#t??=t;else if(!Se(t.item))throw new Error("Unknown object type.")}build(){let e=this._computeBasicData(),t=this.key,o=this.vertex(e),r=this.fragment(e);return{vertex:o,fragment:r,key:t,bindings:(...s)=>n.prototype.bindgroup.apply(this,s),metadata:{thickness:e.thickness,dashPattern:e.dashPattern}}}get key(){let e=(this.#e?.item).material?.lineWidth>1;return U.Line+(e?"-fat":"")}bindgroup(e,t,o){let i=this.#r.get(e);if(z.isNull(i))return null;if(z.isNullOrEmpty(t))return i;let s=i.filter(a=>a.key===t);return isNaN(o)?s:o>=0&&o<i.length?s[o]:s}vertex(e=this._computeBasicData()){return e.thickness>1?gn():mn()}_computeBasicData(){let e=this.#e.item,t=z.isNull(e)?U.Line:e.material?.shader??U.Line,o=e.material,r=o?.lineWidth??1,i=o?.dashArray;return{shader:t,thickness:r,dashPattern:i}}_computeBindGroupsAndReferences(e=this._computeBasicData()){let t=this.#r,o={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},r={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"};t.set(ve.Mesh,[o,r,i,s]),t.set(ve.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}])}fragment(e=this._computeBasicData()){this._computeBindGroupsAndReferences(e);let t={definitions:[],bindings:[],modifiers:[]};if(e.shader===U.Line)return Mr.fragment(t)}},Ro=class{#e;constructor(e,t,o=new Co){this._lineBuilder=t,this._cache=o,this._ensureLineU32idBindGroup=(r,i,s)=>{let a=this.context;return this._cache.ensureBindGroup(a,r,[i],s,this._pickLineBindGroupLayout,F+"line-colorpick-bind-group")},this._ensureLineMaterialBindGroup=(r,i,s,a=2)=>{let c=this._bindLineGroupLayouts[a];if(c.label!==F+"line-material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let l=this.context;return this._cache.ensureBindGroup(l,r,[i],s,c,F+"line-material-bind-group")},this._ensureLinePositionsBindGroup=(r,i,s,a)=>{let c=this._bindLineGroupLayouts[a];if(c.label!==F+"line-positions-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let l=this.context;return this._cache.ensureBindGroup(l,r,i,s,c,F+"line-positions-bind-group")},this._ensureLineWorldTransformBindGroup=(r,i,s,a=1,c=!1)=>{let l=this._bindLineGroupLayouts[a];if(l.label!==F+"line-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let u=r.key+"-line-"+(c?1:0),p=`${F}${c?"colorpick":""}-line-transforms-bind-group`,f=this.context;return this._cache.ensureBindGroup(f,u,[i],s,l,p)},this._ensureLineCameraProjectionBindGroup=(r,i,s,a=0,c=!1)=>{let l=this._bindLineGroupLayouts[a],u=r.key+"-line-"+(c?1:0),p=`${F}${c?"colorpick":""}-line-view-bind-group`,f=this.context;return this._cache.ensureBindGroup(f,u,[i],s,l,p)},this._bindLineGroupLayouts=[],this._bindLinePositions=fe,this._bindLinePicker=fe,this._bindLineWorldTransform=fe,this._bindLineRaycastWorldTransform=fe,this._bindLineCameraProjection=fe,this._bindLineRaycastCameraProjection=fe,this._bindLineMaterial=fe,this._drawLine=fe,this.set=r=>{throw new Error("Deprecated.")},this.bind=(r,...i)=>{throw new Error("Deprecated.")},this.draw=(r,...i)=>{throw new Error("Deprecated.")},this.frame=(r,i,s,a)=>{r.setPipeline(this._linePipeline);try{this._bindLineWorldTransform(r,s),this._bindLineCameraProjection(r,a),this._bindLinePositions(r,s),this._bindLineMaterial(r,s),this._drawLine(r,s)}catch(c){console.error("Pacem.Drawing3D.FrameException",c)}},this.raycast=(r,i,s,a)=>{r.setPipeline(this._pickLinePipeline);try{this._bindLineRaycastWorldTransform(r,s),this._bindLineRaycastCameraProjection(r,a),this._bindLinePositions(r,s),this._bindLinePicker(r,s),this._drawLine(r,s)}catch{}},this.#e=e,this._lineKey=t.key}get context(){return this.#e}get key(){return this._lineKey}build(e){let t=z.extend({},In,e??{}),o=this._lineBuilder,r=o.build(),i=z.extend({pipeline:this},this.#e),s=i.device,a=r.metadata.thickness>1,c={module:s.createShaderModule({code:r.vertex}),buffers:[]},l=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"line-transforms-bind-group-layout"}),u=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"line-view-bind-group-layout"}),p=[{binding:0,visibility:oe.VERTEX,buffer:{type:"read-only-storage"}}];a&&p.push({binding:1,visibility:oe.VERTEX,buffer:{type:"uniform"}});let f=s.createBindGroupLayout({entries:p,label:F+"line-positions-bind-group-layout"}),h=[u,l,f],b=h.length,C=h.slice(),x={module:s.createShaderModule({code:r.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},d=C.length,_=[{binding:0,visibility:oe.FRAGMENT,buffer:{type:"read-only-storage"}}],T={label:F+"line-material-bind-group-layout",entries:_},N=s.createBindGroupLayout(T);C.push(N);let E=a?t.primitive.topology:"line-list",v={label:F+"line-render-pipeline",vertex:c,fragment:x,layout:s.createPipelineLayout({label:F+"line-render-pipeline-layout",bindGroupLayouts:this._bindLineGroupLayouts=C}),primitive:z.extend({},t.primitive,{topology:E})};t.multisample&&(v.multisample={count:4},v.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._linePipeline=s.createRenderPipeline(v);let A=this._pickLineBindGroupLayout=s.createBindGroupLayout({label:F+"line-colorpick-bind-group-layout",entries:[{visibility:oe.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),L={label:F+"line-colorpick-pipeline",vertex:c,fragment:{module:s.createShaderModule({code:fi(b)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:F+"line-colorpick-pipeline-layout",bindGroupLayouts:h.concat(A)}),primitive:z.extend({},t.primitive,{topology:E}),depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickLinePipeline=s.createRenderPipeline(L);let P=(R,m,g)=>{if(z.isNull(m))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let y=m.buffer(i,"objectWorldTransform"),w=y.buffer;Me.writeBufferConditionally(s,y);let{group:M}=r.bindings(ve.Mesh,"objectWorldTransform",0),O=this._ensureLineWorldTransformBindGroup(m.item,w,!1,M,g);R.setBindGroup(M,O)};this._bindLineWorldTransform=(R,...m)=>{let g=m.at(0);P(R,g,!1)},this._bindLineRaycastWorldTransform=(R,...m)=>{let g=m.at(0);P(R,g,!0)};let G=(R,m,g)=>{if(z.isNull(m))throw new ReferenceError(`Null ${q.name} bringing view projection buffers was provided.`);let y=m.buffer(i,"cameraViewTransform"),w=y.buffer;Me.writeBufferConditionally(s,y);let{group:M}=r.bindings(ve.Camera,"cameraViewTransform",0),O=this._ensureLineCameraProjectionBindGroup(m.item,w,!1,M,g);R.setBindGroup(M,O)};this._bindLineCameraProjection=(R,...m)=>{let g=m.at(0);G(R,g,!1)},this._bindLineRaycastCameraProjection=(R,...m)=>{let g=m.at(0);G(R,g,!0)},this._bindLinePositions=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided as index 0.`);let y=g.buffer(i,"geometryPositions"),w=y.buffer,M=y.fresh,O=[w];if(Me.writeBufferConditionally(s,y),a){let H=g.buffer(i,"line"),K=H.buffer;M||=H.fresh,O.push(K),Me.writeBufferConditionally(s,H)}let{group:D}=r.bindings(ve.Mesh,"line",0),X=this._ensureLinePositionsBindGroup(g.item,O,M,D);R.setBindGroup(D,X)},this._bindLineMaterial=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing vertex colors was provided.`);let y=g.buffer(i,"material"),w=y.buffer;Me.writeBufferConditionally(s,y);let M=this._ensureLineMaterialBindGroup(g.item,w,y.fresh,d);R.setBindGroup(d,M)},this._bindLinePicker=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let y=g.buffer(i,"u32id"),w=y.buffer,M=y.value;Me.writeBufferConditionally(s,y);let O=this._ensureLineU32idBindGroup(g.item,w,!1);R.setBindGroup(b,O)},this._drawLine=(R,...m)=>{let y=m.at(0).item,w=y.geometry;a?R.draw(6,w.positions.length-1,0,0):R.draw(w.positions.length)}}};import{Utils as At}from"@pacem/pacem-core";var Or=class{static{this._memoizer=new WeakMap}static dispose(e){let t=this._memoizer;if(t.has(e)){let o=t.get(e);for(let r of o.values())r.destroy();o.clear(),t.delete(e)}}static createColorPicking(e){let t=this._memoizer;t.has(e)||t.set(e,new Map);let o=t.get(e),r="colorpick";if(o.has(r))return o.get(r);let i=new Ii(e);return o.set(r,i),i}},Lr=1,Ii=class{constructor(e){this._context=e,this._objects=new Map,this.frame=(t,...o)=>{if(At.isNull(this._encoder))throw new Error("Null encoder. Maybe you missed to call the 'begin' method first.");let r=Array.from(o);It.createColorPicking(this._context,r)?.frame(this._pass,t,...o);for(let s of r)s.item.inert||this._objects.set(s.id,s)},this.end=t=>{if(!At.isNull(this._handle))return this._handle;let o=this._pass,r=this._encoder,{device:i}=this._context,{render:s}=this._textures,a=s.texture,c=this._ensureBuffer();o.end(),r.copyTextureToBuffer({texture:a,origin:{x:t.x,y:t.y}},{buffer:c,bytesPerRow:(Lr*4+255|0)*256,rowsPerImage:1},{width:Lr}),i.queue.submit([r.finish()]),this._encoder=null;let l=this,u=l._objects,p=()=>{l._handle=null};return this._handle=new Promise((f,h)=>{c.mapAsync(uo.READ,0,4*Lr).then(b=>{let x=new Uint32Array(c.getMappedRange(0,4*Lr))[0];c.unmap(),p();let d=u.get(x);f(d?[d.item]:[])})})}}_createTexture(e){let{device:t,canvas:o}=this._context,r=Math.min(t.limits.maxTextureDimension2D,o.clientWidth),i=Math.min(t.limits.maxTextureDimension2D,o.clientHeight);return t.createTexture({size:[r,i,1],format:e,usage:Re.COPY_SRC|Re.RENDER_ATTACHMENT})}_ensureBuffer(){let e=this._buffer;if(!At.isNull(e))return e;let{device:t}=this._context;return this._buffer=t.createBuffer({label:j+"colorpick-output-buffer",size:Lr*4,usage:ye.MAP_READ|ye.COPY_DST})}_ensureTextures(){let e=this._textures;if(!At.isNull(e))return e;let t=this._createTexture("r32uint"),o=this._createTexture("depth24plus"),r={texture:t,view:t.createView()},i={texture:o,view:o.createView()};return this._textures={render:r,depth:i}}_destroyTexture(e){At.isNull(e)||e.texture?.destroy()}destroy(){let e=this._textures,t=this._buffer;if(!At.isNullOrEmpty(e)){let{render:o,depth:r}=e;this._destroyTexture(o),this._destroyTexture(r),this._textures=null}At.isNull(t)||(t.destroy(),this._buffer=null)}begin(){let{device:e}=this._context;this._encoder=e.createCommandEncoder({label:j+"colorpick-raycaster"});let{render:t,depth:o}=this._ensureTextures(),r={label:j+"colorpick-raycaster-pass",colorAttachments:[{view:t.view,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:o.view,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};this._pass=this._encoder.beginRenderPass(r),this._objects.clear()}};var Ai=xa.LinearAlgebra.Vector3D,nr;(function(n){n[n.NotSupported=0]="NotSupported",n[n.Disabled=1]="Disabled"})(nr||(nr={}));var To=class{static create(e,t){return new Promise((o,r)=>{if(navigator.gpu){let i=new Pi(e);i.init(t).then(s=>o(i),s=>{let c={message:typeof s=="string"?s:s.message,cause:nr.Disabled};r(c)})}else{let s={message:"WebGPU not supported.",cause:nr.NotSupported};r(s)}})}};function ba(n){return{bottom:-1,top:1,left:-1,right:1,near:.1,far:200,lookAt:Ai.from(0,0,0),up:Ai.j(),position:Ai.from(0,0,1),type:"orthographic",flags:[],stage:n}}function Ea(...n){for(let e of n||[])e?.destroy()}var Pi=class{#e;#t;#r;#o;#i;#s;#n;#l;#a;#p;#f;#h;constructor(e){this.#o=new WeakMap,this.#i=new WeakMap,this.#s=new WeakMap,this.#a={enableValidation:!1},this.#p=!1,this._logError=r=>{let i=this.#e,s=i.logger;if(!te.isNull(s)){let a="error"in r?r.error:r;s.log(va.LogLevel.Error,a.message,"WebGPU")}},this.#c=!0,this.#u=!1;let t=(this.#e=e).stage,o=document.createElement("canvas");o.id=_a+"_3d_stage_"+te.uniqueCode(),t.innerHTML="",t.appendChild(this.#t=o),this.#f=tr.create(this.#h={time:performance.now(),cursor:{x:0,y:0},resolution:{width:0,height:0}})}_buildPassDescriptor({multisample:e,format:t}){let{context:o,device:r}=this.#r,i=o.getCurrentTexture(),s=this.#l;if(te.isNull(s)){if(s={},e){let b=r.createTexture({label:j+"render-texture",format:t??i.format,usage:Re.RENDER_ATTACHMENT,size:[i.width,i.height],sampleCount:4});s.render={texture:b,view:b.createView({label:j+"render-texture-view"})};let C=r.createTexture({label:j+"depth-texture",format:"depth24plus",usage:Re.RENDER_ATTACHMENT,size:[i.width,i.height],sampleCount:4});s.depth={texture:C,view:C.createView({label:j+"depth-texture-view"})}}this.#l=s}let{transparent:a,background:c}=this.#e,l=a?{r:0,g:0,b:0,a:0}:c?typeof c=="string"?ya.parse(c):c:{r:0,g:0,b:0,a:1},u=We.flattenVectorArray([l]),p=i.createView({label:j+"canvas-texture-view"}),f={view:p,clearValue:u,loadOp:"clear",storeOp:"store"},h={colorAttachments:[f]};if(e){let b=s.render.view,C=s.depth.view;h.depthStencilAttachment={view:C,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store",stencilClearValue:0,stencilReadOnly:!0},f.view=b,f.resolveTarget=p}return h}_buildContext(e=this.#t,t=this.#e.size){t??=e;let o=t.width,r=t.height,i=1;e.width=o*i,e.height=r*i;let s=e.getContext("webgpu"),a=navigator.gpu.getPreferredCanvasFormat();return{context:s,textureFormat:a}}_buildUpContext(e,t,o,r){let{transparent:i}=this.#e;o.configure({alphaMode:i?"premultiplied":"opaque",device:e,format:r}),this.#r={device:e,adapter:t,canvas:this.#t,context:o,format:r},this.#c=!1}async init(e){this.#a=e;let t=await navigator.gpu.requestAdapter();if(te.isNull(t))throw new Error("WebGPU adapter unavalable or disabled.");let o=await t.requestDevice();if(te.isNull(t))throw new Error("WebGPU device unavalable or disabled.");o.addEventListener("uncapturederror",this._logError),this.#u=!te.isNull(e.modifiers?.version)&&!te.isNull(e.modifiers)&&(!te.isNull(e.modifiers.vertexInput)||!te.isNull(e.modifiers.vertexOutput)||!te.isNull(e.modifiers.fragment));let{context:r,textureFormat:i}=this._buildContext();this._buildUpContext(o,t,r,i)}#c;#u;render(e){if(this.#c||te.isNull(this.#n)||!(this.#t.width>0)||!(this.#t.height>0))return;let t=this.#r,o=t.device,r=this.#n,i=this.#a?.enableValidation??!1;this.#u&&te.extend(this.#h,e);let a=this._buildPassDescriptor({multisample:!0}),c=o.createCommandEncoder({label:j+"renderer"}),l=c.beginRenderPass(a);r.loop((u,p,f)=>{if(u.item.hide)return!1;i&&o.pushErrorScope("validation");let h=[u,p,...f];return It.create(t,h,{multisample:!0,modifiers:this.#a.modifiers}).frame(l,this.#f,...h),i&&o.popErrorScope().then(C=>{C&&this._logError(C)}),!0}),l.end(),o.queue.submit([c.finish()])}set disabled(e){this.#p=e}get disabled(){return this.#p}raycast(e){if(this.#c||te.isNull(this.#n))return Promise.resolve([]);let t=this.#r,o=t.device,r=this.#n,i=this.#a?.enableValidation??!1,s=Or.createColorPicking(t);return s.begin(),r.loop((a,c)=>a.item.hide?!1:(i&&o.pushErrorScope("validation"),s.frame(this.#f,a,c),i&&o.popErrorScope().then(l=>{l&&this._logError(l)}),!0)),s.end(e)}_disposeRenderableJustInCase(e){let t=this.#o;t.has(e)&&(t.get(e)?.destroy(),t.delete(e))}_createOrYieldRenderable(e,t=this.#i,o=this.#s){e.stage??=this.#e;let r=this.#o,i=r.get(e);return te.isNull(i)&&r.set(e,i=q.create(e,t)),i}_createOrYieldGeometry(e){let t=this.#i,o=t.get(e);return te.isNull(o)&&t.set(e,o=tr.create(e)),o}_createOrYieldMaterial(e){let t=this.#s,o=t.get(e);return te.isNull(o)&&t.set(e,o=tr.create(e)),o}_unwrapBuffers(e,t){t??={meshes:[],lights:[],cameras:[],groups:[]};for(let o of e.children)o.item.stage??=this.#e,Ee(o.item)&&t.meshes.push(o),pe(o.item)&&t.cameras.push(o),Se(o.item)&&t.lights.push(o),vt(o.item)&&(t.groups.push(o),this._unwrapBuffers(o,t));return t}_update(e){let t=[],o=[],r=[],i=l=>this._createOrYieldRenderable(l),s;for(let l of e){if(l.hide){this._disposeRenderableJustInCase(l);continue}if(l.stage??=this.#e,vt(l)){let u=l;u.flags.includes(I.Children)&&this.#o.delete(u),t.push(i(u))}Ee(l)&&l.geometry&&(this._createOrYieldGeometry(l.geometry),te.isNull(l.material)||this._createOrYieldMaterial(l.material),o.push(i(l))),Se(l)&&r.push(i(l)),pe(l)&&(s??=l)}s??=ba(this.#e);let a=i(s),c={meshes:o,lights:r,cameras:[a],groups:t};for(let l of t)c=this._unwrapBuffers(l,c);this.#n?.items.meshes.forEach(l=>{o.includes(l)||l.destroy()}),this.#n=new wo(c)}update(...e){this._update(Array.from(e))}dispose(){if(this.#n=null,this._disposeContext()){let{device:e}=this.#r;e.removeEventListener("uncapturederror",this._logError),e.destroy}}_disposeContext(){let e=this.#r;if(te.isNull(e))return!1;Or.dispose(e),It.dispose(e);let t=this.#l;if(this.#l=null,!te.isNull(t)){let{render:o,depth:r}=t;Ea(o?.texture,r?.texture)}return e.context.unconfigure(),!0}resize(e){if(this.#c=!0,this._disposeContext()){let{device:t,adapter:o}=this.#r,{context:r,textureFormat:i}=this._buildContext(this.canvas,e);this._buildUpContext(t,o,r,i),this.#u&&te.extend(this.#h,{resolution:e})}}get canvas(){return this.#t}};var Lt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Pn="WebGPURaycastCallback",Li="WebGPURaycastPixel",Ln=Mo.getAttachedPropertyValue,On=Mo.setAttachedPropertyValue,Ta=Mo.deleteAttachedPropertyValue,sr=class extends Na.PacemItemElement{findContainer(){return Mo.findAncestor(this,e=>e instanceof Pt)}#e="";get version(){return this.#e}#t=new MutationObserver(()=>{this.wgsl=this.textContent});viewActivatedCallback(){super.viewActivatedCallback(),this.wgsl=this.textContent,this.#t.observe(this,{characterData:!0})}propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="wgsl"&&this._computeVersion(o)}_computeVersion(e=this.wgsl){Ra.hash(e).then(t=>{if(t!==this.#e){let o=this.#e,r=t;this.#e=r;let i=new Oi({propertyName:"version",oldValue:o,currentValue:r,firstChange:pt.isNullOrEmpty(o)});this.dispatchEvent(i)}})}disconnectedCallback(){this.#t.disconnect(),super.disconnectedCallback()}};Lt([Io({emit:!1,converter:Di.String})],sr.prototype,"type",void 0);Lt([Io({emit:!1,converter:Di.String})],sr.prototype,"wgsl",void 0);sr=Lt([Dn({tagName:Gn+"-3d-wgsl-script"})],sr);var Pt=class extends Je{constructor(){super(...arguments),this.#e=[],this._scriptVersionChangeHandler=e=>{let{propertyName:t}=e.detail;t==="version"&&this._parseWgslModifiers(e.detail.currentValue)},this.#t=new Set,this.#r=new Map,this.#o=!0,this.#i=!0,this.#s=new WeakMap}invalidateSize(e,t=e.size){this._ensureRenderer(e)?.resize(t)}#e;get items(){return this.#e}register(e){let t=this.#e;return e instanceof sr&&!t.includes(e)?(e.addEventListener(An,this._scriptVersionChangeHandler,!1),t.push(e),this._parseWgslModifiers(this.modifiers?.version),!0):!1}unregister(e){let t=this.#e,o=t.indexOf(e);return o>=0?(e.removeEventListener(An,this._scriptVersionChangeHandler,!1),t.splice(o,1),this._parseWgslModifiers(this.modifiers?.version),!0):!1}#t;#r;#o;#i;get supported(){return this.#o}get active(){return this.#i}_webGPUNotSupported(e){this.#o&&e.cause===nr.NotSupported&&(this.#o=!1,this.dispatchEvent(new Oi({propertyName:"supported",oldValue:null,currentValue:!1}))),this.#i&&(this.#i=!1,this.dispatchEvent(new Oi({propertyName:"active",oldValue:null,currentValue:!1})))}initialize(e){let t=this.#r,o=this.#t;return o.has(e)||o.add(e),To.create(e,{enableValidation:this.enableValidation??!1,modifiers:this.modifiers}).then(r=>(t.get(e)?.update(),t.set(e,r),this._updatePipeline(e),r.canvas),r=>(this.log(Ca.LogLevel.Error,r.message),this._webGPUNotSupported(r),null))}_parseWgslModifiers(e){let t=this.#e,o=t.find(l=>l.type=="vertex-input"),r=t.find(l=>l.type=="vertex-output"),i=t.find(l=>l.type=="fragment"),s=o?.wgsl,a=r?.wgsl,c=i?.wgsl;this.modifiers={vertexInput:s,vertexOutput:a,fragment:c,version:e}}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"modifiers":case"enableValidation":this._reinitialize();break}}disconnectedCallback(){let e=this.#r;for(let[t,o]of e)o?.dispose();e.clear(),this.#t.clear(),super.disconnectedCallback()}dispose(e){let t=this.#r,o=this.#t;t.has(e)&&(t.get(e)?.dispose(),t.delete(e)),o.has(e)&&o.delete(e)}_reinitialize(){for(let e of this.#t.values())this.initialize(e)}_ensureRenderer(e){return this.#r.get(e)}_updatePipeline(e){this._ensureRenderer(e)?.update(...e.datasource)}#s;render(e){let t=e.size?.width,o=e.size?.height;if(!(t>0)||!(o>0))return;let r=this._ensureRenderer(e);if(pt.isNull(r))return;this.#s.has(e)&&(this.#s.delete(e),this._itemsChangedExec(e));let i=Ln(e,Li);if(r.render({cursor:i,time:performance.now(),resolution:{width:t,height:o}}),!e.interactive)return;let s=Ln(e,Pn);if(!pt.isNullOrEmpty(s)){if(pt.isNullOrEmpty(i)){s(null);return}r.raycast(i).then(a=>{if(pt.isNullOrEmpty(a))s(null);else{let c={object:a[0],point:null};s(c)}})}}snapshot(e,t,o,r){let i=this.#r;if(!i.has(e))return Promise.resolve(null);let{canvas:s}=i.get(e),a=!pt.isNullOrEmpty(t),c=o??(a?"image/jpeg":null),l=r??(a?.9:null);return new Promise((u,p)=>{this.render(e),pt.snapshotElement(s,t,c,l).then(u)})}raycast(e,t,o,r){On(e,Pn,r),t.x<0||t.y<0||t.x>=o.width||t.y>=o.height?Ta(e,Li):On(e,Li,t)}_itemsChangedExec(e){this._updatePipeline(e)}_itemsChanged(e,t){this.#s.set(e,!0)}addItem(e,t){this._itemsChanged(e,t)}removeItem(e,t){this._itemsChanged(e,t)}updateItem(e,t){(pt.isNull(t)||t.flags.indexOf(I.Visibility)>=0||t.flags.indexOf(I.Children)>=0)&&this._itemsChanged(e,t)}zoomFit(e,...t){return Promise.resolve()}project(e,t){return{x:0,y:0}}getScene(e){return e}};Lt([wa(100)],Pt.prototype,"_parseWgslModifiers",null);Lt([Io({emit:!1})],Pt.prototype,"modifiers",void 0);Lt([Io({emit:!1,converter:Di.Boolean})],Pt.prototype,"enableValidation",void 0);Pt=Lt([Dn({tagName:Gn+"-3d-webgpu-adapter"})],Pt);import{CustomElement as Ma,P as Ia,Watch as ht,PropertyConverters as Dt,Utils as Ot,CustomEventUtils as Gi,avoidHandler as Dr,Behaviors as Aa,PropertyChangeEventName as Bn}from"@pacem/pacem-core";import{Geometry as Lo}from"@pacem/pacem-numerical";var Ye=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},le=Lo.LinearAlgebra.Vector3D,ft=Lo.LinearAlgebra.Matrix3D,Ao=Lo.LinearAlgebra.Quaternion,Kp=Lo.LinearAlgebra.Spherical;function Pa(n){return pe(n)?n.stage:null}var La=1,Oa=1,Da=.05,Gr=.001,Br={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}},Po=class n{constructor(e,t){this._config=t,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=i=>{let{rotation:s,pan:a}=this._config,c=i.pointerType==="mouse",l=s.enabled&&c&&i.button===s.button&&Gi.matchModifiers(i,s.modifiers),u=a.enabled&&c&&i.button===a.button&&Gi.matchModifiers(i,a.modifiers);!l&&!u||(this.#t=l,(this.#e=u)&&(this._currentState=n._buildState(this._camera),Ot.extend(this._input,le.zero()),this._progress.x=this._progress.y=0),Dr(i),window.clearTimeout(this.#r),window.addEventListener("pointerup",this._endHandler,!1),window.addEventListener("pointermove",this._moveHandler,!1),window.addEventListener("contextmenu",this._avoidHandler,!1))},this._avoidHandler=i=>Dr(i),this._endHandler=i=>{Dr(i),this.#r=window.setTimeout(()=>{window.removeEventListener("pointerup",this._endHandler),window.removeEventListener("pointermove",this._moveHandler),window.removeEventListener("contextmenu",this._avoidHandler)},20)},this._zoomHandler=i=>{let{zoom:s}=this._config;if(!(s.enabled&&Gi.matchModifiers(i,s.modifiers)))return;Dr(i);let c=this._input;c.rho-=Math.sign(i.deltaY)},this._moveHandler=i=>{Dr(i);let{height:s,width:a}=this._scene.size,c=this._input,l=Math.min(s,a);if(this.#t){let u=-La*360/l,{phi:p,theta:f}=c,{maxPolar:h,minPolar:b,maxAzimuth:C,minAzimuth:x}=this._config;c.phi=(p+i.movementX*u).clamp(b,h),c.theta=(f+i.movementY*u).clamp(x,C)}else if(this.#e){let u=this._currentState.radius/l;c.x+=-i.movementX*u,c.y+=i.movementY*u}},this._renderHandler=i=>{this._update()};let o=this._scene=(this._camera=e).stage;this._initialState=this._currentState=n._buildState(e);let r=this._canvas=o.stage;r.addEventListener("pointerdown",this._startHandler,!1),r.addEventListener("wheel",this._zoomHandler,{passive:!1}),o.addEventListener("render",this._renderHandler,!1)}static _buildState(e){let t=le.subtract(e.position,e.lookAt),o=le.mag(t);return{target:e.lookAt,versor:le.unit(t),up:e.up,radius:o,position:e.position}}static tryAttach(e,t){t??=Br;let o=Pa(e)?.stage;if(Ot.isNull(o))return null;{let{position:r,lookAt:i}=e;return Ot.isNull(r)||Ot.isNull(i)||le.areClose(r,i)?null:new n(e,t)}}get configuration(){return this._config}set configuration(e){this._config=e}#e;#t;#r;_getSafeAzimuth({theta:e}){return n._modAngle(e)}_getSafePolar({phi:e}){return n._modAngle(e)}static _modAngle(e){for(;e<0;)e+=360;return e%360}static _getViewXYZ(e){let{versor:t,up:o}=e,r=le.cross(t,o),i=le.cross(r,t);return le.normalize(r),le.normalize(i),{right:r,up:i,versor:t}}#o;_update(){if(this.#o)return;this.#o=!0;let e=this._camera,{radius:t,versor:o,target:r,up:i}=this._initialState,{target:s}=this._currentState,{theta:a,phi:c,rho:l,x:u,y:p}=this._input,f=this._progress,{theta:h,phi:b,rho:C,x,y:d}=f,_=Math.abs(b-c)>Gr||Math.abs(h-a)>Gr,T=Math.abs(C-l)>Gr,N=Math.abs(u-x)>Gr||Math.abs(p-d)>Gr;if(T||_||N){let E=typeof this._config.inertia=="boolean"?this._config.inertia?Da:0:this._config.inertia,v=E>0&&E<1,{right:A,up:L}=n._getViewXYZ(this._initialState),P=r,G=i,R=s,m=C;v?m+=(l-C)*E:m=l,f.rho=m;let g=Math.pow(.95,m*Oa),y=le.scale(o,-g*t);P=le.add(P,y);let w=b,M=h;v?(w+=(c-b)*E,M+=(a-h)*E):(w=c,M=a);let O=this._getSafePolar({phi:f.phi=w}),D=this._getSafeAzimuth({theta:f.theta=M}),X=le.negate(r),H=ft.translate(ft.identity(),X),K=Ao.fromAxisAngle(L,O),ie=Ao.fromAxisAngle(A,D),he=ft.multiply(Ao.toRotationMatrix(ie),Ao.toRotationMatrix(K));H=ft.multiply(H,he),H=ft.translate(H,le.negate(X)),P=ft.transform(P,H),G=ft.transform(G,ft.clone(H,dt=>{dt.offsetX=dt.offsetY=dt.offsetZ=0}));let se=x,ue=d,re=se,Y=ue;v?(re+=(u-se)*E,Y+=(p-ue)*E):(re=u,Y=p),f.x=re,f.y=Y;let{right:de,up:me}=n._getViewXYZ(this._currentState),Le=le.scale(de,re),Oe=le.scale(me,Y),Gt=le.add(Le,Oe);R=le.add(s,Gt),e.lookAt=R,e.position=P,e.up=G,e.flags.push(I.Camera)}this.#o=!1}dispose(){let e=this._canvas,t=this._scene;Ot.isNull(e)||(e.removeEventListener("pointerdown",this._startHandler),e.removeEventListener("wheel",this._zoomHandler)),t.removeEventListener("render",this._renderHandler,!1)}},Pe=class extends Aa.PacemBehavior{constructor(){super(...arguments),this.#e=new Map,this._readyHandler=e=>{if(e.detail.propertyName==="isReady"&&e.detail.currentValue===!0){let t=e.currentTarget;t.removeEventListener(Bn,this._readyHandler),this._decorateCore(t)}}}#e;propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"maxAzimuth":case"minAzimuth":case"inertia":case"zoomControl":case"panControl":case"rotationControl":let i=this._buildConfig(),s=this.#e;for(let a of s.values())a.configuration=i;break}}disconnectedCallback(){let e=this.#e;for(let t of e.values())t.dispose();e.clear(),super.disconnectedCallback()}_buildConfig(){return Ot.extend({},Br,{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??Br.zoom,pan:this.panControl??Br.pan,rotation:this.rotationControl??Br.rotation})}_decorateCore(e){let t=Po.tryAttach(e,this._buildConfig());Ot.isNull(t)||this.#e.set(e,t)}decorate(e){e.isConnected?this._decorateCore(e):e.addEventListener(Bn,this._readyHandler,!1)}undecorate(e){let t=this.#e;t.has(e)&&(t.get(e).dispose(),t.delete(e))}};Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"maxAzimuth",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"maxPolar",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"minAzimuth",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"minPolar",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"zoomControl",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"rotationControl",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"panControl",void 0);Ye([ht({emit:!1,converter:Go})],Pe.prototype,"inertia",void 0);Pe=Ye([Ma({tagName:Ia+"-"+"3d"+"-orbit-camera"})],Pe);var Vn={};Oo(Vn,{BooleanOrNumberConverter:()=>Go,DragEvent:()=>mt,KnownShader:()=>U,LineGeometry:()=>et,MaterialElement:()=>Q,MeshGeometry:()=>W,NodeGeometry:()=>Et,NotifyChange:()=>bt,Pacem3DAdapterElement:()=>Je,Pacem3DCameraElement:()=>Ce,Pacem3DGroupElement:()=>Ze,Pacem3DLightElement:()=>Ie,Pacem3DMeshElement:()=>ke,Pacem3DObjectElement:()=>Fe,Pacem3DOrthographicCameraElement:()=>Be,Pacem3DPerspectiveCameraElement:()=>qe,Point3DConverter:()=>$e,Point3DOrNumberConverter:()=>Vr,QuaternionConverter:()=>Do,RenderableElement:()=>be,RenderableEvent:()=>gt,StalePropertyFlag:()=>I,UI3DEvent:()=>$t,Ui3DElement:()=>ae,computePlaneNormal:()=>So,computeSharpVertexNormals:()=>ce,isBasicMaterial:()=>Fr,isCamera:()=>pe,isGeometry:()=>cr,isGroup:()=>vt,isInteraction:()=>kr,isLambertMaterial:()=>Xr,isLight:()=>Se,isLineMaterial:()=>Ke,isMaterial:()=>Ne,isMesh:()=>Ee,isMeshGeometry:()=>kt,isOrthographicCamera:()=>Ur,isPerspectiveCamera:()=>zr,isPhongMaterial:()=>Hr,isRenderable:()=>ar,isShaderMaterial:()=>Yi,isStage:()=>Bo,isStandardMaterial:()=>jr,isUi3DObject:()=>Ut});import{Transformer as Ba}from"@pacem/pacem-core";import{Point as Sa}from"@pacem/pacem-foundation";var Ga=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Si=class{static parse(e){let t=[],o=/^v((\s+-?[\d\.]+){3})/gm,r=o.exec(e);for(;r&&r.length;)t.push($e.convert(r[1])),r=o.exec(e);let i=[],s=/^vt((\s+-?[\d\.]+){2})/gm;for(r=s.exec(e);r&&r.length;)i.push(Sa.parse(r[1])),r=s.exec(e);let a=[],c=/^vn((\s+-?[\d\.]+){3})/gm;for(r=c.exec(e);r&&r.length;)a.push($e.convert(r[1])),r=c.exec(e);let l=[],u=[],p=[],f=/^f((\s+([\d]+\/[\d]+\/[\d]+)){3,})/gm;for(r=f.exec(e);r&&r.length;){let T=/([\d]+)\/([\d]+)\/([\d]+)/g,N=r[1],E=T.exec(N),v=0;for(var h,b,C,x,d,_;E&&E.length;)v>2&&(p.push(h),u.push(i[b]),l.push(a[C]),p.push(x),u.push(i[d]),l.push(a[_])),x=parseInt(E[1])-1,d=parseInt(E[2])-1,_=parseInt(E[3])-1,p.push(x),u.push(i[d]),l.push(a[_]),v===0&&(h=x,b=d,C=_),v++,E=T.exec(N);r=f.exec(e)}return new W(t,p,u,l)}},Vi=class{static parseGeometry(e,t){if(t.toLowerCase()==="obj")return Si.parse(e);throw new Error(`Type '${t}' is not supported.`)}};Ga([Ba("parse3D")],Vi,"parseGeometry",null);export{Sn as Components,Vn as Drawing3D};
350
+ }`],bindings:[`@group(${e}) @binding(${t}) var<uniform> ${r}: AmbientLight;`],modifiers:[`${s} = computeAmbient(${i}, ${r});`]}}import{Utils as $}from"@pacem/pacem-core";import{Colors as Ei}from"@pacem/pacem-foundation";import{Geometry as Tn}from"@pacem/pacem-numerical";import{Geometry as wn}from"@pacem/pacem-numerical";var Te=wn.LinearAlgebra.Vector3D,bi=wn.LinearAlgebra.Matrix3D,Cn={width:1,height:1},Eo=class{static create(e){if(zr(e))return new xi(e);if(Ur(e))return new yi(e);throw new TypeError(`Camera type '${e.type}' not supported.`)}};function Nn(n,e,t){let o=Te.subtract(e,n),r=Te.cross(t,o),i=Te.cross(o,r);Te.normalize(r),Te.normalize(o),Te.normalize(i);let s=-Te.dot(r,n),a=-Te.dot(i,n),c=-Te.dot(o,n);return bi.from(r.x,i.x,o.x,0,r.y,i.y,o.y,0,r.z,i.z,o.z,0,s,a,c,1)}function Rn(n,e){if(n<=0)throw new RangeError("Near plane distance must be positive.");if(e<=n)throw new RangeError("Far plane distance must be greater than near plane distance.")}function ma(n=120,e=1,t=.1,o=1e3){Rn(t,o);let r=Math.tan(.5*Math.PI*(1-n/180)),i=r/e,s=Number.isFinite(o),a=s?o/(t-o):-1,c=s?o*t/(t-o):-t;return bi.from(i,0,0,0,0,r,0,0,0,0,a,-1,0,0,c,0)}function ga(n,e,t,o,r=.1,i=1e3){return Rn(r,i),bi.from(2/(e-n),0,0,0,0,2/(t-o),0,0,0,0,1/(r-i),0,(n+e)/(n-e),(t+o)/(o-t),r/(r-i),1)}var yi=class n{constructor(e){this._camera=e}static view(e){return Nn(e.position,e.lookAt,e.up)}static projection(e,t=Cn){let o=e.position,r=e.lookAt,i=Te.subtract(r,o);Te.normalize(i);let s=Te.dot(i,o),{height:a,width:c}=t,l=c/a,u=.5*s,p=u*l,f=u,h=e.top*f,b=e.bottom*f,C=e.right*p,x=e.left*p;return ga(x,C,h,b,e.near,e.far)}view(){return n.view(this._camera)}projection(e){return n.projection(this._camera,e)}},xi=class n{constructor(e){this._camera=e}static view(e){return Nn(e.position,e.lookAt,e.up)}static projection(e,t=Cn){let o=t.width/t.height/e.aspectRatio;return ma(e.fov,o,e.near,e.far)}view(){return n.view(this._camera)}projection(e){return n.projection(this._camera,e)}};var wi=Tn.LinearAlgebra.Vector3D,we=Tn.LinearAlgebra.Matrix3D;function ir(n,e){throw typeof e=="function"&&(e=e.name),new RangeError(`Buffer '${n}' not available for ${e}.`)}function Mn(n,e,...t){if(n.stage??=e?.item.stage,vt(n))return n.key??="group_"+$.uniqueCode(),new Ci(n,e,...t);if(Ee(n))return n.key??="mesh_"+$.uniqueCode(),new Ti(n,e,...t);if(pe(n))return n.key??="camera_"+$.uniqueCode(),new Ni(n);if(Se(n))return n.key??="light_"+n.type+"_"+$.uniqueCode(),new Mi(n);throw new Error("Renderable is not supported.")}var wo=class{constructor(e){this._set=e}get items(){return this._set}loop(e){let{meshes:t,cameras:o,groups:r,lights:i}=this._set,s=o[0],a=!1,c=!1;for(let l of t)l.disposed||!e(l,s,i)||(q.clearFlags(l),a||(q.clearFlags(s),a=!0),c||(i.forEach(p=>q.clearFlags(p)),c=!0));for(let l of r)q.clearFlags(l)}},tr=class{static create(e){if(cr(e))return e.key??="geometry_"+$.uniqueCode(),new Ar(e);if(Ne(e))return new Pr(e);if(kr(e))return new Ri(e);throw new Error("Object is not supported.")}},q=class n{static create(e,...t){return Mn(e,null,...t)}static clearFlags(e,t=!1){if(e.item.flags.splice(0),t){let o=e;$.isNull(o.parent)||n.clearFlags(o.parent,!0)}}static allFlags(e){let t=e,o=t.parent,r=$.isNull(o)?[]:n.allFlags(o);return t.item.flags.union(r)}},rr=class{#e;constructor(e){this.#e=e}get item(){return this.#e}#t=!1;lock(){this.#t=!0}unlock(){this.#t=!1;let e=this.#r;for(;e.length>0;){let t=e.shift();this._destroyUnsafe(t)}}#r=[];_destroyUnsafe(e){"texture"in e?e.texture.destroy():"buffer"in e&&e.buffer.destroy()}destroySafely(...e){for(let t of Array.from(e).concat(...this.#r.splice(0)))t&&(this.#t?this.#r.push(t):this._destroyUnsafe(t))}#o=!1;destroy(){this.dispose(),this.#o=!0}get disposed(){return this.#o}},or=class extends rr{constructor(e,t){super(e),this.#t=t,this.#e=$.uniqueId()%4294967295}#e;#t;#r=new Map;get parent(){return this.#t}get id(){return this.#e}allFlags(){let e=this.parent;return this.item.flags.union(e?.allFlags()??[])}buildParentWorldTransform(){let e=we.identity(),t=this;for(;!$.isNull(t.parent);){let o=t.parent.item,r=we.translate(o.transformMatrix??we.identity(),o.position??wi.zero());e=we.multiply(e,r),t=t.parent}return e}buildWorldTransform(){let e=we.translate(this.item.transformMatrix??we.identity(),this.item.position??wi.zero()),t=this.buildParentWorldTransform();return we.multiply(e,t)}#o=new Map;version(e){return this.#o.get(e)??0}buffer(e,t){if(t==="u32id"){let r=this.#r,{pipeline:i,device:s}=e;if(r.has(i))return $.extend({fresh:!1},r.get(i));let a=new Uint32Array([this.id]),c=ne.createUniform(s,a,j+"u32id-buffer"),l=$.extend({buffer:c,value:a,version:performance.now()},{fresh:!0});return this.#r.set(i,l),l}let o=this.specificBuffer(e,t);return this.#o.set(t,o.version),o}},va={shader:U.Basic,color:"#c0c0c0",flags:[]},Ci=class extends or{#e;constructor(e,t,...o){super(e,t),this.#e=e.childRenderables.map(r=>Mn(r,this,...o))}get children(){return this.#e}specificBuffer(e,t){return null}texture(e){throw new Error("Method not implemented.")}dispose(){this.#e.forEach(e=>e.destroy())}},Ni=class n extends or{#e=new Map;#t;constructor(e){super(e)}texture(e){throw new Error("Method not implemented.")}specificBuffer(e,t){let o=!1;(this.allFlags().length>0||$.isNull(this.#t))&&(o=!0,this.#e.clear(),this._rebuildMatrices(e));let{pipeline:r}=e;if(this.#e.has(r)||(o=!0,this.#e.set(r,this.#t)),q.clearFlags(this),t==="cameraViewTransform")return $.extend(this.#t,{fresh:o});ir(t,n)}_rebuildMatrices({device:e,canvas:t}){let o=this.item,r=Eo.create(o),{x:i,y:s,z:a}=o.position,c=r.view(),l=r.projection(t),u=we.multiply(c,l),p=new Float32Array(36);if(p.set(we.toArray(c),0),p.set(we.toArray(u),16),p.set([i,s,a],32),$.isNull(this.#t)){let f=ne.createUniform(e,p,j+"view-buffer");this.#t={buffer:f,value:p,version:performance.now().roundoff()}}else this.#t.value=p,this.#t.version=performance.now().roundoff()}_destroyView(){this.#e.clear();let e=this.#t;this.#t=null,this.destroySafely(e)}dispose(){this._destroyView()}},Ar=class n extends rr{#e={};#t={positions:!0,normals:!0,uv:!0,packed:!0};#r;constructor(e){super(e),e.flags??=[]}buffer(e,t){let o=this.item.flags??[];($.isNull(this.#r)||o.includes(I.Geometry))&&(o.splice(0),this.#e={},this._rebuildGeometryBuffers(e));let r=this.#t,i=this.#r,{pipeline:s}=e,a=this.#e[t]??=new Map,c=!a.has(s),l=u=>(c&&a.set(s,u),u);switch(t){case"geometryPositions":let{positions:u}=i,p=r.positions;return r.positions=!1,$.extend(l(u),{fresh:p||c});case"geometryNormals":let{normals:f}=i,h=r.normals;return r.normals=!1,$.extend(l(f),{fresh:h||c});case"geometryTexCoords":let{uv:b}=i,C=r.uv;return r.uv=!1,$.extend({fresh:C||c},l(b));case"geometry":let{packed:x}=i,d=r.packed;return r.packed=!1,$.extend(l(x),{fresh:d||c});default:ir(t,n)}}texture(e){throw new Error("Method not implemented.")}_rebuildGeometryBuffers({device:e}){this._destroyBuffers();let t=performance.now(),o=this.item,r=o.key;if(kt(o)){let i=o,a=!$.isNullOrEmpty(i.triangleIndices)?i.triangleIndices.map(_=>i.positions[_]):i.positions,c=a.length*2,l=c+a.length,u=new Float32Array(l),p=new Float32Array(l),f=new Float32Array(c),h=new Float32Array(2*l+c);for(let _=0;_<a.length;_++){let T=2*_,N=3*_,{x:E,y:v,z:A}=a[_],{x:L,y:P,z:G}=i.normals[_],{x:R,y:m}=i.textureCoordinates[_];u.set([E,v,A],N),p.set([L,P,G],N),f.set([R,m],T),h.set([E,v,A,L,P,G,R,m],N*2+T)}let b=ne.create(e,u,j+"meshgeometry-"+r+"-positions-buffer"),C=ne.create(e,p,j+"meshgeometry-"+r+"-normals-buffer"),x=ne.create(e,f,j+"meshgeometry-"+r+"-uvmap-buffer"),d=ne.create(e,h,j+"meshgeometry-"+r+"-buffer");this.#r={packed:{buffer:d,value:h,version:t},positions:{buffer:b,value:u,version:t},normals:{buffer:C,value:p,version:t},uv:{buffer:x,value:f,version:t}},this.#t={positions:!0,normals:!0,uv:!0,packed:!0}}else{let i=new Float32Array(We.flattenVectorArray(o.positions)),s=ne.createStorage(e,i,j+"nodegeometry-"+r+"-positions-buffer");this.#r={positions:{buffer:s,value:i,version:t},packed:{buffer:s,value:i,version:t}},this.#t={positions:!0,packed:!0}}}_destroyBuffers(){this.#e={};let e=this.#r;$.isNull(e)||this.destroySafely(e.positions,e.normals,e.uv)}dispose(){this._destroyBuffers()}},Pr=class n extends rr{#e={};#t={};#r;#o=new Map;#i=new Map;constructor(e){super(e),e.flags??=[],e.flags.indexOf(I.Material)===-1&&e.flags.push(I.Material)}buffer(e,t){let o=this.item.flags??[],r=$.isNull(this.#r);o.includes(I.Material)&&(this.#e={},o.splice(0),r=!0,this.#i.clear(),this._resetMaterialBuffers());let{pipeline:i}=e,s=this.#e[t]??=new Map;switch(t){case"material":case"line":let a=this._ensureMaterialBuffer(e,t);return a?(s.has(i)||(r=!0,s.set(i,a)),$.extend(a,{fresh:r})):null;default:ir(t,n)}}_ensureMaterialBuffer(e,t="material"){let o=this.#o,r=o.get(t);return r||(o.has(t)?null:(r=this.#r?.buffer(e,t),r&&o.set(t,r),r))}_resetMaterialBuffers(){this.#r=fo.create(this.item),this._destroyBuffers()}texture(e,t="texture"){let o=this.#i,r=o.get(t),i=!1;if(!r){if(r=this.#r?.texture(e,t),!r)return null;o.set(t,r),i=!0,this.#t={}}let{pipeline:s}=e,a=this.#t[t]??=new Map;return a.has(s)||(i=!0,a.set(s,r)),$.extend(r,{fresh:i})}dispose(){this._destroyBuffers()}_destroyBuffers(){this.#e={},this.#t={};let e=this.#o.values();this.#o.clear(),this.destroySafely(...e);let t=this.#i.values();this.#i.clear(),t.forEach(o=>o.texture.destroy())}},Ri=class n extends rr{#e={time:0,cursor:{x:0,y:0},resolution:{width:0,height:0}};#t;#r=new Map;constructor(e){super(e),$.extend(this.#e,e)}buffer(e,t){if(t==="interaction")return this._ensureInteractionBuffer(e);ir(t,n)}texture(e){throw new Error("Method not implemented.")}_ensureInteractionBuffer(e,t="interaction"){let o=this.#e,r=this.item,i=!this.#t||r.time!==o.time||r.resolution?.width!==o.resolution.width||r.resolution?.height!==o.resolution.height;if(!i&&!$.isNull(r.cursor)&&(i=r.cursor.x!==o.cursor.x||r.cursor.y!==o.cursor.y),i){let c=new Float32Array([r.cursor?.x??0,r.cursor?.y??0,r.resolution.width,r.resolution.height,r.time,0]),l=ne.createUniform(e.device,c,j+"interaction-buffer");this.#t={buffer:l,value:c,version:performance.now()},this.#r.clear()}let{pipeline:s}=e,a=this.#r;return a.has(s)||(i=!0,a.set(s,this.#t)),$.extend(this.#t,{fresh:i})}_destroyBuffers(){this.#r.clear();let e=this.#t;$.isNull(e)||this.destroySafely(e)}dispose(){this._destroyBuffers()}},Ti=class n extends or{#e;#t;#r;#o;#i;#s={geometry:!0,material:!0,transform:!0};#n=new Map;constructor(e,t,o,r){super(e,t),e.flags??=[],e.flags.indexOf(I.Geometry)===-1&&e.flags.push(I.Geometry),e.flags.indexOf(I.Material)===-1&&e.flags.push(I.Material),e.flags.indexOf(I.Position)===-1&&e.flags.indexOf(I.Transform)===-1&&e.flags.push(I.Transform),this.#e=o,this.#r=r}texture(e,t){return this.#o?.texture(e,t)}specificBuffer(e,t){let o=this.#s,r=this.allFlags();($.isNull(this.#i)||r.includes(I.Position)||r.includes(I.Transform))&&(this.#n.clear(),o.transform=!0,this._rebuildWorldMatrices(e)),($.isNull(this.#t)||r.includes(I.Geometry))&&(o.geometry=!0,this._ensureGeometryBuffer()),($.isNull(this.#o)||r.includes(I.Material))&&(o.material=!0,this._ensureMaterialBuffer()),q.clearFlags(this);let i=this.#t,s=this.#o;switch(t){case"geometryPositions":case"geometryNormals":case"geometryTexCoords":case"geometry":return i.buffer(e,t);case"material":case"line":return s.buffer(e,t);case"objectWorldTransform":let a=this.#i,c=o.transform;o.transform=!1;let l=this.#n,{pipeline:u}=e,p=!l.has(u);return p&&l.set(u,a),$.extend(a,{fresh:c||p});default:ir(t,n)}}_ensureGeometryBuffer(){let e=this.#t,t=this.#e,r=this.item.geometry;if($.isNull(t))e?.destroy(),this.#t=new Ar(r);else{let i=t?.get(r);i?.disposed!==!1&&(i=new Ar(r),t.set(r,i)),this.#t=i}}_ensureMaterialBuffer(){let e=this.#o,t=this.#r,r=this.item.material??va;if($.isNull(t))e?.destroy(),this.#o=new Pr(r);else{let i=t?.get(r);i?.disposed!==!1&&(i=new Pr(r),t.set(r,i)),this.#o=i}}_rebuildWorldMatrices({device:e}){let t=this.item,o=this.buildWorldTransform(),r=we.transpose(we.invert(o)),i=new Float32Array(28);if(i.set(we.toArray(o),0),i.set([r.m11,r.m12,r.m13,0,r.m21,r.m22,r.m23,0,r.m31,r.m32,r.m33,0],16),$.isNull(this.#i)){let s=ne.createUniform(e,i,j+"mesh-"+t.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.#n.clear();let e=this.#i;this.#i=null,this.destroySafely(e);let t=this.#o;this.#o=null,t?.destroy();let o=this.#t;this.#t=null,o?.destroy()}},Mi=class n extends or{#e;#t=new Map;constructor(e){super(e),e.flags.push(I.Light)}_rebuildAmbientLightBuffer({device:e}){let t=this.item,o=4,r=1,i=0,s=4,a=24,c=new Float32Array(a),{r:l,g:u,b:p,a:f}=Ei.parse(t.color??"#fff");c.set([l,u,p,f],i),c.set([t.intensity],s),this.#e={value:c,buffer:ne.createUniform(e,c,j+"ambient-light-buffer"),version:performance.now()}}_rebuildDirectionalLightBuffer({device:e}){let t=this.item,o=1,r=4,i=3,s=0,a=4,c=7,l=c+o,u=new Float32Array(l),{r:p,g:f,b:h,a:b}=Ei.parse(t.color??"#fff");u.set([p,f,h,b],s),u.set([t.intensity],c);let C=wi.subtract(t.position,t.target);u.set([C.x,C.y,C.z],a),this.#e={value:u,buffer:ne.createUniform(e,u,j+"directional-light-buffer"),version:performance.now()}}_rebuildOmniLightBuffer({device:e}){let t=this.item,o=1,r=4,i=3,s=0,a=4,c=7,l=c+o,u=new Float32Array(l),{r:p,g:f,b:h,a:b}=Ei.parse(t.color??"#fff");u.set([p,f,h,b],s),u.set([t.intensity],c),u.set([t.position.x,t.position.y,t.position.z],a),this.#e={value:u,buffer:ne.createUniform(e,u,j+"omni-light-buffer"),version:performance.now()}}_rebuildLight(e){this.destroySafely(this.#e);let t=this.item;switch(t.type){case"direction":this._rebuildDirectionalLightBuffer(e);break;case"omni":this._rebuildOmniLightBuffer(e);break;case"ambient":this._rebuildAmbientLightBuffer(e);break;default:throw new Error(`Light '${t.type}' is not supported.`)}}texture(e){throw new Error("Method not implemented.")}specificBuffer(e,t){let o=this.#t,r=$.isNull(this.#e)||this.allFlags().length>0;r&&(o.clear(),this._rebuildLight(e)),q.clearFlags(this);let{pipeline:i}=e;if(o.has(i)||(r=!0,o.set(i,this.#e)),t==="light")return $.extend(this.#e,{fresh:r});ir(t,n)}dispose(){this.#t.clear();let e=this.#e;this.#e=null,this.destroySafely(e)}};var F=j,An={multisample:!0,packedVertices:!0,primitive:{topology:"triangle-list",frontFace:"ccw",cullMode:"back"}},fe=n=>{},It=class n{static{this._memoizer=new WeakMap}static dispose(e){let t=this._memoizer,o=t.get(e);z.isNull(o)||(o.clear(),t.delete(e))}static createColorPicking(e,t){let o=n.create(e,t);return o instanceof No||o instanceof Ro?{frame:o.raycast}:null}static create(e,[t,o,...r],i){let s=n._memoizer,a=s.get(e);if(z.isNull(a)&&s.set(e,a=new Map),z.isNull(t))throw new Error("Pipeline not implemented, given the provided arguments.");if(Ee(t.item)){let c=kt(t.item.geometry),l=!c&&Qe(t.item.material);if(!c&&!l)throw new Error("Pipeline not implemented, given the provided mesh argument.");let u=c?new Ii(t,o,...r):new Ai(t,o),p=u.key+(i?.modifiers?.version??""),f=a.get(p);if(f)return f;let h=c?new No(e,u):new Ro(e,u);h.build(i);let b=h;return z.extend(b,{id:p+"-"+e.canvas.width+"x"+e.canvas.height+"-"+z.Dates.now().toISOString()}),a.set(p,b),b}else throw new ReferenceError("Pipeline not implemented, given thst the first argument is not a mesh.")}},Co=class{constructor(){this.#e=new Map}#e;ensureBindGroup({device:e},t,o,r,i,s,a=()=>{}){let c=this.#e,l=typeof t=="string"?t:t.key,u=c.get(l);if(z.isNull(u)&&c.set(l,u=new Map),r||!u.has(s)){let p=o.map((b,C)=>({binding:C,resource:{buffer:b}})),f={label:s,layout:i,entries:p};a(f);let h=e.createBindGroup(f);return u.set(s,h),h}else return u.get(s)}},Ii=class n{#e=[];#t;#r;#o=new Map;#i={shader:"basic",lights:""};constructor(...e){this.add(...e)}reset(){this.#e.splice(0),this.#t=null,this.#o.clear(),this.#i={shader:"basic",lights:""}}add(...e){for(let t of e??[])if(Ee(t.item))if(z.isNull(this.#t)){this.#t=t;let o=t.item.material??{shader:U.Basic};this.#i.shader=o.shader+"-"+(o.map?"map":"nomap")}else throw new Error("Mesh already added.");else if(Se(t.item))this.#e.push(t),this.#i.lights+="-"+t.item.type;else if(pe(t.item))this.#r??=t;else throw new Error("Unknown object type.")}build(e){let t=this._computeBasicData(),o=this.key,r=this.vertex({inputModifier:e?.vertexInput,outputModifier:e?.vertexOutput}),i=this.fragment(t,{modifier:e?.fragment}),s=(...c)=>n.prototype.bindgroup.apply(this,c),a={lightCount:this.#e.length,mapCount:this.#t.item.material?.map?1:0};return{vertex:r,fragment:i,key:o,bindings:s,metadata:a}}get key(){let{shader:e,lights:t}=this.#i;return"mesh-"+e+t}bindgroup(e,t,o){let i=this.#o.get(e);if(z.isNull(i))return null;if(z.isNullOrEmpty(t))return i;let s=i.filter(a=>a.key===t);return isNaN(o)?s:o>=0&&o<i.length?s[o]:s}vertex(e){return hn(e)}_computeBasicData(){let e=this.#t.item,t=this.#e,o=e.material,r=!z.isNull(o?.texture),i=!z.isNullOrEmpty(t),s=z.isNull(e)?U.Basic:e.material?.shader??U.Basic;return{hasTexture:r,hasLighting:i,shader:s,materialBindGroupIndex:2,lightingBindGroupIndex:3}}_computeBindGroupsAndReferences(e=this._computeBasicData()){let{hasTexture:t,materialBindGroupIndex:o,lightingBindGroupIndex:r}=e,i=this.#o,s=this.#e,a={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},c={key:"material",group:o,binding:0,type:"buffer"};t?i.set(ve.Mesh,[a,c,{key:"texture",group:o,type:"texture"}]):i.set(ve.Mesh,[a,c]),i.set(ve.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}]);let l=s.map((u,p)=>({key:"light",group:r,binding:p,type:"buffer"}));l.push(...l),i.set(ve.Interaction,[{key:"interaction",group:0,type:"buffer",binding:1}])}fragment(e=this._computeBasicData(),t){this._computeBindGroupsAndReferences(e);let o={definitions:[],bindings:[],modifiers:[]},r=i=>{for(let s of i.definitions??[])o.definitions.indexOf(s)===-1&&o.definitions.push(s);z.isNullOrEmpty(i.bindings)||o.bindings.push(...i.bindings),z.isNullOrEmpty(i.modifiers)||o.modifiers.push(...i.modifiers)};switch(e.shader){case U.Basic:if(e.hasTexture){let a=e.materialBindGroupIndex,c=yn({inputColor:Tt,outputColors:[Tt],uv:"uv"},a);r(c)}let i=0,s=this.#e;for(let a of s){switch(a.item.type){case"direction":let l=xn({outputColor:Nr,normal:"normal"},e.lightingBindGroupIndex,i);r(l);break;case"omni":let u=bn({outputColor:Nr,normal:"normal",position:"vertex"},e.lightingBindGroupIndex,i);r(u);break;case"ambient":let p=En({inputColor:Tt,outputColor:po},e.lightingBindGroupIndex,i);r(p);break}i++}return Tr.fragment(o,t)}}},Me={writeBufferConditionally:(n,e)=>{e.fresh&&n.queue.writeBuffer(e.buffer,0,e.value)}},No=class{constructor(e,t,o=new Co){this._context=e,this._builder=t,this._cache=o,this._ensureU32idBindGroup=(r,i,s)=>this._cache.ensureBindGroup(this._context,r,[i],s,this._pickBindGroupLayout,F+"mesh-colorpick-bind-group"),this._ensureMaterialBindGroup=(r,i,s,a,c=2)=>{let l=this._bindGroupLayouts[c],u=F+"material-bind-group";if(l.label!==F+"material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");return this._cache.ensureBindGroup(this._context,r,[i],a,l,u,p=>{let{device:f}=this.context,h=p.entries;s&&h.push({binding:1,resource:f.createSampler({addressModeU:"repeat",addressModeV:"repeat",magFilter:"linear",minFilter:"linear"})},{binding:2,resource:s.createView()})})},this._ensureWorldTransformBindGroup=(r,i,s,a=1,c=!1)=>{let l=this._bindGroupLayouts[a];if(l.label!==F+"mesh-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let u=r.key+"-"+(c?1:0),p=`${F}${c?"colorpick":"mesh"}-transforms-bind-group`;return this._cache.ensureBindGroup(this._context,u,[i],s,l,p)},this._ensureCameraProjectionAndInteractionDataBindGroup=(r,i,s,a,c=0,l=!1)=>{let u=this._bindGroupLayouts[c],p=r.key+"-"+(l?1:0),f=`${F}${l?"colorpick":"mesh"}-view-bind-group`;return this._cache.ensureBindGroup(this._context,p,[i,s],a,u,f)},this._ensureLightingBindGroup=(r,i,s=3)=>{let a=this._bindGroupLayouts[s],c=r.map(u=>u.id).join(":"),l=r.map(u=>u.buffer.buffer);return this._cache.ensureBindGroup(this._context,c,l,i,a,F+"mesh-lighting-bind-group")},this._bindGroupLayouts=[],this._bindVertex=fe,this._bindPicker=fe,this._bindWorldTransform=fe,this._bindRaycastWorldTransform=fe,this._bindCameraProjectionAndInteractionData=fe,this._bindRaycastCameraProjectionAndInteractionData=fe,this._bindLighting=fe,this._bindMaterial=fe,this.set=r=>{throw new Error("Deprecated.")},this.bind=(r,...i)=>{throw new Error("Deprecated.")},this.draw=(r,...i)=>{throw new Error("Deprecated.")},this.frame=(r,i,s,a,...c)=>{r.setPipeline(this._pipeline);try{this._bindVertex(r,s),this._bindWorldTransform(r,s),this._bindMaterial(r,s),this._bindCameraProjectionAndInteractionData(r,a,i),this._bindLighting(r,...c);let l=s.item,u=l.geometry;r.draw(u.triangleIndices?.length||u.positions.length)}catch(l){console.error("Pacem.Drawing3D.FrameException",l)}},this.raycast=(r,i,s,a)=>{r.setPipeline(this._pickPipeline);try{this._bindVertex(r,s),this._bindRaycastWorldTransform(r,s),this._bindRaycastCameraProjectionAndInteractionData(r,a,i),this._bindPicker(r,s);let c=s.item,l=c.geometry;r.draw(l.triangleIndices.length)}catch{}},this._key=t.key}get context(){return this._context}get key(){return this._key}build(e){let t=z.extend({},An,e??{}),o=this._builder,r=o.build(t.modifiers),i=z.extend({pipeline:this},this._context),s=i.device,a={module:s.createShaderModule({code:r.vertex}),buffers:t.packedVertices?[Mt.createVertex(0,3,3,2)]:[Mt.createVertex(0,3),Mt.createVertex(1,3),Mt.createVertex(2,2)]},c=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX|oe.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:oe.VERTEX|oe.FRAGMENT,buffer:{type:"uniform"}}],label:F+"mesh-view-bind-group-layout"}),l=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"mesh-transforms-bind-group-layout"}),u=[c,l],p={module:s.createShaderModule({code:r.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},f=u.length,h=[{binding:0,visibility:oe.FRAGMENT,buffer:{type:"read-only-storage"}}],{mapCount:b}=r.metadata,C=b>0;C&&h.push({visibility:oe.FRAGMENT,binding:1,sampler:{}},...Array(b).keys().map(m=>({visibility:oe.FRAGMENT,binding:2+m,texture:{}})));let x={label:F+"material-bind-group-layout",entries:h},d=s.createBindGroupLayout(x);u.push(d);let _=u.length,{lightCount:T}=r.metadata,N=T>0;if(N){let m=s.createBindGroupLayout({entries:[...Array(T).keys()].map((g,y)=>({visibility:oe.FRAGMENT,binding:y,buffer:{type:"uniform"}})),label:F+"lighting-bind-group-layout"});u.push(m)}let E={label:F+"mesh-render-pipeline",vertex:a,fragment:p,layout:s.createPipelineLayout({label:F+"mesh-render-pipeline-layout",bindGroupLayouts:this._bindGroupLayouts=u}),primitive:t.primitive};t.multisample&&(E.multisample={count:4},E.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._pipeline=s.createRenderPipeline(E);let v=this._pickBindGroupLayout=s.createBindGroupLayout({label:F+"mesh-colorpick-bind-group-layout",entries:[{visibility:oe.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),A={label:F+"mesh-colorpick-pipeline",vertex:a,fragment:{module:s.createShaderModule({code:di(2)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:F+"mesh-colorpick-pipeline-layout",bindGroupLayouts:[c,l,v]}),primitive:t.primitive,depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickPipeline=s.createRenderPipeline(A);let L=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided.`);let{buffer:w}=y.buffer(i,"geometryPositions"),{buffer:M}=y.buffer(i,"geometryNormals"),{buffer:O}=y.buffer(i,"geometryTexCoords");m.setVertexBuffer(0,w),m.setVertexBuffer(1,M),m.setVertexBuffer(2,O)},P=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided.`);let{buffer:w}=y.buffer(i,"geometry");m.setVertexBuffer(0,w)};this._bindVertex=t.packedVertices?P:L;let G=(m,g,y)=>{if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let w=g.buffer(i,"objectWorldTransform"),M=w.buffer;Me.writeBufferConditionally(s,w);let{group:O}=r.bindings(ve.Mesh,"objectWorldTransform",0),D=this._ensureWorldTransformBindGroup(g.item,M,w.fresh,O,y);m.setBindGroup(O,D)};this._bindWorldTransform=(m,...g)=>{let y=g.at(0);G(m,y,!1)},this._bindRaycastWorldTransform=(m,...g)=>{let y=g.at(0);G(m,y,!0)};let R=(m,g,y,w)=>{if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing view projection buffers was provided.`);let M=g.buffer(i,"cameraViewTransform"),O=M.buffer;if(Me.writeBufferConditionally(s,M),z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing interaction buffers was provided.`);let D=y.buffer(i,"interaction"),X=D.buffer;Me.writeBufferConditionally(s,D);let{group:H}=r.bindings(ve.Camera,"cameraViewTransform",0),{group:K}=r.bindings(ve.Interaction,"interaction",0);if(H!==K)throw new ReferenceError(`Layout bind group mismatch: ${H} vs ${K}.`);let ie=this._ensureCameraProjectionAndInteractionDataBindGroup(g.item,O,X,M.fresh||D.fresh,H,w);m.setBindGroup(H,ie)};this._bindCameraProjectionAndInteractionData=(m,...g)=>{let y=g.at(0),w=g.at(1);R(m,y,w,!1)},this._bindRaycastCameraProjectionAndInteractionData=(m,...g)=>{let y=g.at(0),w=g.at(1);R(m,y,w,!0)},this._bindMaterial=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex colors was provided.`);let w=y.buffer(i,"material"),M=w.buffer;Me.writeBufferConditionally(s,w);let O=y.texture(i),D=O?.texture,X=this._ensureMaterialBindGroup(y.item,M,D,w.fresh,f);m.setBindGroup(f,X),C&&s.queue.copyExternalImageToTexture({source:O.source,flipY:!0},{texture:D},{width:D.width,height:D.height})},this._bindLighting=(m,...g)=>{if(N){let w=Array.from(g).map(D=>({buffer:D.buffer(i,"light"),id:D.item.key})),M=w.some(D=>D.buffer.fresh),O=this._ensureLightingBindGroup(w,M,_);for(let D of w)Me.writeBufferConditionally(s,D.buffer);m.setBindGroup(_,O)}},this._bindPicker=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let w=y.buffer(i,"u32id"),M=w.buffer;Me.writeBufferConditionally(s,w);let O=2,D=w.fresh,X=this._ensureU32idBindGroup(y.item,M,D);m.setBindGroup(O,X)}}},Ai=class n{#e;#t;#r=new Map;constructor(...e){this.add(...e)}reset(){this.#e=null,this.#r.clear()}add(...e){for(let t of e??[])if(Ee(t.item))if(z.isNull(this.#e))this.#e=t;else throw new Error("Line already added.");else if(pe(t.item))this.#t??=t;else if(!Se(t.item))throw new Error("Unknown object type.")}build(){let e=this._computeBasicData(),t=this.key,o=this.vertex(e),r=this.fragment(e);return{vertex:o,fragment:r,key:t,bindings:(...s)=>n.prototype.bindgroup.apply(this,s),metadata:{thickness:e.thickness,dashPattern:e.dashPattern}}}get key(){let e=(this.#e?.item).material?.lineWidth>1;return U.Line+(e?"-fat":"")}bindgroup(e,t,o){let i=this.#r.get(e);if(z.isNull(i))return null;if(z.isNullOrEmpty(t))return i;let s=i.filter(a=>a.key===t);return isNaN(o)?s:o>=0&&o<i.length?s[o]:s}vertex(e=this._computeBasicData()){return e.thickness>1?_n():gn()}_computeBasicData(){let e=this.#e.item,t=z.isNull(e)?U.Line:e.material?.shader??U.Line,o=e.material,r=o?.lineWidth??1,i=o?.dashArray;return{shader:t,thickness:r,dashPattern:i}}_computeBindGroupsAndReferences(e=this._computeBasicData()){let t=this.#r,o={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},r={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"};t.set(ve.Mesh,[o,r,i,s]),t.set(ve.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}])}fragment(e=this._computeBasicData()){this._computeBindGroupsAndReferences(e);let t={definitions:[],bindings:[],modifiers:[]};if(e.shader===U.Line)return Mr.fragment(t)}},Ro=class{#e;constructor(e,t,o=new Co){this._lineBuilder=t,this._cache=o,this._ensureLineU32idBindGroup=(r,i,s)=>{let a=this.context;return this._cache.ensureBindGroup(a,r,[i],s,this._pickLineBindGroupLayout,F+"line-colorpick-bind-group")},this._ensureLineMaterialBindGroup=(r,i,s,a=2)=>{let c=this._bindLineGroupLayouts[a];if(c.label!==F+"line-material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let l=this.context;return this._cache.ensureBindGroup(l,r,[i],s,c,F+"line-material-bind-group")},this._ensureLinePositionsBindGroup=(r,i,s,a)=>{let c=this._bindLineGroupLayouts[a];if(c.label!==F+"line-positions-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let l=this.context;return this._cache.ensureBindGroup(l,r,i,s,c,F+"line-positions-bind-group")},this._ensureLineWorldTransformBindGroup=(r,i,s,a=1,c=!1)=>{let l=this._bindLineGroupLayouts[a];if(l.label!==F+"line-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let u=r.key+"-line-"+(c?1:0),p=`${F}${c?"colorpick":""}-line-transforms-bind-group`,f=this.context;return this._cache.ensureBindGroup(f,u,[i],s,l,p)},this._ensureLineCameraProjectionBindGroup=(r,i,s,a=0,c=!1)=>{let l=this._bindLineGroupLayouts[a],u=r.key+"-line-"+(c?1:0),p=`${F}${c?"colorpick":""}-line-view-bind-group`,f=this.context;return this._cache.ensureBindGroup(f,u,[i],s,l,p)},this._bindLineGroupLayouts=[],this._bindLinePositions=fe,this._bindLinePicker=fe,this._bindLineWorldTransform=fe,this._bindLineRaycastWorldTransform=fe,this._bindLineCameraProjection=fe,this._bindLineRaycastCameraProjection=fe,this._bindLineMaterial=fe,this._drawLine=fe,this.set=r=>{throw new Error("Deprecated.")},this.bind=(r,...i)=>{throw new Error("Deprecated.")},this.draw=(r,...i)=>{throw new Error("Deprecated.")},this.frame=(r,i,s,a)=>{r.setPipeline(this._linePipeline);try{this._bindLineWorldTransform(r,s),this._bindLineCameraProjection(r,a),this._bindLinePositions(r,s),this._bindLineMaterial(r,s),this._drawLine(r,s)}catch(c){console.error("Pacem.Drawing3D.FrameException",c)}},this.raycast=(r,i,s,a)=>{r.setPipeline(this._pickLinePipeline);try{this._bindLineRaycastWorldTransform(r,s),this._bindLineRaycastCameraProjection(r,a),this._bindLinePositions(r,s),this._bindLinePicker(r,s),this._drawLine(r,s)}catch{}},this.#e=e,this._lineKey=t.key}get context(){return this.#e}get key(){return this._lineKey}build(e){let t=z.extend({},An,e??{}),o=this._lineBuilder,r=o.build(),i=z.extend({pipeline:this},this.#e),s=i.device,a=r.metadata.thickness>1,c={module:s.createShaderModule({code:r.vertex}),buffers:[]},l=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"line-transforms-bind-group-layout"}),u=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"line-view-bind-group-layout"}),p=[{binding:0,visibility:oe.VERTEX,buffer:{type:"read-only-storage"}}];a&&p.push({binding:1,visibility:oe.VERTEX,buffer:{type:"uniform"}});let f=s.createBindGroupLayout({entries:p,label:F+"line-positions-bind-group-layout"}),h=[u,l,f],b=h.length,C=h.slice(),x={module:s.createShaderModule({code:r.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},d=C.length,_=[{binding:0,visibility:oe.FRAGMENT,buffer:{type:"read-only-storage"}}],T={label:F+"line-material-bind-group-layout",entries:_},N=s.createBindGroupLayout(T);C.push(N);let E=a?t.primitive.topology:"line-list",v={label:F+"line-render-pipeline",vertex:c,fragment:x,layout:s.createPipelineLayout({label:F+"line-render-pipeline-layout",bindGroupLayouts:this._bindLineGroupLayouts=C}),primitive:z.extend({},t.primitive,{topology:E})};t.multisample&&(v.multisample={count:4},v.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._linePipeline=s.createRenderPipeline(v);let A=this._pickLineBindGroupLayout=s.createBindGroupLayout({label:F+"line-colorpick-bind-group-layout",entries:[{visibility:oe.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),L={label:F+"line-colorpick-pipeline",vertex:c,fragment:{module:s.createShaderModule({code:di(b)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:F+"line-colorpick-pipeline-layout",bindGroupLayouts:h.concat(A)}),primitive:z.extend({},t.primitive,{topology:E}),depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickLinePipeline=s.createRenderPipeline(L);let P=(R,m,g)=>{if(z.isNull(m))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let y=m.buffer(i,"objectWorldTransform"),w=y.buffer;Me.writeBufferConditionally(s,y);let{group:M}=r.bindings(ve.Mesh,"objectWorldTransform",0),O=this._ensureLineWorldTransformBindGroup(m.item,w,!1,M,g);R.setBindGroup(M,O)};this._bindLineWorldTransform=(R,...m)=>{let g=m.at(0);P(R,g,!1)},this._bindLineRaycastWorldTransform=(R,...m)=>{let g=m.at(0);P(R,g,!0)};let G=(R,m,g)=>{if(z.isNull(m))throw new ReferenceError(`Null ${q.name} bringing view projection buffers was provided.`);let y=m.buffer(i,"cameraViewTransform"),w=y.buffer;Me.writeBufferConditionally(s,y);let{group:M}=r.bindings(ve.Camera,"cameraViewTransform",0),O=this._ensureLineCameraProjectionBindGroup(m.item,w,!1,M,g);R.setBindGroup(M,O)};this._bindLineCameraProjection=(R,...m)=>{let g=m.at(0);G(R,g,!1)},this._bindLineRaycastCameraProjection=(R,...m)=>{let g=m.at(0);G(R,g,!0)},this._bindLinePositions=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided as index 0.`);let y=g.buffer(i,"geometryPositions"),w=y.buffer,M=y.fresh,O=[w];if(Me.writeBufferConditionally(s,y),a){let H=g.buffer(i,"line"),K=H.buffer;M||=H.fresh,O.push(K),Me.writeBufferConditionally(s,H)}let{group:D}=r.bindings(ve.Mesh,"line",0),X=this._ensureLinePositionsBindGroup(g.item,O,M,D);R.setBindGroup(D,X)},this._bindLineMaterial=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing vertex colors was provided.`);let y=g.buffer(i,"material"),w=y.buffer;Me.writeBufferConditionally(s,y);let M=this._ensureLineMaterialBindGroup(g.item,w,y.fresh,d);R.setBindGroup(d,M)},this._bindLinePicker=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let y=g.buffer(i,"u32id"),w=y.buffer,M=y.value;Me.writeBufferConditionally(s,y);let O=this._ensureLineU32idBindGroup(g.item,w,!1);R.setBindGroup(b,O)},this._drawLine=(R,...m)=>{let y=m.at(0).item,w=y.geometry;a?R.draw(6,w.positions.length-1,0,0):R.draw(w.positions.length)}}};import{Utils as At}from"@pacem/pacem-core";var Or=class{static{this._memoizer=new WeakMap}static dispose(e){let t=this._memoizer;if(t.has(e)){let o=t.get(e);for(let r of o.values())r.destroy();o.clear(),t.delete(e)}}static createColorPicking(e){let t=this._memoizer;t.has(e)||t.set(e,new Map);let o=t.get(e),r="colorpick";if(o.has(r))return o.get(r);let i=new Pi(e);return o.set(r,i),i}},Lr=1,Pi=class{constructor(e){this._context=e,this._objects=new Map,this.frame=(t,...o)=>{if(At.isNull(this._encoder))throw new Error("Null encoder. Maybe you missed to call the 'begin' method first.");let r=Array.from(o);It.createColorPicking(this._context,r)?.frame(this._pass,t,...o);for(let s of r)s.item.inert||this._objects.set(s.id,s)},this.end=t=>{if(!At.isNull(this._handle))return this._handle;let o=this._pass,r=this._encoder,{device:i}=this._context,{render:s}=this._textures,a=s.texture,c=this._ensureBuffer();o.end(),r.copyTextureToBuffer({texture:a,origin:{x:t.x,y:t.y}},{buffer:c,bytesPerRow:(Lr*4+255|0)*256,rowsPerImage:1},{width:Lr}),i.queue.submit([r.finish()]),this._encoder=null;let l=this,u=l._objects,p=()=>{l._handle=null};return this._handle=new Promise((f,h)=>{c.mapAsync(uo.READ,0,4*Lr).then(b=>{let x=new Uint32Array(c.getMappedRange(0,4*Lr))[0];c.unmap(),p();let d=u.get(x);f(d?[d.item]:[])})})}}_createTexture(e){let{device:t,canvas:o}=this._context,r=Math.min(t.limits.maxTextureDimension2D,o.clientWidth),i=Math.min(t.limits.maxTextureDimension2D,o.clientHeight);return t.createTexture({size:[r,i,1],format:e,usage:Re.COPY_SRC|Re.RENDER_ATTACHMENT})}_ensureBuffer(){let e=this._buffer;if(!At.isNull(e))return e;let{device:t}=this._context;return this._buffer=t.createBuffer({label:j+"colorpick-output-buffer",size:Lr*4,usage:ye.MAP_READ|ye.COPY_DST})}_ensureTextures(){let e=this._textures;if(!At.isNull(e))return e;let t=this._createTexture("r32uint"),o=this._createTexture("depth24plus"),r={texture:t,view:t.createView()},i={texture:o,view:o.createView()};return this._textures={render:r,depth:i}}_destroyTexture(e){At.isNull(e)||e.texture?.destroy()}destroy(){let e=this._textures,t=this._buffer;if(!At.isNullOrEmpty(e)){let{render:o,depth:r}=e;this._destroyTexture(o),this._destroyTexture(r),this._textures=null}At.isNull(t)||(t.destroy(),this._buffer=null)}begin(){let{device:e}=this._context;this._encoder=e.createCommandEncoder({label:j+"colorpick-raycaster"});let{render:t,depth:o}=this._ensureTextures(),r={label:j+"colorpick-raycaster-pass",colorAttachments:[{view:t.view,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:o.view,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};this._pass=this._encoder.beginRenderPass(r),this._objects.clear()}};var Li=wa.LinearAlgebra.Vector3D,nr;(function(n){n[n.NotSupported=0]="NotSupported",n[n.Disabled=1]="Disabled"})(nr||(nr={}));var To=class{static create(e,t){return new Promise((o,r)=>{if(navigator.gpu){let i=new Oi(e);i.init(t).then(s=>o(i),s=>{let c={message:typeof s=="string"?s:s.message,cause:nr.Disabled};r(c)})}else{let s={message:"WebGPU not supported.",cause:nr.NotSupported};r(s)}})}};function Ca(n){return{bottom:-1,top:1,left:-1,right:1,near:.1,far:200,lookAt:Li.from(0,0,0),up:Li.j(),position:Li.from(0,0,1),type:"orthographic",flags:[],stage:n}}function Na(...n){for(let e of n||[])e?.destroy()}var Oi=class{#e;#t;#r;#o;#i;#s;#n;#l;#a;#p;#f;#h;constructor(e){this.#o=new WeakMap,this.#i=new WeakMap,this.#s=new WeakMap,this.#a={enableValidation:!1},this.#p=!1,this._logError=r=>{let i=this.#e,s=i.logger;if(!te.isNull(s)){let a="error"in r?r.error:r;s.log(ba.LogLevel.Error,a.message,"WebGPU")}},this.#c=!0,this.#u=!1;let t=(this.#e=e).stage,o=document.createElement("canvas");o.id=xa+"_3d_stage_"+te.uniqueCode(),t.innerHTML="",t.appendChild(this.#t=o),this.#f=tr.create(this.#h={time:performance.now(),cursor:{x:0,y:0},resolution:{width:0,height:0}})}_buildPassDescriptor({multisample:e,format:t}){let{context:o,device:r}=this.#r,i=o.getCurrentTexture(),s=this.#l;if(te.isNull(s)){if(s={},e){let b=r.createTexture({label:j+"render-texture",format:t??i.format,usage:Re.RENDER_ATTACHMENT,size:[i.width,i.height],sampleCount:4});s.render={texture:b,view:b.createView({label:j+"render-texture-view"})};let C=r.createTexture({label:j+"depth-texture",format:"depth24plus",usage:Re.RENDER_ATTACHMENT,size:[i.width,i.height],sampleCount:4});s.depth={texture:C,view:C.createView({label:j+"depth-texture-view"})}}this.#l=s}let{transparent:a,background:c}=this.#e,l=a?{r:0,g:0,b:0,a:0}:c?typeof c=="string"?Ea.parse(c):c:{r:0,g:0,b:0,a:1},u=We.flattenVectorArray([l]),p=i.createView({label:j+"canvas-texture-view"}),f={view:p,clearValue:u,loadOp:"clear",storeOp:"store"},h={colorAttachments:[f]};if(e){let b=s.render.view,C=s.depth.view;h.depthStencilAttachment={view:C,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store",stencilClearValue:0,stencilReadOnly:!0},f.view=b,f.resolveTarget=p}return h}_buildContext(e=this.#t,t=this.#e.size){t??=e;let o=t.width,r=t.height,i=1;e.width=o*i,e.height=r*i;let s=e.getContext("webgpu"),a=navigator.gpu.getPreferredCanvasFormat();return{context:s,textureFormat:a}}_buildUpContext(e,t,o,r){let{transparent:i}=this.#e;o.configure({alphaMode:i?"premultiplied":"opaque",device:e,format:r}),this.#r={device:e,adapter:t,canvas:this.#t,context:o,format:r},this.#c=!1}async init(e){this.#a=e;let t=await navigator.gpu.requestAdapter();if(te.isNull(t))throw new Error("WebGPU adapter unavalable or disabled.");let o=await t.requestDevice();if(te.isNull(t))throw new Error("WebGPU device unavalable or disabled.");o.addEventListener("uncapturederror",this._logError),this.#u=!te.isNull(e.modifiers?.version)&&!te.isNull(e.modifiers)&&(!te.isNull(e.modifiers.vertexInput)||!te.isNull(e.modifiers.vertexOutput)||!te.isNull(e.modifiers.fragment));let{context:r,textureFormat:i}=this._buildContext();this._buildUpContext(o,t,r,i)}#c;#u;render(e){if(this.#c||te.isNull(this.#n)||!(this.#t.width>0)||!(this.#t.height>0))return;let t=this.#r,o=t.device,r=this.#n,i=this.#a?.enableValidation??!1;this.#u&&te.extend(this.#h,e);let a=this._buildPassDescriptor({multisample:!0}),c=o.createCommandEncoder({label:j+"renderer"}),l=c.beginRenderPass(a);r.loop((u,p,f)=>{if(u.item.hide)return!1;i&&o.pushErrorScope("validation");let h=[u,p,...f];return It.create(t,h,{multisample:!0,modifiers:this.#a.modifiers}).frame(l,this.#f,...h),i&&o.popErrorScope().then(C=>{C&&this._logError(C)}),!0}),l.end(),o.queue.submit([c.finish()])}set disabled(e){this.#p=e}get disabled(){return this.#p}raycast(e){if(this.#c||te.isNull(this.#n))return Promise.resolve([]);let t=this.#r,o=t.device,r=this.#n,i=this.#a?.enableValidation??!1,s=Or.createColorPicking(t);return s.begin(),r.loop((a,c)=>a.item.hide?!1:(i&&o.pushErrorScope("validation"),s.frame(this.#f,a,c),i&&o.popErrorScope().then(l=>{l&&this._logError(l)}),!0)),s.end(e)}_disposeRenderableJustInCase(e){let t=this.#o;t.has(e)&&(t.get(e)?.destroy(),t.delete(e))}_createOrYieldRenderable(e,t=this.#i,o=this.#s){e.stage??=this.#e;let r=this.#o,i=r.get(e);return te.isNull(i)&&r.set(e,i=q.create(e,t)),i}_createOrYieldGeometry(e){let t=this.#i,o=t.get(e);return te.isNull(o)&&t.set(e,o=tr.create(e)),o}_createOrYieldMaterial(e){let t=this.#s,o=t.get(e);return te.isNull(o)&&t.set(e,o=tr.create(e)),o}_unwrapBuffers(e,t){t??={meshes:[],lights:[],cameras:[],groups:[]};for(let o of e.children)o.item.stage??=this.#e,Ee(o.item)&&t.meshes.push(o),pe(o.item)&&t.cameras.push(o),Se(o.item)&&t.lights.push(o),vt(o.item)&&(t.groups.push(o),this._unwrapBuffers(o,t));return t}_update(e){let t=[],o=[],r=[],i=l=>this._createOrYieldRenderable(l),s;for(let l of e){if(l.hide){this._disposeRenderableJustInCase(l);continue}if(l.stage??=this.#e,vt(l)){let u=l;u.flags.includes(I.Children)&&this.#o.delete(u),t.push(i(u))}Ee(l)&&l.geometry&&(this._createOrYieldGeometry(l.geometry),te.isNull(l.material)||this._createOrYieldMaterial(l.material),o.push(i(l))),Se(l)&&r.push(i(l)),pe(l)&&(s??=l)}s??=Ca(this.#e);let a=i(s),c={meshes:o,lights:r,cameras:[a],groups:t};for(let l of t)c=this._unwrapBuffers(l,c);this.#n?.items.meshes.forEach(l=>{o.includes(l)||l.destroy()}),this.#n=new wo(c)}update(...e){this._update(Array.from(e))}dispose(){if(this.#n=null,this._disposeContext()){let{device:e}=this.#r;e.removeEventListener("uncapturederror",this._logError),e.destroy}}_disposeContext(){let e=this.#r;if(te.isNull(e))return!1;Or.dispose(e),It.dispose(e);let t=this.#l;if(this.#l=null,!te.isNull(t)){let{render:o,depth:r}=t;Na(o?.texture,r?.texture)}return e.context.unconfigure(),!0}resize(e){if(this.#c=!0,this._disposeContext()){let{device:t,adapter:o}=this.#r,{context:r,textureFormat:i}=this._buildContext(this.canvas,e);this._buildUpContext(t,o,r,i),this.#u&&te.extend(this.#h,{resolution:e})}}get canvas(){return this.#t}};var Lt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Ln="WebGPURaycastCallback",Di="WebGPURaycastPixel",On=Mo.getAttachedPropertyValue,Dn=Mo.setAttachedPropertyValue,Aa=Mo.deleteAttachedPropertyValue,sr=class extends Ma.PacemItemElement{findContainer(){return Mo.findAncestor(this,e=>e instanceof Pt)}#e="";get version(){return this.#e}#t=new MutationObserver(()=>{this.wgsl=this.textContent});viewActivatedCallback(){super.viewActivatedCallback(),this.wgsl=this.textContent,this.#t.observe(this,{characterData:!0})}propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="wgsl"&&this._computeVersion(o)}_computeVersion(e=this.wgsl){Ia.hash(e).then(t=>{if(t!==this.#e){let o=this.#e,r=t;this.#e=r;let i=new Gi({propertyName:"version",oldValue:o,currentValue:r,firstChange:pt.isNullOrEmpty(o)});this.dispatchEvent(i)}})}disconnectedCallback(){this.#t.disconnect(),super.disconnectedCallback()}};Lt([Io({emit:!1,converter:Bi.String})],sr.prototype,"type",void 0);Lt([Io({emit:!1,converter:Bi.String})],sr.prototype,"wgsl",void 0);sr=Lt([Gn({tagName:Bn+"-3d-wgsl-script"})],sr);var Pt=class extends Je{constructor(){super(...arguments),this.#e=[],this._scriptVersionChangeHandler=e=>{let{propertyName:t}=e.detail;t==="version"&&this._parseWgslModifiers(e.detail.currentValue)},this.#t=new Set,this.#r=new Map,this.#o=!0,this.#i=!0,this.#s=new WeakMap}invalidateSize(e,t=e.size){this._ensureRenderer(e)?.resize(t)}#e;get items(){return this.#e}register(e){let t=this.#e;return e instanceof sr&&!t.includes(e)?(e.addEventListener(Pn,this._scriptVersionChangeHandler,!1),t.push(e),this._parseWgslModifiers(this.modifiers?.version),!0):!1}unregister(e){let t=this.#e,o=t.indexOf(e);return o>=0?(e.removeEventListener(Pn,this._scriptVersionChangeHandler,!1),t.splice(o,1),this._parseWgslModifiers(this.modifiers?.version),!0):!1}#t;#r;#o;#i;get supported(){return this.#o}get active(){return this.#i}_webGPUNotSupported(e){this.#o&&e.cause===nr.NotSupported&&(this.#o=!1,this.dispatchEvent(new Gi({propertyName:"supported",oldValue:null,currentValue:!1}))),this.#i&&(this.#i=!1,this.dispatchEvent(new Gi({propertyName:"active",oldValue:null,currentValue:!1})))}initialize(e){let t=this.#r,o=this.#t;return o.has(e)||o.add(e),To.create(e,{enableValidation:this.enableValidation??!1,modifiers:this.modifiers}).then(r=>(t.get(e)?.update(),t.set(e,r),this._updatePipeline(e),r.canvas),r=>(this.log(Ta.LogLevel.Error,r.message),this._webGPUNotSupported(r),null))}_parseWgslModifiers(e){let t=this.#e,o=t.find(l=>l.type=="vertex-input"),r=t.find(l=>l.type=="vertex-output"),i=t.find(l=>l.type=="fragment"),s=o?.wgsl,a=r?.wgsl,c=i?.wgsl;this.modifiers={vertexInput:s,vertexOutput:a,fragment:c,version:e}}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"modifiers":case"enableValidation":this._reinitialize();break}}disconnectedCallback(){let e=this.#r;for(let[t,o]of e)o?.dispose();e.clear(),this.#t.clear(),super.disconnectedCallback()}dispose(e){let t=this.#r,o=this.#t;t.has(e)&&(t.get(e)?.dispose(),t.delete(e)),o.has(e)&&o.delete(e)}_reinitialize(){for(let e of this.#t.values())this.initialize(e)}_ensureRenderer(e){return this.#r.get(e)}_updatePipeline(e){this._ensureRenderer(e)?.update(...e.datasource)}#s;render(e){let t=e.size?.width,o=e.size?.height;if(!(t>0)||!(o>0))return;let r=this._ensureRenderer(e);if(pt.isNull(r))return;this.#s.has(e)&&(this.#s.delete(e),this._itemsChangedExec(e));let i=On(e,Di);if(r.render({cursor:i,time:performance.now(),resolution:{width:t,height:o}}),!e.interactive)return;let s=On(e,Ln);if(!pt.isNullOrEmpty(s)){if(pt.isNullOrEmpty(i)){s(null);return}r.raycast(i).then(a=>{if(pt.isNullOrEmpty(a))s(null);else{let c={object:a[0],point:null};s(c)}})}}snapshot(e,t,o,r){let i=this.#r;if(!i.has(e))return Promise.resolve(null);let{canvas:s}=i.get(e),a=!pt.isNullOrEmpty(t),c=o??(a?"image/jpeg":null),l=r??(a?.9:null);return new Promise((u,p)=>{this.render(e),pt.snapshotElement(s,t,c,l).then(u)})}raycast(e,t,o,r){Dn(e,Ln,r),t.x<0||t.y<0||t.x>=o.width||t.y>=o.height?Aa(e,Di):Dn(e,Di,t)}_itemsChangedExec(e){this._updatePipeline(e)}_itemsChanged(e,t){this.#s.set(e,!0)}addItem(e,t){this._itemsChanged(e,t)}removeItem(e,t){this._itemsChanged(e,t)}updateItem(e,t){(pt.isNull(t)||t.flags.indexOf(I.Visibility)>=0||t.flags.indexOf(I.Children)>=0)&&this._itemsChanged(e,t)}zoomFit(e,...t){return Promise.resolve()}project(e,t){return{x:0,y:0}}getScene(e){return e}};Lt([Ra(100)],Pt.prototype,"_parseWgslModifiers",null);Lt([Io({emit:!1})],Pt.prototype,"modifiers",void 0);Lt([Io({emit:!1,converter:Bi.Boolean})],Pt.prototype,"enableValidation",void 0);Pt=Lt([Gn({tagName:Bn+"-3d-webgpu-adapter"})],Pt);import{CustomElement as Pa,P as La,Watch as ht,PropertyConverters as Dt,Utils as Ot,CustomEventUtils as Si,avoidHandler as Dr,Behaviors as Oa,PropertyChangeEventName as Sn}from"@pacem/pacem-core";import{Geometry as Lo}from"@pacem/pacem-numerical";var Ye=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},le=Lo.LinearAlgebra.Vector3D,ft=Lo.LinearAlgebra.Matrix3D,Ao=Lo.LinearAlgebra.Quaternion,uf=Lo.LinearAlgebra.Spherical;function Da(n){return pe(n)?n.stage:null}var Ga=1,Ba=1,Sa=.05,Gr=.001,Br={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}},Po=class n{constructor(e,t){this._config=t,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=i=>{let{rotation:s,pan:a}=this._config,c=i.pointerType==="mouse",l=s.enabled&&c&&i.button===s.button&&Si.matchModifiers(i,s.modifiers),u=a.enabled&&c&&i.button===a.button&&Si.matchModifiers(i,a.modifiers);!l&&!u||(this.#t=l,(this.#e=u)&&(this._currentState=n._buildState(this._camera),Ot.extend(this._input,le.zero()),this._progress.x=this._progress.y=0),Dr(i),window.clearTimeout(this.#r),window.addEventListener("pointerup",this._endHandler,!1),window.addEventListener("pointermove",this._moveHandler,!1),window.addEventListener("contextmenu",this._avoidHandler,!1))},this._avoidHandler=i=>Dr(i),this._endHandler=i=>{Dr(i),this.#r=window.setTimeout(()=>{window.removeEventListener("pointerup",this._endHandler),window.removeEventListener("pointermove",this._moveHandler),window.removeEventListener("contextmenu",this._avoidHandler)},20)},this._zoomHandler=i=>{let{zoom:s}=this._config;if(!(s.enabled&&Si.matchModifiers(i,s.modifiers)))return;Dr(i);let c=this._input;c.rho-=Math.sign(i.deltaY)},this._moveHandler=i=>{Dr(i);let{height:s,width:a}=this._scene.size,c=this._input,l=Math.min(s,a);if(this.#t){let u=-Ga*360/l,{phi:p,theta:f}=c,{maxPolar:h,minPolar:b,maxAzimuth:C,minAzimuth:x}=this._config;c.phi=(p+i.movementX*u).clamp(b,h),c.theta=(f+i.movementY*u).clamp(x,C)}else if(this.#e){let u=this._currentState.radius/l;c.x+=-i.movementX*u,c.y+=i.movementY*u}},this._renderHandler=i=>{this._update()};let o=this._scene=(this._camera=e).stage;this._initialState=this._currentState=n._buildState(e);let r=this._canvas=o.stage;r.addEventListener("pointerdown",this._startHandler,!1),r.addEventListener("wheel",this._zoomHandler,{passive:!1}),o.addEventListener("render",this._renderHandler,!1)}static _buildState(e){let t=le.subtract(e.position,e.lookAt),o=le.mag(t);return{target:e.lookAt,versor:le.unit(t),up:e.up,radius:o,position:e.position}}static tryAttach(e,t){t??=Br;let o=Da(e)?.stage;if(Ot.isNull(o))return null;{let{position:r,lookAt:i}=e;return Ot.isNull(r)||Ot.isNull(i)||le.areClose(r,i)?null:new n(e,t)}}get configuration(){return this._config}set configuration(e){this._config=e}#e;#t;#r;_getSafeAzimuth({theta:e}){return n._modAngle(e)}_getSafePolar({phi:e}){return n._modAngle(e)}static _modAngle(e){for(;e<0;)e+=360;return e%360}static _getViewXYZ(e){let{versor:t,up:o}=e,r=le.cross(t,o),i=le.cross(r,t);return le.normalize(r),le.normalize(i),{right:r,up:i,versor:t}}#o;_update(){if(this.#o)return;this.#o=!0;let e=this._camera,{radius:t,versor:o,target:r,up:i}=this._initialState,{target:s}=this._currentState,{theta:a,phi:c,rho:l,x:u,y:p}=this._input,f=this._progress,{theta:h,phi:b,rho:C,x,y:d}=f,_=Math.abs(b-c)>Gr||Math.abs(h-a)>Gr,T=Math.abs(C-l)>Gr,N=Math.abs(u-x)>Gr||Math.abs(p-d)>Gr;if(T||_||N){let E=typeof this._config.inertia=="boolean"?this._config.inertia?Sa:0:this._config.inertia,v=E>0&&E<1,{right:A,up:L}=n._getViewXYZ(this._initialState),P=r,G=i,R=s,m=C;v?m+=(l-C)*E:m=l,f.rho=m;let g=Math.pow(.95,m*Ba),y=le.scale(o,-g*t);P=le.add(P,y);let w=b,M=h;v?(w+=(c-b)*E,M+=(a-h)*E):(w=c,M=a);let O=this._getSafePolar({phi:f.phi=w}),D=this._getSafeAzimuth({theta:f.theta=M}),X=le.negate(r),H=ft.translate(ft.identity(),X),K=Ao.fromAxisAngle(L,O),ie=Ao.fromAxisAngle(A,D),he=ft.multiply(Ao.toRotationMatrix(ie),Ao.toRotationMatrix(K));H=ft.multiply(H,he),H=ft.translate(H,le.negate(X)),P=ft.transform(P,H),G=ft.transform(G,ft.clone(H,dt=>{dt.offsetX=dt.offsetY=dt.offsetZ=0}));let se=x,ue=d,re=se,Y=ue;v?(re+=(u-se)*E,Y+=(p-ue)*E):(re=u,Y=p),f.x=re,f.y=Y;let{right:de,up:me}=n._getViewXYZ(this._currentState),Le=le.scale(de,re),Oe=le.scale(me,Y),Gt=le.add(Le,Oe);R=le.add(s,Gt),e.lookAt=R,e.position=P,e.up=G,e.flags.push(I.Camera)}this.#o=!1}dispose(){let e=this._canvas,t=this._scene;Ot.isNull(e)||(e.removeEventListener("pointerdown",this._startHandler),e.removeEventListener("wheel",this._zoomHandler)),t.removeEventListener("render",this._renderHandler,!1)}},Pe=class extends Oa.PacemBehavior{constructor(){super(...arguments),this.#e=new Map,this._readyHandler=e=>{if(e.detail.propertyName==="isReady"&&e.detail.currentValue===!0){let t=e.currentTarget;t.removeEventListener(Sn,this._readyHandler),this._decorateCore(t)}}}#e;propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"maxAzimuth":case"minAzimuth":case"inertia":case"zoomControl":case"panControl":case"rotationControl":let i=this._buildConfig(),s=this.#e;for(let a of s.values())a.configuration=i;break}}disconnectedCallback(){let e=this.#e;for(let t of e.values())t.dispose();e.clear(),super.disconnectedCallback()}_buildConfig(){return Ot.extend({},Br,{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??Br.zoom,pan:this.panControl??Br.pan,rotation:this.rotationControl??Br.rotation})}_decorateCore(e){let t=Po.tryAttach(e,this._buildConfig());Ot.isNull(t)||this.#e.set(e,t)}decorate(e){e.isConnected?this._decorateCore(e):e.addEventListener(Sn,this._readyHandler,!1)}undecorate(e){let t=this.#e;t.has(e)&&(t.get(e).dispose(),t.delete(e))}};Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"maxAzimuth",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"maxPolar",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"minAzimuth",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"minPolar",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"zoomControl",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"rotationControl",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"panControl",void 0);Ye([ht({emit:!1,converter:Go})],Pe.prototype,"inertia",void 0);Pe=Ye([Pa({tagName:La+"-"+"3d"+"-orbit-camera"})],Pe);export{Vn as Components,qi as Drawing3D};