@pacem/pacem 1.0.0-banach → 1.0.0-bessel

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 (55) hide show
  1. package/README.md +3 -3
  2. package/dist/browser/pacem-2d.js +1 -1
  3. package/dist/browser/pacem-2d.min.js +1 -2
  4. package/dist/browser/pacem-3d.js +1 -1
  5. package/dist/browser/pacem-3d.min.js +1 -2
  6. package/dist/browser/pacem-charts.js +1 -1
  7. package/dist/browser/pacem-charts.min.js +1 -2
  8. package/dist/browser/pacem-cms.js +1 -1
  9. package/dist/browser/pacem-cms.min.js +1 -2
  10. package/dist/browser/pacem-core.js +50 -24
  11. package/dist/browser/pacem-core.js.map +1 -1
  12. package/dist/browser/pacem-core.min.js +2 -3
  13. package/dist/browser/pacem-foundation.js +1 -1
  14. package/dist/browser/pacem-foundation.min.js +1 -2
  15. package/dist/browser/pacem-fx.js +1 -1
  16. package/dist/browser/pacem-fx.min.js +1 -2
  17. package/dist/browser/pacem-logging.js +1 -1
  18. package/dist/browser/pacem-logging.min.js +1 -2
  19. package/dist/browser/pacem-maps.js +1 -1
  20. package/dist/browser/pacem-maps.min.js +1 -2
  21. package/dist/browser/pacem-media.js +1 -1
  22. package/dist/browser/pacem-media.min.js +1 -2
  23. package/dist/browser/pacem-networking.js +1 -1
  24. package/dist/browser/pacem-networking.min.js +1 -2
  25. package/dist/browser/pacem-numerical.js +1 -1
  26. package/dist/browser/pacem-numerical.min.js +1 -2
  27. package/dist/browser/pacem-plus.js +188 -74
  28. package/dist/browser/pacem-plus.js.map +1 -1
  29. package/dist/browser/pacem-plus.min.js +2 -3
  30. package/dist/browser/pacem-scaffolding.js +1 -1
  31. package/dist/browser/pacem-scaffolding.min.js +1 -2
  32. package/dist/browser/pacem-ui.js +24 -2
  33. package/dist/browser/pacem-ui.js.map +1 -1
  34. package/dist/browser/pacem-ui.min.js +2 -3
  35. package/dist/bundle/pacem.min.mjs +184 -184
  36. package/dist/bundle/pacem.mjs +359 -215
  37. package/dist/bundle/pacem.mjs.map +4 -4
  38. package/dist/typings/index.d.ts +64 -11
  39. package/dist/vscode.html-custom.json +33 -0
  40. package/package.json +1 -1
  41. package/dist/browser/pacem-2d.min.js.map +0 -1
  42. package/dist/browser/pacem-3d.min.js.map +0 -1
  43. package/dist/browser/pacem-charts.min.js.map +0 -1
  44. package/dist/browser/pacem-cms.min.js.map +0 -1
  45. package/dist/browser/pacem-core.min.js.map +0 -1
  46. package/dist/browser/pacem-foundation.min.js.map +0 -1
  47. package/dist/browser/pacem-fx.min.js.map +0 -1
  48. package/dist/browser/pacem-logging.min.js.map +0 -1
  49. package/dist/browser/pacem-maps.min.js.map +0 -1
  50. package/dist/browser/pacem-media.min.js.map +0 -1
  51. package/dist/browser/pacem-networking.min.js.map +0 -1
  52. package/dist/browser/pacem-numerical.min.js.map +0 -1
  53. package/dist/browser/pacem-plus.min.js.map +0 -1
  54. package/dist/browser/pacem-scaffolding.min.js.map +0 -1
  55. package/dist/browser/pacem-ui.min.js.map +0 -1
package/README.md CHANGED
@@ -65,10 +65,10 @@ Each package also ships a self-contained, minified script under `dist/browser/`
65
65
  Typings are resolved automatically (`types`/`exports.types` point at `dist/typings/index.d.ts`), covering both the ES module import style and the ambient `Pacem` global used by the plain `<script>` include above:
66
66
 
67
67
  ```ts
68
- import { UI } from '@pacem/pacem';
68
+ import { Components } from '@pacem/pacem';
69
69
 
70
- let el: UI.PacemIconElement; // via the module
71
- let el2: Pacem.PacemIconElement; // via the ambient global, no import needed
70
+ let el: Components.UI.PacemIconElement; // via the module
71
+ let el2: Pacem.Components.UI.PacemIconElement; // via the ambient global, no import needed
72
72
  ```
73
73
 
74
74
  ### HTML IntelliSense
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,7 +1,6 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
6
6
  !function(t,e){"use strict";const r="2d";function i(t){return!e.Utils.isNull(t)&&"stage"in t}function s(t){return i(t)}function n(t){return"stops"in t&&e.Utils.isArray(t.stops)}function a(e){return n(e)&&"start"in e&&t.Point.isPoint(e.start)&&"end"in e&&t.Point.isPoint(e.end)}function o(e){return n(e)&&"center"in e&&t.Point.isPoint(e.center)&&"radius"in e&&"number"==typeof e.radius}class PresentationState{static combine(e,r,i=null){return{opacity:(e.opacity??1)*(r.opacity??1),transformMatrix:i??t.Matrix2D.multiply(r.transformMatrix,e.transformMatrix),dashArray:e.dashArray??r.dashArray,fill:e.fill??r.fill,lineCap:e.lineCap??r.lineCap,lineJoin:e.lineJoin??r.lineJoin,lineWidth:e.lineWidth??r.lineWidth,stroke:e.stroke??r.stroke}}}function l(t){return s(t)&&("fill"in t||"transformMatrix"in t||"stroke"in t||"lineJoin"in t||"dashArray"in t||"lineWidth"in t||"opacity"in t||"lineCap"in t)}function c(t){return s(t)&&"pathData"in t}function h(t){return s(t)&&"childDrawables"in t&&!e.Utils.isNullOrEmpty(t.childDrawables)}function d(t){return s(t)&&"text"in t&&"string"==typeof t.text}function p(t){return s(t)&&"src"in t&&"string"==typeof t.src}class UI2DEvent extends e.CustomUIEvent{constructor(t,e,r,i){super(t,e,r),this.#t=i}#t;get transformMatrix(){return this.#t}project(e={x:this.screenX,y:this.screenY}){return t.Matrix2D.multiply(e,this.#t)}}class Shape{static empty(){return{pathData:"",vertices:[],boundingRect:{x:0,y:0,width:0,height:0}}}}class DragEvent extends UI2DEvent{}class DrawableEvent extends UI2DEvent{constructor(t,e,r,i){super(t,{detail:e,bubbles:!0,cancelable:!0},r,i)}}class StageEvent extends UI2DEvent{constructor(t,e,r,i=e.transformMatrix){super(t,{detail:e,bubbles:!0,cancelable:!0},r,i)}}var u=Object.freeze({__proto__:null,DragEvent:DragEvent,DrawableEvent:DrawableEvent,PresentationState:PresentationState,Shape:Shape,StageEvent:StageEvent,UI2DEvent:UI2DEvent,isDrawable:i,isGroup:h,isImage:p,isLinearGradient:a,isPresentationObject:l,isRadialGradient:o,isShape:c,isText:d,isUiObject:s}),m=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};const v=/^\s*[xX]\s*([Mm](in|ax|id))\s*[yY]\s*([Mm](in|ax|id))(\s+(none|slice|meet))?\s*$/,g={convert:t=>{const e=v.exec(t);return e&&e.length>=4?{x:e[1].toLowerCase(),y:e[3].toLowerCase(),slice:"slice"===e[6]}:"none"},convertBack:t=>e.Utils.isNull(t)||"string"==typeof t?"none":`xM${t.x.substring(1)}YM${t.y.substring(1)} ${t.slice?"slice":"meet"}`},f={panControl:!0,zoomControl:!0,panModifiers:[e.EventKeyModifier.AltKey],zoomModifiers:[e.EventKeyModifier.AltKey],clickModifiers:[]};function y(t){const r=t instanceof x?t.options:{};return e.Utils.extend({},f,r)}let x=class Pacem2DElement extends e.Components.PacemItemsContainerElement{constructor(){super(...arguments),this.#t=t.Matrix2D.identity,this.#e=f,this._resizeHandler=t=>{this.#r={x:t.detail.left,y:t.detail.top,width:t.detail.width,height:t.detail.height};const r=this.adapter;e.Utils.isNull(r)||this._invalidateSize()},this._zoomHandler=t=>{if(!t.isTrusted)return;const r=this.#e;if(r.zoomControl&&e.CustomEventUtils.matchModifiers(t,r.zoomModifiers)){e.avoidHandler(t);const r=1+.1*(t.deltaY<0?-1:1),i=e.Utils.offsetRect(t.currentTarget),s={x:t.clientX,y:t.clientY};this._zoom(r,i,s)}},this._panHandler=t=>{const r=this.#i,i=this._getPanPoint(t);if(!e.Utils.isNullOrEmpty(r&&r.point)&&!e.Utils.isNull(i)){e.avoidHandler(t);const s=r.factor,n=r.box,a=r.point;this.viewbox={x:n.x-s*(i.x-a.x),y:n.y-s*(i.y-a.y),width:n.width,height:n.height}}},this._panStartHandler=t=>{if(!this.#e.panControl)return;if(!t.isTrusted)return;const r=this.#r,i=this.viewbox||{x:0,y:0,width:r.width,height:r.height},s=this._getPanPoint(t);if(s){e.avoidHandler(t),this._stage.style.pointerEvents="none";const n=this._getActualAspectRatio(),a=i.width/r.width,o=i.height/r.height,l=n.slice?Math.min(a,o):Math.max(a,o);this.#i={point:s,box:i,factor:l}}},this._panEndHandler=t=>{this._stage.style.pointerEvents="",this.#i=null}}get stage(){return this._stage}snapshot(t,r,i){const s=this.adapter;return e.Utils.isNull(s)?Promise.resolve(null):s.snapshot(this,t,r,i)}#s;#t;get transformMatrix(){return this.#t}_transformMatrixScale(){const r=this.#r||e.Utils.offsetRect(this._stage);var i=this.#s||r;const s=this.viewbox||i,n=this.aspectRatio||"none",a="none"===n?"stretch":n.slice?"cover":"contain";return t.Rect.findTransform(s,i,a).a}validate(t){return t instanceof DrawableElement&&e.Utils.isNull(t.parent)}draw(t,r=!1){const i=this.adapter;if(!this.disabled&&!e.Utils.isNull(i)){let e=new CustomEvent("predraw",{cancelable:!0});this.dispatchEvent(e),e.defaultPrevented||(i.draw(this,t,r),this.dispatchEvent(new CustomEvent("draw")))}}_drawDebounced(t,r=!1){!e.Utils.isNull(t)&&h(t)?this.draw(t,r):this.draw(t)}requestDraw(t,e=!1){this._drawDebounced(t,e)}_buildUpDatasourceFromDOM(){this.datasource=(this.items||[]).slice()}#e;#r;_getActualAspectRatio(){const t=this.aspectRatio||"none";return{x:"none"===t?"mid":t.x,y:"none"===t?"mid":t.y,slice:"none"!==t&&t.slice}}_zoomFromValue(r){const i=this.#r;if(e.Utils.isNull(i))return;const s=i,n=this.#s||s,a=this.viewbox||n,o=this.aspectRatio||"none",l="none"===o?"stretch":o.slice?"cover":"contain",c=t.Rect.findTransform(a,s,l),h=t.Rect.findTransform(n,s,l),d=c.a/(h.a*r);this._zoom(d)}_zoom(t,r,i){e.Utils.isNull(r)&&(r=e.Utils.offsetRect(this._stage)),e.Utils.isNull(i)&&(i={x:r.x+.5*r.width,y:r.y+.5*r.height});const s=this.#r,n=this.viewbox||s,a=Math.min(n.width,n.height),o=a*t,l=a*t;if(o>0&&l>0){const t=this._getActualAspectRatio(),e=t.x,s=t.y,a=t.slice,c=n.width/n.height,h=a?Math.max(r.width,r.height):Math.min(r.width,r.height);let d,p;switch(e){case"mid":d=(o-n.width)*(i.x-r.x-.5*(r.width-h))/(h*c);break;case"max":d=(o-n.width)*(i.x-r.x-(r.width-h))/(h*c);break;default:d=(o-n.width)*(i.x-r.x)/(h*c)}switch(s){case"mid":p=(l-n.height)*(i.y-r.y-.5*(r.height-h))/(h*c);break;case"max":p=(l-n.height)*(i.y-r.y-(r.height-h))/(h*c);break;default:p=(l-n.height)*(i.y-r.y)/(h*c)}const u=n.x-d,m=n.y-p;this.viewbox={x:u,y:m,width:o,height:l}}}_getPanPoint(t){const r=this.#e;return t instanceof MouseEvent&&e.CustomEventUtils.matchModifiers(t,r.panModifiers)?e.CustomEventUtils.getEventCoordinates(t).page:null}#i;_invalidateSize(){this.adapter.invalidateSize(this,this.#r);const t=this.#t;this.#t=this.adapter.getTransformMatrix(this),this.dispatchEvent(new e.PropertyChangeEvent({propertyName:"transformMatrix",currentValue:this.#t,oldValue:t})),this.zoom=this._transformMatrixScale(),this.dispatchEvent(new e.Components.ResizeEvent(this.#r))}viewActivatedCallback(){super.viewActivatedCallback();const t=this.adapter;e.Utils.isNull(t)||(t.initialize(this),this._invalidateSize(),this._drawDebounced());const r=this._resize;r.addEventListener(e.Components.ResizeEventName,this._resizeHandler,!1);const i=this._stage;r.target=i;const s={capture:!1,passive:!0};i.addEventListener("wheel",this._zoomHandler,!1),i.addEventListener("mousedown",this._panStartHandler,!1),i.addEventListener("touchstart",this._panStartHandler,s),window.addEventListener("mousemove",this._panHandler,!1),window.addEventListener("mouseup",this._panEndHandler,!1),window.addEventListener("touchmove",this._panHandler,s),window.addEventListener("touchend",this._panEndHandler,s)}propertyChangedCallback(t,r,i,s){switch(super.propertyChangedCallback(t,r,i,s),t){case"adapter":e.Utils.isNull(r)||r.dispose(this),e.Utils.isNull(i)||(i.initialize(this),this._invalidateSize(),this._drawDebounced());break;case"aspectRatio":e.Utils.isNull(this.adapter)||this._invalidateSize();break;case"viewbox":e.Utils.isNull(this.adapter)||this._invalidateSize(),this.#s??=this.viewbox||null;break;case"items":this._buildUpDatasourceFromDOM();break;case"zoom":i!==this._transformMatrixScale()&&this._zoomFromValue(i);break;case"options":this.#e=y(this);break;case"disabled":case"datasource":this._drawDebounced()}}disconnectedCallback(){const t=this._resize,r=this._stage;e.Utils.isNull(t)||t.removeEventListener(e.Components.ResizeEventName,this._resizeHandler,!1),e.Utils.isNull(r)||(r.removeEventListener("wheel",this._zoomHandler,!1),r.removeEventListener("mousedown",this._panStartHandler,!1),r.removeEventListener("touchstart",this._panStartHandler),window.removeEventListener("mousemove",this._panHandler,!1),window.removeEventListener("mouseup",this._panEndHandler,!1),window.removeEventListener("touchmove",this._panHandler),window.removeEventListener("touchend",this._panEndHandler)),e.Utils.isNull(this.adapter)||this.adapter.dispose(this),super.disconnectedCallback()}};m([e.Watch({converter:e.PropertyConverters.Element})],x.prototype,"adapter",void 0),m([e.Watch({reflectBack:!0,converter:e.PropertyConverters.Rect})],x.prototype,"viewbox",void 0),m([e.Watch({emit:!1,reflectBack:!0,converter:g})],x.prototype,"aspectRatio",void 0),m([e.Watch({emit:!1,converter:e.PropertyConverters.Json})],x.prototype,"datasource",void 0),m([e.Watch({emit:!1,converter:e.PropertyConverters.Json})],x.prototype,"options",void 0),m([e.Watch({converter:e.PropertyConverters.Number})],x.prototype,"zoom",void 0),m([e.ViewChild("."+e.PCSS+"-2d")],x.prototype,"_stage",void 0),m([e.ViewChild(e.P+"-resize")],x.prototype,"_resize",void 0),m([e.Debounce(!0)],x.prototype,"_drawDebounced",null),x=m([e.CustomElement({tagName:e.P+"-"+r,shadow:!0,template:`<${e.P}-resize watch-position="true"></${e.P}-resize><div class="${e.PCSS}-2d" part="container"></div><slot></slot>`})],x);var b=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};class DrawableElement extends e.Components.PacemCrossItemsContainerElement{validate(t){return!1}findContainer(){return this.parent||this.stage}get stage(){return this._scene=this._scene||e.CustomElementUtils.findAncestorOfType(this,x)}get parent(){return this._drawableParent=this._drawableParent||e.CustomElementUtils.findAncestor(this,t=>t instanceof DrawableElement)}disconnectedCallback(){delete this._scene,delete this._drawableParent,super.disconnectedCallback()}propertyChangedCallback(t,e,r,i){if(super.propertyChangedCallback(t,e,r,i),!i&&"hide"===t)this.stage?.draw(this)}}b([e.Watch({emit:!1,reflectBack:!0,converter:e.PropertyConverters.String})],DrawableElement.prototype,"tag",void 0),b([e.Watch({emit:!1,converter:e.PropertyConverters.Boolean})],DrawableElement.prototype,"inert",void 0);var E=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};const w=Math.PI/180;class UiElement extends DrawableElement{#t=t.Matrix2D.identity;viewActivatedCallback(){super.viewActivatedCallback(),this._updateTransformMatrix()}propertyChangedCallback(t,e,r,i){if(super.propertyChangedCallback(t,e,r,i),!i)switch(t){case"rotate":case"scaleX":case"scaleY":case"translateX":case"translateY":this._updateTransformMatrix();case"opacity":this.stage?.draw(this)}}_updateTransformMatrix(){let t=w*(this.rotate??0),e=Math.cos(t),r=Math.sin(t),i=(this.scaleX??1)*e,s=-r,n=r,a=(this.scaleY??1)*e,o=this.translateX??0,l=this.translateY??0;this.#t={a:i,b:s,c:n,d:a,e:o,f:l}}get transformMatrix(){const t=this.#t;return{a:t.a,b:t.b,c:t.c,d:t.d,e:t.e,f:t.f}}}E([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],UiElement.prototype,"rotate",void 0),E([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],UiElement.prototype,"scaleX",void 0),E([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],UiElement.prototype,"scaleY",void 0),E([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],UiElement.prototype,"translateX",void 0),E([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],UiElement.prototype,"translateY",void 0),E([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],UiElement.prototype,"opacity",void 0);class PresentationElement extends UiElement{propertyChangedCallback(t,r,i,s){if(super.propertyChangedCallback(t,r,i,s),!s)switch(t){case"stroke":case"lineWidth":case"lineJoin":case"lineCap":case"dashArray":case"fill":e.Utils.isNull(this.stage)||this.stage.draw(this)}}}E([e.Watch({emit:!1,converter:e.PropertyConverters.String})],PresentationElement.prototype,"stroke",void 0),E([e.Watch({emit:!1,converter:e.PropertyConverters.String})],PresentationElement.prototype,"fill",void 0),E([e.Watch({emit:!1,converter:{convert:t=>t?.split(",").map(t=>parseInt(t)).filter(t=>!Number.isNaN(t)),convertBack:t=>t?.join(",")}})],PresentationElement.prototype,"dashArray",void 0),E([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],PresentationElement.prototype,"lineWidth",void 0),E([e.Watch({emit:!1,converter:e.PropertyConverters.String})],PresentationElement.prototype,"lineJoin",void 0),E([e.Watch({emit:!1,converter:e.PropertyConverters.String})],PresentationElement.prototype,"lineCap",void 0);class ShapeElement extends PresentationElement{propertyChangedCallback(t,e,r,i){if(super.propertyChangedCallback(t,e,r,i),!i&&"data"===t)this.stage?.draw(this)}viewActivatedCallback(){super.viewActivatedCallback(),this.recomputeShape()}recomputeShape(){const{pathData:t,vertices:e,boundingRect:r}=this.getShapeGeometry();this.#n=e,this.#a=r,this.data=t}get pathData(){return this.data}#a;get boundingRect(){return this.#a}#n;get vertices(){return this.#n}}E([e.Watch({emit:!1,converter:e.PropertyConverters.String})],ShapeElement.prototype,"data",void 0);var N=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};let _=class PacemGroupElement extends PresentationElement{validate(t){return t instanceof DrawableElement&&t.parent===this}#o=[];get childDrawables(){return this.#o}propertyChangedCallback(t,r,i,s){switch(super.propertyChangedCallback(t,r,i,s),t){case"items":case"datasource":this.#o=i||[];const t=this.stage;e.Utils.isNull(t)||t.draw(this,!0)}}};N([e.Watch({emit:!1})],_.prototype,"datasource",void 0),_=N([e.CustomElement({tagName:e.P+"-"+"2d-group"})],_);var U,P,C=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};function D(e,r,i,s,n){for(s??=0,n??=0,s%=360,n%=360;s<0;)s+=360;for(;n<s;)n+=360;return(s-n).isCloseTo(0)?function(t,e,r){const i=2*e,s=t.x,n=t.y;return{pathData:`M ${s} ${n} m ${-e},0 a ${e},${r} 0 1,1 ${i},0 a ${e},${r} 0 1,1 ${-i},0`,vertices:[],boundingRect:{x:s-e,y:n-r,width:2*e,height:2*r}}}(e,r,i):function(e,r,i,s,n){const a=Math.PI/180,o=a*s,l=a*n,c=t=>r*i/Math.sqrt(Math.pow(Math.cos(t)*i,2)+Math.pow(Math.sin(t)*r,2)),h=c(o),d=c(l),p=(t,e)=>({x:t*Math.cos(e),y:t*Math.sin(e)}),u=p(h,o),m=p(d,l),v={x:e.x+u.x,y:e.y+u.y},g={x:e.x+m.x,y:e.y+m.y};let f=t.Rect.expand(e,v,g);n<s&&(n+=360),(s<=0&&n>0||n>=360)&&(f=t.Rect.expand(f,{x:e.x+r,y:e.y})),(s<=90&&n>90||n>=450)&&(f=t.Rect.expand(f,{x:e.x,y:e.y+i})),(s<=180&&n>180||n>=540)&&(f=t.Rect.expand(f,{x:e.x-r,y:e.y})),(s<=270&&n>270||n>=630)&&(f=t.Rect.expand(f,{x:e.x,y:e.y-i}));const y=l-o>Math.PI?"1":"0";return{pathData:`M ${v.x} ${v.y} A ${r},${i} 0 ${y},1 ${g.x},${g.y} L ${e.x},${e.y} Z`,vertices:[v,g],boundingRect:f}}(e,r,i,s,n)}let S=U=class PacemEllipseElement extends ShapeElement{propertyChangedCallback(t,e,r,i){if(super.propertyChangedCallback(t,e,r,i),!i)switch(t){case"center":case"rx":case"ry":case"start":case"end":this.recomputeShape()}}getPathData(){const t=this.rx,r=this.ry,i=this.center,s=this.start??0,n=this.end??0;return e.Utils.isNull(i)||e.Utils.isNull(t)||e.Utils.isNull(r)?null:U.getPathData(i,t,r,s,n)}getShapeGeometry(){return D(this.center??{x:0,y:0},this.rx??0,this.ry??0,this.start,this.end)}static getPathData(t={x:NaN,y:NaN},e=NaN,r=NaN,i,s){const{pathData:n}=D(t,e,r,i,s);return n}};C([e.Watch({emit:!1,converter:e.PropertyConverters.Point})],S.prototype,"center",void 0),C([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],S.prototype,"rx",void 0),C([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],S.prototype,"ry",void 0),C([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],S.prototype,"start",void 0),C([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],S.prototype,"end",void 0),S=U=C([e.CustomElement({tagName:e.P+"-"+"2d-ellipse"})],S);let M=P=class PacemCircleElement extends ShapeElement{propertyChangedCallback(t,e,r,i){if(super.propertyChangedCallback(t,e,r,i),!i)switch(t){case"center":case"radius":case"start":case"end":this.recomputeShape()}}getPathData(){const t=this.radius,r=this.center;return e.Utils.isNull(r)||e.Utils.isNull(t)?null:P.getPathData(r,t,this.start,this.end)}getShapeGeometry(){const t=this.center??{x:0,y:0},e=this.radius??0;return D(t,e,e,this.start,this.end)}static getPathData(t={x:NaN,y:NaN},e=NaN,r,i){return S.getPathData(t,e,e,r,i)}};C([e.Watch({emit:!1,converter:e.PropertyConverters.Point})],M.prototype,"center",void 0),C([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],M.prototype,"radius",void 0),C([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],M.prototype,"start",void 0),C([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],M.prototype,"end",void 0),M=P=C([e.CustomElement({tagName:e.P+"-"+"2d-circle"})],M);var A,k=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};function $(t){const e=t[2],r=t[4]??e,i="cut"===t[6]?O.Cut:O.Rounded;return{rx:R(e),ry:R(r),type:i}}function R(t){return{value:parseFloat(t),unit:t.endsWith("%")?"pct":"u"}}function T(t){return`${t.value}${"pct"===t.unit?"%":""}`}const W=/(([\d\.]+%?)(\s*,?\s*([\d\.]+%?))?(\s+(cut|round))?)/g;var O;!function(t){t.Rounded="rounded",t.Cut="cut"}(O||(O={}));let H=A=class PacemRectElement extends ShapeElement{propertyChangedCallback(t,e,r,i){super.propertyChangedCallback(t,e,r,i),i||"x"!==t&&"y"!==t&&"w"!==t&&"h"!==t&&"r"!==t&&"cornerType"!==t||this.recomputeShape()}getPathData(){const t=this.x,r=this.y,i=this.w,s=this.h;let n=this.r??{rx:{value:0},ry:{value:0},type:O.Rounded};return e.Utils.isArray(n)||(n=[n,n,n,n]),n=n.map(t=>"number"==typeof t?{rx:{value:t},ry:{value:t},type:this.cornerType}:t),e.Utils.isNull(t)||e.Utils.isNull(r)||e.Utils.isNull(i)||e.Utils.isNull(s)?null:A.getPathData(t,r,i,s,n)}getShapeGeometry(){const t=this.x,e=this.y,r=t+this.w,i=e+this.h;return{pathData:this.getPathData(),vertices:[{x:t,y:e},{x:r,y:e},{x:r,y:i},{x:t,y:i}],boundingRect:{x:t,y:e,width:this.w,height:this.h}}}static getPathData(t=NaN,r=NaN,i=NaN,s=NaN,n=null){if(!n)return`M ${t} ${r} h ${i} v ${s} h ${-i} z`;e.Utils.isArray(n)||(n=[n,n,n,n]);const a=n[0],o=n[1],l=n[2],c=n[3],h=t=>"pct"===t.unit?.01*t.value*i:t.value,d=t=>"pct"===t.unit?.01*t.value*s:t.value,p=h(a.rx),u=d(a.ry),m=h(o.rx),v=d(o.ry),g=h(l.rx),f=d(l.ry),y=h(c.rx),x=d(c.ry);let b=`M ${t},${r+u}`;if("cut"===a.type)b+=` l ${p},${-u}`;else b+=` a ${p} ${u} 0 0 1 ${p} ${-u}`;if(b+=" h "+(i-p-m),"cut"===o.type)b+=` l ${m},${v}`;else b+=` a ${m} ${v} 0 0 1 ${m} ${v}`;if(b+=" v "+(s-v-f),"cut"===l.type)b+=` l ${-g},${f}`;else b+=` a ${g} ${f} 0 0 1 ${-g} ${f}`;if(b+=" h "+-(i-g-y),"cut"===c.type)b+=` l ${-y},${-x}`;else b+=` a ${y} ${x} 0 0 1 ${-y} ${-x}`;return b+" z"}};k([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],H.prototype,"x",void 0),k([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],H.prototype,"y",void 0),k([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],H.prototype,"w",void 0),k([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],H.prototype,"h",void 0),k([e.Watch({emit:!1,converter:{convert:t=>function(t){let e;const r=[];for(;e=W.exec(t);)r.push(e);switch(r.length){case 1:const t=$(r[0]);return[t,t,t,t];case 4:return[$(r[0]),$(r[1]),$(r[2]),$(r[3])];default:return null}}(t),convertBack:t=>function(t){const e=t[0],r=t[1],i=t[2],s=t[3];return`${T(e.rx)},${T(e.ry)} ${T(r.rx)},${T(r.ry)} ${T(i.rx)},${T(i.ry)} ${T(s.rx)},${T(s.ry)}`}(t)}})],H.prototype,"r",void 0),k([e.Watch({emit:!1,converter:e.PropertyConverters.String})],H.prototype,"cornerType",void 0),H=A=k([e.CustomElement({tagName:e.P+"-"+"2d-rect"})],H);var L,I=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};let z=L=class PacemLineElement extends ShapeElement{propertyChangedCallback(t,e,r,i){if(super.propertyChangedCallback(t,e,r,i),!i)switch(t){case"from":case"to":this.recomputeShape()}}getShapeGeometry(){const t=this.from,r=this.to;if(e.Utils.isNull(t)||e.Utils.isNull(r))return Shape.empty();const i=t.x,s=t.y,n=r.x,a=r.y,o={x:Math.min(i,n),y:Math.min(s,a),width:Math.abs(i-n),height:Math.abs(s-a)};return{pathData:this.getPathData(),vertices:[t,r],boundingRect:o}}getPathData(){const t=this.from,r=this.to;return e.Utils.isNull(t)||e.Utils.isNull(r)?null:L.getPathData(t,r)}static getPathData(t={x:NaN,y:NaN},e={x:NaN,y:NaN}){return`M ${t.x} ${t.y} L ${e.x} ${e.y}`}};I([e.Watch({emit:!1,converter:e.PropertyConverters.Point})],z.prototype,"from",void 0),I([e.Watch({emit:!1,converter:e.PropertyConverters.Point})],z.prototype,"to",void 0),z=L=I([e.CustomElement({tagName:e.P+"-"+"2d-line"})],z);var j=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};let G=class PacemPathElement extends ShapeElement{constructor(){super(...arguments),this.getPathData=()=>this.d}propertyChangedCallback(t,e,r,i){super.propertyChangedCallback(t,e,r,i),"d"!==t||i||this.recomputeShape()}getShapeGeometry(){return{pathData:this.getPathData(),boundingRect:null,vertices:[]}}};j([e.Watch({emit:!1,converter:e.PropertyConverters.String})],G.prototype,"d",void 0),G=j([e.CustomElement({tagName:e.P+"-"+"2d-path"})],G);var V,B=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};let F=V=class PacemPolygonElement extends ShapeElement{propertyChangedCallback(t,e,r,i){if(super.propertyChangedCallback(t,e,r,i),!i)switch(t){case"radius":case"starIndent":case"sides":this.recomputeShape()}}getPathData(){const t=this.sides,r=this.radius,i=this.center;return e.Utils.isNull(t)||e.Utils.isNull(r)?null:V.getPathData(i,r,t,this.starIndent)}getShapeGeometry(){const t=this.center??{x:0,y:0},e=this.radius??0,r=this.sides??3,i=this.starIndent;return r<3?Shape.empty():V.getShapeGeometry(t,e,r,i)}static getShapeGeometry(t,e,r,i=0){const s={x:t.x,y:t.y-e};let n=`M ${s.x} ${s.y}`;const a=[s],o=2*Math.PI/r,l=.5*o,c=i>0,h=e*Math.cos(l);for(let s=1;s<r;s++){const r=s*o,d=t.x+Math.sin(r)*e,p=t.y-Math.cos(r)*e;if(c){const e=h*(1-i),s=r-l,o=t.x+Math.sin(s)*e,c=t.y-Math.cos(s)*e;n+=` L ${o} ${c} L ${d} ${p}`,a.push({x:o,y:c})}else n+=` L ${d} ${p}`;a.push({x:d,y:p})}if(c){const e=h*(1-i),r=2*Math.PI-l,s=t.x+Math.sin(r)*e,o=t.y-Math.cos(r)*e;n+=` L ${s} ${o}`,a.push({x:s,y:o})}a.push(s);const d=2*e;return{pathData:n+" Z",vertices:a,boundingRect:{x:s.x-e,y:s.y,width:d,height:d}}}static getPathData(t,e,r,i=0){const{pathData:s}=V.getShapeGeometry(t,e,r,i);return s}};B([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],F.prototype,"sides",void 0),B([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],F.prototype,"radius",void 0),B([e.Watch({emit:!1,converter:e.PropertyConverters.Point})],F.prototype,"center",void 0),B([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],F.prototype,"starIndent",void 0),F=V=B([e.CustomElement({tagName:e.P+"-"+"2d-polygon"})],F);var J,Y=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};const X={convert:e=>{const r=t.parseAsNumericalArray(e);if(r.length%2==0){const t=[];for(let e=0;e<r.length;e+=2)t.push({x:r[e],y:r[e+1]});return t}return JSON.parse(e)},convertBack:t=>JSON.stringify(t)};let q=J=class PacemPolylineElement extends ShapeElement{propertyChangedCallback(t,e,r,i){if(super.propertyChangedCallback(t,e,r,i),!i)switch(t){case"points":case"closed":this.recomputeShape()}}static getShapeGeometry(t,r){if(e.Utils.isNullOrEmpty(t))return Shape.empty();let i="",s=Number.MAX_VALUE,n=Number.MAX_VALUE,a=Number.MIN_VALUE,o=Number.MIN_VALUE;for(let e=0;e<t.length;e++){const{x:r,y:l}=t[e];i+=`${0===e?"M":"L"} ${r} ${l} `,s=Math.min(s,r),a=Math.max(a,r),n=Math.min(n,l),o=Math.max(o,l)}return r&&(i+="Z"),{pathData:i,vertices:t,boundingRect:{x:s,y:n,width:a-s,height:o-n}}}getShapeGeometry(){return J.getShapeGeometry(this.points,this.closed)}getPathData(){const{pathData:t}=this.getShapeGeometry();return t}static getPathData(t,e){const{pathData:r}=J.getShapeGeometry(t,e);return r}};Y([e.Watch({emit:!1,converter:X})],q.prototype,"points",void 0),Y([e.Watch({emit:!1,converter:e.PropertyConverters.Boolean})],q.prototype,"closed",void 0),q=J=Y([e.CustomElement({tagName:e.P+"-"+"2d-polyline"})],q);var K=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};let Z=class PacemImageElement extends UiElement{propertyChangedCallback(t,e,r,i){if(super.propertyChangedCallback(t,e,r,i),!i)switch(t){case"src":case"x":case"y":case"width":case"height":this.stage?.draw(this)}}};K([e.Watch({emit:!1,converter:e.PropertyConverters.String})],Z.prototype,"src",void 0),K([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],Z.prototype,"x",void 0),K([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],Z.prototype,"y",void 0),K([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],Z.prototype,"width",void 0),K([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],Z.prototype,"height",void 0),Z=K([e.CustomElement({tagName:e.P+"-"+"2d-image"})],Z);var Q=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};let tt=class PacemTextElement extends UiElement{propertyChangedCallback(t,r,i,s){if(!s)switch(t){case"text":case"color":case"fontFamily":case"fontSize":case"fontWeight":case"fontStyle":case"anchor":e.Utils.isNull(this.stage)||this.stage.draw(this)}}};Q([e.Watch({emit:!1,converter:e.PropertyConverters.String})],tt.prototype,"text",void 0),Q([e.Watch({emit:!1,converter:e.PropertyConverters.String})],tt.prototype,"color",void 0),Q([e.Watch({emit:!1,converter:e.PropertyConverters.String})],tt.prototype,"fontFamily",void 0),Q([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],tt.prototype,"fontSize",void 0),Q([e.Watch({emit:!1,converter:e.PropertyConverters.String})],tt.prototype,"fontWeight",void 0),Q([e.Watch({emit:!1,converter:e.PropertyConverters.String})],tt.prototype,"fontStyle",void 0),Q([e.Watch({emit:!1,converter:e.PropertyConverters.Point})],tt.prototype,"anchor",void 0),Q([e.Watch({emit:!1,converter:e.PropertyConverters.String})],tt.prototype,"textAnchor",void 0),tt=Q([e.CustomElement({tagName:e.P+"-"+"2d-text"})],tt);class AdapterUtils{static stageDispatch(t,e,r){t instanceof EventTarget&&t.dispatchEvent(new StageEvent("stage"+e,t,r,t.transformMatrix))}static isValidViewbox(r){return!e.Utils.isNullOrEmpty(r)&&t.Rect.isRect(r)&&Number.isFinite(r.x)&&Number.isFinite(r.y)&&Number.isFinite(r.width)&&Number.isFinite(r.height)}static itemDispatch(t,r,i){if(e.Utils.isNull(t?.stage))return!1;var s,n,a;i instanceof Event?n=i:s={item:t,offset:i},"string"==typeof r?a=r:(a=r.type,n=r.originalEvent);const o=t.stage.transformMatrix,l=i instanceof Event?new DrawableEvent("item"+a,t,n,o):new DragEvent("item"+a,{detail:s,cancelable:a===e.UI.DragDropEventType.Init||a===e.UI.DragDropEventType.Drag},n,o);var c=!1;if(t instanceof EventTarget){const r=i instanceof Event?new DrawableEvent(a,t,n,o):new DragEvent(a,{detail:s,cancelable:a===e.UI.DragDropEventType.Init||a===e.UI.DragDropEventType.Drag},n,o);t.dispatchEvent(r),c=r.defaultPrevented}return t.stage.dispatchEvent(l),c||l.defaultPrevented}}class Pacem2DAdapterElement extends e.PacemEventTarget{constructor(){super(...arguments),this.DefaultShapeValues={stroke:"#000",lineWidth:1,fill:"#fff"}}snapshotElement(t,r,i,s){const n=!e.Utils.isNullOrEmpty(r),a=i??(n?"image/jpeg":null),o=s??(n?.9:null);return e.Utils.snapshotElement(t,r,a,o)}}var et=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};const rt="pacem:2d-canvas-scene",it="pacem:2d-parent-matrix",st=e.CustomElementUtils.setAttachedPropertyValue,nt=e.CustomElementUtils.getAttachedPropertyValue;function at(t){return"none"===t||e.Utils.isNullOrEmpty(t)}function ot(t,r){return e.Utils.isNull(t)?r:t}let lt=class PacemCanvasAdapterElement extends Pacem2DAdapterElement{constructor(){super(...arguments),this._pointer={page:{x:Number.NaN,y:Number.NaN},screen:{x:Number.NaN,y:Number.NaN},client:{x:Number.NaN,y:Number.NaN}},this._dragInitHandler=r=>{const i=this._hitTarget;if(e.Utils.isNull(i)||!s(i)||!i.draggable)return void r.preventDefault();const n=r.detail,a=i,o=i.transformMatrix??t.Matrix2D.identity,l=nt(i,it,t.Matrix2D.identity);n.data={item:a,initialTransformMatrix:o,parentMatrix:l};AdapterUtils.itemDispatch(a,r,{x:0,y:0})&&r.preventDefault()},this._draggingHandler=t=>{e.avoidHandler(t),this._dragging=!0;const r=t.detail,i=r.data,s=r.currentPosition.x-r.origin.x,n=r.currentPosition.y-r.origin.y,a={x:s*i.parentMatrix.a+i.initialTransformMatrix.e,y:n*i.parentMatrix.d+i.initialTransformMatrix.f},o=i.item.stage.transformMatrix;if(!AdapterUtils.itemDispatch(i.item,t,{x:s*o.a+o.e,y:n*o.d+o.f}))if(i.item instanceof UiElement)i.item.translateX=a.x,i.item.translateY=a.y;else{const t=i.initialTransformMatrix,r={a:t.a,b:t.b,c:t.c,d:t.d,e:a.x,f:a.y};e.Utils.extend(i.item,{transformMatrix:r})}},this._dragEndHandler=t=>{this._dragging=!1;const e=t.detail.data,r=e.item.transformMatrix;AdapterUtils.itemDispatch(e.item,t,{x:r.e,y:r.f})},this._mouseleaveHandler=t=>{if(this._dragging)return;const r=this._hitTarget;if(e.Utils.isNull(r))return;this._scopeEvent=t;const i={x:Number.NaN,y:Number.NaN};this._pointer={page:i,screen:i,client:i};const s=t.srcElement,n=nt(s,rt);this._requestDraw(n)},this._mousemoveHandler=t=>{this._scopeEvent=t,this._pointer=e.CustomEventUtils.getEventCoordinates(t);const r=t.srcElement,i=nt(r,rt);this._requestDraw(i),this._dragging||e.Utils.isNull(this._hitTarget)||AdapterUtils.stageDispatch(i,"move",t)},this._mouseDownUpHandler=t=>{this._scopeEvent=t,this._pointer=e.CustomEventUtils.getEventCoordinates(t);const r=t.target;if(r instanceof HTMLCanvasElement){const i=nt(r,rt),s=this._hitTarget,n=t.type.replace(/^(mouse|touch)/,""),a="end"===n?"click":n,o=y(i);e.CustomEventUtils.matchModifiers(t,o.clickModifiers)&&(e.Utils.isNull(s)||s.stage!==i?AdapterUtils.stageDispatch(i,a,t):AdapterUtils.itemDispatch(s,a,t))}},this._scenes=new WeakMap,this._handles=new WeakMap}snapshot(t,e,r,i){const s=this._scenes;if(s.has(t)){const n=s.get(t).context.canvas;return this.snapshotElement(n,e,r,i)}return Promise.resolve(null)}getCanvas(t){const e=this._scenes;if(e.has(t)){return e.get(t).context.canvas}return null}_getScreenInverseMatrix(e,r){return t.Matrix2D.invert({a:e.a,b:e.b,c:e.c,d:e.d,e:e.e+r.x,f:e.f+r.y})}getTransformMatrix(e){const r=this._scenes;return r.has(e)?r.get(e).screenInverseMatrix:t.Matrix2D.identity}#l;viewActivatedCallback(){super.viewActivatedCallback();const t=this.#l=document.createElement(e.P+"-drag-drop");t.mode=e.UI.DragDataMode.Copy,t.dropBehavior=e.UI.DropBehavior.None,t.spillBehavior=e.UI.DropTargetMissedBehavior.None;const r=document.createElement("div");r.hidden=!0,t.floater=r;e.CustomElementUtils.findAncestorShell(this).appendChild(t),t.addEventListener(e.UI.DragDropEventType.Init,this._dragInitHandler,!1),t.addEventListener(e.UI.DragDropEventType.Drag,this._draggingHandler,!1),t.addEventListener(e.UI.DragDropEventType.End,this._dragEndHandler,!1)}disconnectedCallback(){const t=this.#l;e.Utils.isNull(t)||(t.removeEventListener(e.UI.DragDropEventType.Init,this._dragInitHandler,!1),t.removeEventListener(e.UI.DragDropEventType.Drag,this._draggingHandler,!1),t.removeEventListener(e.UI.DragDropEventType.End,this._dragEndHandler,!1),t.remove()),super.disconnectedCallback()}invalidateSize(r,i){const s=this._scenes;if(!e.Utils.isNull(r)&&!e.Utils.isNullOrEmpty(i)&&s.has(r)){const n=s.get(r),a=n.context;a.canvas.width=i.width,a.canvas.height=i.height;const o=n.offset=e.Utils.offsetRect(a.canvas),l={x:0,y:0,width:i.width,height:i.height},c=r.aspectRatio,h=r.viewbox;if(AdapterUtils.isValidViewbox(h)){let e="contain",r="center",i="middle";if("object"==typeof c){switch(e=c.slice?"cover":"contain",c.x){case"min":r="left";break;case"max":r="right"}switch(c.y){case"min":i="top";break;case"max":i="bottom"}}const s=t.Rect.findTransform({x:0,y:0,width:h.width,height:h.height},l,e,r,i),a=t.Matrix2D.translate(s,{x:-s.a*h.x,y:-s.a*h.y});n.transformMatrix=a,n.screenInverseMatrix=this._getScreenInverseMatrix(a,o)}else n.transformMatrix=t.Matrix2D.identity}this._requestDraw(r)}getHitTarget(t){const r=this._hitTarget;return e.Utils.isNull(r)||r.stage!==t?null:r}initialize(r){if(e.Utils.isNull(r))throw"Provided scene is null or undefined.";const i=this._scenes,s=this.#l;if(i.has(r)){const t=i.get(r).context.canvas;return e.Utils.isNull(s)||s.register(t),t}const n=r.stage;n.innerHTML="";const a=document.createElement("canvas");a.setAttribute("part","stage"),st(a,rt,r);const o=a.getContext("2d");return a.addEventListener("mousemove",this._mousemoveHandler,!1),a.addEventListener("mouseleave",this._mouseleaveHandler,!1),a.addEventListener("touchstart",this._mouseDownUpHandler,{passive:!0}),a.addEventListener("touchmove",this._mouseDownUpHandler,{passive:!0}),a.addEventListener("touchend",this._mouseDownUpHandler,{passive:!0}),a.addEventListener("click",this._mouseDownUpHandler,!1),a.addEventListener("mousedown",this._mouseDownUpHandler,!1),a.addEventListener("mouseup",this._mouseDownUpHandler,!1),n.appendChild(a),i.set(r,{context:o,transformMatrix:t.Matrix2D.identity,offset:e.Utils.offsetRect(a),screenInverseMatrix:t.Matrix2D.identity}),e.Utils.isNull(s)||s.register(a),a}dispose(t){const r=this._scenes;if(r.has(t)){var i=r.get(t).context.canvas;const s=this.#l;e.Utils.isNull(s)||s.unregister(i),i.removeEventListener("click",this._mouseDownUpHandler,!1),i.removeEventListener("touchend",this._mouseDownUpHandler,!1),i.removeEventListener("mousedown",this._mouseDownUpHandler,!1),i.removeEventListener("mouseup",this._mouseDownUpHandler,!1),i.removeEventListener("touchstart",this._mouseDownUpHandler),i.removeEventListener("mouseleave",this._mouseleaveHandler,!1),i.removeEventListener("mousemove",this._mousemoveHandler,!1),i.remove(),r.delete(t)}}_requestDraw(t){const e=this._handles;e.has(t)&&cancelAnimationFrame(e.get(t));e.set(t,(()=>(this.draw(t),requestAnimationFrame(()=>{})))())}#c;draw(t){const r=this._scenes,i=this._handles;if(!e.Utils.isNull(t)){if(t.adapter!==this)return void(r.has(t)&&(r.delete(t),i.get(t)));if(!r.has(t))return void this.initialize(t);i.has(t)&&cancelAnimationFrame(i.get(t));const s=this._hitTarget,n=t.datasource||[];this._hitTarget=null;const a=r.get(t),o=a.context,l=o.canvas;this.#c=getComputedStyle(l),o.resetTransform(),o.clearRect(0,0,l.width,l.height);const c=a.transformMatrix;o.setTransform(c);const h=this._pointer,d=a.offset,p=Number.isNaN(h.page.x)||Number.isNaN(h.page.y)?null:{x:h.page.x-d.x,y:h.page.y-d.y};for(let e of n)this._draw(t,o,e,{transformMatrix:c},p);const u=this._hitTarget;u!=s&&(e.Utils.isNull(s)||(s instanceof Element&&s.dispatchEvent(new DrawableEvent("out",s,this._scopeEvent,c)),t.dispatchEvent(new DrawableEvent("itemout",s,this._scopeEvent,c))),e.Utils.isNull(u)||(u instanceof Element&&u.dispatchEvent(new DrawableEvent("over",u,this._scopeEvent,c)),t.dispatchEvent(new DrawableEvent("itemover",u,this._scopeEvent,c))))}}_draw(r,n,a,o,u){if(a.stage??=r,i(a)&&a.hide)return;let m;s(a)&&a.draggable&&!a.hide&&!a.inert&&st(a,it,n.getTransform().inverse()),s(a)&&(m=a.transformMatrix,e.Utils.isNull(m)||t.Matrix2D.isIdentity(m)||n.transform(m.a,m.b,m.c,m.d,m.e,m.f));let v=o;if(l(a)&&(v=PresentationState.combine(a,o,n.getTransform()),this._setPresentationState(n,v)),c(a)||a instanceof ShapeElement)this._drawShape(n,a,u);else if(d(a)||a instanceof tt)this._drawText(n,a,u);else if(p(a)||a instanceof Z)this._drawImage(n,a,u);else if(h(a)||a instanceof _)for(let t of a.childDrawables||[])this._draw(r,n,t,v,u);s(a)&&a.draggable&&!a.hide&&!a.inert&&st(a,"pacem:2d-world-matrix",n.getTransform().inverse()),this._setPresentationState(n,o)}_setPresentationState(t,r){if(t.setTransform(r.transformMatrix),e.Utils.isNullOrEmpty(r.stroke)||at(r.stroke)?t.strokeStyle="transparent":t.strokeStyle=r.stroke,e.Utils.isNullOrEmpty(r.lineWidth)?t.lineWidth=0:t.lineWidth=r.lineWidth,e.Utils.isNullOrEmpty(r.dashArray)?t.setLineDash([]):t.setLineDash(r.dashArray),e.Utils.isNullOrEmpty(r.lineCap)?t.lineCap="butt":t.lineCap=r.lineCap,e.Utils.isNullOrEmpty(r.lineJoin)?t.lineJoin="miter":t.lineJoin=r.lineJoin,"object"!=typeof r.fill||e.Utils.isNullOrEmpty(r.fill))e.Utils.isNullOrEmpty(r.fill)||"string"!=typeof r.fill||at(r.fill)?t.fillStyle="transparent":t.fillStyle=r.fill;else{const{stops:e}=r.fill;let i;if(a(r.fill)){const{start:e,end:s}=r.fill;i=t.createLinearGradient(e.x,e.y,s.x,s.y)}else{if(!o(r.fill))throw new Error("Unmanaged gradient type.");{const{center:e,radius:s}=r.fill;i=t.createRadialGradient(e.x,e.y,s,e.x,e.y,s)}}for(let t of e)i.addColorStop(t.offset,t.color);t.fillStyle=i}e.Utils.isNullOrEmpty(r.opacity)?t.globalAlpha=1:t.globalAlpha=r.opacity}_drawImage(t,r,i){const s="pacem:2d-canvas-imagesrc";let n=nt(r,s);const a=()=>{let s=n.naturalWidth,a=n.naturalHeight,o=r.width,l=r.height;if(o>0&&l>0||(o>0?l=a*o/s:l>0?o=s*l/a:(o=s,l=a)),!this._dragging&&!r.inert&&!e.Utils.isNull(i)){const e=new Path2D(`M ${r.x} ${r.y} h ${o} v ${l} H ${r.x} Z`);t.isPointInPath(e,i.x,i.y)&&(this._hitTarget=r)}t.globalAlpha=ot(r.opacity,1),t.drawImage(n,r.x,r.y,o,l)};e.Utils.isNull(n)?(n=new Image,n.src=r.src,n.onload=()=>{st(r,s,n),a()}):a()}_drawText(t,r,i){const s=this.DefaultShapeValues,n=t.fillStyle=ot(r.color,s.stroke);t.getTransform();const a=r.fontSize>0?`${r.fontSize}px`:this.#c.fontSize,o=r.fontStyle||this.#c.fontStyle,l=r.fontWeight||this.#c.fontWeight;t.font=`${o} ${l} ${a} ${r.fontFamily??this.#c.fontFamily}`,t.textAlign="middle"===r.textAnchor?"center":r.textAnchor,t.fillText(r.text,r.anchor.x,r.anchor.y),t.globalAlpha=ot(r.opacity,1);const c=!at(n);if(!this._dragging&&!r.inert&&!e.Utils.isNull(i)){const e=t.measureText(r.text),s=e.width,n=e.actualBoundingBoxAscent+e.actualBoundingBoxDescent,a=r.anchor.x-e.actualBoundingBoxLeft,o=r.anchor.y-e.actualBoundingBoxAscent,l=new Path2D(`M ${a} ${o} h ${s} v ${n} H ${a} z`);c&&t.isPointInPath(l,i.x,i.y)&&(this._hitTarget=r)}}_drawShape(t,r,i){if(e.Utils.isNullOrEmpty(r?.pathData))return;t.beginPath();const s="string"!=typeof t.fillStyle||!at(t.fillStyle),n="string"!=typeof t.strokeStyle||!at(t.strokeStyle);var a=new Path2D(r.pathData);this._dragging||r.inert||e.Utils.isNull(i)||(s&&t.isPointInPath(a,i.x,i.y)||n&&t.isPointInStroke(a,i.x,i.y))&&(this._hitTarget=r),n&&t.stroke(a),s&&t.fill(a);const o=!e.Utils.isNullOrEmpty(r.vertices)&&r.vertices.length>1,l=!e.Utils.isNull(r.markerEnd),c=!e.Utils.isNull(r.markerStart),h=!e.Utils.isNull(r.markerMid);if((l||h||c)&&(o||this.log(e.Logging.LogLevel.Warn,"Not enough vertices were explicited in order to make markers renderable.")),o){const e=t.getTransform();if(c){const e=r.markerEnd,i=r.vertices[1],s=r.vertices[0],n=Math.atan2(s.y-i.y,s.x-i.x);this._drawMarker(t,e,s,n)}if(h){const i=r.markerEnd;for(let s=1;s<r.vertices.length-1;s++){t.setTransform(e);const n=r.vertices[s],a=r.vertices[s+1],o=Math.atan2(a.y-n.y,a.x-n.x);this._drawMarker(t,i,a,o)}}if(l){t.setTransform(e);const i=r.markerEnd,s=r.vertices[r.vertices.length-2],n=r.vertices[r.vertices.length-1],a=Math.atan2(n.y-s.y,n.x-s.x);this._drawMarker(t,i,n,a)}}}_drawMarker(t,r,i,s){const n=this.DefaultShapeValues,a=r.ref?.x||0,o=r.ref?.y||0,l=(r.width||1)*t.lineWidth,c=(r.width||1)*t.lineWidth;let h=r.viewbox,d={x:0,y:0,width:l,height:c};e.Utils.isNull(h)&&(h=d);const p={a:d.width/h.width,d:d.height/h.height};t.translate(i.x,i.y),t.rotate(s),t.scale(p.a,p.d),t.translate(-a,-o),t.fillStyle=ot(r.fill,n.fill),t.strokeStyle=ot(r.stroke,n.stroke);const u=!at(r.fill),m=!at(r.stroke);var v=new Path2D(r.pathData);u&&t.fill(v),m&&t.stroke(v)}};lt=et([e.CustomElement({tagName:e.P+"-"+"2d-canvas-adapter"})],lt);var ct=function(t,e,r,i){var s,n=arguments.length,a=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,i);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,r,a):s(e,r))||a);return n>3&&a&&Object.defineProperty(e,r,a),a};const ht="http://www.w3.org/2000/svg",dt="pacem:2-svg-drawable",pt="pacem:2d-svg-stage",ut=e.CustomElementUtils.getAttachedPropertyValue,mt=e.CustomElementUtils.setAttachedPropertyValue,vt=e.CustomElementUtils.deleteAttachedPropertyValue;function gt(t,r){return e.Utils.isNull(t)?r:t}function ft(t,e,r){return r>=t.children.length?(t.appendChild(e),null):t.replaceChild(e,t.children.item(r))}let yt=class PacemSvgAdapterElement extends Pacem2DAdapterElement{constructor(){super(...arguments),this._hitTarget=null,this._dragInitHandler=e=>{const r=e.detail,i=r.element,s=ut(i,dt),n=s.stage.transformMatrix,a=s.transformMatrix??t.Matrix2D.identity;r.data={stageTransformMatrix:n,item:s,initialTransformMatrix:a};AdapterUtils.itemDispatch(s,e,{x:0,y:0})&&e.preventDefault()},this._draggingHandler=t=>{e.avoidHandler(t),this.#h=!0;const r=t.detail.element,i=t.detail.data,s=t.detail,n=(s.currentPosition.x-s.origin.x)*i.stageTransformMatrix.a,a=(s.currentPosition.y-s.origin.y)*i.stageTransformMatrix.d,o=n+i.initialTransformMatrix.e,l=a+i.initialTransformMatrix.f,c={x:n+i.stageTransformMatrix.e,y:a+i.stageTransformMatrix.f};if(!AdapterUtils.itemDispatch(i.item,t,c)){const t=i.initialTransformMatrix;r.style.transform=`matrix(${t.a},${t.b},${t.c},${t.d},${o},${l})`}},this._dragEndHandler=t=>{this.#h=!1;const r=t.detail,i=r.element,s=r.data,n=e.Utils.deserializeTransform(i.style),a={x:n.e,y:n.f};if(s.item instanceof UiElement)s.item.translateX=a.x,s.item.translateY=a.y;else{const t=s.initialTransformMatrix,r={a:t.a,b:t.b,c:t.c,d:t.d,e:a.x,f:a.y};e.Utils.extend(s.item,{transformMatrix:r})}i.style.transform="",AdapterUtils.itemDispatch(s.item,t,a)},this._mouseleaveHandler=t=>{if(this.#h)return;const r=this._hitTarget;e.Utils.isNull(r)||(this._hitTarget=null,e.Utils.isNull(r)||(this.#l.unregister(this._items.get(r)),AdapterUtils.itemDispatch(r,"out",t)))},this._mousemoveHandler=t=>{var r=e.CustomEventUtils.getEventCoordinates(t).client;if(!this.#h){var i=null;t.target.getRootNode().elementsFromPoint(r.x,r.y).find(t=>(i=ut(t,dt))&&!i.inert);var s=this._hitTarget,n=i;(e.Utils.isNull(i&&i.stage)||!this._scenes.has(i.stage)||i.inert)&&(n=null);const a=this._hitTarget=n;if(n!==s&&(e.Utils.isNull(s)||(this.#l.unregister(this._items.get(s)),AdapterUtils.itemDispatch(s,"out",t)),e.Utils.isNull(n)||(n.draggable&&this.#l.register(this._items.get(n)),AdapterUtils.itemDispatch(n,"over",t))),e.Utils.isNull(a)){const r=t.currentTarget,i=ut(r,pt);e.Utils.isNull(i)||AdapterUtils.stageDispatch(i,"move",t)}}},this._mouseDownUpHandler=t=>{const r=t.currentTarget;if(r instanceof SVGSVGElement){const i=ut(r,pt),s=this._hitTarget,n=t.type.replace(/^mouse/,""),a=y(i);e.CustomEventUtils.matchModifiers(t,a.clickModifiers)&&(e.Utils.isNull(s)||s.stage!==i?AdapterUtils.stageDispatch(i,n,t):AdapterUtils.itemDispatch(s,n,t))}},this._scenes=new WeakMap,this._markers=new WeakMap,this._gradients=new WeakMap,this._items=new WeakMap}snapshot(t,e,r,i){if(this._scenes.has(t)){const s=this._scenes.get(t);return this.snapshotElement(s,e,r,i)}return Promise.resolve(null)}getTransformMatrix(e){const r=this._scenes;return r.has(e)?r.get(e).getScreenCTM().inverse():t.Matrix2D.identity}#l;viewActivatedCallback(){super.viewActivatedCallback();const t=this.#l=document.createElement(e.P+"-drag-drop");t.mode=e.UI.DragDataMode.Self;e.CustomElementUtils.findAncestorShell(this).appendChild(t),t.addEventListener(e.UI.DragDropEventType.Init,this._dragInitHandler,!1),t.addEventListener(e.UI.DragDropEventType.Drag,this._draggingHandler,!1),t.addEventListener(e.UI.DragDropEventType.End,this._dragEndHandler,!1)}disconnectedCallback(){const t=this.#l;e.Utils.isNull(t)||(t.removeEventListener(e.UI.DragDropEventType.Init,this._dragInitHandler,!1),t.removeEventListener(e.UI.DragDropEventType.Drag,this._draggingHandler,!1),t.removeEventListener(e.UI.DragDropEventType.End,this._dragEndHandler,!1),t.remove()),super.disconnectedCallback()}invalidateSize(t,r){const i=this._scenes;if(!e.Utils.isNull(t)&&!e.Utils.isNullOrEmpty(r)&&i.has(t)){var s=i.get(t);s.setAttribute("width",r.width+""),s.setAttribute("height",r.height+"");const n=t.viewbox,a=t.aspectRatio;AdapterUtils.isValidViewbox(n)?s.setAttribute("viewBox",`${n.x} ${n.y} ${n.width} ${n.height}`):s.removeAttribute("viewBox"),e.Utils.isNullOrEmpty(a)||"string"==typeof a?s.removeAttribute("preserveAspectRatio"):s.setAttribute("preserveAspectRatio",`xM${a.x.substring(1)}YM${a.y.substring(1)} ${a.slice?"slice":"meet"}`)}}initialize(t){if(e.Utils.isNull(t))throw"Provided scene is null or undefined.";const r=this._scenes;if(r.has(t))return r.get(t);const i=t.stage;i.innerHTML="",this._items=new WeakMap;var s=document.createElementNS(ht,"svg");return s.setAttribute("part","stage"),mt(s,pt,t),i.appendChild(s),r.set(t,s),s.addEventListener("mousemove",this._mousemoveHandler,!1),s.addEventListener("click",this._mouseDownUpHandler,!1),s.addEventListener("mousedown",this._mouseDownUpHandler,!1),s.addEventListener("mouseup",this._mouseDownUpHandler,!1),s.addEventListener("mouseleave",this._mouseleaveHandler,!1),s}dispose(t){const e=this._scenes;if(e.has(t)){var r=e.get(t);r.removeEventListener("mousemove",this._mousemoveHandler),r.removeEventListener("click",this._mouseDownUpHandler),r.removeEventListener("mousedown",this._mouseDownUpHandler),r.removeEventListener("mouseup",this._mouseDownUpHandler),r.removeEventListener("mouseleave",this._mouseleaveHandler),vt(r,pt),r.remove(),e.delete(t)}}getHitTarget(t){return this._hitTarget}draw(t,r,i=!1){const s=this._scenes,n=this._items;if(!e.Utils.isNull(t))if(t.adapter===this){s.has(t)||this.initialize(t);var a=t.datasource,o=!0,l=s.get(t);!e.Utils.isNull(r)&&n.has(r)&&(a=[r],l=n.get(r).parentNode,o=!1),o&&(l.innerHTML="<defs></defs>",this._markers=new WeakMap),this._draw(t,l,a||[],o,i)}else s.has(t)&&s.delete(t)}#h;_hasItems(t){return h(t)}_disposeSvg(t){if(!e.Utils.isNull(t)){var r=ut(t,dt);vt(t,dt),this._items.delete(r)}}_draw(r,n,a,o,h){const u=this._items;let m=0;if(n.firstElementChild instanceof SVGDefsElement&&m++,!e.Utils.isNullOrEmpty(a))for(let v of a){let a;if(v.stage??=r,u.has(v)?(a=u.get(v),a.parentNode!==n&&this._disposeSvg(ft(n,a,m))):(a=this._buildSVGElement(v),mt(a,dt,v),this._disposeSvg(ft(n,a,m)),u.set(v,a)),i(v)&&(v.hide?a.setAttribute("display","none"):a.removeAttribute("display"),a.style.transform=""),c(v)){const t=a;t.setAttribute("d",gt(v.pathData,"M0,0"));for(let{marker:e,suffix:r}of[{marker:v.markerStart,suffix:"start"},{marker:v.markerEnd,suffix:"end"},{marker:v.markerMid,suffix:"mid"}])if(e){const i=this._ensureMarker(n,e);t.setAttribute("marker-"+r,`url(#${i.id})`)}else t.removeAttribute("marker-"+r)}else if(d(v)){const t=a;t.textContent=v.text,t.style.fill=e.Utils.isNullOrEmpty(v.color)?"":v.color,t.style.fontFamily=e.Utils.isNullOrEmpty(v.fontFamily)?"":v.fontFamily,t.style.fontSize=e.Utils.isNull(v.fontSize)?"":v.fontSize+"px",e.Utils.isNullOrEmpty(v.fontWeight)||(t.style.fontWeight=v.fontWeight),e.Utils.isNullOrEmpty(v.fontStyle)||(t.style.fontStyle=v.fontStyle),t.setAttribute("text-anchor",gt(v.textAnchor,"start")),e.Utils.isNull(v.anchor)?(t.removeAttribute("x"),t.removeAttribute("y")):(t.setAttribute("x",v.anchor.x.toString()),t.setAttribute("y",v.anchor.y.toString()))}else if(p(v)){const t=a;t.setAttribute("href",v.src),t.setAttribute("preserveAspectRatio","none"),v.width>0?t.setAttribute("width",""+v.width):t.removeAttribute("width"),v.height>0?t.setAttribute("height",""+v.height):t.removeAttribute("height"),e.Utils.isNull(v.x)?t.removeAttribute("x"):t.setAttribute("x",""+v.x),e.Utils.isNull(v.y)?t.removeAttribute("y"):t.setAttribute("y",""+v.y)}if(s(v)){const r=v.transformMatrix;e.Utils.isNull(r)||t.Matrix2D.isIdentity(r)?a.removeAttribute("transform"):a.setAttribute("transform",`matrix(${r.a} ${r.b} ${r.c} ${r.d} ${r.e} ${r.f})`);const i=gt(v.opacity,1);1===i?a.removeAttribute("opacity"):a.setAttribute("opacity",""+i)}if(l(v)){if(e.Utils.isNullOrEmpty(v.fill))a.removeAttribute("fill");else if("string"==typeof v.fill)a.setAttribute("fill",v.fill);else{const t=this._ensureGradient(n,v.fill);a.setAttribute("fill",`url(#${t.id})`)}e.Utils.isNullOrEmpty(v.stroke)?a.removeAttribute("stroke"):a.setAttribute("stroke",v.stroke),e.Utils.isNullOrEmpty(v.dashArray)?a.removeAttribute("stroke-dasharray"):a.setAttribute("stroke-dasharray",v.dashArray.join(" ")),e.Utils.isNullOrEmpty(v.lineCap)?a.removeAttribute("stroke-linecap"):a.setAttribute("stroke-linecap",v.lineCap),e.Utils.isNullOrEmpty(v.lineJoin)?a.removeAttribute("stroke-linejoin"):a.setAttribute("stroke-linejoin",v.lineJoin),e.Utils.isNullOrEmpty(v.lineWidth)?a.removeAttribute("stroke-width"):a.setAttribute("stroke-width",""+v.lineWidth)}v.inert?a.style.pointerEvents="none":a.style.pointerEvents="",(o||h)&&this._hasItems(v)&&this._draw(r,a,v.childDrawables,!0,h),m++}if(o)for(let t=n.children.length-1;t>=m;t--){const e=n.children.item(t);this._disposeSvg(e),e.remove()}}_buildSVGElement(t){return c(t)||t instanceof ShapeElement?document.createElementNS(ht,"path"):d(t)||t instanceof tt?document.createElementNS(ht,"text"):p(t)||t instanceof Z?document.createElementNS(ht,"image"):document.createElementNS(ht,"g")}_ensureGradient(t,r){const i=this._gradients;i.has(t)||i.set(t,new WeakMap);const s=i.get(t),n=a(r),l=o(r);if(s.has(r)){const t=s.get(r);(n&&t instanceof SVGLinearGradientElement||l&&t instanceof SVGRadialGradientElement)&&(t.remove(),s.delete(r))}if(!s.has(r)){let i,a=t;for(;e.Utils.isNull(i=a.querySelector(":scope > defs"));){const t=a.parentElement;if(!(t instanceof SVGElement))break;a=t}if(e.Utils.isNull(i))throw new Error("Must provide a <defs> element.");var c=null;if(n)c=document.createElementNS(ht,"linearGradient");else{if(!o(r))throw new Error("Unmanaged gradient type.");c=document.createElementNS(ht,"radialGradient")}c.setAttribute("gradientUnits","userSpaceOnUse"),c.setAttribute("id",`grad-${e.Utils.uniqueCode()}`),i.appendChild(c),s.set(r,c)}const h=s.get(r);n?(h.setAttribute("x1",r.start.x.toString()),h.setAttribute("y1",r.start.y.toString()),h.setAttribute("x2",r.end.x.toString()),h.setAttribute("y2",r.end.y.toString())):l&&(h.setAttribute("cx",r.center.x.toString()),h.setAttribute("cy",r.center.y.toString()),h.setAttribute("r",r.radius.toString()));let d=0;for(let t of r.stops){for(;h.children.length<=d;){const t=document.createElementNS(ht,"stop");h.appendChild(t)}const r=h.children.item(d);r.setAttribute("offset",100*t.offset+"%"),r.setAttribute("stop-color",t.color),e.Utils.isNull(t.opacity)||r.setAttribute("stop-opacity",t.opacity.toString()),d++}for(;h.children.length>r.stops.length;){const t=h.children.item(h.children.length-1);h.removeChild(t)}return h}_ensureMarker(t,r){const i=this._markers;i.has(t)||i.set(t,new WeakMap);const s=i.get(t);if(!s.has(r)){const i=document.createElementNS(ht,"marker");s.set(r,i);const n=document.createElementNS(ht,"path");i.appendChild(n),i.setAttribute("id","mark"+e.Utils.uniqueCode());let a,o=t;for(;e.Utils.isNull(a=o.querySelector(":scope > defs"));){const t=o.parentElement;if(!(t instanceof SVGElement))break;o=t}if(e.Utils.isNull(a))throw new Error("Must provide a <defs> element.");a.appendChild(i)}const n=s.get(r),a=n.firstElementChild;return n.setAttribute("orient","auto-start-reverse"),e.Utils.isNullOrEmpty(r.viewbox)?n.removeAttribute("viewBox"):n.setAttribute("viewBox",`${r.viewbox.x} ${r.viewbox.y} ${r.viewbox.width} ${r.viewbox.height}`),e.Utils.isNullOrEmpty(r.ref)?(n.removeAttribute("refX"),n.removeAttribute("refY")):(n.setAttribute("refX",r.ref.x.toString()),n.setAttribute("refY",r.ref.y.toString())),r.height>0?n.setAttribute("markerHeight",r.height.toString()):n.removeAttribute("markerHeight"),r.width>0?n.setAttribute("markerWidth",r.width.toString()):n.removeAttribute("markerWidth"),a.setAttribute("d",r.pathData),e.Utils.isNullOrEmpty(r.fill)?a.removeAttribute("fill"):a.setAttribute("fill",r.fill),e.Utils.isNullOrEmpty(r.stroke)?a.removeAttribute("stroke"):a.setAttribute("stroke",r.stroke),n}};yt=ct([e.CustomElement({tagName:e.P+"-"+"2d-svg-adapter"})],yt);var xt=Object.freeze({__proto__:null,AdapterUtils:AdapterUtils,get CornerType(){return O},DrawableElement:DrawableElement,get Pacem2DElement(){return x},get PacemCanvasAdapterElement(){return lt},get PacemCircleElement(){return M},get PacemEllipseElement(){return S},get PacemGroupElement(){return _},get PacemImageElement(){return Z},get PacemLineElement(){return z},get PacemPathElement(){return G},get PacemPolygonElement(){return F},get PacemPolylineElement(){return q},get PacemRectElement(){return H},get PacemSvgAdapterElement(){return yt},get PacemTextElement(){return tt},PresentationElement:PresentationElement,ShapeElement:ShapeElement,UiElement:UiElement,getStageOptions:y}),bt=Object.freeze({__proto__:null,Drawing:xt}),Et=Object.freeze({__proto__:null,Components:bt,Drawing:u});t.DeepMerger.merge(Et)}(Pacem,Pacem);
7
- //# sourceMappingURL=pacem-2d.min.js.map
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,7 +1,6 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem v1.0.0-bessel (https://js.pacem.it)
3
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 Pacem3DElement 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 RenderableElement}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 RenderableEvent(a,e,o,c):new DragEvent(a,{detail:s,cancelable:a===t.UI.DragDropEventType.Init||a===t.UI.DragDropEventType.Drag},o,c),h=n instanceof Event?new RenderableEvent("item"+a,e,o,c):new DragEvent("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(e){return"positions"in e&&t.Utils.isArray(e.positions)}function _(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(e)}function C(e){return"childRenderables"in e&&t.Utils.isArray(e.childRenderables)&&f(e)}function w(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 UI3DEvent extends t.CustomUIEvent{constructor(e,t,r,i){super(e,t,r),this.#r=i}#r;get point(){return this.#r}}class DragEvent extends UI3DEvent{}class RenderableEvent extends UI3DEvent{constructor(e,t,r,i){super(e,{detail:t,bubbles:!0,cancelable:!0},r,i)}}function M(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 R={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 RenderableElement extends t.Components.PacemCrossItemsContainerElement{constructor(){super(...arguments),this.position=R.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 RenderableElement)}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})],RenderableElement.prototype,"position",void 0),p([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.String})],RenderableElement.prototype,"tag",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],RenderableElement.prototype,"inert",void 0);class Ui3DElement extends RenderableElement{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})],Ui3DElement.prototype,"rotate",void 0),p([t.Watch({emit:!1,converter:n})],Ui3DElement.prototype,"scale",void 0),p([t.Watch({emit:!1,converter:n})],Ui3DElement.prototype,"offset",void 0),p([t.Watch({emit:!1})],Ui3DElement.prototype,"transformMatrix",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ui3DElement.prototype,"scaleX",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ui3DElement.prototype,"scaleY",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ui3DElement.prototype,"scaleZ",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ui3DElement.prototype,"translateX",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ui3DElement.prototype,"translateY",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ui3DElement.prototype,"translateZ",void 0);let B=class Pacem3DGroupElement extends Ui3DElement{validate(e){return e instanceof RenderableElement}#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})],B.prototype,"datasource",void 0),B=p([t.CustomElement({tagName:R.GROUP_SELECTOR})],B);let N=class Pacem3DMeshElement extends Ui3DElement{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})],N.prototype,"geometry",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Json})],N.prototype,"material",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Json})],N.prototype,"backMaterial",void 0),N=p([t.CustomElement({tagName:R.MESH_SELECTOR})],N);let U=class Pacem3DObjectElement extends Ui3DElement{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})],U.prototype,"content",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.String})],U.prototype,"type",void 0),U=p([t.CustomElement({tagName:R.OBJECT_SELECTOR})],U);let L=class Pacem3DLightElement extends RenderableElement{constructor(){super(...arguments),this.intensity=.85,this.target=R.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})],L.prototype,"intensity",void 0),p([t.Watch({emit:!1,converter:i})],L.prototype,"target",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.String})],L.prototype,"color",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.String})],L.prototype,"type",void 0),L=p([t.CustomElement({tagName:R.LIGHT_SELECTOR})],L);class Pacem3DCameraElement extends RenderableElement{constructor(){super(...arguments),this.near=.1,this.far=1e3,this.up=r.Geometry.LinearAlgebra.Vector3D.j(),this.lookAt=R.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})],Pacem3DCameraElement.prototype,"near",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Pacem3DCameraElement.prototype,"far",void 0),p([t.Watch({emit:!1,converter:i})],Pacem3DCameraElement.prototype,"up",void 0),p([t.Watch({emit:!1,converter:i})],Pacem3DCameraElement.prototype,"lookAt",void 0);let T=class Pacem3DPerspectiveCameraElement extends Pacem3DCameraElement{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})],T.prototype,"fov",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],T.prototype,"aspect",void 0),T=p([t.CustomElement({tagName:R.PERSPECTIVE_CAMERA_SELECTOR})],T);let D=class Pacem3DOrthographicCameraElement extends Pacem3DCameraElement{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})],D.prototype,"top",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],D.prototype,"left",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],D.prototype,"bottom",void 0),p([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],D.prototype,"right",void 0),D=p([t.CustomElement({tagName:R.ORTHO_CAMERA_SELECTOR})],D);class Pacem3DAdapterElement extends t.PacemEventTarget{}var A,G=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 O(e){return"shader"in e}function S(e){return O(e)&&e.shader===A.Basic}function k(e){return O(e)&&e.shader===A.Line}function $(e){return O(e)&&e.shader===A.Lambert}function I(e){return O(e)&&e.shader===A.Phong}function W(e){return O(e)&&e.shader===A.Standard}function z(e){return O(e)&&e.shader===A.Custom}!function(e){e.Basic="basic",e.Lambert="lambert",e.Phong="phong",e.Standard="standard",e.Line="line",e.Custom="custom"}(A||(A={}));class MaterialElement 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:[]}}}G([t.Watch()],MaterialElement.prototype,"material",void 0),G([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],MaterialElement.prototype,"opacity",void 0),G([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],MaterialElement.prototype,"wireframe",void 0),G([t.Watch({emit:!1,converter:t.PropertyConverters.String})],MaterialElement.prototype,"color",void 0),G([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],MaterialElement.prototype,"hide",void 0),G([t.Watch({emit:!1,converter:t.PropertyConverters.String})],MaterialElement.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 V=class BasicMaterialElement extends MaterialElement{constructor(){super(A.Basic)}};V=j([t.CustomElement({tagName:`${t.P}-${a}-material-basic`})],V);var H=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 F=class LambertMaterialElement extends MaterialElement{constructor(){super(A.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()}}};H([t.Watch({emit:!1,converter:t.PropertyConverters.String})],F.prototype,"emissiveColor",void 0),H([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],F.prototype,"reflectivity",void 0),H([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],F.prototype,"refractionRatio",void 0),F=H([t.CustomElement({tagName:`${t.P}-${a}-material-lambert`})],F);var X=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 Y=class LineMaterialElement extends MaterialElement{constructor(){super(A.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())}};X([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Y.prototype,"lineWidth",void 0),X([t.Watch({emit:!1,converter:t.PropertyConverters.String})],Y.prototype,"lineJoin",void 0),X([t.Watch({emit:!1,converter:t.PropertyConverters.String})],Y.prototype,"lineCap",void 0),X([t.Watch({emit:!1,converter:{convert:e=>e?.split(",").map(e=>parseInt(e)).filter(e=>!Number.isNaN(e)),convertBack:e=>e?.join(",")}})],Y.prototype,"dashArray",void 0),Y=X([t.CustomElement({tagName:`${t.P}-${a}-material-line`})],Y);var Z=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 PhongMaterialElement extends MaterialElement{constructor(){super(A.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()}}};Z([t.Watch({emit:!1,converter:t.PropertyConverters.String})],q.prototype,"emissiveColor",void 0),Z([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],q.prototype,"reflectivity",void 0),Z([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],q.prototype,"refractionRatio",void 0),Z([t.Watch({emit:!1,converter:t.PropertyConverters.String})],q.prototype,"specularColor",void 0),Z([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],q.prototype,"shininess",void 0),Z([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],q.prototype,"flatShading",void 0),q=Z([t.CustomElement({tagName:`${t.P}-${a}-material-phong`})],q);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 StandardMaterialElement extends MaterialElement{constructor(){super(A.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()}}};J([t.Watch({emit:!1,converter:t.PropertyConverters.String})],Q.prototype,"emissiveColor",void 0),J([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Q.prototype,"refractionRatio",void 0),J([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Q.prototype,"roughness",void 0),J([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Q.prototype,"metalness",void 0),J([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],Q.prototype,"flatShading",void 0),Q=J([t.CustomElement({tagName:`${t.P}-${a}-material-standard`})],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};class Pacem3DPrimitiveElement extends t.PacemEventTarget{viewActivatedCallback(){super.viewActivatedCallback(),t.Utils.isNull(this.geometry)&&(this.geometry=this.createDefaultGeometry())}}function ee(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})}}K([t.Watch({converter:t.PropertyConverters.Json})],Pacem3DPrimitiveElement.prototype,"geometry",void 0);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};class NodeGeometry{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(){re.call(this)}}function re(){this.flags=[h.Geometry]}class LineGeometry extends NodeGeometry{}te([ee(re)],LineGeometry.prototype,"positions",void 0);class MeshGeometry extends NodeGeometry{#a;#l;#c;get barycenter(){return this.#c??=NodeGeometry.barycenter(this.positions)}set barycenter(e){this.#c=e}get boundingBox(){return this.#a??=NodeGeometry.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}}te([ee(re)],MeshGeometry.prototype,"positions",void 0),te([ee(re)],MeshGeometry.prototype,"triangleIndices",void 0),te([ee(re)],MeshGeometry.prototype,"textureCoordinates",void 0),te([ee(re)],MeshGeometry.prototype,"normals",void 0);var ie,ne=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 se=ie=class PacemBoxElement extends Pacem3DPrimitiveElement{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 E=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},_=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);_(E(x=-o/2+1*b*o/(1*c),g,C),E(P,g,C),E(P,g,v),E(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);_(E(x=o/2-1*b*o/(1*c),M,v),E(P,M,v),E(P,g,v),E(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);_(E(x,M,v=-l/2+y*l/(1*h)),E(x,M,C),E(x,g,C),E(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);_(E(x=-o/2+b*o/(1*c),M,v),E(P,M,v),E(P,g,v),E(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);_(E(x,M,v=l/2-y*l/(1*h)),E(x,M,C),E(x,g,C),E(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);_(E(x=-o/2+b*o/(1*c),g,C),E(P,g,C),E(P,g,v),E(x,g,v),1*b/(1*c),1-1*y/(1*h),(b+1)/(1*c),1-(y+1)/(1*h))}const R=new MeshGeometry(p,m,d);R.key=`box_${e}x${t}x${r}_w${i}_h${n}_d${s}`,w(R);const B={x:0,y:0,z:0},N=e/2,U=t/2,L=r/2;return R.barycenter=B,R.boundingBox={maxX:N,maxY:U,maxZ:L,minX:-N,minY:-U,minZ:-L},R.boundingSphere={center:B,radius:Math.sqrt(Math.pow(N,2)+Math.pow(U,2)+Math.pow(L,2))},R}createDefaultGeometry(){return ie.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=ie.createMeshGeometry(this.width,this.height,this.depth,this.widthSegments,this.heightSegments,this.depthSegments)}}};ne([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],se.prototype,"width",void 0),ne([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],se.prototype,"height",void 0),ne([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],se.prototype,"depth",void 0),ne([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],se.prototype,"widthSegments",void 0),ne([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],se.prototype,"heightSegments",void 0),ne([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],se.prototype,"depthSegments",void 0),se=ie=ne([t.CustomElement({tagName:t.P+"-"+"3d-primitive-box"})],se);var oe,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};let le=oe=class PacemConeElement extends Pacem3DPrimitiveElement{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,E=g,_=f,C=b;a.push(_,x,E),a.push(_,C,x);const w={x:v,y:d},P={x:v,y:n},M={x:y,y:n},R={x:y,y:d};o.push(M,w,P),o.push(M,R,w)}}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),E=.5*(1+y*i),_=.5*(1+v*i);let C,w;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,w=0==e?C+r-1:C-1}else C=d+e,w=0==e?d+r-1:C-1;if(1==t){a.push(m,C,w),o.push({x:.5,y:.5},{x:b,y:x},{x:E,y:_});continue}const P=.5*(1+p*u),M=.5*(1+f*u),R=.5*(1+y*u),B=.5*(1+v*u),N=m+1+(t-2)*r+e,U=0==e?N+r-1:N-1,L=w,T=C,D=N;a.push(U,D,L),a.push(L,D,T);const A={x:R,y:B},G={x:E,y:_},O={x:b,y:x},S={x:P,y:M};o.push(A,S,G),o.push(G,S,O)}}const f=new MeshGeometry(s,a,o);return f.key=`cone_${e}x${t}_s${r}_h${i}_c${n}`,w(f),f}createDefaultGeometry(){return oe.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=oe.createMeshGeometry(this.radius,this.height,this.sides,this.heightSegments,this.capSegments)}}};ae([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],le.prototype,"radius",void 0),ae([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],le.prototype,"height",void 0),ae([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],le.prototype,"sides",void 0),ae([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],le.prototype,"heightSegments",void 0),ae([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],le.prototype,"capSegments",void 0),le=oe=ae([t.CustomElement({tagName:t.P+"-"+"3d-primitive-cone"})],le);var ce,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 he=ce=class PacemCylinderElement extends Pacem3DPrimitiveElement{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},E={x:v,y:0,z:b};o.push(x),o.push(E);const _=.5*p/s,C=m*_,w=f*_,P=g*_,M=y*_;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-w}],i=[{x:.5,y:.5},{x:.5+C,y:.5+w},{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},E={x:.5+C,y:.5-w},_={x:.5+u,y:.5-p},R={x:.5+v,y:.5-b},B={x:.5+P,y:.5+M},N={x:.5+C,y:.5+w},U={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(E),a.push(R),a.push(R),a.push(E),a.push(_),a.push(U),a.push(N),a.push(B),a.push(U),a.push(B),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=e==i?f+2*l:m+r*(e-1)+l,_=l*g,C=(e-1)*y,w=0==n?1:n*g,P=e*y,M={x:_,y:C},R={x:w,y:C},B={x:w,y:P},N={x:_,y:P};c.push(h),c.push(p),c.push(d),c.push(h),c.push(d),c.push(E),a.push(M),a.push(R),a.push(B),a.push(M),a.push(B),a.push(N)}const E=new MeshGeometry(o,c,a);return E.key=`cylinder_${e}x${t}_s${r}_h${i}_c${n}`,w(E),E}createDefaultGeometry(){return ce.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=ce.createMeshGeometry(this.radius,this.height,this.sides,this.heightSegments,this.capSegments)}}};ue([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],he.prototype,"radius",void 0),ue([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],he.prototype,"height",void 0),ue([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],he.prototype,"sides",void 0),ue([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],he.prototype,"heightSegments",void 0),ue([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],he.prototype,"capSegments",void 0),he=ce=ue([t.CustomElement({tagName:t.P+"-"+"3d-primitive-cylinder"})],he);var pe,de=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 fe=pe=class PacemLineElement extends Pacem3DPrimitiveElement{static createLineGeometry(e){return new LineGeometry(e||me)}createDefaultGeometry(){return pe.createLineGeometry()}propertyChangedCallback(e,t,r,i){if(super.propertyChangedCallback(e,t,r,i),"positions"===e)this.geometry=pe.createLineGeometry(r)}};de([t.Watch({emit:!1,converter:t.PropertyConverters.Json})],fe.prototype,"positions",void 0),fe=pe=de([t.CustomElement({tagName:t.P+"-"+"3d-primitive-line"})],fe);var ge,ye=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 ve=ge=class PacemPlaneElement extends Pacem3DPrimitiveElement{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 MeshGeometry(a,c,l,u);return p.key=`plane_${e}x${t}_w${i}_l${n}`,p}createDefaultGeometry(){return ge.createMeshGeometry()}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"width":case"length":case"widthSegments":case"lengthSegments":this.geometry=ge.createMeshGeometry(this.width,this.length,this.widthSegments,this.lengthSegments)}}};ye([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ve.prototype,"width",void 0),ye([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ve.prototype,"length",void 0),ye([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ve.prototype,"widthSegments",void 0),ye([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],ve.prototype,"lengthSegments",void 0),ve=ge=ye([t.CustomElement({tagName:t.P+"-"+"3d-primitive-plane"})],ve);var be,xe,Ee,_e,Ce,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};const Pe=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},Me=r.Geometry.LinearAlgebra.Vector3D;class PolyhedronElement extends Pacem3DPrimitiveElement{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)}}we([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],PolyhedronElement.prototype,"radius",void 0);let Re=be=class PacemTetrahedronElement extends PolyhedronElement{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=Pe(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=Pe(i[n[e]]);s.push({x:t[0],y:t[1]})}const o=new MeshGeometry(r,[1,2,0,2,3,0,3,1,0,3,2,1],s);return o.key=`tetrahedron_${e}`,w(o),o.boundingSphere={center:Me.zero(),radius:e},o}createMeshGeometry(e=this.radius){return be.createMeshGeometry(e)}};Re=be=we([t.CustomElement({tagName:t.P+"-"+"3d-primitive-tetrahedron"})],Re);let Be=xe=class PacemOctahedronElement extends PolyhedronElement{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=Pe(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=Pe(n[t[e]]);s.push({x:r[0],y:r[1]})}const o=new MeshGeometry(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}`,w(o),o.boundingSphere={center:Me.zero(),radius:e},o}createMeshGeometry(e=this.radius){return xe.createMeshGeometry(e)}};Be=xe=we([t.CustomElement({tagName:t.P+"-"+"3d-primitive-octahedron"})],Be);let Ne=Ee=class PacemHexahedronElement extends PolyhedronElement{static createMeshGeometry(e){e||=1;const t=2*e*(1/Math.sqrt(3)),r=se.createMeshGeometry(t,t,t);return r.key=`hexahedron_${e}`,r}createMeshGeometry(e=this.radius){return Ee.createMeshGeometry(e)}};Ne=Ee=we([t.CustomElement({tagName:t.P+"-"+"3d-primitive-hexahedron"})],Ne);let Ue=_e=class PacemIcosahedronElement extends PolyhedronElement{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=Pe(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=Pe(n[t[e]]);s.push({x:r[0],y:r[1]})}const o=new MeshGeometry(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}`,w(o),o.boundingSphere={center:Me.zero(),radius:e},o}createMeshGeometry(e=this.radius){return _e.createMeshGeometry(e)}};Ue=_e=we([t.CustomElement({tagName:t.P+"-"+"3d-primitive-icosahedron"})],Ue);let Le=Ce=class PacemDodecahedronElement extends PolyhedronElement{static createMeshGeometry(e){e||=1;const t=[Me.from(.356822*e,.934172*e,0*e),Me.from(-.356822*e,.934172*e,0*e),Me.from(.57735*e,.57735*e,-.57735*e),Me.from(0*e,.356822*e,-.934172*e),Me.from(-.57735*e,.57735*e,-.57735*e),Me.from(-.57735*e,.57735*e,.57735*e),Me.from(0*e,.356822*e,.934172*e),Me.from(.57735*e,.57735*e,.57735*e),Me.from(.934172*e,0*e,-.356822*e),Me.from(.934172*e,0*e,.356822*e),Me.from(0*e,-.356822*e,.934172*e),Me.from(.57735*e,-.57735*e,.57735*e),Me.from(.57735*e,-.57735*e,-.57735*e),Me.from(.356822*e,-.934172*e,0*e),Me.from(-.57735*e,-.57735*e,.57735*e),Me.from(-.356822*e,-.934172*e,0*e),Me.from(0*e,-.356822*e,-.934172*e),Me.from(-.57735*e,-.57735*e,-.57735*e),Me.from(-.934172*e,0*e,.356822*e),Me.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=Pe(i[r[e]]);n.push({x:t[0],y:t[1]})}const s=new MeshGeometry(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}`,w(s),s.boundingSphere={center:Me.zero(),radius:e},s}createMeshGeometry(e=this.radius){return Ce.createMeshGeometry(e)}};Le=Ce=we([t.CustomElement({tagName:t.P+"-"+"3d-primitive-dodecahedron"})],Le);var Te,De=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 Ae=Te=class PacemSphereElement extends Pacem3DPrimitiveElement{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 MeshGeometry(r,n,i);return h.key=`sphere_${e}_s${t}`,w(h),h}createDefaultGeometry(){return Te.createMeshGeometry()}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"radius":case"segments":this.geometry=Te.createMeshGeometry(this.radius,this.segments)}}};De([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ae.prototype,"radius",void 0),De([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Ae.prototype,"segments",void 0),Ae=Te=De([t.CustomElement({tagName:t.P+"-"+"3d-primitive-sphere"})],Ae);var Ge,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};let Se=Ge=class PacemTorusElement extends Pacem3DPrimitiveElement{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=e>0?1-(e-1)/r:1/r,_=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:_}),s.push({x:E,y:_}),s.push({x:E,y:x}),s.push({x:b,y:_}),s.push({x:E,y:x}),s.push({x:b,y:x})}}const p=new MeshGeometry(n,o,s);return p.key=`torus_${e}x${t}_t${r}_s${i}`,w(p),p}createDefaultGeometry(){return Ge.createMeshGeometry()}propertyChangedCallback(e,t,r,i){switch(super.propertyChangedCallback(e,t,r,i),e){case"radius":case"innerRadius":case"segments":case"sides":this.geometry=Ge.createMeshGeometry(this.radius,this.innerRadius,this.segments,this.sides)}}};Oe([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Se.prototype,"radius",void 0),Oe([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Se.prototype,"innerRadius",void 0),Oe([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Se.prototype,"segments",void 0),Oe([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],Se.prototype,"sides",void 0),Se=Ge=Oe([t.CustomElement({tagName:t.P+"-"+"3d-primitive-torus"})],Se);class AdapterUtils{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)AdapterUtils.isVector3D(r)?t.push(r.x,r.y,r.z):AdapterUtils.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 ke=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 $e(e){return AdapterUtils.flattenVectorArray(e)}const Ie="0.152.2",We={VERSION:Ie,API_URI:`https://unpkg.com/three@${Ie}/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 ze(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(W(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(I(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($(r)){return s(new THREE.MeshLambertMaterial(t.Utils.extend(n,{emissive:r.emissiveColor,reflectivity:r.reflectivity,refractionRatio:r.refractionRatio})))}if(k(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(O(r)){return s(new THREE.MeshBasicMaterial(n))}return null}function je(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 Ve(e){if(t.Utils.isNullOrEmpty(e.geometry))return null;return new(e.geometry instanceof LineGeometry?THREE.Line:THREE.Mesh)}function He(){return"THREE"in window}let Fe=class Pacem3DThreeAdapterElement extends Pacem3DAdapterElement{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=Ve(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=$e(e.positions);if(r.setAttribute("position",new THREE.Float32BufferAttribute(i,3)),e instanceof MeshGeometry){t.Utils.isNullOrEmpty(e.triangleIndices)||r.setIndex(e.triangleIndices);const i=$e(e.positions);r.setAttribute("position",new THREE.Float32BufferAttribute(i,3));const n=$e(e.textureCoordinates);if(r.setAttribute("uv",new THREE.Float32BufferAttribute(n,2)),t.Utils.isNullOrEmpty(e.normals))r.computeVertexNormals();else{const t=$e(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=ze(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=ze(r);t.Utils.isNull(e)||(e.side=THREE.BackSide,s.push(e))}return n&&s.length>1?s:o}(e.material)||We.DEFAULT_MATERIAL()}}else if(e instanceof U&&(e.flags.indexOf(h.Material)>=0||e.flags.indexOf(h.Geometry)>=0))i.parent&&i.parent.remove(i),i=je(e);else if(e instanceof B){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 L){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),He()&&!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),He()||(await t.CustomElementUtils.importjs(We.API_URI),await async function(...e){const t=Date.now();var r=!1;do{r=He();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(We.ORBIT_URI)].concat(We.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),!He()||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(He()&&!t.Utils.isNull(r))if(e instanceof Pacem3DCameraElement)if(e instanceof T){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 D))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 U){t(je(e))}else if(e instanceof N){t(Ve(e))}else if(e instanceof L){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 B){t(new THREE.Group)}}}render(){this._camera&&this._renderer.render(this._scene,this._camera)}};ke([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],Fe.prototype,"orbit",void 0),Fe=ke([t.CustomElement({tagName:t.P+"-3d-three-adapter"})],Fe);const Xe="pacem-3d-",Ye="color",Ze="ambient",qe="lighting",Je="VertexInput",Qe="VertexOutput",Ke="InteractionData";var et,tt,rt,it,nt;!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"}(et||(et={})),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"}(tt||(tt={})),function(e){e[e.VERTEX=1]="VERTEX",e[e.FRAGMENT=2]="FRAGMENT",e[e.COMPUTE=4]="COMPUTE"}(rt||(rt={})),function(e){e[e.READ=1]="READ",e[e.WRITE=2]="WRITE"}(it||(it={})),function(e){e.Mesh="mesh",e.Camera="camera",e.Texture="texture",e.Light="light",e.Interaction="interaction"}(nt||(nt={}));class Buffers{static create(e,t,r=""){const i=e.createBuffer({size:t.byteLength,label:r,usage:et.VERTEX|et.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:et.UNIFORM|et.COPY_DST})}static createStorage(e,t,r=""){return e.createBuffer({size:t.byteLength,label:r,usage:et.STORAGE|et.COPY_DST})}static createIndexed(e,t,r=""){const i=e.createBuffer({size:t.byteLength,label:r,usage:et.INDEX|et.COPY_DST,mappedAtCreation:!0});return new Uint16Array(i.getMappedRange()).set(t),i.unmap(),i}}class BufferLayouts{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 st={outputNormalLocation:0,outputVertexLocation:1,outputUvLocation:2,outputVertexIndexLocation:3,outputRayIndexLocation:4,outputInstanceIndexLocation:5,storageMaterialGroupIndex:2,storageMaterialBindingIndex:0};function ot(e=[]){return e.join("\r\n")}function at(e={},r=st){const i=t.Utils.extend({},st,r),n=ot(e.definitions),s=ot(e.bindings),o=function(e=[]){let t="";for(let r of e){const e=r.trim();e.endsWith(";")?t+=e+"\r\n\t":t+=`${Ye} = ${e};\r\n\t`}return t}(e.modifiers),a=Ye,l=qe,c=Ze;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 lt={outputInstanceIndexLocation:0,outputVertexIndexLocation:1,storageMaterialGroupIndex:3,storageMaterialBindingIndex:0};function ct(e=[]){return e.join("\r\n")}function ut(e={},r=lt){const i=t.Utils.extend({},lt,r),n=ct(e.definitions),s=ct(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 Materials{static create(e){if(S(e))return new BasicMaterial(e);if(k(e))return new LineMaterial(e);throw new TypeError(`Material type '${e.shader}' not supported.`)}}const ht={};class MaterialBase{constructor(e){if(t.Utils.isNull(this.#u=e))throw new ReferenceError("Null material provided.")}#u;get material(){return this.#u}get wgsl(){return ht}buffer({device:e},t=Xe+"material-"+this.shader+"-buffer"){const{r:r,g:i,b:n,a:s}=this._diffuseColor(),o=new Float32Array([r,i,n,s]);return{buffer:Buffers.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 BasicMaterial extends MaterialBase{get shader(){return A.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:tt.TEXTURE_BINDING|tt.RENDER_ATTACHMENT|tt.COPY_DST,size:[t.width,t.height]}),source:t}}return null}static{this.fragment=at}}class LineMaterial extends MaterialBase{get shader(){return A.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:Buffers.createUniform(t,n,Xe+"line-"+this.shader+"-buffer"),value:n,version:performance.now()}}return super.buffer(e)}texture(e){return null}static{this.fragment=ut}}const pt=["input","data"];function dt(e){"string"!=typeof e&&(e=e(...pt));const t=new RegExp(`fn\\s+(\\w+)\\s*\\(([^)]*)\\)\\s*->\\s*(${Je}|${Qe})\\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!==Ke)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: ${Je}|${Qe}, arg2: ${Ke}) -> ${Je}|${Qe}`)}const mt={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 ft={inputPositionLocation:0,outputInstanceIndexLocation:0,outputVertexIndexLocation:1,storagePositionsGroupIndex:2,storagePositionsBindingIndex:0,uniformDimensionsGroupIndex:2,uniformDimensionsBindingIndex:1,uniformViewGroupIndex:0,uniformViewBindingIndex:0,uniformWorldGroupIndex:1,uniformWorldBindingIndex:0};function gt(e){return`struct ${Qe} {\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 yt(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 vt={uv:"uv"};const bt={normal:"normal",inputColor:"white"};function xt(e,r,i){const n=`directional_${t.Utils.uniqueCode()}`,s=t.Utils.extend({},bt,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 Et={normal:"normal",position:"vertex",ray:"ray",inputColor:"white",specularColor:"empty",shininess:"0"};function _t(e,r,i){const n=`omni_${t.Utils.uniqueCode()}`,s=t.Utils.extend({},Et,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 Ct(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 wt=r.Geometry.LinearAlgebra.Vector3D,Pt=r.Geometry.LinearAlgebra.Matrix3D,Mt={width:1,height:1};class Cameras{static create(e){if(y(e))return new PerspectiveCamera(e);if(v(e))return new OrthographicCamera(e);throw new TypeError(`Camera type '${e.type}' not supported.`)}}function Rt(e,t,r){const i=wt.subtract(t,e),n=wt.cross(r,i),s=wt.cross(i,n);wt.normalize(n),wt.normalize(i),wt.normalize(s);const o=-wt.dot(n,e),a=-wt.dot(s,e),l=-wt.dot(i,e);return Pt.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 Bt(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 OrthographicCamera{constructor(e){this._camera=e}static view(e){return Rt(e.position,e.lookAt,e.up)}static projection(e,t=Mt){const r=e.position,i=e.lookAt,n=wt.subtract(i,r);wt.normalize(n);const s=wt.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 Bt(n,s),Pt.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 OrthographicCamera.view(this._camera)}projection(e){return OrthographicCamera.projection(this._camera,e)}}class PerspectiveCamera{constructor(e){this._camera=e}static view(e){return Rt(e.position,e.lookAt,e.up)}static projection(e,t=Mt){const r=t.width/t.height/e.aspectRatio;return function(e=120,t=1,r=.1,i=1e3){Bt(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 Pt.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 PerspectiveCamera.view(this._camera)}projection(e){return PerspectiveCamera.projection(this._camera,e)}}const Nt=r.Geometry.LinearAlgebra.Vector3D,Ut=r.Geometry.LinearAlgebra.Matrix3D;function Lt(e,t){throw"function"==typeof t&&(t=t.name),new RangeError(`Buffer '${e}' not available for ${t}.`)}function Tt(e,r,...i){if(e.stage??=r?.item.stage,C(e))return e.key??="group_"+t.Utils.uniqueCode(),new RenderableGroupBuffer(e,r,...i);if(x(e))return e.key??="mesh_"+t.Utils.uniqueCode(),new RenderableMeshBuffer(e,r,...i);if(g(e))return e.key??="camera_"+t.Utils.uniqueCode(),new RenderableCameraBuffer(e);if(b(e))return e.key??="light_"+e.type+"_"+t.Utils.uniqueCode(),new RenderableLightBuffer(e);throw new Error("Renderable is not supported.")}class RenderLooper{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)&&(RenderableBuffers.clearFlags(r),o||(RenderableBuffers.clearFlags(s),o=!0),a||(n.forEach(e=>RenderableBuffers.clearFlags(e)),a=!0))}for(let e of i)RenderableBuffers.clearFlags(e)}}class ManagedBuffers{static create(e){if(E(e))return e.key??="geometry_"+t.Utils.uniqueCode(),new GeometryBuffer(e);if(O(e))return new MaterialBuffer(e);if(M(e))return new InteractionBuffer(e);throw new Error("Object is not supported.")}}class RenderableBuffers{static create(e,...t){return Tt(e,null,...t)}static clearFlags(e,r=!1){if(e.item.flags.splice(0),r){const r=e;t.Utils.isNull(r.parent)||RenderableBuffers.clearFlags(r.parent,!0)}}static allFlags(e){const r=e,i=r.parent,n=t.Utils.isNull(i)?[]:RenderableBuffers.allFlags(i);return r.item.flags.union(n)}}class ManagedBufferBase{#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 RenderableBufferBase extends ManagedBufferBase{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=Ut.identity(),r=this;for(;!t.Utils.isNull(r.parent);){const t=r.parent.item,i=Ut.translate(t.transformMatrix??Ut.identity(),t.position??Nt.zero());e=Ut.multiply(e,i),r=r.parent}return e}buildWorldTransform(){const e=Ut.translate(this.item.transformMatrix??Ut.identity(),this.item.position??Nt.zero()),t=this.buildParentWorldTransform();return Ut.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=Buffers.createUniform(n,s,Xe+"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 Dt={shader:A.Basic,color:"#c0c0c0",flags:[]};class RenderableGroupBuffer extends RenderableBufferBase{#n;constructor(e,t,...r){super(e,t),this.#n=e.childRenderables.map(e=>Tt(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 RenderableCameraBuffer extends RenderableBufferBase{#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)),RenderableBuffers.clearFlags(this),"cameraViewTransform"===r)return t.Utils.extend(this.#x,{fresh:i});Lt(r,RenderableCameraBuffer)}_rebuildMatrices({device:e,canvas:r}){const i=this.item,n=Cameras.create(i),{x:s,y:o,z:a}=i.position,l=n.view(),c=n.projection(r),u=Ut.multiply(l,c),h=new Float32Array(36);if(h.set(Ut.toArray(l),0),h.set(Ut.toArray(u),16),h.set([s,o,a],32),t.Utils.isNull(this.#x)){const t=Buffers.createUniform(e,h,Xe+"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 GeometryBuffer extends ManagedBufferBase{#E={};#_={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.#E={},this._rebuildGeometryBuffers(e));const n=this.#_,s=this.#C,{pipeline:o}=e,a=this.#E[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:Lt(r,GeometryBuffer)}}texture(e){throw new Error("Method not implemented.")}_rebuildGeometryBuffers({device:e}){this._destroyBuffers();const r=performance.now(),i=this.item,n=i.key;if(_(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=Buffers.create(e,c,Xe+"meshgeometry-"+n+"-positions-buffer"),m=Buffers.create(e,u,Xe+"meshgeometry-"+n+"-normals-buffer"),f=Buffers.create(e,h,Xe+"meshgeometry-"+n+"-uvmap-buffer"),g=Buffers.create(e,p,Xe+"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.#_={positions:!0,normals:!0,uv:!0,packed:!0}}else{const t=new Float32Array(AdapterUtils.flattenVectorArray(i.positions)),s=Buffers.createStorage(e,t,Xe+"nodegeometry-"+n+"-positions-buffer");this.#C={positions:{buffer:s,value:t,version:r},packed:{buffer:s,value:t,version:r}},this.#_={positions:!0,packed:!0}}}_destroyBuffers(){this.#E={};const e=this.#C;t.Utils.isNull(e)||this.destroySafely(e.positions,e.normals,e.uv)}dispose(){this._destroyBuffers()}}class MaterialBuffer extends ManagedBufferBase{#E={};#w={};#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.#E={},i.splice(0),n=!0,this.#R.clear(),this._resetMaterialBuffers());const{pipeline:s}=e,o=this.#E[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:Lt(r,MaterialBuffer)}}_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=Materials.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.#w={}}const{pipeline:o}=e,a=this.#w[r]??=new Map;return a.has(o)||(s=!0,a.set(o,n)),t.Utils.extend(n,{fresh:s})}dispose(){this._destroyBuffers()}_destroyBuffers(){this.#E={},this.#w={};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 InteractionBuffer extends ManagedBufferBase{#B={time:0,cursor:{x:0,y:0},resolution:{width:0,height:0}};#N;#E=new Map;constructor(e){super(e),t.Utils.extend(this.#B,e)}buffer(e,t){if("interaction"===t)return this._ensureInteractionBuffer(e);Lt(t,InteractionBuffer)}texture(e){throw new Error("Method not implemented.")}_ensureInteractionBuffer(e,r="interaction"){const i=this.#B,n=this.item;let s=!this.#N||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=Buffers.createUniform(e.device,t,Xe+"interaction-buffer");this.#N={buffer:r,value:t,version:performance.now()},this.#E.clear()}const{pipeline:o}=e,a=this.#E;return a.has(o)||(s=!0,a.set(o,this.#N)),t.Utils.extend(this.#N,{fresh:s})}_destroyBuffers(){this.#E.clear();const e=this.#N;t.Utils.isNull(e)||this.destroySafely(e)}dispose(){this._destroyBuffers()}}class RenderableMeshBuffer extends RenderableBufferBase{#C;#U;#L;#T;#D;#_={geometry:!0,material:!0,transform:!0};#A=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.#T;return r?.texture(e,t)}specificBuffer(e,r){const i=this.#_,n=this.allFlags();(t.Utils.isNull(this.#D)||n.includes(h.Position)||n.includes(h.Transform))&&(this.#A.clear(),i.transform=!0,this._rebuildWorldMatrices(e)),(t.Utils.isNull(this.#U)||n.includes(h.Geometry))&&(i.geometry=!0,this._ensureGeometryBuffer()),(t.Utils.isNull(this.#T)||n.includes(h.Material))&&(i.material=!0,this._ensureMaterialBuffer()),RenderableBuffers.clearFlags(this);const s=this.#U,o=this.#T;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.#D,a=i.transform;i.transform=!1;const l=this.#A,{pipeline:c}=e,u=!l.has(c);return u&&l.set(c,n),t.Utils.extend(n,{fresh:a||u});default:Lt(r,RenderableMeshBuffer)}}_ensureGeometryBuffer(){const e=this.#U,r=this.#C,i=this.item.geometry;if(t.Utils.isNull(r))e?.destroy(),this.#U=new GeometryBuffer(i);else{let e=r?.get(i);!1!==e?.disposed&&(e=new GeometryBuffer(i),r.set(i,e)),this.#U=e}}_ensureMaterialBuffer(){const e=this.#T,r=this.#L,i=this.item.material??Dt;if(t.Utils.isNull(r))e?.destroy(),this.#T=new MaterialBuffer(i);else{let e=r?.get(i);!1!==e?.disposed&&(e=new MaterialBuffer(i),r.set(i,e)),this.#T=e}}_rebuildWorldMatrices({device:e}){const r=this.item,i=this.buildWorldTransform(),n=Ut.transpose(Ut.invert(i)),s=new Float32Array(28);if(s.set(Ut.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.#D)){const t=Buffers.createUniform(e,s,Xe+"mesh-"+r.key+"-worldmatrix-buffer");this.#D={buffer:t,value:s,version:performance.now().roundoff()}}else this.#D.value=s,this.#D.version=performance.now().roundoff()}dispose(){this.#A.clear();const e=this.#D;this.#D=null,this.destroySafely(e);const t=this.#T;this.#T=null,t?.destroy();const r=this.#U;this.#U=null,r?.destroy()}}class RenderableLightBuffer extends RenderableBufferBase{#N;#E=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.#N={value:i,buffer:Buffers.createUniform(t,i,Xe+"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=Nt.subtract(r.position,r.target);i.set([l.x,l.y,l.z],4),this.#N={value:i,buffer:Buffers.createUniform(t,i,Xe+"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.#N={value:i,buffer:Buffers.createUniform(t,i,Xe+"omni-light-buffer"),version:performance.now()}}_rebuildLight(e){this.destroySafely(this.#N);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.#E;let n=t.Utils.isNull(this.#N)||this.allFlags().length>0;n&&(i.clear(),this._rebuildLight(e)),RenderableBuffers.clearFlags(this);const{pipeline:s}=e;if(i.has(s)||(n=!0,i.set(s,this.#N)),"light"===r)return t.Utils.extend(this.#N,{fresh:n});Lt(r,RenderableLightBuffer)}dispose(){this.#E.clear();const e=this.#N;this.#N=null,this.destroySafely(e)}}const At=Xe,Gt={multisample:!0,packedVertices:!0,primitive:{topology:"triangle-list",frontFace:"ccw",cullMode:"back"}},Ot=e=>{};class RenderPipelines{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=RenderPipelines.create(e,t);return r instanceof MeshRenderPipelineClass||r instanceof LineRenderPipelineClass?{frame:r.raycast}:null}static create(e,[r,i,...n],s){const o=RenderPipelines._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=_(r.item.geometry),l=!o&&k(r.item.material);if(!o&&!l)throw new Error("Pipeline not implemented, given the provided mesh argument.");const c=o?new MeshWGSLBuilder(r,i,...n):new LineWGSLBuilder(r,i),u=c.key+(s?.modifiers?.version??""),h=a.get(u);if(h)return h;const p=o?new MeshRenderPipelineClass(e,c):new LineRenderPipelineClass(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 RenderPipelineCache{constructor(){this.#G=new Map}#G;ensureBindGroup({device:e},r,i,n,s,o,a=()=>{}){const l=this.#G,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 MeshWGSLBuilder{#O=[];#S;#k;#$=new Map;#I={shader:"basic",lights:""};constructor(...e){this.add(...e)}reset(){this.#O.splice(0),this.#S=null,this.#$.clear(),this.#I={shader:"basic",lights:""}}add(...e){for(let r of e??[])if(x(r.item)){if(!t.Utils.isNull(this.#S))throw new Error("Mesh already added.");{this.#S=r;const e=r.item.material??{shader:A.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.#k??=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)=>MeshWGSLBuilder.prototype.bindgroup.apply(this,e),metadata:{lightCount:this.#O.length,mapCount:this.#S.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=mt){e!=mt&&(e=t.Utils.extend({},mt,e));const r=e.inputModifier;let i="vertexInput",n="";if(!t.Utils.isNullOrEmpty(r)){const{name:e,args:[t,s],body:o}=dt(r);i=`${e}(vertexInput, interaction)`,n=`fn ${e} (${t}: ${Je}, ${s}: ${Ke}) -> ${Je} {\n ${o}\n}`}const s=e.outputModifier;let o="output",a="";if(!t.Utils.isNullOrEmpty(s)){const{name:e,args:[t,r],body:i}=dt(s);o=`${e}(output, interaction)`,a=`fn ${e} (${t}: ${Je}, ${r}: ${Ke}) -> ${Qe} {\n ${i}\n}`}const l=t.Utils.extend({},mt,e);return`struct ${Qe} {\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 ${Je} {\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 ${Ke} {\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: ${Ke};\n\n@vertex fn main(vertexInput: ${Je}) -> ${Qe} {\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 = ${Qe}(\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.#S.item,r=this.#O,i=e.material;return{hasTexture:!t.Utils.isNull(i?.texture),hasLighting:!t.Utils.isNullOrEmpty(r),shader:t.Utils.isNull(e)?A.Basic:e.material?.shader??A.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(nt.Mesh,[o,a,{key:"texture",group:r,type:"texture"}]):n.set(nt.Mesh,[o,a]),n.set(nt.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(nt.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===A.Basic){if(e.hasTexture){const r=e.materialBindGroupIndex;n(function(e=vt,r,i=1){const n=t.Utils.uniqueCode(),s=`sampler_${n}`,o=`tex_${n}`,a=t.Utils.extend({},vt,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:Ye,outputColors:[Ye],uv:"uv"},r))}let s=0;const o=this.#O;for(let t of o){switch(t.item.type){case"direction":n(xt({outputColor:qe,normal:"normal"},e.lightingBindGroupIndex,s));break;case"omni":n(_t({outputColor:qe,normal:"normal",position:"vertex"},e.lightingBindGroupIndex,s));break;case"ambient":n(Ct({inputColor:Ye,outputColor:Ze},e.lightingBindGroupIndex,s))}s++}return BasicMaterial.fragment(i,r)}}}const St=(e,t)=>{t.fresh&&e.queue.writeBuffer(t.buffer,0,t.value)};class MeshRenderPipelineClass{constructor(e,t,r=new RenderPipelineCache){this._context=e,this._builder=t,this._cache=r,this._ensureU32idBindGroup=(e,t,r)=>this._cache.ensureBindGroup(this._context,e,[t],r,this._pickBindGroupLayout,At+"mesh-colorpick-bind-group"),this._ensureMaterialBindGroup=(e,t,r,i,n=2)=>{const s=this._bindGroupLayouts[n],o=At+"material-bind-group";if(s.label!==At+"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!==At+"mesh-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");const o=e.key+"-"+(n?1:0),a=`${At}${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=`${At}${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,At+"mesh-lighting-bind-group")},this._bindGroupLayouts=[],this._bindVertex=Ot,this._bindPicker=Ot,this._bindWorldTransform=Ot,this._bindRaycastWorldTransform=Ot,this._bindCameraProjectionAndInteractionData=Ot,this._bindRaycastCameraProjectionAndInteractionData=Ot,this._bindLighting=Ot,this._bindMaterial=Ot,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({},Gt,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?[BufferLayouts.createVertex(0,3,3,2)]:[BufferLayouts.createVertex(0,3),BufferLayouts.createVertex(1,3),BufferLayouts.createVertex(2,2)]},a=s.createBindGroupLayout({entries:[{binding:0,visibility:rt.VERTEX|rt.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:rt.VERTEX|rt.FRAGMENT,buffer:{type:"uniform"}}],label:At+"mesh-view-bind-group-layout"}),l=s.createBindGroupLayout({entries:[{binding:0,visibility:rt.VERTEX,buffer:{type:"uniform"}}],label:At+"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:rt.FRAGMENT,buffer:{type:"read-only-storage"}}],{mapCount:d}=i.metadata,m=d>0;m&&p.push({visibility:rt.FRAGMENT,binding:1,sampler:{}},...Array(d).keys().map(e=>({visibility:rt.FRAGMENT,binding:2+e,texture:{}})));const f={label:At+"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:rt.FRAGMENT,binding:t,buffer:{type:"uniform"}})),label:At+"lighting-bind-group-layout"});c.push(e)}const x={label:At+"mesh-render-pipeline",vertex:o,fragment:u,layout:s.createPipelineLayout({label:At+"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 E=this._pickBindGroupLayout=s.createBindGroupLayout({label:At+"mesh-colorpick-bind-group-layout",entries:[{visibility:rt.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),_={label:At+"mesh-colorpick-pipeline",vertex:o,fragment:{module:s.createShaderModule({code:yt(2)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:At+"mesh-colorpick-pipeline-layout",bindGroupLayouts:[a,l,E]}),primitive:r.primitive,depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickPipeline=s.createRenderPipeline(_);this._bindVertex=r.packedVertices?(e,...r)=>{const i=r.at(0);if(t.Utils.isNull(i))throw new ReferenceError(`Null ${RenderableBuffers.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 ${RenderableBuffers.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 ${RenderableBuffers.name} bringing world transform buffer was provided.`);const a=r.buffer(n,"objectWorldTransform"),l=a.buffer;St(s,a);const{group:c}=i.bindings(nt.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 w=(e,r,o,a)=>{if(t.Utils.isNull(r))throw new ReferenceError(`Null ${RenderableBuffers.name} bringing view projection buffers was provided.`);const l=r.buffer(n,"cameraViewTransform"),c=l.buffer;if(St(s,l),t.Utils.isNull(o))throw new ReferenceError(`Null ${RenderableBuffers.name} bringing interaction buffers was provided.`);const u=o.buffer(n,"interaction"),h=u.buffer;St(s,u);const{group:p}=i.bindings(nt.Camera,"cameraViewTransform",0),{group:d}=i.bindings(nt.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);w(e,r,i,!1)},this._bindRaycastCameraProjectionAndInteractionData=(e,...t)=>{const r=t.at(0),i=t.at(1);w(e,r,i,!0)},this._bindMaterial=(e,...r)=>{const i=r.at(0);if(t.Utils.isNull(i))throw new ReferenceError(`Null ${RenderableBuffers.name} bringing vertex colors was provided.`);const o=i.buffer(n,"material"),a=o.buffer;St(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)St(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 ${RenderableBuffers.name} bringing world transform buffer was provided.`);const o=i.buffer(n,"u32id"),a=o.buffer;St(s,o);const l=o.fresh,c=this._ensureU32idBindGroup(i.item,a,l);e.setBindGroup(2,c)}}}class LineWGSLBuilder{#W;#k;#$=new Map;constructor(...e){this.add(...e)}reset(){this.#W=null,this.#$.clear()}add(...e){for(let r of e??[])if(x(r.item)){if(!t.Utils.isNull(this.#W))throw new Error("Line already added.");this.#W=r}else if(g(r.item))this.#k??=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)=>LineWGSLBuilder.prototype.bindgroup.apply(this,e),metadata:{thickness:e.thickness,dashPattern:e.dashPattern}}}get key(){const e=(this.#W?.item).material?.lineWidth>1;return A.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=ft){const r=t.Utils.extend({},ft,e);return`${gt(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) -> ${Qe} {\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 ${Qe}(\n position,\n instance,\n index\n );\n}`}():function(e=ft){const r=t.Utils.extend({},ft,e);return`${gt(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) -> ${Qe} {\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 ${Qe}(\n worldViewProjectionTransform * position4,\n instance,\n index);\n}`}()}_computeBasicData(){const e=this.#W.item,r=t.Utils.isNull(e)?A.Line:e.material?.shader??A.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(nt.Mesh,[r,i,n,s]),t.set(nt.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}])}fragment(e=this._computeBasicData()){this._computeBindGroupsAndReferences(e);const t={definitions:[],bindings:[],modifiers:[]};if(e.shader===A.Line)return LineMaterial.fragment(t)}}class LineRenderPipelineClass{#z;constructor(e,t,r=new RenderPipelineCache){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,At+"line-colorpick-bind-group")},this._ensureLineMaterialBindGroup=(e,t,r,i=2)=>{const n=this._bindLineGroupLayouts[i];if(n.label!==At+"line-material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");const s=this.context;return this._cache.ensureBindGroup(s,e,[t],r,n,At+"line-material-bind-group")},this._ensureLinePositionsBindGroup=(e,t,r,i)=>{const n=this._bindLineGroupLayouts[i];if(n.label!==At+"line-positions-bind-group-layout")throw new Error("BindGroupLayout mismatch!");const s=this.context;return this._cache.ensureBindGroup(s,e,t,r,n,At+"line-positions-bind-group")},this._ensureLineWorldTransformBindGroup=(e,t,r,i=1,n=!1)=>{const s=this._bindLineGroupLayouts[i];if(s.label!==At+"line-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");const o=e.key+"-line-"+(n?1:0),a=`${At}${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=`${At}${n?"colorpick":""}-line-view-bind-group`,l=this.context;return this._cache.ensureBindGroup(l,o,[t],r,s,a)},this._bindLineGroupLayouts=[],this._bindLinePositions=Ot,this._bindLinePicker=Ot,this._bindLineWorldTransform=Ot,this._bindLineRaycastWorldTransform=Ot,this._bindLineCameraProjection=Ot,this._bindLineRaycastCameraProjection=Ot,this._bindLineMaterial=Ot,this._drawLine=Ot,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.#z=e,this._lineKey=t.key}get context(){return this.#z}get key(){return this._lineKey}build(e){const r=t.Utils.extend({},Gt,e??{}),i=this._lineBuilder.build(),n=t.Utils.extend({pipeline:this},this.#z),s=n.device,o=i.metadata.thickness>1,a={module:s.createShaderModule({code:i.vertex}),buffers:[]},l=s.createBindGroupLayout({entries:[{binding:0,visibility:rt.VERTEX,buffer:{type:"uniform"}}],label:At+"line-transforms-bind-group-layout"}),c=s.createBindGroupLayout({entries:[{binding:0,visibility:rt.VERTEX,buffer:{type:"uniform"}}],label:At+"line-view-bind-group-layout"}),u=[{binding:0,visibility:rt.VERTEX,buffer:{type:"read-only-storage"}}];o&&u.push({binding:1,visibility:rt.VERTEX,buffer:{type:"uniform"}});const h=[l,c,s.createBindGroupLayout({entries:u,label:At+"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:rt.FRAGMENT,buffer:{type:"read-only-storage"}}],y={label:At+"line-material-bind-group-layout",entries:g},v=s.createBindGroupLayout(y);d.push(v);const b=o?r.primitive.topology:"line-list",x={label:At+"line-render-pipeline",vertex:a,fragment:m,layout:s.createPipelineLayout({label:At+"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 E=this._pickLineBindGroupLayout=s.createBindGroupLayout({label:At+"line-colorpick-bind-group-layout",entries:[{visibility:rt.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),_={label:At+"line-colorpick-pipeline",vertex:a,fragment:{module:s.createShaderModule({code:yt(p)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:At+"line-colorpick-pipeline-layout",bindGroupLayouts:h.concat(E)}),primitive:t.Utils.extend({},r.primitive,{topology:b}),depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickLinePipeline=s.createRenderPipeline(_);const C=(e,r,o)=>{if(t.Utils.isNull(r))throw new ReferenceError(`Null ${RenderableBuffers.name} bringing world transform buffer was provided.`);const a=r.buffer(n,"objectWorldTransform"),l=a.buffer;St(s,a);const{group:c}=i.bindings(nt.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 w=(e,r,o)=>{if(t.Utils.isNull(r))throw new ReferenceError(`Null ${RenderableBuffers.name} bringing view projection buffers was provided.`);const a=r.buffer(n,"cameraViewTransform"),l=a.buffer;St(s,a);const{group:c}=i.bindings(nt.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);w(e,r,!1)},this._bindLineRaycastCameraProjection=(e,...t)=>{const r=t.at(0);w(e,r,!0)},this._bindLinePositions=(e,...r)=>{const a=r.at(0);if(t.Utils.isNull(a))throw new ReferenceError(`Null ${RenderableBuffers.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(St(s,l),o){const e=a.buffer(n,"line"),t=e.buffer;u||=e.fresh,h.push(t),St(s,e)}const{group:p}=i.bindings(nt.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 ${RenderableBuffers.name} bringing vertex colors was provided.`);const o=i.buffer(n,"material"),a=o.buffer;St(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 ${RenderableBuffers.name} bringing world transform buffer was provided.`);const o=i.buffer(n,"u32id"),a=o.buffer;o.value,St(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 Raycasters{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 ColorPickingRaycaster(e);return r.set(i,n),n}}class ColorPickingRaycaster{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=RenderPipelines.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(it.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:tt.COPY_SRC|tt.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:Xe+"colorpick-output-buffer",size:4,usage:et.MAP_READ|et.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:Xe+"colorpick-raycaster"});const{render:t,depth:r}=this._ensureTextures(),i={label:Xe+"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 kt=r.Geometry.LinearAlgebra.Vector3D;var $t;!function(e){e[e.NotSupported=0]="NotSupported",e[e.Disabled=1]="Disabled"}($t||($t={}));class Renderers{static create(e,t){return new Promise((r,i)=>{if(navigator.gpu){const n=new RendererClass(e);n.init(t).then(e=>r(n),e=>{const t={message:"string"==typeof e?e:e.message,cause:$t.Disabled};i(t)})}else{const e={message:"WebGPU not supported.",cause:$t.NotSupported};i(e)}})}}class RendererClass{#j;#V;#z;#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=ManagedBuffers.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.#z,o=n.getCurrentTexture();let a=this.#R;if(t.Utils.isNull(a)){if(a={},r){const e=s.createTexture({label:Xe+"render-texture",format:i??o.format,usage:tt.RENDER_ATTACHMENT,size:[o.width,o.height],sampleCount:4});a.render={texture:e,view:e.createView({label:Xe+"render-texture-view"})};const t=s.createTexture({label:Xe+"depth-texture",format:"depth24plus",usage:tt.RENDER_ATTACHMENT,size:[o.width,o.height],sampleCount:4});a.depth={texture:t,view:t.createView({label:Xe+"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=AdapterUtils.flattenVectorArray([u]),p=o.createView({label:Xe+"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.#z={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.#z,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:Xe+"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 RenderPipelines.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.#z,i=r.device,n=this.#Y,s=this.#Z?.enableValidation??!1,o=Raycasters.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=RenderableBuffers.create(e,r)),s}_createOrYieldGeometry(e){const r=this.#F;let i=r.get(e);return t.Utils.isNull(i)&&r.set(e,i=ManagedBuffers.create(e)),i}_createOrYieldMaterial(e){const r=this.#X;let i=r.get(e);return t.Utils.isNull(i)&&r.set(e,i=ManagedBuffers.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:kt.from(0,0,0),up:kt.j(),position:kt.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 RenderLooper(c)}update(...e){this._update(Array.from(e))}dispose(){if(this.#Y=null,this._disposeContext()){const{device:e}=this.#z;e.removeEventListener("uncapturederror",this._logError),e.destroy}}_disposeContext(){const e=this.#z;if(t.Utils.isNull(e))return!1;Raycasters.dispose(e),RenderPipelines.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.#z,{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 It=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 Wt="WebGPURaycastCallback",zt="WebGPURaycastPixel",jt=t.CustomElementUtils.getAttachedPropertyValue,Vt=t.CustomElementUtils.setAttachedPropertyValue,Ht=t.CustomElementUtils.deleteAttachedPropertyValue;let Ft=class Pacem3DWgslScriptElement extends t.Components.PacemItemElement{findContainer(){return t.CustomElementUtils.findAncestor(this,e=>e instanceof Xt)}#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()}};It([t.Watch({emit:!1,converter:t.PropertyConverters.String})],Ft.prototype,"type",void 0),It([t.Watch({emit:!1,converter:t.PropertyConverters.String})],Ft.prototype,"wgsl",void 0),Ft=It([t.CustomElement({tagName:t.P+"-3d-wgsl-script"})],Ft);let Xt=class Pacem3DWebgpuAdapterElement extends Pacem3DAdapterElement{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 Ft&&!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===$t.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),Renderers.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=jt(e,zt);if(n.render({cursor:s,time:performance.now(),resolution:{width:r,height:i}}),!e.interactive)return;const o=jt(e,Wt);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){Vt(e,Wt,i),t.x<0||t.y<0||t.x>=r.width||t.y>=r.height?Ht(e,zt):Vt(e,zt,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}};It([t.Debounce(100)],Xt.prototype,"_parseWgslModifiers",null),It([t.Watch({emit:!1})],Xt.prototype,"modifiers",void 0),It([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],Xt.prototype,"enableValidation",void 0),Xt=It([t.CustomElement({tagName:t.P+"-3d-webgpu-adapter"})],Xt);var Yt=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 Zt=r.Geometry.LinearAlgebra.Vector3D,qt=r.Geometry.LinearAlgebra.Matrix3D,Jt=r.Geometry.LinearAlgebra.Quaternion;r.Geometry.LinearAlgebra.Spherical;const Qt=.001,Kt={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 OrbitCameraBehavior{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=OrbitCameraBehavior._buildState(this._camera),t.Utils.extend(this._input,Zt.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=OrbitCameraBehavior._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=Zt.subtract(e.position,e.lookAt),r=Zt.mag(t);return{target:e.lookAt,versor:Zt.unit(t),up:e.up,radius:r,position:e.position}}static tryAttach(e,r){r??=Kt;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)||Zt.areClose(i,n)?null:new OrbitCameraBehavior(e,r)}}get configuration(){return this._config}set configuration(e){this._config=e}#ue;#ce;_getSafeAzimuth({theta:e}){return OrbitCameraBehavior._modAngle(e)}_getSafePolar({phi:e}){return OrbitCameraBehavior._modAngle(e)}static _modAngle(e){for(;e<0;)e+=360;return e%360}static _getViewXYZ(e){const{versor:t,up:r}=e,i=Zt.cross(t,r),n=Zt.cross(i,t);return Zt.normalize(i),Zt.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)>Qt||Math.abs(d-o)>Qt,b=Math.abs(f-l)>Qt,x=Math.abs(c-g)>Qt||Math.abs(u-y)>Qt;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:E}=OrbitCameraBehavior._getViewXYZ(this._initialState);let _=i,C=n,w=s,P=f;b?P+=(l-f)*v:P=l,p.rho=P;const M=Math.pow(.95,1*P),R=Zt.scale(r,-M*t);_=Zt.add(_,R);let B=m,N=d;b?(B+=(a-m)*v,N+=(o-d)*v):(B=a,N=o);const U=this._getSafePolar({phi:p.phi=B}),L=this._getSafeAzimuth({theta:p.theta=N}),T=Zt.negate(i);let D=qt.translate(qt.identity(),T);const A=Jt.fromAxisAngle(E,U),G=Jt.fromAxisAngle(x,L),O=qt.multiply(Jt.toRotationMatrix(G),Jt.toRotationMatrix(A));D=qt.multiply(D,O),D=qt.translate(D,Zt.negate(T)),_=qt.transform(_,D),C=qt.transform(C,qt.clone(D,e=>{e.offsetX=e.offsetY=e.offsetZ=0}));let S=g,k=y;b?(S+=(c-g)*v,k+=(u-y)*v):(S=c,k=u),p.x=S,p.y=k;const{right:$,up:I}=OrbitCameraBehavior._getViewXYZ(this._currentState),W=Zt.scale($,S),z=Zt.scale(I,k),j=Zt.add(W,z);w=Zt.add(s,j),e.lookAt=w,e.position=_,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 er=class PacemOrbitCameraBehaviorElement 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({},Kt,{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??Kt.zoom,pan:this.panControl??Kt.pan,rotation:this.rotationControl??Kt.rotation})}_decorateCore(e){const r=OrbitCameraBehavior.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))}};Yt([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],er.prototype,"maxAzimuth",void 0),Yt([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],er.prototype,"maxPolar",void 0),Yt([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],er.prototype,"minAzimuth",void 0),Yt([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],er.prototype,"minPolar",void 0),Yt([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],er.prototype,"zoomControl",void 0),Yt([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],er.prototype,"rotationControl",void 0),Yt([t.Watch({emit:!1,converter:t.PropertyConverters.Number})],er.prototype,"panControl",void 0),Yt([t.Watch({emit:!1,converter:o})],er.prototype,"inertia",void 0),er=Yt([t.CustomElement({tagName:t.P+"-"+"3d-orbit-camera"})],er);var tr=Object.freeze({__proto__:null,AdapterUtils:AdapterUtils,get BasicMaterialElement(){return V},DragEvent:DragEvent,get KnownShader(){return A},get LambertMaterialElement(){return F},get LineMaterialElement(){return Y},MaterialElement:MaterialElement,OrbitCameraBehavior:OrbitCameraBehavior,Pacem3DAdapterElement:Pacem3DAdapterElement,Pacem3DCameraElement:Pacem3DCameraElement,Pacem3DDetector:class Pacem3DDetector{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 B},get Pacem3DLightElement(){return L},get Pacem3DMeshElement(){return N},get Pacem3DObjectElement(){return U},get Pacem3DOrthographicCameraElement(){return D},get Pacem3DPerspectiveCameraElement(){return T},Pacem3DPrimitiveElement:Pacem3DPrimitiveElement,get Pacem3DThreeAdapterElement(){return Fe},get Pacem3DWebgpuAdapterElement(){return Xt},get Pacem3DWgslScriptElement(){return Ft},get PacemBoxElement(){return se},get PacemConeElement(){return le},get PacemCylinderElement(){return he},get PacemDodecahedronElement(){return Le},get PacemHexahedronElement(){return Ne},get PacemIcosahedronElement(){return Ue},get PacemLineElement(){return fe},get PacemOctahedronElement(){return Be},get PacemOrbitCameraBehaviorElement(){return er},get PacemPlaneElement(){return ve},get PacemSphereElement(){return Ae},get PacemTetrahedronElement(){return Re},get PacemTorusElement(){return Se},get PhongMaterialElement(){return q},PolyhedronElement:PolyhedronElement,RenderableElement:RenderableElement,RenderableEvent:RenderableEvent,get StalePropertyFlag(){return h},get StandardMaterialElement(){return Q},UI3DEvent:UI3DEvent,Ui3DElement:Ui3DElement,computePlaneNormal:P,computeSharpVertexNormals:w,isBasicMaterial:S,isCamera:g,isGeometry:E,isGroup:C,isInteraction:M,isLambertMaterial:$,isLight:b,isLineMaterial:k,isMaterial:O,isMesh:x,isMeshGeometry:_,isOrthographicCamera:v,isPerspectiveCamera:y,isPhongMaterial:I,isRenderable:m,isShaderMaterial:z,isStage:d,isStandardMaterial:W,isUi3DObject:f}),rr=Object.freeze({__proto__:null,Drawing3D:tr}),ir=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 OBJParser{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 MeshGeometry(r,p,h,u)}}ir([t.Transformer("parse3D")],class Parser3D{static parseGeometry(e,t){if("obj"===t.toLowerCase())return OBJParser.parse(e);throw new Error(`Type '${t}' is not supported.`)}},"parseGeometry",null);var nr=Object.freeze({__proto__:null,BooleanOrNumberConverter:o,DragEvent:DragEvent,get KnownShader(){return A},LineGeometry:LineGeometry,MaterialElement:MaterialElement,MeshGeometry:MeshGeometry,NodeGeometry:NodeGeometry,NotifyChange:ee,Pacem3DAdapterElement:Pacem3DAdapterElement,Pacem3DCameraElement:Pacem3DCameraElement,get Pacem3DGroupElement(){return B},get Pacem3DLightElement(){return L},get Pacem3DMeshElement(){return N},get Pacem3DObjectElement(){return U},get Pacem3DOrthographicCameraElement(){return D},get Pacem3DPerspectiveCameraElement(){return T},Point3DConverter:i,Point3DOrNumberConverter:n,QuaternionConverter:s,RenderableElement:RenderableElement,RenderableEvent:RenderableEvent,get StalePropertyFlag(){return h},UI3DEvent:UI3DEvent,Ui3DElement:Ui3DElement,computePlaneNormal:P,computeSharpVertexNormals:w,isBasicMaterial:S,isCamera:g,isGeometry:E,isGroup:C,isInteraction:M,isLambertMaterial:$,isLight:b,isLineMaterial:k,isMaterial:O,isMesh:x,isMeshGeometry:_,isOrthographicCamera:v,isPerspectiveCamera:y,isPhongMaterial:I,isRenderable:m,isShaderMaterial:z,isStage:d,isStandardMaterial:W,isUi3DObject:f}),sr=Object.freeze({__proto__:null,Components:rr,Drawing3D:nr});e.DeepMerger.merge(sr)}(Pacem,Pacem,Pacem);
7
- //# sourceMappingURL=pacem-3d.min.js.map
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */