@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.
- package/dist/browser/pacem-3d.js +508 -508
- package/dist/browser/pacem-3d.js.map +1 -1
- package/dist/browser/pacem-3d.min.js +2 -2
- package/dist/bundle/pacem-3d.min.mjs +18 -18
- package/dist/bundle/pacem-3d.mjs +523 -525
- package/dist/bundle/pacem-3d.mjs.map +4 -4
- package/dist/esm/constants.js +1 -1
- package/dist/esm/converters.js +1 -1
- package/dist/esm/decorators.js +1 -1
- package/dist/esm/detector.js +1 -1
- package/dist/esm/geometry.js +1 -1
- package/dist/esm/index-components-drawing3d.js +1 -1
- package/dist/esm/index-components.js +3 -2
- package/dist/esm/index-drawing3d.js +1 -1
- package/dist/esm/index-iife.js +1 -1
- package/dist/esm/index-root.js +3 -2
- package/dist/esm/index.js +3 -2
- package/dist/esm/stage.js +1 -1
- package/dist/esm/types.js +1 -1
- package/package.json +1 -1
- package/typings/index.d.ts +5 -3
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-3d v1.0.
|
|
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
|
|
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
|
|
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
|
|
68
|
-
`)}function
|
|
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
|
|
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(
|
|
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}=
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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};
|