@pacem/pacem 1.0.0-abel → 1.0.0-amaldi

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/browser/pacem-2d.js +3 -3
  2. package/dist/browser/pacem-2d.js.map +0 -5
  3. package/dist/browser/pacem-2d.min.js +3 -3
  4. package/dist/browser/pacem-2d.min.js.map +0 -5
  5. package/dist/browser/pacem-3d.js +341 -341
  6. package/dist/browser/pacem-3d.js.map +1 -6
  7. package/dist/browser/pacem-3d.min.js +3 -3
  8. package/dist/browser/pacem-3d.min.js.map +1 -6
  9. package/dist/browser/pacem-charts.js +3 -3
  10. package/dist/browser/pacem-charts.js.map +0 -5
  11. package/dist/browser/pacem-charts.min.js +3 -3
  12. package/dist/browser/pacem-charts.min.js.map +0 -5
  13. package/dist/browser/pacem-cms.js +107 -107
  14. package/dist/browser/pacem-cms.js.map +1 -6
  15. package/dist/browser/pacem-cms.min.js +3 -3
  16. package/dist/browser/pacem-cms.min.js.map +1 -6
  17. package/dist/browser/pacem-core.js +21 -7
  18. package/dist/browser/pacem-core.js.map +1 -6
  19. package/dist/browser/pacem-core.min.js +4 -4
  20. package/dist/browser/pacem-core.min.js.map +1 -6
  21. package/dist/browser/pacem-foundation.js +3 -3
  22. package/dist/browser/pacem-foundation.js.map +0 -5
  23. package/dist/browser/pacem-foundation.min.js +3 -3
  24. package/dist/browser/pacem-foundation.min.js.map +0 -5
  25. package/dist/browser/pacem-fx.js +19 -19
  26. package/dist/browser/pacem-fx.js.map +1 -6
  27. package/dist/browser/pacem-fx.min.js +3 -3
  28. package/dist/browser/pacem-fx.min.js.map +1 -6
  29. package/dist/browser/pacem-logging.js +3 -3
  30. package/dist/browser/pacem-logging.js.map +0 -5
  31. package/dist/browser/pacem-logging.min.js +3 -3
  32. package/dist/browser/pacem-logging.min.js.map +0 -5
  33. package/dist/browser/pacem-maps.js +3 -3
  34. package/dist/browser/pacem-maps.js.map +0 -5
  35. package/dist/browser/pacem-maps.min.js +3 -3
  36. package/dist/browser/pacem-maps.min.js.map +0 -5
  37. package/dist/browser/pacem-media.js +3 -3
  38. package/dist/browser/pacem-media.js.map +0 -5
  39. package/dist/browser/pacem-media.min.js +3 -3
  40. package/dist/browser/pacem-media.min.js.map +0 -5
  41. package/dist/browser/pacem-networking.js +3 -3
  42. package/dist/browser/pacem-networking.js.map +0 -5
  43. package/dist/browser/pacem-networking.min.js +3 -3
  44. package/dist/browser/pacem-networking.min.js.map +0 -5
  45. package/dist/browser/pacem-numerical.js +3 -3
  46. package/dist/browser/pacem-numerical.js.map +0 -5
  47. package/dist/browser/pacem-numerical.min.js +3 -3
  48. package/dist/browser/pacem-numerical.min.js.map +0 -5
  49. package/dist/browser/pacem-plus.js +77 -77
  50. package/dist/browser/pacem-plus.js.map +1 -6
  51. package/dist/browser/pacem-plus.min.js +3 -3
  52. package/dist/browser/pacem-plus.min.js.map +1 -6
  53. package/dist/browser/pacem-scaffolding.js +11 -8
  54. package/dist/browser/pacem-scaffolding.js.map +1 -6
  55. package/dist/browser/pacem-scaffolding.min.js +4 -4
  56. package/dist/browser/pacem-scaffolding.min.js.map +1 -6
  57. package/dist/browser/pacem-ui.js +37 -26
  58. package/dist/browser/pacem-ui.js.map +1 -6
  59. package/dist/browser/pacem-ui.min.js +4 -4
  60. package/dist/browser/pacem-ui.min.js.map +1 -6
  61. package/dist/bundle/pacem.min.mjs +40 -38
  62. package/dist/bundle/pacem.mjs +58 -32
  63. package/dist/bundle/pacem.mjs.map +2 -7
  64. package/dist/typings/index.d.ts +5 -3
  65. package/dist/vscode.html-custom.json +4834 -0
  66. package/package.json +9 -8
@@ -1,6 +1,6 @@
1
- /**
2
- * @pacem/pacem v1.0.0-abel (https://js.pacem.it)
3
- * Copyright 2026 Pacem (https://pacem.it)
1
+ /*!
2
+ * @pacem/pacem v1.0.0-amaldi (https://js.pacem.it)
3
+ * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
6
6
  !function(e,t,r){"use strict";const i={convert:e=>r.Geometry.LinearAlgebra.Vector3D.parse(e),convertBack:e=>`${e.x||0} ${e.y||0} ${e.z||0}`},n={convert:i=>{const n=e.parseAsNumericalArray(i),s=()=>{throw new Error(`Cannot parse "${i}" as a valid Vector3D.`)};if(t.Utils.isNullOrEmpty(n)&&s(),3===n.length)return r.Geometry.LinearAlgebra.Vector3D.from(...n);if(1===n.length){const e=n[0];return r.Geometry.LinearAlgebra.Vector3D.from(e,e,e)}s()},convertBack:e=>`${e.x||0} ${e.y||0} ${e.z||0}`},s={convert:e=>r.Geometry.LinearAlgebra.Quaternion.parse(e),convertBack:e=>`${e.x||0} ${e.y||0} ${e.z||0} ${e.w||0}`},o={convert:t=>"true"===t||"false"!==t&&e.parseAsNumericalArray(t)[0],convertBack:e=>e.toString()},a="3d",l=Math.PI/180;var c=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let u=class extends t.Components.PacemItemsContainerElement{constructor(){super(...arguments),this._itemPropertyChangeHandler=e=>{const t=e.target;this.adapter&&this.adapter.updateItem(this,t),t.flags.splice(0)},this._clickHandler=e=>{let r=this;if(!r.interactive||t.Utils.isNull(r._lastHitResult))return;const i=e.type.replace(/^mouse/,""),n=r._lastHitResult,s=n.object,o=n.point;this._itemDispatch(s,o,i,e)},this._hitTestCallback=(e,r)=>{const i=this;if(e!=i._lastHitResult){if(e?.object!=i._lastHitResult?.object){const n=e?.object,s=i._lastHitResult?.object,o=e?.point;t.Utils.isNull(s)||this._itemDispatch(s,o,"out",r),t.Utils.isNull(n)||this._itemDispatch(n,o,"over",r)}i._lastHitResult=e}},this._moveHandler=e=>{let t=this;if(!t.adapter||!t.interactive)return;const r=t._resizer.currentSize,i="mousemove"===e.type?{x:e.pageX-r.left,y:e.pageY-r.top}:{x:-1,y:-1};t.adapter.raycast(this,i,r,r=>t._hitTestCallback(r,e))},this._resizeHandler=e=>{const r=this.#e,i=e.detail;if(!t.Utils.isNull(r)&&r.height===i.height&&r.width===i.width)return;this.#e=i;const n=this.adapter;t.Utils.isNull(n)||(this.adapter.invalidateSize(this,i),this.dispatchEvent(new t.Components.ResizeEvent(i)))}}validate(e){return e instanceof L}get stage(){return this._container}get scene(){return this.adapter&&this.adapter.getScene(this)}register(e){const r=super.register(e);return r&&(this._add(e),e.addEventListener(t.PropertyChangeEventName,this._itemPropertyChangeHandler,!1)),r}unregister(e){const r=super.unregister(e);return r&&(e.removeEventListener(t.PropertyChangeEventName,this._itemPropertyChangeHandler,!1),this._erase(e)),r}_refreshDatasource(e=this.datasource){this.adapter?.updateItem(this,void 0)}_buildUpDatasourceFromDOM(e=this.items){t.Utils.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,r){return new Promise((i,n)=>{const s=this.datasource||[];t.Utils.isNull(e)||s.forEach(t=>e.removeItem(this,t)),t.Utils.isNull(this._container)||t.Utils.isNull(r)?i():r.initialize(this).then(e=>{(s||[]).forEach(e=>this._add(e)),i()},e=>{this.log(t.Logging.LogLevel.Error,e?.toString()),n(e)})})}propertyChangedCallback(e,t,r,i){if(super.propertyChangedCallback(e,t,r,i),!i)switch(e){case"adapter":this._initializeAdapter(t,r);break;case"items":this._buildUpDatasourceFromDOM(r);break;case"transparent":this.adapter?.invalidateSize(this,this.size);break;case"datasource":this._refreshDatasource(r);case"disabled":case"background":this.render()}}viewActivatedCallback(){super.viewActivatedCallback();const e=this._container,t=this._resizer;t.addEventListener("resize",this._resizeHandler,!1),t.target=e,this._initializeAdapter(null,this.adapter).then(t=>{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,r,i,n){if(!t.Utils.isNull(e)){var s,o,a;n instanceof Event?o=n:s={item:e,offset:n},"string"==typeof i?a=i:(a=i.type,o=i.originalEvent);const c=r,u=()=>n instanceof Event?new N(a,e,o,c):new R(a,{detail:s,cancelable:a===t.UI.DragDropEventType.Init||a===t.UI.DragDropEventType.Drag},o,c),h=n instanceof Event?new N("item"+a,e,o,c):new R("item"+a,{detail:s,cancelable:a===t.UI.DragDropEventType.Init||a===t.UI.DragDropEventType.Drag},o,c);var l=!1;if(e instanceof EventTarget){const t=u();e.dispatchEvent(t),l=t.defaultPrevented}return e.stage.dispatchEvent(h),l||h.defaultPrevented}return!1}disconnectedCallback(){this.#t?.stop();const e=this._resizer,r=this._container;t.Utils.isNull(r)||(r.removeEventListener("click",this._clickHandler,!1),r.removeEventListener("mouseup",this._clickHandler,!1),r.removeEventListener("mousedown",this._clickHandler,!1),r.removeEventListener("mousemove",this._moveHandler,!1),r.removeEventListener("mouseout",this._moveHandler,!1)),t.Utils.isNull(e)||e.removeEventListener("resize",this._resizeHandler,!1),super.disconnectedCallback()}#e;get size(){return this.#e}render(e,r,i=performance.now()){if(t.Utils.isNull(e))this.#t?.stop(),this.#t=t.Animations.Timer.run(e=>this._doRender());else{const r=this.adapter;t.Utils.isNull(r)||r.updateItem(this,e)}}#t;_doRender(){if(!this.disabled&&!t.Utils.isNull(this.adapter)){const e=this.adapter.getScene(this);let 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}})))}}};c([t.ViewChild(`.${t.PCSS}-3d`)],u.prototype,"_container",void 0),c([t.ViewChild(t.P+"-resize")],u.prototype,"_resizer",void 0),c([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],u.prototype,"interactive",void 0),c([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],u.prototype,"transparent",void 0),c([t.Watch({emit:!1,converter:t.PropertyConverters.String})],u.prototype,"background",void 0),c([t.Watch({emit:!1,converter:t.PropertyConverters.Element})],u.prototype,"adapter",void 0),c([t.Watch({emit:!1,converter:t.PropertyConverters.Json})],u.prototype,"datasource",void 0),c([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],u.prototype,"orbit",void 0),u=c([t.CustomElement({tagName:t.P+"-"+a,shadow:t.Defaults.USE_SHADOW_ROOT,template:`<${t.P}-resize watch-position="true"></${t.P}-resize><div class="${t.PCSS}-3d"></div><${t.P}-content></${t.P}-content>`})],u);var h,p=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};function d(e){return!t.Utils.isNull(e)&&"render"in e&&"function"==typeof e.render}function m(e){return d(e?.stage)}function f(e){return"transformMatrix"in e&&m(e)}function g(e){return"type"in e&&"up"in e&&"lookAt"in e&&m(e)}function y(e){return g(e)&&"type"in e&&"perspective"===e.type}function v(e){return g(e)&&"type"in e&&"orthographic"===e.type}function b(e){return"type"in e&&("ambient"===e.type||"omni"===e.type||"direction"===e.type||"spot"==e.type)&&m(e)}function x(e){return"geometry"in e&&f(e)}function _(e){return"positions"in e&&t.Utils.isArray(e.positions)}function w(e){return("triangleIndices"in e&&t.Utils.isArray(e.triangleIndices)||"normals"in e&&t.Utils.isArray(e.normals)||"textureCoordinates"in e&&t.Utils.isArray(e.textureCoordinates))&&_(e)}function C(e){return"childRenderables"in e&&t.Utils.isArray(e.childRenderables)&&f(e)}function E(e){const r=[];if(!t.Utils.isNullOrEmpty(e)){const t=e.triangleIndices;if(t.length%3!=0)throw new RangeError(`Invalid mesh geometry: ${t.length} is not multiple of 3.`);for(let i=2;i<t.length;i+=3){const n=t[i-2],s=t[i-1],o=t[i],a=P(e.positions[n],e.positions[s],e.positions[o]);r.push(a,a,a)}}e.normals=r}function P(e,t,i){const n=r.Geometry.LinearAlgebra.Vector3D.subtract(e,t),s=r.Geometry.LinearAlgebra.Vector3D.subtract(e,i),o=r.Geometry.LinearAlgebra.Vector3D.cross(n,s);return r.Geometry.LinearAlgebra.Vector3D.unit(o)}class M extends t.CustomUIEvent{constructor(e,t,r,i){super(e,t,r),this.#r=i}#r;get point(){return this.#r}}class R extends M{}class N extends M{constructor(e,t,r,i){super(e,{detail:t,bubbles:!0,cancelable:!0},r,i)}}function U(e){return"object"==typeof e&&"time"in e&&"number"==typeof e.time}!function(e){e.Position="position",e.Transform="transform",e.Geometry="geometry",e.Children="children",e.Material="material",e.Light="light",e.Camera="camera",e.Visibility="visibility"}(h||(h={}));const T={OBJECT_SELECTOR:t.P+"-"+"3d-object",LIGHT_SELECTOR:t.P+"-"+"3d-light",PERSPECTIVE_CAMERA_SELECTOR:t.P+"-"+"3d-perspective-camera",ORTHO_CAMERA_SELECTOR:t.P+"-"+"3d-orthographic-camera",MESH_SELECTOR:t.P+"-"+"3d-mesh",GROUP_SELECTOR:t.P+"-"+"3d-group",DEFAULT_COORDS:{x:0,y:0,z:0}};class L extends t.Components.PacemCrossItemsContainerElement{constructor(){super(...arguments),this.position=T.DEFAULT_COORDS,this.#i=[]}validate(e){return!1}findContainer(){return this.parent||this.stage}get stage(){return this._scene=this._scene||t.CustomElementUtils.findAncestorOfType(this,u)}get parent(){return this._drawableParent=this._drawableParent||t.CustomElementUtils.findAncestor(this,e=>e instanceof L)}disconnectedCallback(){delete this._scene,delete this._drawableParent,super.disconnectedCallback()}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"hide":this.setAsDirty(h.Visibility);break;case"items":this.setAsDirty(h.Children);break;case"position":this.setAsDirty(h.Position)}}#i;get flags(){return this.#i}setAsDirty(...e){for(let t of e)this.flags.includes(t)||this.flags.push(t);this.stage?.render(this)}}p([t.Watch({emit:!1,converter:i})],L.prototype,"position",void 0),p([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.String})],L.prototype,"tag",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],L.prototype,"inert",void 0);class B extends L{propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"transformMatrix":this.setAsDirty(h.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()}}_computeTransformMatrix(){const e=r.Geometry.LinearAlgebra.Matrix3D,i=r.Geometry.LinearAlgebra.Vector3D,n=r.Geometry.LinearAlgebra.Quaternion,s=this.scale??i.from(1,1,1);let o=e.scale(e.identity(),s);if(!t.Utils.isNull(this.rotate)){const t=n.toRotationMatrix(this.rotate);o=e.multiply(o,t)}const a=this.offset??i.from(0,0,0);o=e.translate(o,a),this.transformMatrix=o}}p([t.Watch({emit:!1,converter:s})],B.prototype,"rotate",void 0),p([t.Watch({emit:!1,converter:n})],B.prototype,"scale",void 0),p([t.Watch({emit:!1,converter:n})],B.prototype,"offset",void 0),p([t.Watch({emit:!1})],B.prototype,"transformMatrix",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],B.prototype,"scaleX",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],B.prototype,"scaleY",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],B.prototype,"scaleZ",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],B.prototype,"translateX",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],B.prototype,"translateY",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],B.prototype,"translateZ",void 0);let A=class extends B{validate(e){return e instanceof L}#n=[];get childRenderables(){return this.#n}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"items":case"datasource":this.#n=r||[],this.setAsDirty(h.Children)}}};p([t.Watch({emit:!1})],A.prototype,"datasource",void 0),A=p([t.CustomElement({tagName:T.GROUP_SELECTOR})],A);let S=class extends B{propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"geometry":this.setAsDirty(h.Geometry);break;case"material":case"backMaterial":this.setAsDirty(h.Material)}}};p([t.Watch({emit:!1,converter:t.PropertyConverters.Json})],S.prototype,"geometry",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Json})],S.prototype,"material",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Json})],S.prototype,"backMaterial",void 0),S=p([t.CustomElement({tagName:T.MESH_SELECTOR})],S);let k=class extends B{propertyChangedCallback(e,t,r,i){super.propertyChangedCallback(e,t,r,i),"content"!==e&&"type"!==e||this.setAsDirty(h.Geometry,h.Material)}};p([t.Watch({emit:!1})],k.prototype,"content",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.String})],k.prototype,"type",void 0),k=p([t.CustomElement({tagName:T.OBJECT_SELECTOR})],k);let O=class extends L{constructor(){super(...arguments),this.intensity=.85,this.target=T.DEFAULT_COORDS,this.color="#fff",this.type="omni"}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"type":case"color":case"intensity":case"target":this.setAsDirty(h.Light)}}};p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],O.prototype,"intensity",void 0),p([t.Watch({emit:!1,converter:i})],O.prototype,"target",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.String})],O.prototype,"color",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.String})],O.prototype,"type",void 0),O=p([t.CustomElement({tagName:T.LIGHT_SELECTOR})],O);class G extends L{constructor(){super(...arguments),this.near=.1,this.far=1e3,this.up=r.Geometry.LinearAlgebra.Vector3D.j(),this.lookAt=T.DEFAULT_COORDS}#s;_resetBoundingSphere(){const e=this.#s,i=this.position,n=this.lookAt,s=t.Utils.isNullOrEmpty(i)||t.Utils.isNullOrEmpty(n)?0:r.Geometry.LinearAlgebra.Vector3D.mag(r.Geometry.LinearAlgebra.Vector3D.subtract(i,n)),o=this.#s={center:n,radius:s};this.dispatchEvent(new t.PropertyChangeEvent({currentValue:o,propertyName:"boundingSphere",oldValue:e}))}get boundingSphere(){return this.#s}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"lookAt":case"position":this._resetBoundingSphere();case"near":case"far":case"up":this.setAsDirty(h.Camera)}}}p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],G.prototype,"near",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],G.prototype,"far",void 0),p([t.Watch({emit:!1,converter:i})],G.prototype,"up",void 0),p([t.Watch({emit:!1,converter:i})],G.prototype,"lookAt",void 0);let D=class extends G{constructor(){super(...arguments),this.fov=45,this.aspect=1}get type(){return"perspective"}get aspectRatio(){return this.aspect}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"fov":case"aspect":this.setAsDirty(h.Camera)}}};p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],D.prototype,"fov",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],D.prototype,"aspect",void 0),D=p([t.CustomElement({tagName:T.PERSPECTIVE_CAMERA_SELECTOR})],D);let $=class extends G{constructor(){super(...arguments),this.top=1,this.left=-1,this.bottom=-1,this.right=1}get type(){return"orthographic"}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"top":case"left":case"bottom":case"right":this.setAsDirty(h.Camera)}}};p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],$.prototype,"top",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],$.prototype,"left",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],$.prototype,"bottom",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],$.prototype,"right",void 0),$=p([t.CustomElement({tagName:T.ORTHO_CAMERA_SELECTOR})],$);class I extends t.PacemEventTarget{}var z,W=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};function j(e){return"shader"in e}function V(e){return j(e)&&e.shader===z.Basic}function H(e){return j(e)&&e.shader===z.Line}function F(e){return j(e)&&e.shader===z.Lambert}function X(e){return j(e)&&e.shader===z.Phong}function Y(e){return j(e)&&e.shader===z.Standard}function Z(e){return j(e)&&e.shader===z.Custom}!function(e){e.Basic="basic",e.Lambert="lambert",e.Phong="phong",e.Standard="standard",e.Line="line",e.Custom="custom"}(z||(z={}));class q extends t.PacemEventTarget{constructor(e){super(),this.#o=e}#o;get shader(){return this.#o}async _loadMap(r,i=this.material?.texture){if(t.Utils.isNull(i)||i.close(),t.Utils.isNullOrEmpty(r))return null;const n=await e.Imaging.loadImage(r);return t.Utils.isNull(n)?null:await createImageBitmap(n)}propertyChangedCallback(e,t,r,i){if(super.propertyChangedCallback(e,t,r,i),!i)switch(e){case"map":case"opacity":case"wireframe":case"color":case"hide":this.updateMaterial()}}viewActivatedCallback(){super.viewActivatedCallback(),this.updateMaterial()}updateMaterial(){this.createMaterial().then(e=>{this.material=t.Utils.extend(e,{flags:[h.Material]})})}async createMaterial(){return{opacity:this.opacity??1,wireframe:this.wireframe??!1,color:this.color||t.Utils.Css.getVariableValue(`--${t.PCSS}-color-primary`),visible:!this.hide,map:this.map,texture:await this._loadMap(this.map),shader:this.shader,flags:[]}}}W([t.Watch()],q.prototype,"material",void 0),W([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],q.prototype,"opacity",void 0),W([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],q.prototype,"wireframe",void 0),W([t.Watch({emit:!1,converter:t.PropertyConverters.String})],q.prototype,"color",void 0),W([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],q.prototype,"hide",void 0),W([t.Watch({emit:!1,converter:t.PropertyConverters.String})],q.prototype,"map",void 0);var J=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let Q=class extends q{constructor(){super(z.Basic)}};Q=J([t.CustomElement({tagName:`${t.P}-${a}-material-basic`})],Q);var K=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let ee=class extends q{constructor(){super(z.Lambert)}async createMaterial(){return t.Utils.extend({emissiveColor:this.emissiveColor||"#000",reflectivity:this.reflectivity??0,refractionRatio:this.refractionRatio??0},await super.createMaterial())}propertyChangedCallback(e,t,r,i){if(super.propertyChangedCallback(e,t,r,i),!i)switch(e){case"emissiveColor":case"reflectivity":case"refractionRatio":this.updateMaterial()}}};K([t.Watch({emit:!1,converter:t.PropertyConverters.String})],ee.prototype,"emissiveColor",void 0),K([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ee.prototype,"reflectivity",void 0),K([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ee.prototype,"refractionRatio",void 0),ee=K([t.CustomElement({tagName:`${t.P}-${a}-material-lambert`})],ee);var te=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let re=class extends q{constructor(){super(z.Line)}propertyChangedCallback(e,t,r,i){if(super.propertyChangedCallback(e,t,r,i),!i)switch(e){case"lineWidth":case"lineJoin":case"lineCap":case"dashArray":this.updateMaterial()}}async createMaterial(){return t.Utils.extend({lineWidth:this.lineWidth??1,lineJoin:this.lineJoin??"round",lineCap:this.lineCap??"round",dashArray:this.dashArray},await super.createMaterial())}};te([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],re.prototype,"lineWidth",void 0),te([t.Watch({emit:!1,converter:t.PropertyConverters.String})],re.prototype,"lineJoin",void 0),te([t.Watch({emit:!1,converter:t.PropertyConverters.String})],re.prototype,"lineCap",void 0),te([t.Watch({emit:!1,converter:{convert:e=>e?.split(",").map(e=>parseInt(e)).filter(e=>!Number.isNaN(e)),convertBack:e=>e?.join(",")}})],re.prototype,"dashArray",void 0),re=te([t.CustomElement({tagName:`${t.P}-${a}-material-line`})],re);var ie=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let ne=class extends q{constructor(){super(z.Phong)}async createMaterial(){return t.Utils.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,r,i){if(super.propertyChangedCallback(e,t,r,i),!i)switch(e){case"emissiveColor":case"reflectivity":case"refractionRatio":case"specularColor":case"shininess":case"flatShading":this.updateMaterial()}}};ie([t.Watch({emit:!1,converter:t.PropertyConverters.String})],ne.prototype,"emissiveColor",void 0),ie([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ne.prototype,"reflectivity",void 0),ie([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ne.prototype,"refractionRatio",void 0),ie([t.Watch({emit:!1,converter:t.PropertyConverters.String})],ne.prototype,"specularColor",void 0),ie([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ne.prototype,"shininess",void 0),ie([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],ne.prototype,"flatShading",void 0),ne=ie([t.CustomElement({tagName:`${t.P}-${a}-material-phong`})],ne);var se=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let oe=class extends q{constructor(){super(z.Standard)}async createMaterial(){return t.Utils.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,r,i){if(super.propertyChangedCallback(e,t,r,i),!i)switch(e){case"emissiveColor":case"roughness":case"metalness":case"refractionRatio":case"flatShading":this.updateMaterial()}}};se([t.Watch({emit:!1,converter:t.PropertyConverters.String})],oe.prototype,"emissiveColor",void 0),se([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],oe.prototype,"refractionRatio",void 0),se([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],oe.prototype,"roughness",void 0),se([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],oe.prototype,"metalness",void 0),se([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],oe.prototype,"flatShading",void 0),oe=se([t.CustomElement({tagName:`${t.P}-${a}-material-standard`})],oe);var ae=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};class le extends t.PacemEventTarget{viewActivatedCallback(){super.viewActivatedCallback(),t.Utils.isNull(this.geometry)&&(this.geometry=this.createDefaultGeometry())}}function ce(e){return(r,i,n)=>{const s=`_${i}_${t.Utils.uniqueCode()}_backingField`;function o(){return this[s]}function a(t){if(t!==this[s]){const r=this[s];this[s]=t,e.call(this,i,r,t)}}Object.defineProperty(r,i,{get:function(){return o.call(this)},set:function(e){a.call(this,e)},enumerable:!0,configurable:!1})}}ae([t.Watch({converter:t.PropertyConverters.Json})],le.prototype,"geometry",void 0);var ue=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};class he{constructor(e=[]){this.positions=e}static barycenter(e){var r={x:0,y:0,z:0};if(!t.Utils.isNullOrEmpty(e)){for(var i=e.length,n=0;n<e.length;n++){var s=e[n];r.x+=s.x,r.y+=s.y,r.z+=s.z}var o=1*i;r.x/=o,r.y/=o,r.z/=o}return r}static boundingBox(e){const r={minX:1/0,minY:1/0,minZ:1/0,maxX:-1/0,maxY:-1/0,maxZ:-1/0};if(!t.Utils.isNullOrEmpty(e))for(var i=0;i<e.length;i++){var n=e[i];r.minX=Math.min(r.minX,n.x),r.minY=Math.min(r.minY,n.y),r.minZ=Math.min(r.minZ,n.z),r.maxX=Math.max(r.maxX,n.x),r.maxY=Math.max(r.maxY,n.y),r.maxZ=Math.max(r.maxZ,n.z)}return r}setAsDirty(){pe.call(this)}}function pe(){this.flags=[h.Geometry]}class de extends he{}ue([ce(pe)],de.prototype,"positions",void 0);class me extends he{#a;#l;#c;get barycenter(){return this.#c??=he.barycenter(this.positions)}set barycenter(e){this.#c=e}get boundingBox(){return this.#a??=he.boundingBox(this.positions)}set boundingBox(e){this.#a=e}get boundingSphere(){return this.#l}set boundingSphere(e){this.#l=e}constructor(e,t,r=[],i=[]){super(e),this.triangleIndices=t,this.textureCoordinates=r,this.normals=i}}ue([ce(pe)],me.prototype,"positions",void 0),ue([ce(pe)],me.prototype,"triangleIndices",void 0),ue([ce(pe)],me.prototype,"textureCoordinates",void 0),ue([ce(pe)],me.prototype,"normals",void 0);var fe,ge=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let ye=fe=class extends le{static createMeshGeometry(e,t,r,i,n,s){const o=e||1,a=t||1,l=r||1,c=i||1,u=n||1,h=s||1,p=[],d=[],m=[];for(var f=0;f<=u;f++)for(var g=a/2-a*(1*f)/(1*u),y=0;y<=h;y++)for(var v=-l/2+l*(1*y)/(1*h),b=0;b<=c;b++){var x=-o/2+o*(1*b)/(1*c);0!=b&&b!=c&&0!=y&&y!=h&&0!=f&&f!=u||p.push({x:x,y:g,z:v})}var _=function(e,t,r){for(var i=1e-5,n=0;n<p.length;n++){var s=p[n];if(Math.abs(s.x-e)<i&&Math.abs(s.y-t)<i&&Math.abs(s.z-r)<i)return n}return-1},w=function(e,t,r,i,n,s,o,a){m.push(e),m.push(t),m.push(r),m.push(e),m.push(r),m.push(i),d.push({x:n,y:a}),d.push({x:o,y:a}),d.push({x:o,y:s}),d.push({x:n,y:a}),d.push({x:o,y:s}),d.push({x:n,y:s})};for(y=0;y<h;y++){g=a/2,v=-l/2+l*(1*y)/(1*h);var C=-l/2+l*(1*(y+1))/(1*h);for(b=0;b<c;b++){var P=-o/2+1*(b+1)*o/(1*c);w(_(x=-o/2+1*b*o/(1*c),g,C),_(P,g,C),_(P,g,v),_(x,g,v),1*b/(1*c),1-1*y/(1*h),1*(b+1)/(1*c),1-1*(y+1)/(1*h))}}for(f=0;f<u;f++){g=a/2-1*f*a/(1*u);var M=a/2-(f+1)*a/(1*u);for(v=-l/2,b=0;b<c;b++){P=o/2-(b+1)*o/(1*c);w(_(x=o/2-1*b*o/(1*c),M,v),_(P,M,v),_(P,g,v),_(x,g,v),1*b/(1*c),1-1*f/(1*u),(b+1)/(1*c),1-(f+1)/(1*u))}}for(f=0;f<u;f++)for(g=a/2-1*f*a/(1*u),M=a/2-(f+1)*a/(1*u),x=-o/2,y=0;y<h;y++){C=-l/2+(y+1)*l/(1*h);w(_(x,M,v=-l/2+y*l/(1*h)),_(x,M,C),_(x,g,C),_(x,g,v),1*y/(1*h),1-f/(1*u),(y+1)/(1*h),1-(f+1)/(1*u))}for(f=0;f<u;f++)for(g=a/2-f*a/(1*u),M=a/2-(f+1)*a/(1*u),v=l/2,b=0;b<c;b++){P=-o/2+(b+1)*o/(1*c);w(_(x=-o/2+b*o/(1*c),M,v),_(P,M,v),_(P,g,v),_(x,g,v),1*b/(1*c),1-1*f/(1*u),(b+1)/(1*c),1-(f+1)/(1*u))}for(f=0;f<u;f++)for(g=a/2-f*a/(1*u),M=a/2-(f+1)*a/(1*u),x=o/2,y=0;y<h;y++){C=l/2-(y+1)*l/(1*h);w(_(x,M,v=l/2-y*l/(1*h)),_(x,M,C),_(x,g,C),_(x,g,v),1*y/(1*h),1-1*f/(1*u),(y+1)/(1*h),1-(f+1)/(1*u))}for(y=0;y<h;y++)for(g=-a/2,v=l/2-l*y/(1*h),C=l/2-l*(y+1)/(1*h),b=0;b<c;b++){P=-o/2+(b+1)*o/(1*c);w(_(x=-o/2+b*o/(1*c),g,C),_(P,g,C),_(P,g,v),_(x,g,v),1*b/(1*c),1-1*y/(1*h),(b+1)/(1*c),1-(y+1)/(1*h))}const R=new me(p,m,d);R.key=`box_${e}x${t}x${r}_w${i}_h${n}_d${s}`,E(R);const N={x:0,y:0,z:0},U=e/2,T=t/2,L=r/2;return R.barycenter=N,R.boundingBox={maxX:U,maxY:T,maxZ:L,minX:-U,minY:-T,minZ:-L},R.boundingSphere={center:N,radius:Math.sqrt(Math.pow(U,2)+Math.pow(T,2)+Math.pow(L,2))},R}createDefaultGeometry(){return fe.createMeshGeometry()}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"width":case"height":case"depth":case"widthSegments":case"heightSegments":case"depthSegments":this.geometry=fe.createMeshGeometry(this.width,this.height,this.depth,this.widthSegments,this.heightSegments,this.depthSegments)}}};ge([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ye.prototype,"width",void 0),ge([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ye.prototype,"height",void 0),ge([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ye.prototype,"depth",void 0),ge([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ye.prototype,"widthSegments",void 0),ge([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ye.prototype,"heightSegments",void 0),ge([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ye.prototype,"depthSegments",void 0),ye=fe=ge([t.CustomElement({tagName:t.P+"-"+"3d-primitive-box"})],ye);var ve,be=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let xe=ve=class extends le{static createMeshGeometry(e=1,t=1,r=18,i=5,n=1){const s=[],o=[],a=[],c=l*(360/r),u=e/t,h=t/i,p=1/r;s.push({x:0,y:t,z:0});for(let e=1;e<=i;e++){const i=t-h*e,n=i/t,l=(t-i)*u,d=(i+h)/t;for(let t=0;t<r;t++){const u=c*t,h=Math.cos(u)*l,m=-Math.sin(u)*l;s.push({x:h,y:i,z:m});const f=1+r*(e-1)+t,g=0==t?f+r-1:f-1,y=t*p,v=0==t?1-p:p*(t-1);if(1==e){a.push(0,g,f),o.push({x:y,y:1},{x:v,y:n},{x:y,y:n});continue}const b=1+r*(e-2)+t,x=0==t?b+r-1:b-1,_=g,w=f,C=b;a.push(w,x,_),a.push(w,C,x);const E={x:v,y:d},P={x:v,y:n},M={x:y,y:n},R={x:y,y:d};o.push(M,E,P),o.push(M,R,E)}}const d=1+(i-1)*r;s.push({x:0,y:0,z:0});const m=d+r;for(let t=1;t<=n;t++){const i=t/n,l=e*i,u=(t-1)/n;for(let e=0;e<r;e++){const h=c*e,p=Math.cos(h),f=Math.sin(h),g=h-c,y=Math.cos(g),v=Math.sin(g),b=.5*(1+p*i),x=.5*(1+f*i),_=.5*(1+y*i),w=.5*(1+v*i);let C,E;if(t!=n){const i=Math.cos(h)*l,n=-Math.sin(h)*l;s.push({x:i,y:0,z:n}),C=m+1+(t-1)*r+e,E=0==e?C+r-1:C-1}else C=d+e,E=0==e?d+r-1:C-1;if(1==t){a.push(m,C,E),o.push({x:.5,y:.5},{x:b,y:x},{x:_,y:w});continue}const P=.5*(1+p*u),M=.5*(1+f*u),R=.5*(1+y*u),N=.5*(1+v*u),U=m+1+(t-2)*r+e,T=0==e?U+r-1:U-1,L=E,B=C,A=U;a.push(T,A,L),a.push(L,A,B);const S={x:R,y:N},k={x:_,y:w},O={x:b,y:x},G={x:P,y:M};o.push(S,G,k),o.push(k,G,O)}}const f=new me(s,a,o);return f.key=`cone_${e}x${t}_s${r}_h${i}_c${n}`,E(f),f}createDefaultGeometry(){return ve.createMeshGeometry()}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"radius":case"height":case"sides":case"heightSegments":case"capSegments":this.geometry=ve.createMeshGeometry(this.radius,this.height,this.sides,this.heightSegments,this.capSegments)}}};be([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],xe.prototype,"radius",void 0),be([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],xe.prototype,"height",void 0),be([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],xe.prototype,"sides",void 0),be([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],xe.prototype,"heightSegments",void 0),be([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],xe.prototype,"capSegments",void 0),xe=ve=be([t.CustomElement({tagName:t.P+"-"+"3d-primitive-cone"})],xe);var _e,we=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let Ce=_e=class extends le{static createMeshGeometry(e=1,t=1,r=18,i=5,n=1){const s=e,o=[],a=[],c=[],u=l*(360/r);o.push({x:0,y:t,z:0}),o.push({x:0,y:0,z:0});const h=s/n;for(let e=1;e<=n;e++)for(var p=h*e,d=0;d<r;d++){const i=2+2*r*(e-1),l=0==d?i+2*(r-1):i+2*(d-1),h=i+2*d,m=Math.cos(u*d),f=-Math.sin(u*d),g=Math.cos(u*(d-1)),y=-Math.sin(u*(d-1)),v=p*m,b=p*f,x={x:v,y:t,z:b},_={x:v,y:0,z:b};o.push(x),o.push(_);const w=.5*p/s,C=m*w,E=f*w,P=g*w,M=y*w;if(1==e){const e=[0,l,h],t=[1,h+1,l+1],r=[{x:.5,y:.5},{x:.5+P,y:.5-M},{x:.5+C,y:.5-E}],i=[{x:.5,y:.5},{x:.5+C,y:.5+E},{x:.5+P,y:.5+M}];c.push(...e),c.push(...t);for(let e=0;e<r.length;e++)a.push(r[e]);for(let e=0;e<i.length;e++)a.push(i[e])}else{const t=2+2*r*(e-2),i=0==d?t+2*(r-1):t+2*(d-1),s=t+2*d,o=(e-1)/n*.5,u=m*o,p=f*o,v=g*o,b=y*o,x={x:.5+P,y:.5-M},_={x:.5+C,y:.5-E},w={x:.5+u,y:.5-p},R={x:.5+v,y:.5-b},N={x:.5+P,y:.5+M},U={x:.5+C,y:.5+E},T={x:.5+u,y:.5+p},L={x:.5+v,y:.5+b};c.push(l),c.push(h),c.push(i),c.push(i),c.push(h),c.push(s),c.push(s+1),c.push(h+1),c.push(l+1),c.push(s+1),c.push(l+1),c.push(i+1),a.push(x),a.push(_),a.push(R),a.push(R),a.push(_),a.push(w),a.push(T),a.push(U),a.push(N),a.push(T),a.push(N),a.push(L)}}const m=2+2*r*n,f=2+2*r*(n-1),g=1/r,y=1/i;for(let e=1;e<=i;e++)for(let n=0;n<r;n++){if(e!=i){var v=s*Math.cos(u*n),b=-s*Math.sin(u*n),x=t*e/i;o.push({x:v,y:x,z:b})}const l=0==n?r-1:n-1,h=1==e?f+2*l+1:m+r*(e-2)+l,p=1==e?f+2*n+1:m+r*(e-2)+n,d=e==i?f+2*n:m+r*(e-1)+n,_=e==i?f+2*l:m+r*(e-1)+l,w=l*g,C=(e-1)*y,E=0==n?1:n*g,P=e*y,M={x:w,y:C},R={x:E,y:C},N={x:E,y:P},U={x:w,y:P};c.push(h),c.push(p),c.push(d),c.push(h),c.push(d),c.push(_),a.push(M),a.push(R),a.push(N),a.push(M),a.push(N),a.push(U)}const _=new me(o,c,a);return _.key=`cylinder_${e}x${t}_s${r}_h${i}_c${n}`,E(_),_}createDefaultGeometry(){return _e.createMeshGeometry()}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"radius":case"height":case"sides":case"heightSegments":case"capSegments":this.geometry=_e.createMeshGeometry(this.radius,this.height,this.sides,this.heightSegments,this.capSegments)}}};we([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ce.prototype,"radius",void 0),we([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ce.prototype,"height",void 0),we([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ce.prototype,"sides",void 0),we([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ce.prototype,"heightSegments",void 0),we([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ce.prototype,"capSegments",void 0),Ce=_e=we([t.CustomElement({tagName:t.P+"-"+"3d-primitive-cylinder"})],Ce);var Ee,Pe=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};const Me=[{x:0,y:0,z:0},{x:0,y:1,z:0}];let Re=Ee=class extends le{static createLineGeometry(e){return new de(e||Me)}createDefaultGeometry(){return Ee.createLineGeometry()}propertyChangedCallback(e,t,r,i){if(super.propertyChangedCallback(e,t,r,i),"positions"===e)this.geometry=Ee.createLineGeometry(r)}};Pe([t.Watch({emit:!1,converter:t.PropertyConverters.Json})],Re.prototype,"positions",void 0),Re=Ee=Pe([t.CustomElement({tagName:t.P+"-"+"3d-primitive-line"})],Re);var Ne,Ue=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let Te=Ne=class extends le{static createMeshGeometry(e,t,i,n){e||=1,t||=1,i||=4,n||=4;const s=.5*e,o=.5*t,a=[],l=[],c=[],u=[],h=r.Geometry.LinearAlgebra.Vector3D.from(0,0,1);for(let r=0;r<=n;r++)for(let p=0;p<=i;p++){const d=p*e/(1*i)-s,m=0,f=r*t/(1*n)-o;if(a.push({x:d,y:m,z:f}),r<n&&p<i){const e=i+1,t=(p+1)/(1*i),s=1*p/(1*i),o=1-(r+1)/(1*n),a=1-1*r/(1*n);c.push((r+1)*e+p),c.push((r+1)*e+p+1),c.push(r*e+p+1),c.push((r+1)*e+p),c.push(r*e+p+1),c.push(r*e+p),l.push({x:s,y:o}),l.push({x:t,y:o}),l.push({x:t,y:a}),l.push({x:s,y:o}),l.push({x:t,y:a}),l.push({x:s,y:a}),u.push(h,h,h,h,h,h)}}const p=new me(a,c,l,u);return p.key=`plane_${e}x${t}_w${i}_l${n}`,p}createDefaultGeometry(){return Ne.createMeshGeometry()}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"width":case"length":case"widthSegments":case"lengthSegments":this.geometry=Ne.createMeshGeometry(this.width,this.length,this.widthSegments,this.lengthSegments)}}};Ue([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Te.prototype,"width",void 0),Ue([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Te.prototype,"length",void 0),Ue([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Te.prototype,"widthSegments",void 0),Ue([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Te.prototype,"lengthSegments",void 0),Te=Ne=Ue([t.CustomElement({tagName:t.P+"-"+"3d-primitive-plane"})],Te);var Le,Be,Ae,Se,ke,Oe=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};const Ge=function(e){const t=/([\d.-]+)/i;var r=t.exec(e);const i=[];for(;null!=r;){const n=r[0],s=parseFloat(n);i.push(s),e=e.replace(n,""),r=t.exec(e)}return i},De=r.Geometry.LinearAlgebra.Vector3D;class $e extends le{propertyChangedCallback(e,t,r,i){super.propertyChangedCallback(e,t,r,i),"radius"===e&&this._assignMeshGeometry(r)}_assignMeshGeometry(e){this.geometry=this.createMeshGeometry(e>0?e:1)}createDefaultGeometry(){return this.createMeshGeometry(1)}}Oe([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],$e.prototype,"radius",void 0);let Ie=Le=class extends $e{static createMeshGeometry(e){e||=1;const t="0 0.5774 -0.8165, 0 0.5774 0.8165, 0.8165 -0.5774 0, -0.8165 -0.5774 0".split(","),r=[];for(let i=0;i<t.length;i++){const n=t[i],s=Ge(n);r.push({x:s[0]*e,y:s[1]*e,z:s[2]*e})}const i="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(","),n=[4,5,6,7,8,9,10,11,0,3,2,1],s=[];for(let e=0;e<n.length;e++){const t=Ge(i[n[e]]);s.push({x:t[0],y:t[1]})}const o=new me(r,[1,2,0,2,3,0,3,1,0,3,2,1],s);return o.key=`tetrahedron_${e}`,E(o),o.boundingSphere={center:De.zero(),radius:e},o}createMeshGeometry(e=this.radius){return Le.createMeshGeometry(e)}};Ie=Le=Oe([t.CustomElement({tagName:t.P+"-"+"3d-primitive-tetrahedron"})],Ie);let ze=Be=class extends $e{static createMeshGeometry(e){e||=1;const t=[6,7,8,9,10,11,12,13,14,15,16,0,17,18,19,20,21,1,2,22,23,4,3,5],r="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".split(","),i=[];for(let t=0;t<r.length;t++){const n=r[t],s=Ge(n);i.push({x:s[0]*e,y:s[1]*e,z:s[2]*e})}const n="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".split(","),s=[];for(let e=0;e<t.length;e++){const r=Ge(n[t[e]]);s.push({x:r[0],y:r[1]})}const o=new me(i,[1,2,0,2,3,0,3,4,0,4,1,0,4,5,1,5,2,1,2,5,3,4,3,5],s);return o.key=`octahedron_${e}`,E(o),o.boundingSphere={center:De.zero(),radius:e},o}createMeshGeometry(e=this.radius){return Be.createMeshGeometry(e)}};ze=Be=Oe([t.CustomElement({tagName:t.P+"-"+"3d-primitive-octahedron"})],ze);let We=Ae=class extends $e{static createMeshGeometry(e){e||=1;const t=2*e*(1/Math.sqrt(3)),r=ye.createMeshGeometry(t,t,t);return r.key=`hexahedron_${e}`,r}createMeshGeometry(e=this.radius){return Ae.createMeshGeometry(e)}};We=Ae=Oe([t.CustomElement({tagName:t.P+"-"+"3d-primitive-hexahedron"})],We);let je=Se=class extends $e{static createMeshGeometry(e){e||=1;const t=[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],r="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".split(","),i=[];for(let t=0;t<r.length;t++){const n=r[t],s=Ge(n);i.push({x:s[0]*e,y:s[1]*e,z:s[2]*e})}const n="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".split(","),s=[];for(let e=0;e<t.length;e++){const r=Ge(n[t[e]]);s.push({x:r[0],y:r[1]})}const o=new me(i,[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],s);return o.key=`icosahedron_${e}`,E(o),o.boundingSphere={center:De.zero(),radius:e},o}createMeshGeometry(e=this.radius){return Se.createMeshGeometry(e)}};je=Se=Oe([t.CustomElement({tagName:t.P+"-"+"3d-primitive-icosahedron"})],je);let Ve=ke=class extends $e{static createMeshGeometry(e){e||=1;const t=[De.from(.356822*e,.934172*e,0*e),De.from(-.356822*e,.934172*e,0*e),De.from(.57735*e,.57735*e,-.57735*e),De.from(0*e,.356822*e,-.934172*e),De.from(-.57735*e,.57735*e,-.57735*e),De.from(-.57735*e,.57735*e,.57735*e),De.from(0*e,.356822*e,.934172*e),De.from(.57735*e,.57735*e,.57735*e),De.from(.934172*e,0*e,-.356822*e),De.from(.934172*e,0*e,.356822*e),De.from(0*e,-.356822*e,.934172*e),De.from(.57735*e,-.57735*e,.57735*e),De.from(.57735*e,-.57735*e,-.57735*e),De.from(.356822*e,-.934172*e,0*e),De.from(-.57735*e,-.57735*e,.57735*e),De.from(-.356822*e,-.934172*e,0*e),De.from(0*e,-.356822*e,-.934172*e),De.from(-.57735*e,-.57735*e,-.57735*e),De.from(-.934172*e,0*e,.356822*e),De.from(-.934172*e,0*e,-.356822*e)],r=[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],i="0.5 0.999501, 0.5 0.999501, 0.191292 0.808708, 0.5 0.690792,\n 0.191292 0.808708, 0.191292 0.808708, 0.5 0.690792,\n 0.808708 0.808708, 0.000499517 0.5, 0.309208 0.5, 0.5 0.309208,\n 0.191292 0.191292, 0.191292 0.191292, 0.309208 0.5,\n 0.191292 0.191292, 0.5 0.000499517, 0.5 0.309208, 0.808708 0.191292,\n 0.000499517 0.5, 0.309208 0.5, 0.690792 0.5, 0.808708 0.808708,\n 0.5 0.999501, 0.690792 0.5, 0.5 0.999501, 0.191292 0.808708,\n 0.690792 0.5, 0.191292 0.808708, 0.309208 0.5, 0.309208 0.5,\n 0.191292 0.191292, 0.5 0.000499517, 0.309208 0.5, 0.5 0.000499517,\n 0.808708 0.191292, 0.309208 0.5, 0.808708 0.191292,\n 0.690792 0.5, 0.191292 0.808708, 0.309208 0.5, 0.690792 0.5,\n 0.191292 0.808708, 0.690792 0.5, 0.808708 0.808708,\n 0.191292 0.808708, 0.808708 0.808708, 0.808708 0.808708,\n 0.5 0.690792, 0.5 0.309208, 0.808708 0.808708, 0.5 0.309208,\n 0.808708 0.191292, 0.808708 0.191292, 0.9995 0.5, 0.191292 0.191292,\n 0.5 0.000499517, 0.808708 0.191292, 0.191292 0.191292,\n 0.808708 0.191292, 0.690792 0.5, 0.191292 0.191292,\n 0.690792 0.5, 0.191292 0.191292, 0.5 0.000499517, 0.808708 0.191292,\n 0.191292 0.191292, 0.808708 0.191292, 0.690792 0.5,\n 0.690792 0.5, 0.309208 0.5, 0.690792 0.5, 0.808708 0.808708,\n 0.5 0.999501, 0.690792 0.5, 0.5 0.999501, 0.191292 0.808708,\n 0.690792 0.5, 0.191292 0.808708, 0.5 0.000499517, 0.808708 0.191292,\n 0.690792 0.5, 0.5 0.000499517, 0.690792 0.5, 0.309208 0.5,\n 0.309208 0.5, 0.191292 0.191292, 0.9995 0.5, 0.808708 0.808708,\n 0.5 0.690792, 0.9995 0.5, 0.5 0.690792, 0.5 0.309208,\n 0.9995 0.5, 0.5 0.309208, 0.309208 0.5, 0.690792 0.5,\n 0.808708 0.808708, 0.309208 0.5, 0.808708 0.808708,\n 0.5 0.999501, 0.000499517 0.5, 0.5 0.309208, 0.000499517 0.5,\n 0.5 0.690792, 0.5 0.690792, 0.000499517 0.5, 0.5 0.690792,\n 0.191292 0.191292".split(","),n=[];for(let e=0;e<r.length;e++){const t=Ge(i[r[e]]);n.push({x:t[0],y:t[1]})}const s=new me(t,[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],n);return s.key=`dodecahedron_${e}`,E(s),s.boundingSphere={center:De.zero(),radius:e},s}createMeshGeometry(e=this.radius){return ke.createMeshGeometry(e)}};Ve=ke=Oe([t.CustomElement({tagName:t.P+"-"+"3d-primitive-dodecahedron"})],Ve);var He,Fe=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let Xe=He=class extends le{static createMeshGeometry(e=1,t=8){const r=[],i=[],n=[],s=e,o=t,a=l*(360/o),c=o%2==0?o/2:(o-1)/2;r.push({x:0,y:s,z:0});for(let e=1;e<c;e++){const t=a*e,l=Math.cos(t),u=Math.sin(t),h=1-1*e/c;for(let t=0;t<o;t++){const p=a*t-Math.PI/2,d=s*u*Math.cos(p),m=s*l,f=s*u*Math.sin(p);r.push({x:d,y:m,z:f});const g=0==t?o-1:t-1,y=0==t?0:1-1*t/o,v=1-1*g/o;if(1==e)n.push(1+t),n.push(1+g),n.push(0),i.push({x:y,y:h}),i.push({x:v,y:h}),i.push({x:.5,y:1});else{n.push((e-1)*o+t+1),n.push((e-1)*o+g+1),n.push((e-2)*o+g+1),n.push((e-1)*o+t+1),n.push((e-2)*o+g+1),n.push((e-2)*o+t+1);const r=1-(e-1)/c;i.push({x:y,y:h}),i.push({x:v,y:h}),i.push({x:v,y:r}),i.push({x:y,y:h}),i.push({x:v,y:r}),i.push({x:y,y:r})}}}r.push({x:0,y:-s,z:0});const u=r.length-1;for(let e=0;e<o;e++){const t=c-2,r=0==e?o-1:e-1,s=0==e?0:1-1*e/o,a=1-1*r/o,l=1-(t+1)/c;n.push(u),n.push(t*o+1+r),n.push(t*o+1+e),i.push({x:.5,y:0}),i.push({x:a,y:l}),i.push({x:s,y:l})}const h=new me(r,n,i);return h.key=`sphere_${e}_s${t}`,E(h),h}createDefaultGeometry(){return He.createMeshGeometry()}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"radius":case"segments":this.geometry=He.createMeshGeometry(this.radius,this.segments)}}};Fe([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Xe.prototype,"radius",void 0),Fe([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Xe.prototype,"segments",void 0),Xe=He=Fe([t.CustomElement({tagName:t.P+"-"+"3d-primitive-sphere"})],Xe);var Ye,Ze=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};let qe=Ye=class extends le{static createMeshGeometry(e=1,t=.25,r=24,i=12){const n=[],s=[],o=[],a=l*(360/r),c=l*(360/i),u=e,h=t;for(let e=0;e<r;e++){const t=a*e-Math.PI/2,l=Math.sin(t),p=Math.cos(t);for(let t=0;t<i;t++){const a=c*t+Math.PI,d=Math.cos(a),m=u*p+h*d*p,f=h*Math.sin(a),g=u*l+h*d*l;n.push({x:m,y:f,z:g});const y=e>0?e-1:r-1,v=t>0?t-1:i-1,b=0==e?0:1-1*e/r,x=t>0?1*t/i:1,_=e>0?1-(e-1)/r:1/r,w=t>0?(t-1)/i:1-1/i;o.push(e*i+v),o.push(y*i+v),o.push(y*i+t),o.push(e*i+v),o.push(y*i+t),o.push(e*i+t),s.push({x:b,y:w}),s.push({x:_,y:w}),s.push({x:_,y:x}),s.push({x:b,y:w}),s.push({x:_,y:x}),s.push({x:b,y:x})}}const p=new me(n,o,s);return p.key=`torus_${e}x${t}_t${r}_s${i}`,E(p),p}createDefaultGeometry(){return Ye.createMeshGeometry()}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"radius":case"innerRadius":case"segments":case"sides":this.geometry=Ye.createMeshGeometry(this.radius,this.innerRadius,this.segments,this.sides)}}};Ze([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],qe.prototype,"radius",void 0),Ze([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],qe.prototype,"innerRadius",void 0),Ze([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],qe.prototype,"segments",void 0),Ze([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],qe.prototype,"sides",void 0),qe=Ye=Ze([t.CustomElement({tagName:t.P+"-"+"3d-primitive-torus"})],qe);class Je{static isMeshGeometry(e){return"positions"in e&&t.Utils.isArray(e.positions)&&"triangleIndices"in e&&t.Utils.isArray(e.triangleIndices)}static isVector3D(e){return"x"in e&&"number"==typeof e.x&&"y"in e&&"number"==typeof e.y&&"z"in e&&"number"==typeof e.z}static isRgba(e){return"r"in e&&"number"==typeof e.r&&"g"in e&&"number"==typeof e.g&&"b"in e&&"number"==typeof e.b}static flattenVectorArray(e){const t=[];for(let r of e)Je.isVector3D(r)?t.push(r.x,r.y,r.z):Je.isRgba(r)?t.push(r.r,r.g,r.b,r.a??1):t.push(r.x,r.y);return t}static findCamera(e){return(e||[]).find(e=>g(e)&&!e.hide)}clipPixel(r,i){return i instanceof HTMLElement&&(i=t.Utils.offsetRect(i)),function(r,i){let n,s;if(e.Point.isPoint(r))n=r.x,s=r.y;else{const{page:e}=t.CustomEventUtils.getEventCoordinates(r),o={x:e.x-i.x,y:e.y-i.y};n=o.x,s=o.y}return{x:n/i.width*2-1,y:s/i.height*-2+1}}(r,i)}}var Qe=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};function Ke(e){return Je.flattenVectorArray(e)}const et="0.152.2",tt={VERSION:et,API_URI:`https://unpkg.com/three@${et}/build/three.min.js`,ORBIT_URI:"https://unpkg.com/three@0.147.0/examples/js/controls/OrbitControls.js",LOADERS:[],DEFAULT_MATERIAL:function(){return new THREE.MeshStandardMaterial({color:"#069",flatShading:!0})}};function rt(r){if(t.Utils.isNull(r))return null;const i={color:"string"==typeof r.color?r.color:e.Colors.stringify(r.color),opacity:r.opacity??1,transparent:!0,wireframe:r.wireframe??!1,visible:r.visible??!0},n=t.Utils.extend({},i,{wireframe:r.wireframe??!1}),s=e=>(r.map&&(e.map=(new THREE.TextureLoader).load(r.map,t=>{e.needsUpdate=!0})),e);if(Y(r)){return s(new THREE.MeshStandardMaterial(t.Utils.extend(n,{roughness:r.roughness,metalness:r.metalness,emissive:r.emissiveColor,flatShading:r.flatShading,refractionRatio:r.refractionRatio})))}if(X(r)){return s(new THREE.MeshPhongMaterial(t.Utils.extend(n,{shininess:r.shininess,emissive:r.emissiveColor,flatShading:r.flatShading,specular:r.specularColor,reflectivity:r.reflectivity,refractionRatio:r.refractionRatio})))}if(F(r)){return s(new THREE.MeshLambertMaterial(t.Utils.extend(n,{emissive:r.emissiveColor,reflectivity:r.reflectivity,refractionRatio:r.refractionRatio})))}if(H(r)){const e=r.dashArray&&r.dashArray[0]||null,n=r.dashArray&&r.dashArray.length>1&&r.dashArray[1]||e,s=t.Utils.extend(i,{linecap:r.lineCap??"round",linejoin:r.lineJoin??"round",linewidth:r.lineWidth??1});return t.Utils.isNullOrEmpty(r.dashArray)?new THREE.LineBasicMaterial(s):new THREE.LineDashedMaterial(t.Utils.extend({dashSize:e,gapSize:n},s))}if(j(r)){return s(new THREE.MeshBasicMaterial(n))}return null}function it(e){if(t.Utils.isNullOrEmpty(e.content))throw new Error("Missing content.");{const t=e.type?.toLowerCase();if("obj"===t){return(new THREE.OBJLoader).parse(e.content)}return(new THREE.ObjectLoader).parse(e.content)}}function nt(e){if(t.Utils.isNullOrEmpty(e.geometry))return null;return new(e.geometry instanceof de?THREE.Line:THREE.Mesh)}function st(){return"THREE"in window}let ot=class extends I{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,i,n)=>{if(i.matrixAutoUpdate=!1,i.visible=!e.hide){if(x(e)){let r=i;if(e.flags.indexOf(h.Geometry)>=0){r.geometry.dispose();const s=nt(e);s.constructor.name!==r.constructor.name&&(n.remove(i),delete this._dict[i.id],i=r=s),r.geometry=function(e){const r=new THREE.BufferGeometry,i=Ke(e.positions);if(r.setAttribute("position",new THREE.Float32BufferAttribute(i,3)),e instanceof me){t.Utils.isNullOrEmpty(e.triangleIndices)||r.setIndex(e.triangleIndices);const i=Ke(e.positions);r.setAttribute("position",new THREE.Float32BufferAttribute(i,3));const n=Ke(e.textureCoordinates);if(r.setAttribute("uv",new THREE.Float32BufferAttribute(n,2)),t.Utils.isNullOrEmpty(e.normals))r.computeVertexNormals();else{const t=Ke(e.normals);r.setAttribute("normal",new THREE.Float32BufferAttribute(t,3))}}return r}(e.geometry)}if(e.flags.indexOf(h.Material)>=0){if(t.Utils.isArray(r.material))for(let e of r.material)e.dispose();else r.material.dispose();r.material=function(e,r,i){const n=i,s=[],o=rt(e);if(t.Utils.isNull(o)||(o.side=THREE.FrontSide,s.push(o)),!t.Utils.isNull(r))if(r==e)o.side=THREE.DoubleSide;else{const e=rt(r);t.Utils.isNull(e)||(e.side=THREE.BackSide,s.push(e))}return n&&s.length>1?s:o}(e.material)||tt.DEFAULT_MATERIAL()}}else if(e instanceof k&&(e.flags.indexOf(h.Material)>=0||e.flags.indexOf(h.Geometry)>=0))i.parent&&i.parent.remove(i),i=it(e);else if(e instanceof A){if(e.flags.indexOf(h.Children)>=0){for(let e=i.children.length-1;e>=0;e--){const t=i.children[e];i.remove(t)}for(let t of e.items)this._addOrUpdateItem(t,i)}}else if(e instanceof O){const t=i;e.flags.indexOf(h.Light)>=0&&(t.color=new THREE.Color(e.color),t.intensity=e.intensity)}let o=e.position;if(f(e)&&!t.Utils.isNull(e.transformMatrix)&&(e.flags.indexOf(h.Position)>=0||e.flags.indexOf(h.Transform)>=0)){const t=r.Geometry.LinearAlgebra.Matrix3D.from(1,0,0,0,0,1,0,0,0,0,1,0,o.x,o.y,o.z,1),n=r.Geometry.LinearAlgebra.Matrix3D.multiply(e.transformMatrix,t);THREE.Matrix4.prototype.set.apply(i.matrix,[(s=n).m11,s.m21,s.m31,s.offsetX,s.m12,s.m22,s.m32,s.offsetY,s.m13,s.m23,s.m33,s.offsetZ,s.m14,s.m24,s.m34,s.m44])}else e.flags.indexOf(h.Position)>=0&&(i.position.set(o.x,o.y,o.z),i.updateMatrix())}var s;return i.userData=e.tag,t.Utils.isNull(n.getObjectById(i.id))&&(n.add(i),this._dict[i.id]=e),e.flags.splice(0),i}}_assertMonoStage(e){if(e!=this._3d&&!t.Utils.isNull(this._3d))throw new Error("Stage mismatch.")}dispose(e){}snapshot(e,r,i,n){if(e!=this._3d)return Promise.resolve(null);const s=!t.Utils.isNullOrEmpty(r),o=i??(s?"image/jpeg":null),a=n??(s?.9:null);return new Promise((e,i)=>{this.render(),t.Utils.snapshotElement(this._stage,r,o,a).then(e)})}project(e,r){if(this._assertMonoStage(e),t.Utils.isNull(this._camera)||t.Utils.isNull(this._stage))return null;const i=this._stage,n=new THREE.Vector3(r.x,r.y,r.z),s=i.width/2,o=i.height/2,a=n.project(this._camera);return{x:a.x*s+s,y:-a.y*o+o}}zoomFit(e,...r){return this._assertMonoStage(e),new Promise((e,i)=>{const n=this._camera,s=this._objects,o=r.filter(e=>s.has(e)).map(e=>s.get(e));(t.Utils.isNull(n)||t.Utils.isNullOrEmpty(o))&&e(),function(e,r,i,n=1.333){const s=new THREE.Box3;for(const e of i)s.expandByObject(e);const o=s.getSize(new THREE.Vector3),a=s.getCenter(new THREE.Vector3),l=Math.max(o.x,o.y,o.z)/(2*Math.atan(Math.PI*e.fov/360)),c=l/e.aspect,u=n*Math.max(l,c),h=!t.Utils.isNull(r);var p;h&&(p=r.target.clone().sub(e.position).normalize().multiplyScalar(u),r.maxDistance=10*u,r.target.copy(a)),e.near=u/100,e.far=100*u,e.updateProjectionMatrix(),h&&(e.position.copy(r.target).sub(p),r.update())}(n,this._orbitCtrls,o),e()})}getScene(e){return this._assertMonoStage(e),this._scene}raycast(e,r,i,n){if(this._assertMonoStage(e),st()&&!t.Utils.isNull(this._camera)){const e=this._camera,t=new THREE.Vector2(r.x/i.width*2-1,-r.y/i.height*2+1),s=new THREE.Raycaster;s.setFromCamera(t,e);const o=s.intersectObjects(this._scene.children,!0);let a,l,c=0;for(;o.length>c&&(l=o[c++])&&(a=l.object);){if(this._dict[a.id].inert)continue;const e=l.point,t={x:e.x,y:e.y,z:e.z};return void n({object:this._dict[a.id],point:t})}}n(null)}async initialize(r){if(!t.Utils.isNull(this._stage))return this._stage;this._3d=r;const i=r.stage,n=this._stage=document.createElement("canvas");i.innerHTML="",i.appendChild(n),st()||(await t.CustomElementUtils.importjs(tt.API_URI),await async function(...e){const t=Date.now();var r=!1;do{r=st();for(let t of e)r&&=t();r||await new Promise(e=>setTimeout(e,500))}while(!r&&Date.now()-t<3e4);if(!r)throw new Error("The wait for THREE adapter initialization timed out.")}(),await Promise.all([t.CustomElementUtils.importjs(tt.ORBIT_URI)].concat(tt.LOADERS.map(e=>t.CustomElementUtils.importjs(e))))),this._scene=new THREE.Scene,this.invalidateSize(r);let s=this._stage.width,o=this._stage.height,a={canvas:n,antialias:!0,stencil:!1,alpha:r.transparent??!0};if(this._renderer=new THREE.WebGLRenderer(a),this._renderer.setSize(s,o),r.background&&!r.transparent){let t=r.background;"string"==typeof t&&(t=e.Colors.parse(t));const i=new THREE.Color(t.r,t.g,t.b);this._renderer.setClearColor(i,t.a)}return this.orbit=r.orbit,n}_setCamera(e){this._camera=e,this.invalidateSize(this._3d),this._disposeOrbitControls(),this.orbit&&this._initOrbitControls()}propertyChangedCallback(e,t,r,i){super.propertyChangedCallback(e,t,r,i),"orbit"===e&&(!0===r?this._initOrbitControls():this._disposeOrbitControls())}_initOrbitControls(){const e=this._camera;if(t.Utils.isNull(this._3d)||t.Utils.isNull(e))return;(this._orbitCtrls=new THREE.OrbitControls(e,this._3d.stage)).addEventListener("change",this._orbitControlsDelegate)}_disposeOrbitControls(){const e=this._orbitCtrls;t.Utils.isNull(e)||(e.removeEventListener("change",this._orbitControlsDelegate),e.dispose())}_updateRenderer(t,r=this._renderer){if(t.transparent)r.setClearAlpha(0);else if(t.background){let i=t.background;"string"==typeof i&&(i=e.Colors.parse(i));const n=new THREE.Color(i.r,i.g,i.b);r.setClearColor(n,i.a)}else r.setClearColor(null)}invalidateSize(e,r=e.size){if(this._assertMonoStage(e),!st()||t.Utils.isNull(r))return;let i=r.width,n=r.height;this._stage.width=i,this._stage.height=n;let s=this._camera;s instanceof THREE.PerspectiveCamera&&(s.aspect=i/n,s.updateProjectionMatrix()),this._renderer&&(this._renderer.setSize(i,n),this._updateRenderer(e))}removeItem(e,r){this._assertMonoStage(e);const i=this._objects,n=i.get(r);t.Utils.isNull(n)||(this._scene.remove(n),delete this._dict[n.id],i.delete(r))}updateItem(e,r){this._assertMonoStage(e);const i=this._objects;if(!t.Utils.isNull(r.parent)&&i.has(r.parent)){const e=i.get(r.parent);this._addOrUpdateItem(r,e)}else this._addOrUpdateItem(r)}addItem(e,t){this._assertMonoStage(e),this._addOrUpdateItem(t)}_addOrUpdateItem(e,r=this._scene){if(st()&&!t.Utils.isNull(r))if(e instanceof G)if(e instanceof D){if(this._camera instanceof THREE.PerspectiveCamera)var i=this._camera;else i=new THREE.PerspectiveCamera;const r=new THREE.Vector3(e.lookAt.x,e.lookAt.y,e.lookAt.z);i.lookAt(r),i.position.set(e.position.x,e.position.y,e.position.z),i.fov=e.fov,i.aspect=e.aspect,i.near=e.near,i.far=e.far,this._setCamera(i);const n=this._orbitCtrls;t.Utils.isNull(n)||n.object!==i||(n.target=r,n.update())}else{if(!(e instanceof $))throw new Error(`Camera ${e} not supported.`);{if(this._camera instanceof THREE.OrthographicCamera)var n=this._camera;else n=new THREE.OrthographicCamera;const r=new THREE.Vector3(e.lookAt.x,e.lookAt.y,e.lookAt.z);n.lookAt(r),n.position.set(e.position.x,e.position.y,e.position.z),n.left=e.left,n.right=e.right,n.top=e.top,n.bottom=e.bottom,n.near=e.near,n.far=e.far,this._setCamera(n);const i=this._orbitCtrls;t.Utils.isNull(i)||i.object!==n||(i.target=r,i.update())}}else if(this._objects.has(e)){const t=this._objects.get(e),i=this._ensureAndRefresh(e,t,r);i!=t&&this._objects.set(e,i)}else{const t=t=>{t&&(t=this._ensureAndRefresh(e,t,r),this._objects.set(e,t))};if(e instanceof k){t(it(e))}else if(e instanceof S){t(nt(e))}else if(e instanceof O){const r=function(e){var t;if("spot"===e.type){const r=new THREE.SpotLight;r.target.position.set(e.target.x,e.target.y,e.target.z),t=r}else t=new THREE.PointLight;return t}(e);t(r)}else if(e instanceof A){t(new THREE.Group)}}}render(){this._camera&&this._renderer.render(this._scene,this._camera)}};Qe([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],ot.prototype,"orbit",void 0),ot=Qe([t.CustomElement({tagName:t.P+"-3d-three-adapter"})],ot);const at="pacem-3d-",lt="color",ct="ambient",ut="lighting",ht="VertexInput",pt="VertexOutput",dt="InteractionData";var mt,ft,gt,yt,vt;!function(e){e[e.COPY_SRC=4]="COPY_SRC",e[e.COPY_DST=8]="COPY_DST",e[e.INDEX=16]="INDEX",e[e.INDIRECT=256]="INDIRECT",e[e.MAP_READ=1]="MAP_READ",e[e.MAP_WRITE=2]="MAP_WRITE",e[e.QUERY_RESOLVE=512]="QUERY_RESOLVE",e[e.STORAGE=128]="STORAGE",e[e.UNIFORM=64]="UNIFORM",e[e.VERTEX=32]="VERTEX"}(mt||(mt={})),function(e){e[e.COPY_SRC=1]="COPY_SRC",e[e.COPY_DST=2]="COPY_DST",e[e.RENDER_ATTACHMENT=16]="RENDER_ATTACHMENT",e[e.STORAGE_BINDING=8]="STORAGE_BINDING",e[e.TEXTURE_BINDING=4]="TEXTURE_BINDING"}(ft||(ft={})),function(e){e[e.VERTEX=1]="VERTEX",e[e.FRAGMENT=2]="FRAGMENT",e[e.COMPUTE=4]="COMPUTE"}(gt||(gt={})),function(e){e[e.READ=1]="READ",e[e.WRITE=2]="WRITE"}(yt||(yt={})),function(e){e.Mesh="mesh",e.Camera="camera",e.Texture="texture",e.Light="light",e.Interaction="interaction"}(vt||(vt={}));class bt{static create(e,t,r=""){const i=e.createBuffer({size:t.byteLength,label:r,usage:mt.VERTEX|mt.COPY_DST,mappedAtCreation:!0});return new Float32Array(i.getMappedRange()).set(t),i.unmap(),i}static createUniform(e,t,r=""){return e.createBuffer({size:t.byteLength,label:r,usage:mt.UNIFORM|mt.COPY_DST})}static createStorage(e,t,r=""){return e.createBuffer({size:t.byteLength,label:r,usage:mt.STORAGE|mt.COPY_DST})}static createIndexed(e,t,r=""){const i=e.createBuffer({size:t.byteLength,label:r,usage:mt.INDEX|mt.COPY_DST,mappedAtCreation:!0});return new Uint16Array(i.getMappedRange()).set(t),i.unmap(),i}}class xt{static createVertex(e=0,t=3,...r){const i=[];let n=0,s=0;for(let o of[t].concat(r))i.push({shaderLocation:e+s,offset:n*Float32Array.BYTES_PER_ELEMENT,format:`float32x${o}`}),n+=o,s++;return{arrayStride:n*Float32Array.BYTES_PER_ELEMENT,attributes:i,stepMode:"vertex"}}}const _t={outputNormalLocation:0,outputVertexLocation:1,outputUvLocation:2,outputVertexIndexLocation:3,outputRayIndexLocation:4,outputInstanceIndexLocation:5,storageMaterialGroupIndex:2,storageMaterialBindingIndex:0};function wt(e=[]){return e.join("\r\n")}function Ct(e={},r=_t){const i=t.Utils.extend({},_t,r),n=wt(e.definitions),s=wt(e.bindings),o=function(e=[]){let t="";for(let r of e){const e=r.trim();e.endsWith(";")?t+=e+"\r\n\t":t+=`${lt} = ${e};\r\n\t`}return t}(e.modifiers),a=lt,l=ut,c=ct;return`// definitions\n\n${n}\n\n// bindings\n@group(${i.storageMaterialGroupIndex}) @binding(${i.storageMaterialBindingIndex}) var<storage, read> diffuseColor: vec4f;\n${s}\n\nconst empty = vec4f(0,0,0,0);\nconst white = vec4f(1,1,1,1);\n\n@fragment fn main (\n @builtin(position) position: vec4f, // clip-space position\n @location(${i.outputNormalLocation}) normal: vec3f, // world-space normal\n @location(${i.outputVertexLocation}) vertex: vec3f, // world-space position\n @location(${i.outputUvLocation}) uv: vec2f,\n @location(${i.outputVertexIndexLocation}) @interpolate(flat) index: u32, // vertex index,\n @location(${i.outputRayIndexLocation}) ray: vec3f, // ray (eye-to-vertex) vector\n @location(${i.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\n) -> @location(0) vec4f {\n var ${a} = diffuseColor;\n var ${c}: vec4f = empty;\n var ${l}: vec4f = empty;\n\n // modifiers\n ${o}\n\n ${l} = select(white, ${l}, ${l}.a > 0);\n return ${a} * ${l} + ${c};\n}`}const Et={outputInstanceIndexLocation:0,outputVertexIndexLocation:1,storageMaterialGroupIndex:3,storageMaterialBindingIndex:0};function Pt(e=[]){return e.join("\r\n")}function Mt(e={},r=Et){const i=t.Utils.extend({},Et,r),n=Pt(e.definitions),s=Pt(e.bindings),o=function(e=[]){let t="";for(let r of e){const e=r.trim();e.endsWith(";")?t+=e+"\r\n":t+=`output = ${e};\r\n`}return t}(e.modifiers);return`// definitions\n${n}\n\n// bindings\n@group(${r.storageMaterialGroupIndex}) @binding(${r.storageMaterialBindingIndex}) var<storage, read> vertexColors: array<vec4f>;\n${s}\n\nfn getVertexColor(index: u32) -> vec4f {\n let numColors = arrayLength(&vertexColors);\n let vertexColorIndex = index % numColors;\n return vertexColors[vertexColorIndex];\n}\n\n@fragment fn main (\n @builtin(position) position: vec4f, // clip-space position\n @location(${i.outputInstanceIndexLocation}) @interpolate(flat) instance: u32, // instance index\n @location(${i.outputVertexIndexLocation}) @interpolate(flat) index: u32 // vertex index\n) -> @location(0) vec4f {\n var output = getVertexColor(index);\n\n // modifiers\n ${o}\n\n return output;\n}`}class Rt{static create(e){if(V(e))return new Tt(e);if(H(e))return new Lt(e);throw new TypeError(`Material type '${e.shader}' not supported.`)}}const Nt={};class Ut{constructor(e){if(t.Utils.isNull(this.#u=e))throw new ReferenceError("Null material provided.")}#u;get material(){return this.#u}get wgsl(){return Nt}buffer({device:e},t=at+"material-"+this.shader+"-buffer"){const{r:r,g:i,b:n,a:s}=this._diffuseColor(),o=new Float32Array([r,i,n,s]);return{buffer:bt.createStorage(e,o,t),value:o,version:performance.now()}}_diffuseColor(){const{visible:r,opacity:i,color:n}=this.material;if(!(r??1))return{r:0,g:0,b:0,a:0};const s="string"==typeof n?e.Colors.parse(n):n??{r:1,g:1,b:1,a:1};return i>=0&&i<=1?t.Utils.extend(s,{a:s.a*i}):s}}class Tt extends Ut{get shader(){return z.Basic}constructor(e){if(super(e),e.shader!=this.shader)throw new TypeError("Basic material expected.")}texture({device:e},r="texture"){const i=this.material;if("texture"===r&&!t.Utils.isNull(i.texture)){const t=i.texture;return{texture:e.createTexture({format:"rgba8unorm",usage:ft.TEXTURE_BINDING|ft.RENDER_ATTACHMENT|ft.COPY_DST,size:[t.width,t.height]}),source:t}}return null}static{this.fragment=Ct}}class Lt extends Ut{get shader(){return z.Line}constructor(e){if(super(e),e.shader!=this.shader)throw new TypeError("Line material expected.")}buffer(e,t){if("line"===t){const{device:t,canvas:r}=e,i=this.material,n=new Float32Array([r.clientWidth,r.clientHeight,i.lineWidth/2]);return{buffer:bt.createUniform(t,n,at+"line-"+this.shader+"-buffer"),value:n,version:performance.now()}}return super.buffer(e)}texture(e){return null}static{this.fragment=Mt}}const Bt=["input","data"];function At(e){"string"!=typeof e&&(e=e(...Bt));const t=new RegExp(`fn\\s+(\\w+)\\s*\\(([^)]*)\\)\\s*->\\s*(${ht}|${pt})\\s*{((.|\\n)+)}\\s*$`),r=e.match(t);if(r){const e=r[1],t=r[2].split(",").map(e=>{const t=e.split(":");return{name:t[0].trim(),type:t[1].trim()}});if(2!==t.length||t[0].type!==r[3]||t[1].type!==dt)throw new Error(`Invalid modifier function. Invalid signature types (arg1: ${t[0]?.type}, arg2: ${t[1]?.type})`);const i=r[4].trim();return{name:e,args:t.map(e=>e.name),body:i}}throw new Error(`Invalid modifier function. Must be a valid WGSL function with the signature: fn name(arg1: ${ht}|${pt}, arg2: ${dt}) -> ${ht}|${pt}`)}const St={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};const kt={inputPositionLocation:0,outputInstanceIndexLocation:0,outputVertexIndexLocation:1,storagePositionsGroupIndex:2,storagePositionsBindingIndex:0,uniformDimensionsGroupIndex:2,uniformDimensionsBindingIndex:1,uniformViewGroupIndex:0,uniformViewBindingIndex:0,uniformWorldGroupIndex:1,uniformWorldBindingIndex:0};function Ot(e){return`struct ${pt} {\n @builtin(position) position : vec4f, // clip space position\n @location(${e.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\n @location(${e.outputVertexIndexLocation}) @interpolate(flat) index : u32, // vertex index\n}`}function Gt(e=2){return`struct ColorPicker {\n id: u32,\n };\n\n @group(${e}) @binding(0) var<uniform> colorPicker: ColorPicker;\n\n @fragment\n fn main(@builtin(position) position: vec4f) -> @location(0) u32 {\n return colorPicker.id;\n }\n `}const Dt={uv:"uv"};const $t={normal:"normal",inputColor:"white"};function It(e,r,i){const n=`directional_${t.Utils.uniqueCode()}`,s=t.Utils.extend({},$t,e),o=s.inputColor,a=s.outputColor,l=s.normal??"normal";if(t.Utils.isNullOrEmpty(o))throw new Error("Must provide input vertex color parameter name.");return{definitions:["struct DirectionalLight {\n color: vec4f,\n direction: vec3f,\n intensity: f32\n}","fn computeDirectional(normal: vec3f, color: vec4f, light: DirectionalLight) -> vec4f {\n let n = normalize(normal);\n let d = normalize(light.direction);\n let factor = light.intensity * .5 * (1.0 + dot(n, -d));\n let output = color.rgb * light.color.rgb * factor;\n return vec4f(output, color.a);\n}"],bindings:[`@group(${r}) @binding(${i}) var<uniform> ${n}: DirectionalLight;`],modifiers:a?[`${a} += computeDirectional(${l}, ${o}, ${n});`]:[`computeDirectional(${l}, ${o}, ${n})`]}}const zt={normal:"normal",position:"vertex",ray:"ray",inputColor:"white",specularColor:"empty",shininess:"0"};function Wt(e,r,i){const n=`omni_${t.Utils.uniqueCode()}`,s=t.Utils.extend({},zt,e),o=s.inputColor,a=s.outputColor,l=s.normal,c=s.ray,u=s.position,h=s.shininess,p=s.specularColor;if(t.Utils.isNullOrEmpty(o))throw new Error("Must provide input vertex color parameter name.");return{definitions:["struct OmniLight {\n color: vec4f,\n position: vec3f,\n intensity: f32\n}","fn computeOmni(position: vec3f, normal: vec3f, ray: vec3f, color: vec4f, specularColor: vec4f, shininess: f32, light: OmniLight) -> vec4f {\n\n // color\n let n = normalize(normal);\n let d = normalize(position - light.position);\n let factor = light.intensity * .5 * (1.0 + dot(n, -d));\n\n // specular\n let r = normalize(ray);\n let halfVector = normalize(d + r);\n let specular = specularColor.rgb * shininess * dot(n, -halfVector);\n\n let output = color.rgb * light.color.rgb * factor + specular;\n return vec4f(output, color.a);\n}"],bindings:[`@group(${r}) @binding(${i}) var<uniform> ${n}: OmniLight;`],modifiers:a?[`${a} += computeOmni(${u}, ${l}, ${c}, ${o}, ${p}, ${h}, ${n});`]:[`computeOmni(${u}, ${l}, ${c}, ${o}, ${p}, ${h}, ${n})`]}}function jt(e,r,i){const n=`ambient_${t.Utils.uniqueCode()}`,s=e.inputColor,o=e.outputColor;if(t.Utils.isNullOrEmpty(s)||t.Utils.isNullOrEmpty(o))throw new Error("Must provide either input and output vertex color parameter names.");return{definitions:["struct AmbientLight {\n color: vec4f,\n intensity: f32\n}","fn computeAmbient(color: vec4f, light: AmbientLight) -> vec4f {\n return vec4f(light.intensity * color.rgb * light.color.rgb, color.a);\n}"],bindings:[`@group(${r}) @binding(${i}) var<uniform> ${n}: AmbientLight;`],modifiers:[`${o} = computeAmbient(${s}, ${n});`]}}const Vt=r.Geometry.LinearAlgebra.Vector3D,Ht=r.Geometry.LinearAlgebra.Matrix3D,Ft={width:1,height:1};class Xt{static create(e){if(y(e))return new Jt(e);if(v(e))return new qt(e);throw new TypeError(`Camera type '${e.type}' not supported.`)}}function Yt(e,t,r){const i=Vt.subtract(t,e),n=Vt.cross(r,i),s=Vt.cross(i,n);Vt.normalize(n),Vt.normalize(i),Vt.normalize(s);const o=-Vt.dot(n,e),a=-Vt.dot(s,e),l=-Vt.dot(i,e);return Ht.from(n.x,s.x,i.x,0,n.y,s.y,i.y,0,n.z,s.z,i.z,0,o,a,l,1)}function Zt(e,t){if(e<=0)throw new RangeError("Near plane distance must be positive.");if(t<=e)throw new RangeError("Far plane distance must be greater than near plane distance.")}class qt{constructor(e){this._camera=e}static view(e){return Yt(e.position,e.lookAt,e.up)}static projection(e,t=Ft){const r=e.position,i=e.lookAt,n=Vt.subtract(i,r);Vt.normalize(n);const s=Vt.dot(n,r),{height:o,width:a}=t,l=.5*s,c=l*(a/o),u=l,h=e.top*u,p=e.bottom*u,d=e.right*c;return function(e,t,r,i,n=.1,s=1e3){return Zt(n,s),Ht.from(2/(t-e),0,0,0,0,2/(r-i),0,0,0,0,1/(n-s),0,(e+t)/(e-t),(r+i)/(i-r),n/(n-s),1)}(e.left*c,d,h,p,e.near,e.far)}view(){return qt.view(this._camera)}projection(e){return qt.projection(this._camera,e)}}class Jt{constructor(e){this._camera=e}static view(e){return Yt(e.position,e.lookAt,e.up)}static projection(e,t=Ft){const r=t.width/t.height/e.aspectRatio;return function(e=120,t=1,r=.1,i=1e3){Zt(r,i);const n=Math.tan(.5*Math.PI*(1-e/180)),s=n/t,o=Number.isFinite(i),a=o?i/(r-i):-1,l=o?i*r/(r-i):-r;return Ht.from(s,0,0,0,0,n,0,0,0,0,a,-1,0,0,l,0)}(e.fov,r,e.near,e.far)}view(){return Jt.view(this._camera)}projection(e){return Jt.projection(this._camera,e)}}const Qt=r.Geometry.LinearAlgebra.Vector3D,Kt=r.Geometry.LinearAlgebra.Matrix3D;function er(e,t){throw"function"==typeof t&&(t=t.name),new RangeError(`Buffer '${e}' not available for ${t}.`)}function tr(e,r,...i){if(e.stage??=r?.item.stage,C(e))return e.key??="group_"+t.Utils.uniqueCode(),new lr(e,r,...i);if(x(e))return e.key??="mesh_"+t.Utils.uniqueCode(),new dr(e,r,...i);if(g(e))return e.key??="camera_"+t.Utils.uniqueCode(),new cr(e);if(b(e))return e.key??="light_"+e.type+"_"+t.Utils.uniqueCode(),new mr(e);throw new Error("Renderable is not supported.")}class rr{constructor(e){this._set=e}get items(){return this._set}loop(e){const{meshes:t,cameras:r,groups:i,lights:n}=this._set,s=r[0];let o=!1,a=!1;for(let r of t){if(r.disposed)continue;e(r,s,n)&&(nr.clearFlags(r),o||(nr.clearFlags(s),o=!0),a||(n.forEach(e=>nr.clearFlags(e)),a=!0))}for(let e of i)nr.clearFlags(e)}}class ir{static create(e){if(_(e))return e.key??="geometry_"+t.Utils.uniqueCode(),new ur(e);if(j(e))return new hr(e);if(U(e))return new pr(e);throw new Error("Object is not supported.")}}class nr{static create(e,...t){return tr(e,null,...t)}static clearFlags(e,r=!1){if(e.item.flags.splice(0),r){const r=e;t.Utils.isNull(r.parent)||nr.clearFlags(r.parent,!0)}}static allFlags(e){const r=e,i=r.parent,n=t.Utils.isNull(i)?[]:nr.allFlags(i);return r.item.flags.union(n)}}class sr{#h;constructor(e){this.#h=e}get item(){return this.#h}#p=!1;lock(){this.#p=!0}unlock(){this.#p=!1;const e=this.#d;for(;e.length>0;){const t=e.shift();this._destroyUnsafe(t)}}#d=[];_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.#d.splice(0)))t&&(this.#p?this.#d.push(t):this._destroyUnsafe(t))}#m=!1;destroy(){this.dispose(),this.#m=!0}get disposed(){return this.#m}}class or extends sr{constructor(e,r){super(e),this.#f=r,this.#g=t.Utils.uniqueId()%4294967295}#g;#f;#y=new Map;get parent(){return this.#f}get id(){return this.#g}allFlags(){const e=this.parent;return this.item.flags.union(e?.allFlags()??[])}buildParentWorldTransform(){let e=Kt.identity(),r=this;for(;!t.Utils.isNull(r.parent);){const t=r.parent.item,i=Kt.translate(t.transformMatrix??Kt.identity(),t.position??Qt.zero());e=Kt.multiply(e,i),r=r.parent}return e}buildWorldTransform(){const e=Kt.translate(this.item.transformMatrix??Kt.identity(),this.item.position??Qt.zero()),t=this.buildParentWorldTransform();return Kt.multiply(e,t)}#v=new Map;version(e){return this.#v.get(e)??0}buffer(e,r){if("u32id"===r){const r=this.#y,{pipeline:i,device:n}=e;if(r.has(i))return t.Utils.extend({fresh:!1},r.get(i));const s=new Uint32Array([this.id]),o=bt.createUniform(n,s,at+"u32id-buffer"),a=t.Utils.extend({buffer:o,value:s,version:performance.now()},{fresh:!0});return this.#y.set(i,a),a}const i=this.specificBuffer(e,r);return this.#v.set(r,i.version),i}}const ar={shader:z.Basic,color:"#c0c0c0",flags:[]};class lr extends or{#n;constructor(e,t,...r){super(e,t),this.#n=e.childRenderables.map(e=>tr(e,this,...r))}get children(){return this.#n}specificBuffer(e,t){return null}texture(e){throw new Error("Method not implemented.")}dispose(){this.#n.forEach(e=>e.destroy())}}class cr extends or{#b=new Map;#x;constructor(e){super(e)}texture(e){throw new Error("Method not implemented.")}specificBuffer(e,r){let i=!1;(this.allFlags().length>0||t.Utils.isNull(this.#x))&&(i=!0,this.#b.clear(),this._rebuildMatrices(e));const{pipeline:n}=e;if(this.#b.has(n)||(i=!0,this.#b.set(n,this.#x)),nr.clearFlags(this),"cameraViewTransform"===r)return t.Utils.extend(this.#x,{fresh:i});er(r,cr)}_rebuildMatrices({device:e,canvas:r}){const i=this.item,n=Xt.create(i),{x:s,y:o,z:a}=i.position,l=n.view(),c=n.projection(r),u=Kt.multiply(l,c),h=new Float32Array(36);if(h.set(Kt.toArray(l),0),h.set(Kt.toArray(u),16),h.set([s,o,a],32),t.Utils.isNull(this.#x)){const t=bt.createUniform(e,h,at+"view-buffer");this.#x={buffer:t,value:h,version:performance.now().roundoff()}}else this.#x.value=h,this.#x.version=performance.now().roundoff()}_destroyView(){this.#b.clear();const e=this.#x;this.#x=null,this.destroySafely(e)}dispose(){this._destroyView()}}class ur extends sr{#_={};#w={positions:!0,normals:!0,uv:!0,packed:!0};#C;constructor(e){super(e),e.flags??=[]}buffer(e,r){const i=this.item.flags??[];(t.Utils.isNull(this.#C)||i.includes(h.Geometry))&&(i.splice(0),this.#_={},this._rebuildGeometryBuffers(e));const n=this.#w,s=this.#C,{pipeline:o}=e,a=this.#_[r]??=new Map,l=!a.has(o),c=e=>(l&&a.set(o,e),e);switch(r){case"geometryPositions":const{positions:e}=s,i=n.positions;return n.positions=!1,t.Utils.extend(c(e),{fresh:i||l});case"geometryNormals":const{normals:o}=s,a=n.normals;return n.normals=!1,t.Utils.extend(c(o),{fresh:a||l});case"geometryTexCoords":const{uv:u}=s,h=n.uv;return n.uv=!1,t.Utils.extend({fresh:h||l},c(u));case"geometry":const{packed:p}=s,d=n.packed;return n.packed=!1,t.Utils.extend(c(p),{fresh:d||l});default:er(r,ur)}}texture(e){throw new Error("Method not implemented.")}_rebuildGeometryBuffers({device:e}){this._destroyBuffers();const r=performance.now(),i=this.item,n=i.key;if(w(i)){const s=i,o=!t.Utils.isNullOrEmpty(s.triangleIndices)?s.triangleIndices.map(e=>s.positions[e]):s.positions,a=2*o.length,l=a+o.length,c=new Float32Array(l),u=new Float32Array(l),h=new Float32Array(a),p=new Float32Array(2*l+a);for(let e=0;e<o.length;e++){const t=2*e,r=3*e,{x:i,y:n,z:a}=o[e],{x:l,y:d,z:m}=s.normals[e],{x:f,y:g}=s.textureCoordinates[e];c.set([i,n,a],r),u.set([l,d,m],r),h.set([f,g],t),p.set([i,n,a,l,d,m,f,g],2*r+t)}const d=bt.create(e,c,at+"meshgeometry-"+n+"-positions-buffer"),m=bt.create(e,u,at+"meshgeometry-"+n+"-normals-buffer"),f=bt.create(e,h,at+"meshgeometry-"+n+"-uvmap-buffer"),g=bt.create(e,p,at+"meshgeometry-"+n+"-buffer");this.#C={packed:{buffer:g,value:p,version:r},positions:{buffer:d,value:c,version:r},normals:{buffer:m,value:u,version:r},uv:{buffer:f,value:h,version:r}},this.#w={positions:!0,normals:!0,uv:!0,packed:!0}}else{const t=new Float32Array(Je.flattenVectorArray(i.positions)),s=bt.createStorage(e,t,at+"nodegeometry-"+n+"-positions-buffer");this.#C={positions:{buffer:s,value:t,version:r},packed:{buffer:s,value:t,version:r}},this.#w={positions:!0,packed:!0}}}_destroyBuffers(){this.#_={};const e=this.#C;t.Utils.isNull(e)||this.destroySafely(e.positions,e.normals,e.uv)}dispose(){this._destroyBuffers()}}class hr extends sr{#_={};#E={};#P;#M=new Map;#R=new Map;constructor(e){super(e),e.flags??=[],-1===e.flags.indexOf(h.Material)&&e.flags.push(h.Material)}buffer(e,r){const i=this.item.flags??[];let n=t.Utils.isNull(this.#P);i.includes(h.Material)&&(this.#_={},i.splice(0),n=!0,this.#R.clear(),this._resetMaterialBuffers());const{pipeline:s}=e,o=this.#_[r]??=new Map;switch(r){case"material":case"line":const i=this._ensureMaterialBuffer(e,r);return i?(o.has(s)||(n=!0,o.set(s,i)),t.Utils.extend(i,{fresh:n})):null;default:er(r,hr)}}_ensureMaterialBuffer(e,t="material"){const r=this.#M;let i=r.get(t);return i||(r.has(t)?null:(i=this.#P?.buffer(e,t),i&&r.set(t,i),i))}_resetMaterialBuffers(){this.#P=Rt.create(this.item),this._destroyBuffers()}texture(e,r="texture"){const i=this.#R;let n=i.get(r),s=!1;if(!n){if(n=this.#P?.texture(e,r),!n)return null;i.set(r,n),s=!0,this.#E={}}const{pipeline:o}=e,a=this.#E[r]??=new Map;return a.has(o)||(s=!0,a.set(o,n)),t.Utils.extend(n,{fresh:s})}dispose(){this._destroyBuffers()}_destroyBuffers(){this.#_={},this.#E={};const e=this.#M.values();this.#M.clear(),this.destroySafely(...e);const t=this.#R.values();this.#R.clear(),t.forEach(e=>e.texture.destroy())}}class pr extends sr{#N={time:0,cursor:{x:0,y:0},resolution:{width:0,height:0}};#U;#_=new Map;constructor(e){super(e),t.Utils.extend(this.#N,e)}buffer(e,t){if("interaction"===t)return this._ensureInteractionBuffer(e);er(t,pr)}texture(e){throw new Error("Method not implemented.")}_ensureInteractionBuffer(e,r="interaction"){const i=this.#N,n=this.item;let s=!this.#U||n.time!==i.time||n.resolution?.width!==i.resolution.width||n.resolution?.height!==i.resolution.height;if(s||t.Utils.isNull(n.cursor)||(s=n.cursor.x!==i.cursor.x||n.cursor.y!==i.cursor.y),s){const t=new Float32Array([n.cursor?.x??0,n.cursor?.y??0,n.resolution.width,n.resolution.height,n.time,0]),r=bt.createUniform(e.device,t,at+"interaction-buffer");this.#U={buffer:r,value:t,version:performance.now()},this.#_.clear()}const{pipeline:o}=e,a=this.#_;return a.has(o)||(s=!0,a.set(o,this.#U)),t.Utils.extend(this.#U,{fresh:s})}_destroyBuffers(){this.#_.clear();const e=this.#U;t.Utils.isNull(e)||this.destroySafely(e)}dispose(){this._destroyBuffers()}}class dr extends or{#C;#T;#L;#B;#A;#w={geometry:!0,material:!0,transform:!0};#S=new Map;constructor(e,t,r,i){super(e,t),e.flags??=[],-1===e.flags.indexOf(h.Geometry)&&e.flags.push(h.Geometry),-1===e.flags.indexOf(h.Material)&&e.flags.push(h.Material),-1===e.flags.indexOf(h.Position)&&-1===e.flags.indexOf(h.Transform)&&e.flags.push(h.Transform),this.#C=r,this.#L=i}texture(e,t){const r=this.#B;return r?.texture(e,t)}specificBuffer(e,r){const i=this.#w,n=this.allFlags();(t.Utils.isNull(this.#A)||n.includes(h.Position)||n.includes(h.Transform))&&(this.#S.clear(),i.transform=!0,this._rebuildWorldMatrices(e)),(t.Utils.isNull(this.#T)||n.includes(h.Geometry))&&(i.geometry=!0,this._ensureGeometryBuffer()),(t.Utils.isNull(this.#B)||n.includes(h.Material))&&(i.material=!0,this._ensureMaterialBuffer()),nr.clearFlags(this);const s=this.#T,o=this.#B;switch(r){case"geometryPositions":case"geometryNormals":case"geometryTexCoords":case"geometry":return s.buffer(e,r);case"material":case"line":return o.buffer(e,r);case"objectWorldTransform":const n=this.#A,a=i.transform;i.transform=!1;const l=this.#S,{pipeline:c}=e,u=!l.has(c);return u&&l.set(c,n),t.Utils.extend(n,{fresh:a||u});default:er(r,dr)}}_ensureGeometryBuffer(){const e=this.#T,r=this.#C,i=this.item.geometry;if(t.Utils.isNull(r))e?.destroy(),this.#T=new ur(i);else{let e=r?.get(i);!1!==e?.disposed&&(e=new ur(i),r.set(i,e)),this.#T=e}}_ensureMaterialBuffer(){const e=this.#B,r=this.#L,i=this.item.material??ar;if(t.Utils.isNull(r))e?.destroy(),this.#B=new hr(i);else{let e=r?.get(i);!1!==e?.disposed&&(e=new hr(i),r.set(i,e)),this.#B=e}}_rebuildWorldMatrices({device:e}){const r=this.item,i=this.buildWorldTransform(),n=Kt.transpose(Kt.invert(i)),s=new Float32Array(28);if(s.set(Kt.toArray(i),0),s.set([n.m11,n.m12,n.m13,0,n.m21,n.m22,n.m23,0,n.m31,n.m32,n.m33,0],16),t.Utils.isNull(this.#A)){const t=bt.createUniform(e,s,at+"mesh-"+r.key+"-worldmatrix-buffer");this.#A={buffer:t,value:s,version:performance.now().roundoff()}}else this.#A.value=s,this.#A.version=performance.now().roundoff()}dispose(){this.#S.clear();const e=this.#A;this.#A=null,this.destroySafely(e);const t=this.#B;this.#B=null,t?.destroy();const r=this.#T;this.#T=null,r?.destroy()}}class mr extends or{#U;#_=new Map;constructor(e){super(e),e.flags.push(h.Light)}_rebuildAmbientLightBuffer({device:t}){const r=this.item,i=new Float32Array(24),{r:n,g:s,b:o,a:a}=e.Colors.parse(r.color??"#fff");i.set([n,s,o,a],0),i.set([r.intensity],4),this.#U={value:i,buffer:bt.createUniform(t,i,at+"ambient-light-buffer"),version:performance.now()}}_rebuildDirectionalLightBuffer({device:t}){const r=this.item,i=new Float32Array(8),{r:n,g:s,b:o,a:a}=e.Colors.parse(r.color??"#fff");i.set([n,s,o,a],0),i.set([r.intensity],7);const l=Qt.subtract(r.position,r.target);i.set([l.x,l.y,l.z],4),this.#U={value:i,buffer:bt.createUniform(t,i,at+"directional-light-buffer"),version:performance.now()}}_rebuildOmniLightBuffer({device:t}){const r=this.item,i=new Float32Array(8),{r:n,g:s,b:o,a:a}=e.Colors.parse(r.color??"#fff");i.set([n,s,o,a],0),i.set([r.intensity],7),i.set([r.position.x,r.position.y,r.position.z],4),this.#U={value:i,buffer:bt.createUniform(t,i,at+"omni-light-buffer"),version:performance.now()}}_rebuildLight(e){this.destroySafely(this.#U);const 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,r){const i=this.#_;let n=t.Utils.isNull(this.#U)||this.allFlags().length>0;n&&(i.clear(),this._rebuildLight(e)),nr.clearFlags(this);const{pipeline:s}=e;if(i.has(s)||(n=!0,i.set(s,this.#U)),"light"===r)return t.Utils.extend(this.#U,{fresh:n});er(r,mr)}dispose(){this.#_.clear();const e=this.#U;this.#U=null,this.destroySafely(e)}}const fr=at,gr={multisample:!0,packedVertices:!0,primitive:{topology:"triangle-list",frontFace:"ccw",cullMode:"back"}},yr=e=>{};class vr{static{this._memoizer=new WeakMap}static dispose(e){const r=this._memoizer,i=r.get(e);t.Utils.isNull(i)||(i.clear(),r.delete(e))}static createColorPicking(e,t){const r=vr.create(e,t);return r instanceof wr||r instanceof Er?{frame:r.raycast}:null}static create(e,[r,i,...n],s){const o=vr._memoizer;let a=o.get(e);if(t.Utils.isNull(a)&&o.set(e,a=new Map),t.Utils.isNull(r))throw new Error("Pipeline not implemented, given the provided arguments.");if(x(r.item)){const o=w(r.item.geometry),l=!o&&H(r.item.material);if(!o&&!l)throw new Error("Pipeline not implemented, given the provided mesh argument.");const c=o?new xr(r,i,...n):new Cr(r,i),u=c.key+(s?.modifiers?.version??""),h=a.get(u);if(h)return h;const p=o?new wr(e,c):new Er(e,c);p.build(s);const d=p;return t.Utils.extend(d,{id:u+"-"+e.canvas.width+"x"+e.canvas.height+"-"+t.Utils.Dates.now().toISOString()}),a.set(u,d),d}throw new ReferenceError("Pipeline not implemented, given thst the first argument is not a mesh.")}}class br{constructor(){this.#k=new Map}#k;ensureBindGroup({device:e},r,i,n,s,o,a=()=>{}){const l=this.#k,c="string"==typeof r?r:r.key;let u=l.get(c);if(t.Utils.isNull(u)&&l.set(c,u=new Map),n||!u.has(o)){const t=i.map((e,t)=>({binding:t,resource:{buffer:e}})),r={label:o,layout:s,entries:t};a(r);const n=e.createBindGroup(r);return u.set(o,n),n}return u.get(o)}}class xr{#O=[];#G;#D;#$=new Map;#I={shader:"basic",lights:""};constructor(...e){this.add(...e)}reset(){this.#O.splice(0),this.#G=null,this.#$.clear(),this.#I={shader:"basic",lights:""}}add(...e){for(let r of e??[])if(x(r.item)){if(!t.Utils.isNull(this.#G))throw new Error("Mesh already added.");{this.#G=r;const e=r.item.material??{shader:z.Basic};this.#I.shader=e.shader+"-"+(e.map?"map":"nomap")}}else if(b(r.item)){this.#O.push(r),this.#I.lights+="-"+r.item.type}else{if(!g(r.item))throw new Error("Unknown object type.");this.#D??=r}}build(e){const t=this._computeBasicData(),r=this.key;return{vertex:this.vertex({inputModifier:e?.vertexInput,outputModifier:e?.vertexOutput}),fragment:this.fragment(t,{modifier:e?.fragment}),key:r,bindings:(...e)=>xr.prototype.bindgroup.apply(this,e),metadata:{lightCount:this.#O.length,mapCount:this.#G.item.material?.map?1:0}}}get key(){const{shader:e,lights:t}=this.#I;return"mesh-"+e+t}bindgroup(e,r,i){const n=this.#$.get(e);if(t.Utils.isNull(n))return null;if(t.Utils.isNullOrEmpty(r))return n;const s=n.filter(e=>e.key===r);return isNaN(i)?s:i>=0&&i<n.length?s[i]:s}vertex(e){return function(e=St){e!=St&&(e=t.Utils.extend({},St,e));const r=e.inputModifier;let i="vertexInput",n="";if(!t.Utils.isNullOrEmpty(r)){const{name:e,args:[t,s],body:o}=At(r);i=`${e}(vertexInput, interaction)`,n=`fn ${e} (${t}: ${ht}, ${s}: ${dt}) -> ${ht} {\n ${o}\n}`}const s=e.outputModifier;let o="output",a="";if(!t.Utils.isNullOrEmpty(s)){const{name:e,args:[t,r],body:i}=At(s);o=`${e}(output, interaction)`,a=`fn ${e} (${t}: ${ht}, ${r}: ${dt}) -> ${pt} {\n ${i}\n}`}const l=t.Utils.extend({},St,e);return`struct ${pt} {\n @builtin(position) position : vec4f, // clip space position\n @location(${l.outputNormalLocation}) normal: vec3f, // world space normal\n @location(${l.outputVertexLocation}) vertex : vec3f, // world space position\n @location(${l.outputUvLocation}) uv : vec2f, // texture coordinates\n @location(${l.outputVertexIndexLocation}) @interpolate(flat) index : u32, // vertex index\n @location(${l.outputRayLocation}) ray : vec3f, // eye-to-point vector in world space\n @location(${l.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\n}\n\nstruct ${ht} {\n @location(${l.inputPositionLocation}) position: vec3f,\n @location(${l.inputNormalLocation}) normal: vec3f,\n @location(${l.inputUvLocation}) uv: vec2f,\n @builtin(vertex_index) index: u32,\n @builtin(instance_index) instance: u32,\n}\n\nstruct Transforms {\n world: mat4x4f,\n normal: mat3x3f,\n}\n\nstruct Camera {\n view: mat4x4f,\n projection: mat4x4f,\n position: vec3f,\n}\n\nstruct ${dt} {\n // mouse coordinatges in NDC space ([-1,1], [-1,1])\n cursor: vec2f,\n // canvas size in pixels\n resolution: vec2f,\n // some phase timer (e.g. time since mouse down, or time since last click, etc.)\n time: f32,\n}\n\n${n}\n\n${a}\n\n@group(${l.uniformWorldGroupIndex}) @binding(${l.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\n@group(${l.uniformViewGroupIndex}) @binding(${l.uniformViewBindingIndex}) var<uniform> camera: Camera;\n@group(${l.uniformInteractionGroupIndex}) @binding(${l.uniformInteractionBindingIndex}) var<uniform> interaction: ${dt};\n\n@vertex fn main(vertexInput: ${ht}) -> ${pt} {\n let input = ${i};\n let position4 = vec4f(input.position, 1.0);\n let worldTransform = transforms.world;\n let viewProjectionTransform = camera.projection;\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\n let worldPosition = (worldTransform * position4).xyz;\n let output = ${pt}(\n worldViewProjectionTransform * position4,\n transforms.normal * input.normal,\n worldPosition,\n input.uv,\n input.index,\n normalize(worldPosition - camera.position),\n input.instance\n );\n return ${o};\n}`}(e)}_computeBasicData(){const e=this.#G.item,r=this.#O,i=e.material;return{hasTexture:!t.Utils.isNull(i?.texture),hasLighting:!t.Utils.isNullOrEmpty(r),shader:t.Utils.isNull(e)?z.Basic:e.material?.shader??z.Basic,materialBindGroupIndex:2,lightingBindGroupIndex:3}}_computeBindGroupsAndReferences(e=this._computeBasicData()){const{hasTexture:t,materialBindGroupIndex:r,lightingBindGroupIndex:i}=e,n=this.#$,s=this.#O,o={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},a={key:"material",group:r,binding:0,type:"buffer"};t?n.set(vt.Mesh,[o,a,{key:"texture",group:r,type:"texture"}]):n.set(vt.Mesh,[o,a]),n.set(vt.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}]);const l=s.map((e,t)=>({key:"light",group:i,binding:t,type:"buffer"}));l.push(...l),n.set(vt.Interaction,[{key:"interaction",group:0,type:"buffer",binding:1}])}fragment(e=this._computeBasicData(),r){this._computeBindGroupsAndReferences(e);const i={definitions:[],bindings:[],modifiers:[]},n=e=>{for(let t of e.definitions??[])-1===i.definitions.indexOf(t)&&i.definitions.push(t);t.Utils.isNullOrEmpty(e.bindings)||i.bindings.push(...e.bindings),t.Utils.isNullOrEmpty(e.modifiers)||i.modifiers.push(...e.modifiers)};if(e.shader===z.Basic){if(e.hasTexture){const r=e.materialBindGroupIndex;n(function(e=Dt,r,i=1){const n=t.Utils.uniqueCode(),s=`sampler_${n}`,o=`tex_${n}`,a=t.Utils.extend({},Dt,e),l=a.inputColor,c=a.outputColors;if(t.Utils.isNullOrEmpty(l))throw new Error("Must provide either input and output vertex color parameter names.");const u=c?c.map((e,t)=>0===t?`${e} = textureSample(${o}, ${s}, ${a.uv}) * ${l};`:`${e} = ${c[0]};`):[`textureSample(${o}, ${s}, ${a.uv}) * ${l}`];return{bindings:[`@group(${r}) @binding(${i}) var ${s}: sampler;`,`@group(${r}) @binding(${i+1}) var ${o}: texture_2d<f32>;`],modifiers:u}}({inputColor:lt,outputColors:[lt],uv:"uv"},r))}let s=0;const o=this.#O;for(let t of o){switch(t.item.type){case"direction":n(It({outputColor:ut,normal:"normal"},e.lightingBindGroupIndex,s));break;case"omni":n(Wt({outputColor:ut,normal:"normal",position:"vertex"},e.lightingBindGroupIndex,s));break;case"ambient":n(jt({inputColor:lt,outputColor:ct},e.lightingBindGroupIndex,s))}s++}return Tt.fragment(i,r)}}}const _r=(e,t)=>{t.fresh&&e.queue.writeBuffer(t.buffer,0,t.value)};class wr{constructor(e,t,r=new br){this._context=e,this._builder=t,this._cache=r,this._ensureU32idBindGroup=(e,t,r)=>this._cache.ensureBindGroup(this._context,e,[t],r,this._pickBindGroupLayout,fr+"mesh-colorpick-bind-group"),this._ensureMaterialBindGroup=(e,t,r,i,n=2)=>{const s=this._bindGroupLayouts[n],o=fr+"material-bind-group";if(s.label!==fr+"material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");return this._cache.ensureBindGroup(this._context,e,[t],i,s,o,e=>{const{device:t}=this.context,i=e.entries;r&&i.push({binding:1,resource:t.createSampler({addressModeU:"repeat",addressModeV:"repeat",magFilter:"linear",minFilter:"linear"})},{binding:2,resource:r.createView()})})},this._ensureWorldTransformBindGroup=(e,t,r,i=1,n=!1)=>{const s=this._bindGroupLayouts[i];if(s.label!==fr+"mesh-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");const o=e.key+"-"+(n?1:0),a=`${fr}${n?"colorpick":"mesh"}-transforms-bind-group`;return this._cache.ensureBindGroup(this._context,o,[t],r,s,a)},this._ensureCameraProjectionAndInteractionDataBindGroup=(e,t,r,i,n=0,s=!1)=>{const o=this._bindGroupLayouts[n],a=e.key+"-"+(s?1:0),l=`${fr}${s?"colorpick":"mesh"}-view-bind-group`;return this._cache.ensureBindGroup(this._context,a,[t,r],i,o,l)},this._ensureLightingBindGroup=(e,t,r=3)=>{const i=this._bindGroupLayouts[r],n=e.map(e=>e.id).join(":"),s=e.map(e=>e.buffer.buffer);return this._cache.ensureBindGroup(this._context,n,s,t,i,fr+"mesh-lighting-bind-group")},this._bindGroupLayouts=[],this._bindVertex=yr,this._bindPicker=yr,this._bindWorldTransform=yr,this._bindRaycastWorldTransform=yr,this._bindCameraProjectionAndInteractionData=yr,this._bindRaycastCameraProjectionAndInteractionData=yr,this._bindLighting=yr,this._bindMaterial=yr,this.set=e=>{throw new Error("Deprecated.")},this.bind=(e,...t)=>{throw new Error("Deprecated.")},this.draw=(e,...t)=>{throw new Error("Deprecated.")},this.frame=(e,t,r,i,...n)=>{e.setPipeline(this._pipeline);try{this._bindVertex(e,r),this._bindWorldTransform(e,r),this._bindMaterial(e,r),this._bindCameraProjectionAndInteractionData(e,i,t),this._bindLighting(e,...n);const s=r.item.geometry;e.draw(s.triangleIndices?.length||s.positions.length)}catch(e){console.error("Pacem.Drawing3D.FrameException",e)}},this.raycast=(e,t,r,i)=>{e.setPipeline(this._pickPipeline);try{this._bindVertex(e,r),this._bindRaycastWorldTransform(e,r),this._bindRaycastCameraProjectionAndInteractionData(e,i,t),this._bindPicker(e,r);const n=r.item.geometry;e.draw(n.triangleIndices.length)}catch(e){}},this._key=t.key}get context(){return this._context}get key(){return this._key}build(e){const r=t.Utils.extend({},gr,e??{}),i=this._builder.build(r.modifiers),n=t.Utils.extend({pipeline:this},this._context),s=n.device,o={module:s.createShaderModule({code:i.vertex}),buffers:r.packedVertices?[xt.createVertex(0,3,3,2)]:[xt.createVertex(0,3),xt.createVertex(1,3),xt.createVertex(2,2)]},a=s.createBindGroupLayout({entries:[{binding:0,visibility:gt.VERTEX|gt.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:gt.VERTEX|gt.FRAGMENT,buffer:{type:"uniform"}}],label:fr+"mesh-view-bind-group-layout"}),l=s.createBindGroupLayout({entries:[{binding:0,visibility:gt.VERTEX,buffer:{type:"uniform"}}],label:fr+"mesh-transforms-bind-group-layout"}),c=[a,l],u={module:s.createShaderModule({code:i.fragment}),targets:[{format:n.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},h=c.length,p=[{binding:0,visibility:gt.FRAGMENT,buffer:{type:"read-only-storage"}}],{mapCount:d}=i.metadata,m=d>0;m&&p.push({visibility:gt.FRAGMENT,binding:1,sampler:{}},...Array(d).keys().map(e=>({visibility:gt.FRAGMENT,binding:2+e,texture:{}})));const f={label:fr+"material-bind-group-layout",entries:p},g=s.createBindGroupLayout(f);c.push(g);const y=c.length,{lightCount:v}=i.metadata,b=v>0;if(b){const e=s.createBindGroupLayout({entries:[...Array(v).keys()].map((e,t)=>({visibility:gt.FRAGMENT,binding:t,buffer:{type:"uniform"}})),label:fr+"lighting-bind-group-layout"});c.push(e)}const x={label:fr+"mesh-render-pipeline",vertex:o,fragment:u,layout:s.createPipelineLayout({label:fr+"mesh-render-pipeline-layout",bindGroupLayouts:this._bindGroupLayouts=c}),primitive:r.primitive};r.multisample&&(x.multisample={count:4},x.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._pipeline=s.createRenderPipeline(x);const _=this._pickBindGroupLayout=s.createBindGroupLayout({label:fr+"mesh-colorpick-bind-group-layout",entries:[{visibility:gt.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),w={label:fr+"mesh-colorpick-pipeline",vertex:o,fragment:{module:s.createShaderModule({code:Gt(2)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:fr+"mesh-colorpick-pipeline-layout",bindGroupLayouts:[a,l,_]}),primitive:r.primitive,depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickPipeline=s.createRenderPipeline(w);this._bindVertex=r.packedVertices?(e,...r)=>{const i=r.at(0);if(t.Utils.isNull(i))throw new ReferenceError(`Null ${nr.name} bringing vertex buffers was provided.`);const{buffer:s}=i.buffer(n,"geometry");e.setVertexBuffer(0,s)}:(e,...r)=>{const i=r.at(0);if(t.Utils.isNull(i))throw new ReferenceError(`Null ${nr.name} bringing vertex buffers was provided.`);const{buffer:s}=i.buffer(n,"geometryPositions"),{buffer:o}=i.buffer(n,"geometryNormals"),{buffer:a}=i.buffer(n,"geometryTexCoords");e.setVertexBuffer(0,s),e.setVertexBuffer(1,o),e.setVertexBuffer(2,a)};const C=(e,r,o)=>{if(t.Utils.isNull(r))throw new ReferenceError(`Null ${nr.name} bringing world transform buffer was provided.`);const a=r.buffer(n,"objectWorldTransform"),l=a.buffer;_r(s,a);const{group:c}=i.bindings(vt.Mesh,"objectWorldTransform",0),u=this._ensureWorldTransformBindGroup(r.item,l,a.fresh,c,o);e.setBindGroup(c,u)};this._bindWorldTransform=(e,...t)=>{const r=t.at(0);C(e,r,!1)},this._bindRaycastWorldTransform=(e,...t)=>{const r=t.at(0);C(e,r,!0)};const E=(e,r,o,a)=>{if(t.Utils.isNull(r))throw new ReferenceError(`Null ${nr.name} bringing view projection buffers was provided.`);const l=r.buffer(n,"cameraViewTransform"),c=l.buffer;if(_r(s,l),t.Utils.isNull(o))throw new ReferenceError(`Null ${nr.name} bringing interaction buffers was provided.`);const u=o.buffer(n,"interaction"),h=u.buffer;_r(s,u);const{group:p}=i.bindings(vt.Camera,"cameraViewTransform",0),{group:d}=i.bindings(vt.Interaction,"interaction",0);if(p!==d)throw new ReferenceError(`Layout bind group mismatch: ${p} vs ${d}.`);const m=this._ensureCameraProjectionAndInteractionDataBindGroup(r.item,c,h,l.fresh||u.fresh,p,a);e.setBindGroup(p,m)};this._bindCameraProjectionAndInteractionData=(e,...t)=>{const r=t.at(0),i=t.at(1);E(e,r,i,!1)},this._bindRaycastCameraProjectionAndInteractionData=(e,...t)=>{const r=t.at(0),i=t.at(1);E(e,r,i,!0)},this._bindMaterial=(e,...r)=>{const i=r.at(0);if(t.Utils.isNull(i))throw new ReferenceError(`Null ${nr.name} bringing vertex colors was provided.`);const o=i.buffer(n,"material"),a=o.buffer;_r(s,o);let l=i.texture(n);const c=l?.texture,u=this._ensureMaterialBindGroup(i.item,a,c,o.fresh,h);e.setBindGroup(h,u),m&&s.queue.copyExternalImageToTexture({source:l.source,flipY:!0},{texture:c},{width:c.width,height:c.height})},this._bindLighting=(e,...t)=>{if(b){const r=Array.from(t).map(e=>({buffer:e.buffer(n,"light"),id:e.item.key})),i=r.some(e=>e.buffer.fresh),o=this._ensureLightingBindGroup(r,i,y);for(let e of r)_r(s,e.buffer);e.setBindGroup(y,o)}},this._bindPicker=(e,...r)=>{const i=r.at(0);if(t.Utils.isNull(i))throw new ReferenceError(`Null ${nr.name} bringing world transform buffer was provided.`);const o=i.buffer(n,"u32id"),a=o.buffer;_r(s,o);const l=o.fresh,c=this._ensureU32idBindGroup(i.item,a,l);e.setBindGroup(2,c)}}}class Cr{#z;#D;#$=new Map;constructor(...e){this.add(...e)}reset(){this.#z=null,this.#$.clear()}add(...e){for(let r of e??[])if(x(r.item)){if(!t.Utils.isNull(this.#z))throw new Error("Line already added.");this.#z=r}else if(g(r.item))this.#D??=r;else if(!b(r.item))throw new Error("Unknown object type.")}build(){const e=this._computeBasicData(),t=this.key;return{vertex:this.vertex(e),fragment:this.fragment(e),key:t,bindings:(...e)=>Cr.prototype.bindgroup.apply(this,e),metadata:{thickness:e.thickness,dashPattern:e.dashPattern}}}get key(){const e=(this.#z?.item).material?.lineWidth>1;return z.Line+(e?"-fat":"")}bindgroup(e,r,i){const n=this.#$.get(e);if(t.Utils.isNull(n))return null;if(t.Utils.isNullOrEmpty(r))return n;const s=n.filter(e=>e.key===r);return isNaN(i)?s:i>=0&&i<n.length?s[i]:s}vertex(e=this._computeBasicData()){return e.thickness>1?function(e=kt){const r=t.Utils.extend({},kt,e);return`${Ot(r)}\n\nstruct Transforms {\n world: mat4x4f,\n normal: mat3x3f,\n}\n\nstruct Camera {\n view: mat4x4f,\n projection: mat4x4f,\n position: vec3f\n}\n\nstruct Pixels {\n viewportWidth: f32,\n viewportHeight: f32,\n halfLineWidth: f32\n}\n\n@group(${r.uniformWorldGroupIndex}) @binding(${r.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\n@group(${r.uniformViewGroupIndex}) @binding(${r.uniformViewBindingIndex}) var<uniform> camera: Camera;\n@group(${r.storagePositionsGroupIndex}) @binding(${r.storagePositionsBindingIndex}) var<storage, read> positions: array<f32>;\n@group(${r.uniformDimensionsGroupIndex}) @binding(${r.uniformDimensionsBindingIndex}) var<uniform> dimensions: Pixels;\n\nfn computeClipPosition(index: u32) -> vec4f {\n let x = positions[3u * index + 0u];\n let y = positions[3u * index + 1u];\n let z = positions[3u * index + 2u];\n let position4 = vec4f(x, y, z, 1.0);\n let worldTransform = transforms.world;\n let viewProjectionTransform = camera.projection;\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\n return worldViewProjectionTransform * position4;\n}\n\nfn computeOffsetPosition(p0: vec4f, p1: vec4f, index: u32) -> vec4f {\n\n let viewportSize = vec2f(dimensions.viewportWidth, dimensions.viewportHeight);\n let normalizedSize = normalize(viewportSize);\n let halfThickness = dimensions.halfLineWidth / dimensions.viewportWidth;\n let p0ndc = p0.xyz / p0.w;\n let p1ndc = p1.xyz / p1.w;\n let dir = normalize((p1ndc - p0ndc).xy);\n let offsetX = halfThickness * 2.0 / normalizedSize.x;\n let offsetY = halfThickness * 2.0 / normalizedSize.y;\n\n // perp\n let perp0 = vec2f(-dir.y * offsetX, dir.x * offsetY);\n let perp1 = perp0;\n\n /*\n\n position0-0 -----*----- position0-1\n |\\ |\n | \\ |\n | \\ |\n | \\ |\n | \\ |\n | \\ |\n | \\ |\n | \\|\n position1-0 -----*----- position1-1\n\n indexes:\n ------------\n p0-0 -> 0, 3\n p0-1 -> 5\n p1-0 -> 1\n p1-1 -> 2, 4\n */\n\n var outPos: vec2f;\n var w = p0.w;\n var z = p0.z;\n if (index == 0 || index == 3){\n outPos = p0ndc.xy - perp0;\n }\n else if (index == 1){\n outPos = p1ndc.xy - perp1;\n w = p1.w;\n z = p1.z;\n }\n else if (index == 5){\n outPos = p0ndc.xy + perp0;\n }\n else { //if (index == 2 || index == 4)\n outPos = p1ndc.xy + perp1;\n w = p1.w;\n z = p1.z;\n }\n\n // return vec4f(outPos , 0, 1.0);\n return vec4f(outPos * w, z, w);\n}\n\n@vertex fn main(@builtin(instance_index) instance: u32,\n @builtin(vertex_index) index: u32) -> ${pt} {\n\n // vertex index starting at 1\n let position0 = computeClipPosition(instance);\n let position1 = computeClipPosition(instance + 1);\n\n // apply offset\n let position = computeOffsetPosition(position0, position1, index);\n\n return ${pt}(\n position,\n instance,\n index\n );\n}`}():function(e=kt){const r=t.Utils.extend({},kt,e);return`${Ot(r)}\n\nstruct Transforms {\n world: mat4x4f,\n normal: mat3x3f,\n}\n\nstruct Camera {\n view: mat4x4f,\n projection: mat4x4f,\n position: vec3f\n}\n\n@group(${r.uniformWorldGroupIndex}) @binding(${r.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\n@group(${r.uniformViewGroupIndex}) @binding(${r.uniformViewBindingIndex}) var<uniform> camera: Camera;\n@group(${r.storagePositionsGroupIndex}) @binding(${r.storagePositionsBindingIndex}) var<storage, read> positions: array<f32>;\n\n@vertex fn main(@builtin(instance_index) instance: u32,\n @builtin(vertex_index) index: u32) -> ${pt} {\n\n let x = positions[3u * index + 0u];\n let y = positions[3u * index + 1u];\n let z = positions[3u * index + 2u];\n let position4 = vec4f(x, y, z, 1.0);\n let worldTransform = transforms.world;\n let viewProjectionTransform = camera.projection;\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\n let worldPosition = (worldTransform * position4).xyz;\n return ${pt}(\n worldViewProjectionTransform * position4,\n instance,\n index);\n}`}()}_computeBasicData(){const e=this.#z.item,r=t.Utils.isNull(e)?z.Line:e.material?.shader??z.Line,i=e.material,n=i?.lineWidth??1,s=i?.dashArray;return{shader:r,thickness:n,dashPattern:s}}_computeBindGroupsAndReferences(e=this._computeBasicData()){const t=this.#$,r={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},i={key:"material",group:3,binding:0,type:"buffer"},n={key:"geometryPositions",group:2,binding:0,type:"buffer"},s={key:"line",group:2,binding:1,type:"buffer"};t.set(vt.Mesh,[r,i,n,s]),t.set(vt.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}])}fragment(e=this._computeBasicData()){this._computeBindGroupsAndReferences(e);const t={definitions:[],bindings:[],modifiers:[]};if(e.shader===z.Line)return Lt.fragment(t)}}class Er{#W;constructor(e,t,r=new br){this._lineBuilder=t,this._cache=r,this._ensureLineU32idBindGroup=(e,t,r)=>{const i=this.context;return this._cache.ensureBindGroup(i,e,[t],r,this._pickLineBindGroupLayout,fr+"line-colorpick-bind-group")},this._ensureLineMaterialBindGroup=(e,t,r,i=2)=>{const n=this._bindLineGroupLayouts[i];if(n.label!==fr+"line-material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");const s=this.context;return this._cache.ensureBindGroup(s,e,[t],r,n,fr+"line-material-bind-group")},this._ensureLinePositionsBindGroup=(e,t,r,i)=>{const n=this._bindLineGroupLayouts[i];if(n.label!==fr+"line-positions-bind-group-layout")throw new Error("BindGroupLayout mismatch!");const s=this.context;return this._cache.ensureBindGroup(s,e,t,r,n,fr+"line-positions-bind-group")},this._ensureLineWorldTransformBindGroup=(e,t,r,i=1,n=!1)=>{const s=this._bindLineGroupLayouts[i];if(s.label!==fr+"line-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");const o=e.key+"-line-"+(n?1:0),a=`${fr}${n?"colorpick":""}-line-transforms-bind-group`,l=this.context;return this._cache.ensureBindGroup(l,o,[t],r,s,a)},this._ensureLineCameraProjectionBindGroup=(e,t,r,i=0,n=!1)=>{const s=this._bindLineGroupLayouts[i],o=e.key+"-line-"+(n?1:0),a=`${fr}${n?"colorpick":""}-line-view-bind-group`,l=this.context;return this._cache.ensureBindGroup(l,o,[t],r,s,a)},this._bindLineGroupLayouts=[],this._bindLinePositions=yr,this._bindLinePicker=yr,this._bindLineWorldTransform=yr,this._bindLineRaycastWorldTransform=yr,this._bindLineCameraProjection=yr,this._bindLineRaycastCameraProjection=yr,this._bindLineMaterial=yr,this._drawLine=yr,this.set=e=>{throw new Error("Deprecated.")},this.bind=(e,...t)=>{throw new Error("Deprecated.")},this.draw=(e,...t)=>{throw new Error("Deprecated.")},this.frame=(e,t,r)=>{e.setPipeline(this._linePipeline);try{this._bindLineWorldTransform(e,t),this._bindLineCameraProjection(e,r),this._bindLinePositions(e,t),this._bindLineMaterial(e,t),this._drawLine(e,t)}catch(e){console.error("Pacem.Drawing3D.FrameException",e)}},this.raycast=(e,t,r)=>{e.setPipeline(this._pickLinePipeline);try{this._bindLineRaycastWorldTransform(e,t),this._bindLineRaycastCameraProjection(e,r),this._bindLinePositions(e,t),this._bindLinePicker(e,t),this._drawLine(e,t)}catch(e){}},this.#W=e,this._lineKey=t.key}get context(){return this.#W}get key(){return this._lineKey}build(e){const r=t.Utils.extend({},gr,e??{}),i=this._lineBuilder.build(),n=t.Utils.extend({pipeline:this},this.#W),s=n.device,o=i.metadata.thickness>1,a={module:s.createShaderModule({code:i.vertex}),buffers:[]},l=s.createBindGroupLayout({entries:[{binding:0,visibility:gt.VERTEX,buffer:{type:"uniform"}}],label:fr+"line-transforms-bind-group-layout"}),c=s.createBindGroupLayout({entries:[{binding:0,visibility:gt.VERTEX,buffer:{type:"uniform"}}],label:fr+"line-view-bind-group-layout"}),u=[{binding:0,visibility:gt.VERTEX,buffer:{type:"read-only-storage"}}];o&&u.push({binding:1,visibility:gt.VERTEX,buffer:{type:"uniform"}});const h=[l,c,s.createBindGroupLayout({entries:u,label:fr+"line-positions-bind-group-layout"})],p=h.length,d=h.slice(),m={module:s.createShaderModule({code:i.fragment}),targets:[{format:n.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},f=d.length,g=[{binding:0,visibility:gt.FRAGMENT,buffer:{type:"read-only-storage"}}],y={label:fr+"line-material-bind-group-layout",entries:g},v=s.createBindGroupLayout(y);d.push(v);const b=o?r.primitive.topology:"line-list",x={label:fr+"line-render-pipeline",vertex:a,fragment:m,layout:s.createPipelineLayout({label:fr+"line-render-pipeline-layout",bindGroupLayouts:this._bindLineGroupLayouts=d}),primitive:t.Utils.extend({},r.primitive,{topology:b})};r.multisample&&(x.multisample={count:4},x.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._linePipeline=s.createRenderPipeline(x);const _=this._pickLineBindGroupLayout=s.createBindGroupLayout({label:fr+"line-colorpick-bind-group-layout",entries:[{visibility:gt.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),w={label:fr+"line-colorpick-pipeline",vertex:a,fragment:{module:s.createShaderModule({code:Gt(p)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:fr+"line-colorpick-pipeline-layout",bindGroupLayouts:h.concat(_)}),primitive:t.Utils.extend({},r.primitive,{topology:b}),depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickLinePipeline=s.createRenderPipeline(w);const C=(e,r,o)=>{if(t.Utils.isNull(r))throw new ReferenceError(`Null ${nr.name} bringing world transform buffer was provided.`);const a=r.buffer(n,"objectWorldTransform"),l=a.buffer;_r(s,a);const{group:c}=i.bindings(vt.Mesh,"objectWorldTransform",0),u=this._ensureLineWorldTransformBindGroup(r.item,l,!1,c,o);e.setBindGroup(c,u)};this._bindLineWorldTransform=(e,...t)=>{const r=t.at(0);C(e,r,!1)},this._bindLineRaycastWorldTransform=(e,...t)=>{const r=t.at(0);C(e,r,!0)};const E=(e,r,o)=>{if(t.Utils.isNull(r))throw new ReferenceError(`Null ${nr.name} bringing view projection buffers was provided.`);const a=r.buffer(n,"cameraViewTransform"),l=a.buffer;_r(s,a);const{group:c}=i.bindings(vt.Camera,"cameraViewTransform",0),u=this._ensureLineCameraProjectionBindGroup(r.item,l,!1,c,o);e.setBindGroup(c,u)};this._bindLineCameraProjection=(e,...t)=>{const r=t.at(0);E(e,r,!1)},this._bindLineRaycastCameraProjection=(e,...t)=>{const r=t.at(0);E(e,r,!0)},this._bindLinePositions=(e,...r)=>{const a=r.at(0);if(t.Utils.isNull(a))throw new ReferenceError(`Null ${nr.name} bringing vertex buffers was provided as index 0.`);const l=a.buffer(n,"geometryPositions"),c=l.buffer;let u=l.fresh;const h=[c];if(_r(s,l),o){const e=a.buffer(n,"line"),t=e.buffer;u||=e.fresh,h.push(t),_r(s,e)}const{group:p}=i.bindings(vt.Mesh,"line",0),d=this._ensureLinePositionsBindGroup(a.item,h,u,p);e.setBindGroup(p,d)},this._bindLineMaterial=(e,...r)=>{const i=r.at(0);if(t.Utils.isNull(i))throw new ReferenceError(`Null ${nr.name} bringing vertex colors was provided.`);const o=i.buffer(n,"material"),a=o.buffer;_r(s,o);const l=this._ensureLineMaterialBindGroup(i.item,a,o.fresh,f);e.setBindGroup(f,l)},this._bindLinePicker=(e,...r)=>{const i=r.at(0);if(t.Utils.isNull(i))throw new ReferenceError(`Null ${nr.name} bringing world transform buffer was provided.`);const o=i.buffer(n,"u32id"),a=o.buffer;o.value,_r(s,o);const l=this._ensureLineU32idBindGroup(i.item,a,!1);e.setBindGroup(p,l)},this._drawLine=(e,...t)=>{const r=t.at(0).item.geometry;o?e.draw(6,r.positions.length-1,0,0):e.draw(r.positions.length)}}}class Pr{static{this._memoizer=new WeakMap}static dispose(e){const t=this._memoizer;if(t.has(e)){const r=t.get(e);for(let e of r.values())e.destroy();r.clear(),t.delete(e)}}static createColorPicking(e){const t=this._memoizer;t.has(e)||t.set(e,new Map);const r=t.get(e),i="colorpick";if(r.has(i))return r.get(i);const n=new Mr(e);return r.set(i,n),n}}class Mr{constructor(e){this._context=e,this._objects=new Map,this.frame=(e,...r)=>{if(t.Utils.isNull(this._encoder))throw new Error("Null encoder. Maybe you missed to call the 'begin' method first.");const i=Array.from(r),n=vr.createColorPicking(this._context,i);n?.frame(this._pass,e,...r);for(let e of i){e.item.inert||this._objects.set(e.id,e)}},this.end=e=>{if(!t.Utils.isNull(this._handle))return this._handle;const r=this._pass,i=this._encoder,{device:n}=this._context,{render:s}=this._textures,o=s.texture,a=this._ensureBuffer();r.end(),i.copyTextureToBuffer({texture:o,origin:{x:e.x,y:e.y}},{buffer:a,bytesPerRow:66304,rowsPerImage:1},{width:1}),n.queue.submit([i.finish()]),this._encoder=null;const l=this,c=l._objects;return this._handle=new Promise((e,t)=>{a.mapAsync(yt.READ,0,4).then(t=>{const r=new Uint32Array(a.getMappedRange(0,4))[0];a.unmap(),l._handle=null;const i=c.get(r);e(i?[i.item]:[])})})}}_createTexture(e){const{device:t,canvas:r}=this._context,i=Math.min(t.limits.maxTextureDimension2D,r.clientWidth),n=Math.min(t.limits.maxTextureDimension2D,r.clientHeight);return t.createTexture({size:[i,n,1],format:e,usage:ft.COPY_SRC|ft.RENDER_ATTACHMENT})}_ensureBuffer(){const e=this._buffer;if(!t.Utils.isNull(e))return e;const{device:r}=this._context;return this._buffer=r.createBuffer({label:at+"colorpick-output-buffer",size:4,usage:mt.MAP_READ|mt.COPY_DST})}_ensureTextures(){const e=this._textures;if(!t.Utils.isNull(e))return e;const r=this._createTexture("r32uint"),i=this._createTexture("depth24plus"),n={texture:r,view:r.createView()},s={texture:i,view:i.createView()};return this._textures={render:n,depth:s}}_destroyTexture(e){t.Utils.isNull(e)||e.texture?.destroy()}destroy(){const e=this._textures,r=this._buffer;if(!t.Utils.isNullOrEmpty(e)){const{render:t,depth:r}=e;this._destroyTexture(t),this._destroyTexture(r),this._textures=null}t.Utils.isNull(r)||(r.destroy(),this._buffer=null)}begin(){const{device:e}=this._context;this._encoder=e.createCommandEncoder({label:at+"colorpick-raycaster"});const{render:t,depth:r}=this._ensureTextures(),i={label:at+"colorpick-raycaster-pass",colorAttachments:[{view:t.view,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:r.view,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};this._pass=this._encoder.beginRenderPass(i),this._objects.clear()}}const Rr=r.Geometry.LinearAlgebra.Vector3D;var Nr;!function(e){e[e.NotSupported=0]="NotSupported",e[e.Disabled=1]="Disabled"}(Nr||(Nr={}));class Ur{static create(e,t){return new Promise((r,i)=>{if(navigator.gpu){const n=new Tr(e);n.init(t).then(e=>r(n),e=>{const t={message:"string"==typeof e?e:e.message,cause:Nr.Disabled};i(t)})}else{const e={message:"WebGPU not supported.",cause:Nr.NotSupported};i(e)}})}}class Tr{#j;#V;#W;#H;#F;#X;#Y;#R;#Z;#q;#J;#Q;constructor(e){this.#H=new WeakMap,this.#F=new WeakMap,this.#X=new WeakMap,this.#Z={enableValidation:!1},this.#q=!1,this._logError=e=>{const r=this.#j.logger;if(!t.Utils.isNull(r)){const i="error"in e?e.error:e;r.log(t.Logging.LogLevel.Error,i.message,"WebGPU")}},this.#K=!0,this.#ee=!1;const r=(this.#j=e).stage,i=document.createElement("canvas");i.id=t.P+"_3d_stage_"+t.Utils.uniqueCode(),r.innerHTML="",r.appendChild(this.#V=i),this.#J=ir.create(this.#Q={time:performance.now(),cursor:{x:0,y:0},resolution:{width:0,height:0}})}_buildPassDescriptor({multisample:r,format:i}){const{context:n,device:s}=this.#W,o=n.getCurrentTexture();let a=this.#R;if(t.Utils.isNull(a)){if(a={},r){const e=s.createTexture({label:at+"render-texture",format:i??o.format,usage:ft.RENDER_ATTACHMENT,size:[o.width,o.height],sampleCount:4});a.render={texture:e,view:e.createView({label:at+"render-texture-view"})};const t=s.createTexture({label:at+"depth-texture",format:"depth24plus",usage:ft.RENDER_ATTACHMENT,size:[o.width,o.height],sampleCount:4});a.depth={texture:t,view:t.createView({label:at+"depth-texture-view"})}}this.#R=a}const{transparent:l,background:c}=this.#j,u=l?{r:0,g:0,b:0,a:0}:c?"string"==typeof c?e.Colors.parse(c):c:{r:0,g:0,b:0,a:1},h=Je.flattenVectorArray([u]),p=o.createView({label:at+"canvas-texture-view"}),d={view:p,clearValue:h,loadOp:"clear",storeOp:"store"},m={colorAttachments:[d]};if(r){const e=a.render.view,t=a.depth.view;m.depthStencilAttachment={view:t,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store",stencilClearValue:0,stencilReadOnly:!0},d.view=e,d.resolveTarget=p}return m}_buildContext(e=this.#V,t=this.#j.size){t??=e;let r=t.width,i=t.height;e.width=1*r,e.height=1*i;return{context:e.getContext("webgpu"),textureFormat:navigator.gpu.getPreferredCanvasFormat()}}_buildUpContext(e,t,r,i){const{transparent:n}=this.#j;r.configure({alphaMode:n?"premultiplied":"opaque",device:e,format:i}),this.#W={device:e,adapter:t,canvas:this.#V,context:r,format:i},this.#K=!1}async init(e){this.#Z=e;const r=await navigator.gpu.requestAdapter();if(t.Utils.isNull(r))throw new Error("WebGPU adapter unavalable or disabled.");const i=await r.requestDevice();if(t.Utils.isNull(r))throw new Error("WebGPU device unavalable or disabled.");i.addEventListener("uncapturederror",this._logError),this.#ee=!(t.Utils.isNull(e.modifiers?.version)||t.Utils.isNull(e.modifiers)||t.Utils.isNull(e.modifiers.vertexInput)&&t.Utils.isNull(e.modifiers.vertexOutput)&&t.Utils.isNull(e.modifiers.fragment));const{context:n,textureFormat:s}=this._buildContext();this._buildUpContext(i,r,n,s)}#K;#ee;render(e){if(this.#K||t.Utils.isNull(this.#Y)||!(this.#V.width>0)||!(this.#V.height>0))return;const r=this.#W,i=r.device,n=this.#Y,s=this.#Z?.enableValidation??!1;this.#ee&&t.Utils.extend(this.#Q,e);const o=this._buildPassDescriptor({multisample:!0}),a=i.createCommandEncoder({label:at+"renderer"}),l=a.beginRenderPass(o);n.loop((e,t,n)=>{if(e.item.hide)return!1;s&&i.pushErrorScope("validation");const o=[e,t,...n];return vr.create(r,o,{multisample:!0,modifiers:this.#Z.modifiers}).frame(l,this.#J,...o),s&&i.popErrorScope().then(e=>{e&&this._logError(e)}),!0}),l.end(),i.queue.submit([a.finish()])}set disabled(e){this.#q=e}get disabled(){return this.#q}raycast(e){if(this.#K||t.Utils.isNull(this.#Y))return Promise.resolve([]);const r=this.#W,i=r.device,n=this.#Y,s=this.#Z?.enableValidation??!1,o=Pr.createColorPicking(r);return o.begin(),n.loop((e,t)=>!e.item.hide&&(s&&i.pushErrorScope("validation"),o.frame(this.#J,e,t),s&&i.popErrorScope().then(e=>{e&&this._logError(e)}),!0)),o.end(e)}_disposeRenderableJustInCase(e){const t=this.#H;t.has(e)&&(t.get(e)?.destroy(),t.delete(e))}_createOrYieldRenderable(e,r=this.#F,i=this.#X){e.stage??=this.#j;const n=this.#H;let s=n.get(e);return t.Utils.isNull(s)&&n.set(e,s=nr.create(e,r)),s}_createOrYieldGeometry(e){const r=this.#F;let i=r.get(e);return t.Utils.isNull(i)&&r.set(e,i=ir.create(e)),i}_createOrYieldMaterial(e){const r=this.#X;let i=r.get(e);return t.Utils.isNull(i)&&r.set(e,i=ir.create(e)),i}_unwrapBuffers(e,t){t??={meshes:[],lights:[],cameras:[],groups:[]};for(let r of e.children)r.item.stage??=this.#j,x(r.item)&&t.meshes.push(r),g(r.item)&&t.cameras.push(r),b(r.item)&&t.lights.push(r),C(r.item)&&(t.groups.push(r),this._unwrapBuffers(r,t));return t}_update(e){const r=[],i=[],n=[],s=e=>this._createOrYieldRenderable(e);let o;for(let a of e)if(a.hide)this._disposeRenderableJustInCase(a);else{if(a.stage??=this.#j,C(a)){const e=a;e.flags.includes(h.Children)&&this.#H.delete(e),r.push(s(e))}x(a)&&a.geometry&&(this._createOrYieldGeometry(a.geometry),t.Utils.isNull(a.material)||this._createOrYieldMaterial(a.material),i.push(s(a))),b(a)&&n.push(s(a)),g(a)&&(o??=a)}var a;o??=(a=this.#j,{bottom:-1,top:1,left:-1,right:1,near:.1,far:200,lookAt:Rr.from(0,0,0),up:Rr.j(),position:Rr.from(0,0,1),type:"orthographic",flags:[],stage:a});const l=s(o);let c={meshes:i,lights:n,cameras:[l],groups:r};for(let e of r)c=this._unwrapBuffers(e,c);this.#Y?.items.meshes.forEach(e=>{i.includes(e)||e.destroy()}),this.#Y=new rr(c)}update(...e){this._update(Array.from(e))}dispose(){if(this.#Y=null,this._disposeContext()){const{device:e}=this.#W;e.removeEventListener("uncapturederror",this._logError),e.destroy}}_disposeContext(){const e=this.#W;if(t.Utils.isNull(e))return!1;Pr.dispose(e),vr.dispose(e);const r=this.#R;if(this.#R=null,!t.Utils.isNull(r)){const{render:e,depth:t}=r;!function(...e){for(let t of e||[])t?.destroy()}(e?.texture,t?.texture)}return e.context.unconfigure(),!0}resize(e){if(this.#K=!0,this._disposeContext()){const{device:r,adapter:i}=this.#W,{context:n,textureFormat:s}=this._buildContext(this.canvas,e);this._buildUpContext(r,i,n,s),this.#ee&&t.Utils.extend(this.#Q,{resolution:e})}}get canvas(){return this.#V}}var Lr=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};const Br="WebGPURaycastCallback",Ar="WebGPURaycastPixel",Sr=t.CustomElementUtils.getAttachedPropertyValue,kr=t.CustomElementUtils.setAttachedPropertyValue,Or=t.CustomElementUtils.deleteAttachedPropertyValue;let Gr=class extends t.Components.PacemItemElement{findContainer(){return t.CustomElementUtils.findAncestor(this,e=>e instanceof Dr)}#te="";get version(){return this.#te}#re=new MutationObserver(()=>{this.wgsl=this.textContent});viewActivatedCallback(){super.viewActivatedCallback(),this.wgsl=this.textContent,this.#re.observe(this,{characterData:!0})}propertyChangedCallback(e,t,r,i){super.propertyChangedCallback(e,t,r,i),"wgsl"===e&&this._computeVersion(r)}_computeVersion(r=this.wgsl){e.Strings.hash(r).then(e=>{if(e!==this.#te){const r=this.#te,i=e;this.#te=i;const n=new t.PropertyChangeEvent({propertyName:"version",oldValue:r,currentValue:i,firstChange:t.Utils.isNullOrEmpty(r)});this.dispatchEvent(n)}})}disconnectedCallback(){this.#re.disconnect(),super.disconnectedCallback()}};Lr([t.Watch({emit:!1,converter:t.PropertyConverters.String})],Gr.prototype,"type",void 0),Lr([t.Watch({emit:!1,converter:t.PropertyConverters.String})],Gr.prototype,"wgsl",void 0),Gr=Lr([t.CustomElement({tagName:t.P+"-3d-wgsl-script"})],Gr);let Dr=class extends I{constructor(){super(...arguments),this.#ie=[],this._scriptVersionChangeHandler=e=>{const{propertyName:t}=e.detail;"version"===t&&this._parseWgslModifiers(e.detail.currentValue)},this.#ne=new Set,this.#se=new Map,this.#oe=!0,this.#ae=!0,this.#le=new WeakMap}invalidateSize(e,t=e.size){const r=this._ensureRenderer(e);r?.resize(t)}#ie;get items(){return this.#ie}register(e){const r=this.#ie;return e instanceof Gr&&!r.includes(e)&&(e.addEventListener(t.PropertyChangeEventName,this._scriptVersionChangeHandler,!1),r.push(e),this._parseWgslModifiers(this.modifiers?.version),!0)}unregister(e){const r=this.#ie,i=r.indexOf(e);return i>=0&&(e.removeEventListener(t.PropertyChangeEventName,this._scriptVersionChangeHandler,!1),r.splice(i,1),this._parseWgslModifiers(this.modifiers?.version),!0)}#ne;#se;#oe;#ae;get supported(){return this.#oe}get active(){return this.#ae}_webGPUNotSupported(e){this.#oe&&e.cause===Nr.NotSupported&&(this.#oe=!1,this.dispatchEvent(new t.PropertyChangeEvent({propertyName:"supported",oldValue:null,currentValue:!1}))),this.#ae&&(this.#ae=!1,this.dispatchEvent(new t.PropertyChangeEvent({propertyName:"active",oldValue:null,currentValue:!1})))}initialize(e){const r=this.#se,i=this.#ne;return i.has(e)||i.add(e),Ur.create(e,{enableValidation:this.enableValidation??!1,modifiers:this.modifiers}).then(t=>(r.get(e)?.update(),r.set(e,t),this._updatePipeline(e),t.canvas),e=>(this.log(t.Logging.LogLevel.Error,e.message),this._webGPUNotSupported(e),null))}_parseWgslModifiers(e){const t=this.#ie,r=t.find(e=>"vertex-input"==e.type),i=t.find(e=>"vertex-output"==e.type),n=t.find(e=>"fragment"==e.type),s=r?.wgsl,o=i?.wgsl,a=n?.wgsl;this.modifiers={vertexInput:s,vertexOutput:o,fragment:a,version:e}}propertyChangedCallback(e,t,r,i){if(super.propertyChangedCallback(e,t,r,i),!i)switch(e){case"modifiers":case"enableValidation":this._reinitialize()}}disconnectedCallback(){const e=this.#se;for(let[t,r]of e)r?.dispose();e.clear(),this.#ne.clear(),super.disconnectedCallback()}dispose(e){const t=this.#se,r=this.#ne;t.has(e)&&(t.get(e)?.dispose(),t.delete(e)),r.has(e)&&r.delete(e)}_reinitialize(){for(let e of this.#ne.values())this.initialize(e)}_ensureRenderer(e){return this.#se.get(e)}_updatePipeline(e){const t=this._ensureRenderer(e);t?.update(...e.datasource)}#le;render(e){const r=e.size?.width,i=e.size?.height;if(!(r>0&&i>0))return;const n=this._ensureRenderer(e);if(t.Utils.isNull(n))return;this.#le.has(e)&&(this.#le.delete(e),this._itemsChangedExec(e));const s=Sr(e,Ar);if(n.render({cursor:s,time:performance.now(),resolution:{width:r,height:i}}),!e.interactive)return;const o=Sr(e,Br);t.Utils.isNullOrEmpty(o)||(t.Utils.isNullOrEmpty(s)?o(null):n.raycast(s).then(e=>{if(t.Utils.isNullOrEmpty(e))o(null);else{const t={object:e[0],point:null};o(t)}}))}snapshot(e,r,i,n){const s=this.#se;if(!s.has(e))return Promise.resolve(null);const{canvas:o}=s.get(e),a=!t.Utils.isNullOrEmpty(r),l=i??(a?"image/jpeg":null),c=n??(a?.9:null);return new Promise((i,n)=>{this.render(e),t.Utils.snapshotElement(o,r,l,c).then(i)})}raycast(e,t,r,i){kr(e,Br,i),t.x<0||t.y<0||t.x>=r.width||t.y>=r.height?Or(e,Ar):kr(e,Ar,t)}_itemsChangedExec(e){this._updatePipeline(e)}_itemsChanged(e,t){this.#le.set(e,!0)}addItem(e,t){this._itemsChanged(e,t)}removeItem(e,t){this._itemsChanged(e,t)}updateItem(e,r){(t.Utils.isNull(r)||r.flags.indexOf(h.Visibility)>=0||r.flags.indexOf(h.Children)>=0)&&this._itemsChanged(e,r)}zoomFit(e,...t){return Promise.resolve()}project(e,t){return{x:0,y:0}}getScene(e){return e}};Lr([t.Debounce(100)],Dr.prototype,"_parseWgslModifiers",null),Lr([t.Watch({emit:!1})],Dr.prototype,"modifiers",void 0),Lr([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],Dr.prototype,"enableValidation",void 0),Dr=Lr([t.CustomElement({tagName:t.P+"-3d-webgpu-adapter"})],Dr);var $r=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};const Ir=r.Geometry.LinearAlgebra.Vector3D,zr=r.Geometry.LinearAlgebra.Matrix3D,Wr=r.Geometry.LinearAlgebra.Quaternion;r.Geometry.LinearAlgebra.Spherical;const jr=.001,Vr={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}};class Hr{constructor(e,r){this._config=r,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=e=>{const{rotation:r,pan:i}=this._config,n="mouse"===e.pointerType,s=r.enabled&&n&&e.button===r.button&&t.CustomEventUtils.matchModifiers(e,r.modifiers),o=i.enabled&&n&&e.button===i.button&&t.CustomEventUtils.matchModifiers(e,i.modifiers);(s||o)&&(this.#ce=s,(this.#ue=o)&&(this._currentState=Hr._buildState(this._camera),t.Utils.extend(this._input,Ir.zero()),this._progress.x=this._progress.y=0),t.avoidHandler(e),window.addEventListener("pointerup",this._endHandler,!1),window.addEventListener("pointermove",this._moveHandler,!1),window.addEventListener("contextmenu",this._avoidHandler,!1))},this._avoidHandler=e=>t.avoidHandler(e),this._endHandler=e=>{t.avoidHandler(e),window.setTimeout(()=>{window.removeEventListener("pointerup",this._endHandler),window.removeEventListener("pointermove",this._moveHandler),window.removeEventListener("contextmenu",this._avoidHandler)},20)},this._zoomHandler=e=>{const{zoom:r}=this._config;if(!(r.enabled&&t.CustomEventUtils.matchModifiers(e,r.modifiers)))return;t.avoidHandler(e);this._input.rho-=Math.sign(e.deltaY)},this._moveHandler=e=>{t.avoidHandler(e);const{height:r,width:i}=this._scene.size,n=this._input,s=Math.min(r,i);if(this.#ce){const t=-360/s,{phi:r,theta:i}=n,{maxPolar:o,minPolar:a,maxAzimuth:l,minAzimuth:c}=this._config;n.phi=(r+e.movementX*t).clamp(a,o),n.theta=(i+e.movementY*t).clamp(c,l)}else if(this.#ue){const t=this._currentState.radius/s;n.x+=-e.movementX*t,n.y+=e.movementY*t}},this._renderHandler=e=>{this._update()};const i=this._scene=(this._camera=e).stage;this._initialState=this._currentState=Hr._buildState(e);const n=this._canvas=i.stage;n.addEventListener("pointerdown",this._startHandler,!1),n.addEventListener("wheel",this._zoomHandler,{passive:!1}),i.addEventListener("render",this._renderHandler,!1)}static _buildState(e){const t=Ir.subtract(e.position,e.lookAt),r=Ir.mag(t);return{target:e.lookAt,versor:Ir.unit(t),up:e.up,radius:r,position:e.position}}static tryAttach(e,r){r??=Vr;const i=function(e){return g(e)?e.stage:null}(e)?.stage;if(t.Utils.isNull(i))return null;{const{position:i,lookAt:n}=e;return t.Utils.isNull(i)||t.Utils.isNull(n)||Ir.areClose(i,n)?null:new Hr(e,r)}}get configuration(){return this._config}set configuration(e){this._config=e}#ue;#ce;_getSafeAzimuth({theta:e}){return Hr._modAngle(e)}_getSafePolar({phi:e}){return Hr._modAngle(e)}static _modAngle(e){for(;e<0;)e+=360;return e%360}static _getViewXYZ(e){const{versor:t,up:r}=e,i=Ir.cross(t,r),n=Ir.cross(i,t);return Ir.normalize(i),Ir.normalize(n),{right:i,up:n,versor:t}}#he;_update(){if(this.#he)return;this.#he=!0;const e=this._camera,{radius:t,versor:r,target:i,up:n}=this._initialState,{target:s}=this._currentState,{theta:o,phi:a,rho:l,x:c,y:u}=this._input,p=this._progress,{theta:d,phi:m,rho:f,x:g,y:y}=p,v=Math.abs(m-a)>jr||Math.abs(d-o)>jr,b=Math.abs(f-l)>jr,x=Math.abs(c-g)>jr||Math.abs(u-y)>jr;if(b||v||x){const v="boolean"==typeof this._config.inertia?this._config.inertia?.05:0:this._config.inertia,b=v>0&&v<1,{right:x,up:_}=Hr._getViewXYZ(this._initialState);let w=i,C=n,E=s,P=f;b?P+=(l-f)*v:P=l,p.rho=P;const M=Math.pow(.95,1*P),R=Ir.scale(r,-M*t);w=Ir.add(w,R);let N=m,U=d;b?(N+=(a-m)*v,U+=(o-d)*v):(N=a,U=o);const T=this._getSafePolar({phi:p.phi=N}),L=this._getSafeAzimuth({theta:p.theta=U}),B=Ir.negate(i);let A=zr.translate(zr.identity(),B);const S=Wr.fromAxisAngle(_,T),k=Wr.fromAxisAngle(x,L),O=zr.multiply(Wr.toRotationMatrix(k),Wr.toRotationMatrix(S));A=zr.multiply(A,O),A=zr.translate(A,Ir.negate(B)),w=zr.transform(w,A),C=zr.transform(C,zr.clone(A,e=>{e.offsetX=e.offsetY=e.offsetZ=0}));let G=g,D=y;b?(G+=(c-g)*v,D+=(u-y)*v):(G=c,D=u),p.x=G,p.y=D;const{right:$,up:I}=Hr._getViewXYZ(this._currentState),z=Ir.scale($,G),W=Ir.scale(I,D),j=Ir.add(z,W);E=Ir.add(s,j),e.lookAt=E,e.position=w,e.up=C,e.flags.push(h.Camera)}this.#he=!1}dispose(){const e=this._canvas,r=this._scene;t.Utils.isNull(e)||(e.removeEventListener("pointerdown",this._startHandler),e.removeEventListener("wheel",this._zoomHandler)),r.removeEventListener("render",this._renderHandler,!1)}}let Fr=class extends t.Behaviors.PacemBehavior{constructor(){super(...arguments),this.#pe=new Map,this._readyHandler=e=>{if("isReady"===e.detail.propertyName&&!0===e.detail.currentValue){const r=e.currentTarget;r.removeEventListener(t.PropertyChangeEventName,this._readyHandler),this._decorateCore(r)}}}#pe;propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"maxAzimuth":case"minAzimuth":case"inertia":case"zoomControl":case"panControl":case"rotationControl":const e=this._buildConfig(),t=this.#pe;for(let r of t.values())r.configuration=e}}disconnectedCallback(){const e=this.#pe;for(let t of e.values())t.dispose();e.clear(),super.disconnectedCallback()}_buildConfig(){return t.Utils.extend({},Vr,{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??Vr.zoom,pan:this.panControl??Vr.pan,rotation:this.rotationControl??Vr.rotation})}_decorateCore(e){const r=Hr.tryAttach(e,this._buildConfig());t.Utils.isNull(r)||this.#pe.set(e,r)}decorate(e){e.isConnected?this._decorateCore(e):e.addEventListener(t.PropertyChangeEventName,this._readyHandler,!1)}undecorate(e){const t=this.#pe;t.has(e)&&(t.get(e).dispose(),t.delete(e))}};$r([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Fr.prototype,"maxAzimuth",void 0),$r([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Fr.prototype,"maxPolar",void 0),$r([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Fr.prototype,"minAzimuth",void 0),$r([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Fr.prototype,"minPolar",void 0),$r([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Fr.prototype,"zoomControl",void 0),$r([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Fr.prototype,"rotationControl",void 0),$r([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Fr.prototype,"panControl",void 0),$r([t.Watch({emit:!1,converter:o})],Fr.prototype,"inertia",void 0),Fr=$r([t.CustomElement({tagName:t.P+"-"+"3d-orbit-camera"})],Fr);var Xr=Object.freeze({__proto__:null,AdapterUtils:Je,get BasicMaterialElement(){return Q},DragEvent:R,get KnownShader(){return z},get LambertMaterialElement(){return ee},get LineMaterialElement(){return re},MaterialElement:q,OrbitCameraBehavior:Hr,Pacem3DAdapterElement:I,Pacem3DCameraElement:G,Pacem3DDetector:class{constructor(){this._detected={supported:!1,info:{}};let e,t=document.createElement("canvas"),r=["webgl","experimental-webgl","moz-webgl","webkit-3d"],i=function(t){if(t)return e.getParameter(t)},n=(e,t,r)=>{let i=this._detected;(i.info[e]=i.info[e]||{})[t=(t=t.replace(/[^\w]+/g,"")).substring(0,1).toLowerCase()+t.substring(1)]=r};if(navigator.userAgent.indexOf("MSIE")>=0)try{e=window.WebGLHelper.CreateGLContext(t,"canvas")}catch(e){}else for(var s=0;s<r.length;s++)try{if(e=t.getContext(r[s]),e){n("main","Context Name",r[s]);break}}catch(e){}this._detected.supported=!!e,n("main","Platform",navigator.platform),n("main","Agent",navigator.userAgent),e&&(n("main","Vendor",i(e.VENDOR)),n("main","Version",i(e.VERSION)),n("main","Renderer",i(e.RENDERER)),n("main","Shading Language Version",i(e.SHADING_LANGUAGE_VERSION)),n("bits","Rgba Bits",i(e.RED_BITS)+", "+i(e.GREEN_BITS)+", "+i(e.BLUE_BITS)+", "+i(e.ALPHA_BITS)),n("bits","Depth Bits",i(e.DEPTH_BITS)),n("shader","Max Vertex Attribs",i(e.MAX_VERTEX_ATTRIBS)),n("shader","Max Vertex Texture Image Units",i(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS)),n("shader","Max Varying Vectors",i(e.MAX_VARYING_VECTORS)),n("shader","Max Uniform Vectors",i(e.MAX_VERTEX_UNIFORM_VECTORS)),n("tex","Max Combined Texture Image Units",i(e.MAX_COMBINED_TEXTURE_IMAGE_UNITS)),n("tex","Max Texture Size",i(e.MAX_TEXTURE_SIZE)),n("tex","Max Cube Map Texture Size",i(e.MAX_CUBE_MAP_TEXTURE_SIZE)),n("tex","Num. Compressed Texture Formats",i(e.COMPRESSED_TEXTURE_FORMATS)),n("misc","Max Render Buffer Size",i(e.MAX_RENDERBUFFER_SIZE)),n("misc","Max Viewport Dimensions",i(e.MAX_VIEWPORT_DIMS)),n("misc","Aliased Line Width Range",i(e.ALIASED_LINE_WIDTH_RANGE)),n("misc","Aliased Point Size Range",i(e.ALIASED_POINT_SIZE_RANGE)),n("misc","Supported Extensions",e.getSupportedExtensions()||[]))}get info(){return this._detected.info}get supported(){return this._detected.supported}},get Pacem3DElement(){return u},get Pacem3DGroupElement(){return A},get Pacem3DLightElement(){return O},get Pacem3DMeshElement(){return S},get Pacem3DObjectElement(){return k},get Pacem3DOrthographicCameraElement(){return $},get Pacem3DPerspectiveCameraElement(){return D},Pacem3DPrimitiveElement:le,get Pacem3DThreeAdapterElement(){return ot},get Pacem3DWebgpuAdapterElement(){return Dr},get Pacem3DWgslScriptElement(){return Gr},get PacemBoxElement(){return ye},get PacemConeElement(){return xe},get PacemCylinderElement(){return Ce},get PacemDodecahedronElement(){return Ve},get PacemHexahedronElement(){return We},get PacemIcosahedronElement(){return je},get PacemLineElement(){return Re},get PacemOctahedronElement(){return ze},get PacemOrbitCameraBehaviorElement(){return Fr},get PacemPlaneElement(){return Te},get PacemSphereElement(){return Xe},get PacemTetrahedronElement(){return Ie},get PacemTorusElement(){return qe},get PhongMaterialElement(){return ne},PolyhedronElement:$e,RenderableElement:L,RenderableEvent:N,get StalePropertyFlag(){return h},get StandardMaterialElement(){return oe},UI3DEvent:M,Ui3DElement:B,computePlaneNormal:P,computeSharpVertexNormals:E,isBasicMaterial:V,isCamera:g,isGeometry:_,isGroup:C,isInteraction:U,isLambertMaterial:F,isLight:b,isLineMaterial:H,isMaterial:j,isMesh:x,isMeshGeometry:w,isOrthographicCamera:v,isPerspectiveCamera:y,isPhongMaterial:X,isRenderable:m,isShaderMaterial:Z,isStage:d,isStandardMaterial:Y,isUi3DObject:f}),Yr=Object.freeze({__proto__:null,Drawing3D:Xr}),Zr=function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o};class qr{static parse(t){const r=[],n=/^v((\s+-?[\d\.]+){3})/gm;let s=n.exec(t);for(;s&&s.length;)r.push(i.convert(s[1])),s=n.exec(t);const o=[],a=/^vt((\s+-?[\d\.]+){2})/gm;for(s=a.exec(t);s&&s.length;)o.push(e.Point.parse(s[1])),s=a.exec(t);const l=[],c=/^vn((\s+-?[\d\.]+){3})/gm;for(s=c.exec(t);s&&s.length;)l.push(i.convert(s[1])),s=c.exec(t);const u=[],h=[],p=[],d=/^f((\s+([\d]+\/[\d]+\/[\d]+)){3,})/gm;for(s=d.exec(t);s&&s.length;){const e=/([\d]+)\/([\d]+)\/([\d]+)/g,r=s[1];let i=e.exec(r),n=0;for(var m,f,g,y,v,b;i&&i.length;)n>2&&(p.push(m),h.push(o[f]),u.push(l[g]),p.push(y),h.push(o[v]),u.push(l[b])),y=parseInt(i[1])-1,v=parseInt(i[2])-1,b=parseInt(i[3])-1,p.push(y),h.push(o[v]),u.push(l[b]),0===n&&(m=y,f=v,g=b),n++,i=e.exec(r);s=d.exec(t)}return new me(r,p,h,u)}}Zr([t.Transformer("parse3D")],class{static parseGeometry(e,t){if("obj"===t.toLowerCase())return qr.parse(e);throw new Error(`Type '${t}' is not supported.`)}},"parseGeometry",null);var Jr=Object.freeze({__proto__:null,BooleanOrNumberConverter:o,DragEvent:R,get KnownShader(){return z},LineGeometry:de,MaterialElement:q,MeshGeometry:me,NodeGeometry:he,NotifyChange:ce,Pacem3DAdapterElement:I,Pacem3DCameraElement:G,get Pacem3DGroupElement(){return A},get Pacem3DLightElement(){return O},get Pacem3DMeshElement(){return S},get Pacem3DObjectElement(){return k},get Pacem3DOrthographicCameraElement(){return $},get Pacem3DPerspectiveCameraElement(){return D},Point3DConverter:i,Point3DOrNumberConverter:n,QuaternionConverter:s,RenderableElement:L,RenderableEvent:N,get StalePropertyFlag(){return h},UI3DEvent:M,Ui3DElement:B,computePlaneNormal:P,computeSharpVertexNormals:E,isBasicMaterial:V,isCamera:g,isGeometry:_,isGroup:C,isInteraction:U,isLambertMaterial:F,isLight:b,isLineMaterial:H,isMaterial:j,isMesh:x,isMeshGeometry:w,isOrthographicCamera:v,isPerspectiveCamera:y,isPhongMaterial:X,isRenderable:m,isShaderMaterial:Z,isStage:d,isStandardMaterial:Y,isUi3DObject:f}),Qr=Object.freeze({__proto__:null,Components:Yr,Drawing3D:Jr});e.DeepMerger.merge(Qr)}(Pacem,Pacem,Pacem);