@pacem/pacem-2d 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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d 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-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d 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-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
package/dist/esm/group.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
package/dist/esm/image.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
package/dist/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
package/dist/esm/line.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
package/dist/esm/path.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
package/dist/esm/rect.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
package/dist/esm/stage.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
package/dist/esm/text.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
package/dist/esm/types.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-2d v1.0.0-banach (https://js.pacem.it)
2
+ * @pacem/pacem-2d v1.0.0-bessel (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
package/package.json CHANGED
@@ -24,7 +24,7 @@
24
24
  "types": "./typings/index.d.ts"
25
25
  }
26
26
  },
27
- "version": "1.0.0-banach",
27
+ "version": "1.0.0-bessel",
28
28
  "author": {
29
29
  "name": "Pacem",
30
30
  "url": "https://pacem.it"
@@ -1 +0,0 @@
1
- {"version":3,"file":"pacem-2d.min.js","sources":["../esm/constants.js","../esm/drawing.js","../esm/stage.js","../esm/drawable-element.js","../esm/types.js","../esm/group.js","../esm/ellipse.js","../esm/rect.js","../esm/line.js","../esm/path.js","../esm/polygon.js","../esm/polyline.js","../esm/image.js","../esm/text.js","../esm/adapters/utils.js","../esm/adapter.js","../esm/adapters/canvasadapter.js","../esm/adapters/svgadapter.js","../esm/index-iife.js"],"sourcesContent":["export const TAG_MIDDLE_NAME = \"2d\";\nexport const TWO_PI = 2 * Math.PI;\n","import { Utils, CustomUIEvent } from '@pacem/pacem-core';\nimport { Point, Matrix2D } from '@pacem/pacem-foundation';\nexport function isDrawable(object) {\n return !Utils.isNull(object) && 'stage' in object;\n}\nexport function isUiObject(object) {\n return /*'transformMatrix' in object &&*/ isDrawable(object);\n}\nfunction isGradient(object) {\n return 'stops' in object && Utils.isArray(object.stops);\n}\nexport function isLinearGradient(object) {\n return isGradient(object) && 'start' in object && Point.isPoint(object.start)\n && 'end' in object && Point.isPoint(object.end);\n}\nexport function isRadialGradient(object) {\n return isGradient(object) && 'center' in object && Point.isPoint(object.center)\n && 'radius' in object && typeof object.radius === 'number';\n}\nexport class PresentationState {\n static combine(lhs, rhs, precomputedMatrix = null) {\n return {\n opacity: (lhs.opacity ?? 1) * (rhs.opacity ?? 1),\n transformMatrix: precomputedMatrix ?? Matrix2D.multiply(rhs.transformMatrix, lhs.transformMatrix),\n dashArray: lhs.dashArray ?? rhs.dashArray,\n fill: lhs.fill ?? rhs.fill,\n lineCap: lhs.lineCap ?? rhs.lineCap,\n lineJoin: lhs.lineJoin ?? rhs.lineJoin,\n lineWidth: lhs.lineWidth ?? rhs.lineWidth,\n stroke: lhs.stroke ?? rhs.stroke\n };\n }\n}\nexport function isPresentationObject(object) {\n return isUiObject(object)\n && ('fill' in object\n || 'transformMatrix' in object\n || 'stroke' in object\n || 'lineJoin' in object\n || 'dashArray' in object\n || 'lineWidth' in object\n || 'opacity' in object\n || 'lineCap' in object);\n}\nexport function isShape(object) {\n return isUiObject(object) && 'pathData' in object;\n}\nexport function isGroup(object) {\n return isUiObject(object) && 'childDrawables' in object && !Utils.isNullOrEmpty(object['childDrawables']);\n}\nexport function isText(object) {\n return isUiObject(object) && 'text' in object && typeof object['text'] === 'string';\n}\nexport function isImage(object) {\n return isUiObject(object) && 'src' in object && typeof object['src'] === 'string';\n}\nexport class UI2DEvent extends CustomUIEvent {\n constructor(type, eventInit, originalEvent, transformMatrix) {\n super(type, eventInit, originalEvent);\n this.#transformMatrix = transformMatrix;\n }\n #transformMatrix;\n /** Gets the screen transform matrix. */\n get transformMatrix() {\n return this.#transformMatrix;\n }\n project(pt = { x: this.screenX, y: this.screenY }) {\n return Matrix2D.multiply(pt, this.#transformMatrix);\n }\n}\nexport class Shape {\n static empty() {\n return { pathData: '', vertices: [], boundingRect: { x: 0, y: 0, width: 0, height: 0 } };\n }\n}\nexport class DragEvent extends UI2DEvent {\n}\nexport class DrawableEvent extends UI2DEvent {\n constructor(type, args, originalEvent, m) {\n super(type, { detail: args, bubbles: true, cancelable: true }, originalEvent, m);\n }\n}\nexport class StageEvent extends UI2DEvent {\n constructor(type, args, originalEvent, m = args.transformMatrix) {\n super(type, { detail: args, bubbles: true, cancelable: true }, originalEvent, m);\n }\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, ViewChild, Debounce, PCSS, P, Utils, PropertyConverters, PropertyChangeEvent, CustomEventUtils, avoidHandler, EventKeyModifier, Components } from '@pacem/pacem-core';\nimport { Rect, Matrix2D } from '@pacem/pacem-foundation';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { DrawableElement } from './drawable-element';\nimport { isGroup } from './drawing';\n//namespace Pacem.Components.Drawing {\n// group [1] := align x,[3] := align y,[6] := slice\nconst ASPECTRATIO_PATTERN = /^\\s*[xX]\\s*([Mm](in|ax|id))\\s*[yY]\\s*([Mm](in|ax|id))(\\s+(none|slice|meet))?\\s*$/;\nconst aspectRatioPropertyConverter = {\n convert: (attr) => {\n const regArr = ASPECTRATIO_PATTERN.exec(attr);\n if (regArr && regArr.length >= 4) {\n return {\n x: regArr[1].toLowerCase(),\n y: regArr[3].toLowerCase(),\n slice: regArr[6] === 'slice'\n };\n }\n return 'none';\n },\n convertBack: (val) => {\n if (Utils.isNull(val) || typeof val === 'string') {\n return 'none';\n }\n return `xM${(val.x.substring(1))}YM${(val.y.substring(1))} ${(val.slice ? 'slice' : 'meet')}`;\n }\n};\nconst DEFAULT_STAGE_OPTIONS = {\n panControl: true,\n zoomControl: true,\n panModifiers: [EventKeyModifier.AltKey],\n zoomModifiers: [EventKeyModifier.AltKey],\n clickModifiers: []\n};\nexport function getStageOptions(stage) {\n const options = stage instanceof Pacem2DElement ? stage.options : {};\n return Utils.extend({}, DEFAULT_STAGE_OPTIONS, options);\n}\nlet Pacem2DElement = class Pacem2DElement extends Components.PacemItemsContainerElement {\n constructor() {\n super(...arguments);\n this.#transformMatrix = Matrix2D.identity;\n this.#options = DEFAULT_STAGE_OPTIONS;\n this._resizeHandler = (evt) => {\n this.#size = { x: evt.detail.left, y: evt.detail.top, width: evt.detail.width, height: evt.detail.height };\n const adapter = this.adapter;\n if (!Utils.isNull(adapter)) {\n this._invalidateSize();\n }\n };\n this._zoomHandler = (evt) => {\n // only trusted ui interaction\n if (!evt.isTrusted) {\n return;\n }\n const opts = this.#options;\n if (opts.zoomControl && CustomEventUtils.matchModifiers(evt, opts.zoomModifiers)) {\n // prevent anything\n avoidHandler(evt);\n const zoomingOut = evt.deltaY < 0;\n // center change?\n const factor = .1, sign = zoomingOut ? -1 : 1, factorWSign = factor * sign, scale = 1 + factorWSign;\n const stageRect = Utils.offsetRect(evt.currentTarget), pt = { x: evt.clientX, y: evt.clientY };\n this._zoom(scale, stageRect, pt);\n }\n };\n this._panHandler = (evt) => {\n const state = this.#panningStart, actual = this._getPanPoint(evt);\n if (!Utils.isNullOrEmpty(state && state.point) && !Utils.isNull(actual)) {\n avoidHandler(evt);\n const factor = state.factor, vbox = state.box, start = state.point;\n this.viewbox = {\n x: vbox.x - factor * (actual.x - start.x),\n y: vbox.y - factor * (actual.y - start.y),\n width: vbox.width,\n height: vbox.height\n };\n }\n };\n this._panStartHandler = (evt) => {\n const opts = this.#options;\n if (!opts.panControl) {\n return;\n }\n // only trusted ui interaction\n if (!evt.isTrusted) {\n return;\n }\n const size = this.#size, vbox = this.viewbox || { x: 0, y: 0, width: size.width, height: size.height }, start = this._getPanPoint(evt);\n if (start) {\n avoidHandler(evt);\n this._stage.style.pointerEvents = 'none';\n const aspectRatio = this._getActualAspectRatio();\n const wBased = vbox.width / size.width, hBased = vbox.height / size.height, factor = aspectRatio.slice ? Math.min(wBased, hBased) : Math.max(wBased, hBased);\n this.#panningStart = { point: start, box: vbox, factor };\n }\n };\n this._panEndHandler = (evt) => {\n this._stage.style.pointerEvents = '';\n this.#panningStart = null;\n };\n }\n get stage() {\n return this._stage;\n }\n snapshot(bgColor, type, quality) {\n const adapter = this.adapter;\n if (Utils.isNull(adapter)) {\n return Promise.resolve(null);\n }\n return adapter.snapshot(this, bgColor, type, quality);\n }\n #originalViewBox;\n #transformMatrix;\n get transformMatrix() {\n return this.#transformMatrix;\n }\n _transformMatrixScale() {\n const sizeObj = this.#size || Utils.offsetRect(this._stage);\n var origVbox = this.#originalViewBox || sizeObj;\n const vbox = this.viewbox || origVbox;\n const aspectRatio = this.aspectRatio || 'none';\n const mode = aspectRatio === 'none' ? 'stretch' : (aspectRatio.slice ? 'cover' : 'contain');\n const actual = Rect.findTransform(vbox, origVbox, mode);\n return actual.a;\n }\n validate(item) {\n return item instanceof DrawableElement && /* only direct items */ Utils.isNull(item.parent);\n }\n draw(item, redraw = false) {\n const adapter = this.adapter;\n if (!this.disabled && !Utils.isNull(adapter)) {\n let cancelable = new CustomEvent('predraw', { cancelable: true });\n this.dispatchEvent(cancelable);\n if (!cancelable.defaultPrevented) {\n adapter.draw(this, item, redraw);\n this.dispatchEvent(new CustomEvent('draw'));\n }\n }\n }\n _drawDebounced(item, force = false) {\n if (!Utils.isNull(item) && isGroup(item)) {\n this.draw(item, force);\n }\n else {\n this.draw(item);\n }\n }\n requestDraw(item, redraw = false) {\n this._drawDebounced(item, redraw);\n }\n _buildUpDatasourceFromDOM() {\n this.datasource = (this.items || []).slice();\n }\n #options;\n #size;\n _getActualAspectRatio() {\n const aspectRatio = this.aspectRatio || 'none';\n const alignmentX = aspectRatio === 'none' ? 'mid' : aspectRatio.x;\n const alignmentY = aspectRatio === 'none' ? 'mid' : aspectRatio.y;\n const slice = aspectRatio === 'none' ? false : aspectRatio.slice;\n return { x: alignmentX, y: alignmentY, slice };\n }\n _zoomFromValue(scale) {\n const sizeObj = this.#size;\n if (Utils.isNull(sizeObj)) {\n return;\n }\n const sizeRect = sizeObj;\n const origVbox = this.#originalViewBox || sizeRect, vbox = this.viewbox || origVbox;\n const aspectRatio = this.aspectRatio || 'none';\n const mode = aspectRatio === 'none' ? 'stretch' : (aspectRatio.slice ? 'cover' : 'contain');\n const actual = Rect.findTransform(vbox, sizeRect, mode);\n const original = Rect.findTransform(origVbox, sizeRect, mode);\n const actualScale = actual.a;\n const origScale = original.a;\n const targetScale = origScale * scale;\n const incrementalInverseScale = actualScale / targetScale;\n this._zoom(incrementalInverseScale);\n }\n _zoom(scale, stageRect, pt) {\n if (Utils.isNull(stageRect)) {\n stageRect = Utils.offsetRect(this._stage);\n }\n if (Utils.isNull(pt)) {\n pt = { x: stageRect.x + stageRect.width * .5, y: stageRect.y + stageRect.height * .5 };\n }\n const sizeObj = this.#size, vbox = this.viewbox || sizeObj;\n const vsize = Math.min(vbox.width, vbox.height), targetWidth = vsize * scale, targetHeight = vsize * scale;\n if (targetWidth > 0 && targetHeight > 0) {\n const aspectRatio = this._getActualAspectRatio();\n const alignmentX = aspectRatio.x;\n const alignmentY = aspectRatio.y;\n const slice = aspectRatio.slice;\n // offset\n const vboxRatio = vbox.width / vbox.height, size = slice ? Math.max(stageRect.width, stageRect.height) : Math.min(stageRect.width, stageRect.height);\n let \n // to be adjusted based on aspectRatio\n adjX, adjY;\n ;\n switch (alignmentX) {\n case 'mid':\n adjX = (targetWidth - vbox.width) * (pt.x - stageRect.x - .5 * (stageRect.width - size)) / (size * vboxRatio);\n break;\n case 'max':\n adjX = (targetWidth - vbox.width) * (pt.x - stageRect.x - (stageRect.width - size)) / (size * vboxRatio);\n break;\n default:\n adjX = (targetWidth - vbox.width) * (pt.x - stageRect.x) / (size * vboxRatio);\n break;\n }\n switch (alignmentY) {\n case 'mid':\n adjY = (targetHeight - vbox.height) * (pt.y - stageRect.y - .5 * (stageRect.height - size)) / (size * vboxRatio);\n break;\n case 'max':\n adjY = (targetHeight - vbox.height) * (pt.y - stageRect.y - (stageRect.height - size)) / (size * vboxRatio);\n break;\n default:\n adjY = (targetHeight - vbox.height) * (pt.y - stageRect.y) / (size * vboxRatio);\n break;\n }\n const targetX = vbox.x - adjX, targetY = vbox.y - adjY;\n this.viewbox = { x: targetX, y: targetY, width: targetWidth, height: targetHeight };\n }\n }\n _getPanPoint(evt) {\n const opts = this.#options;\n if (evt instanceof MouseEvent && CustomEventUtils.matchModifiers(evt, opts.panModifiers)) {\n return CustomEventUtils.getEventCoordinates(evt).page;\n }\n return null;\n }\n #panningStart;\n _invalidateSize() {\n this.adapter.invalidateSize(this, this.#size);\n const prevTransformMatrix = this.#transformMatrix;\n this.#transformMatrix = this.adapter.getTransformMatrix(this);\n this.dispatchEvent(new PropertyChangeEvent({ propertyName: 'transformMatrix', currentValue: this.#transformMatrix, oldValue: prevTransformMatrix }));\n this.zoom = this._transformMatrixScale();\n this.dispatchEvent(new Components.ResizeEvent(this.#size));\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n const adapter = this.adapter;\n if (!Utils.isNull(adapter)) {\n adapter.initialize(this);\n this._invalidateSize();\n // request draw right away\n this._drawDebounced();\n }\n const resize = this._resize;\n resize.addEventListener(Components.ResizeEventName, this._resizeHandler, false);\n const stage = this._stage;\n resize.target = stage;\n const options = { capture: false, passive: true };\n // zooming\n stage.addEventListener('wheel', this._zoomHandler, false);\n // panning\n stage.addEventListener('mousedown', this._panStartHandler, false);\n stage.addEventListener('touchstart', this._panStartHandler, options);\n window.addEventListener('mousemove', this._panHandler, false);\n window.addEventListener('mouseup', this._panEndHandler, false);\n window.addEventListener('touchmove', this._panHandler, options);\n window.addEventListener('touchend', this._panEndHandler, options);\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'adapter':\n if (!Utils.isNull(old)) {\n old.dispose(this);\n }\n if (!Utils.isNull(val)) {\n val.initialize(this);\n this._invalidateSize();\n this._drawDebounced();\n }\n break;\n case 'aspectRatio':\n if (!Utils.isNull(this.adapter)) {\n this._invalidateSize();\n }\n break;\n case 'viewbox':\n if (!Utils.isNull(this.adapter)) {\n this._invalidateSize();\n }\n this.#originalViewBox ??= (this.viewbox || null);\n break;\n case 'items':\n this._buildUpDatasourceFromDOM();\n break;\n case 'zoom':\n if (val !== this._transformMatrixScale()) {\n this._zoomFromValue(val);\n }\n break;\n case 'options':\n this.#options = getStageOptions(this); // Utils.extend({}, DEFAULT_STAGE_OPTIONS, val || {});\n break;\n case 'disabled':\n case 'datasource':\n this._drawDebounced();\n break;\n }\n }\n disconnectedCallback() {\n const resizer = this._resize, stage = this._stage;\n if (!Utils.isNull(resizer)) {\n resizer.removeEventListener(Components.ResizeEventName, this._resizeHandler, false);\n }\n if (!Utils.isNull(stage)) {\n // zooming\n stage.removeEventListener('wheel', this._zoomHandler, false);\n // panning\n stage.removeEventListener('mousedown', this._panStartHandler, false);\n stage.removeEventListener('touchstart', this._panStartHandler);\n window.removeEventListener('mousemove', this._panHandler, false);\n window.removeEventListener('mouseup', this._panEndHandler, false);\n window.removeEventListener('touchmove', this._panHandler);\n window.removeEventListener('touchend', this._panEndHandler);\n }\n if (!Utils.isNull(this.adapter)) {\n this.adapter.dispose(this);\n }\n super.disconnectedCallback();\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.Element })\n], Pacem2DElement.prototype, \"adapter\", void 0);\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.Rect })\n], Pacem2DElement.prototype, \"viewbox\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: aspectRatioPropertyConverter })\n], Pacem2DElement.prototype, \"aspectRatio\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem2DElement.prototype, \"datasource\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem2DElement.prototype, \"options\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], Pacem2DElement.prototype, \"zoom\", void 0);\n__decorate([\n ViewChild('.' + PCSS + '-2d')\n], Pacem2DElement.prototype, \"_stage\", void 0);\n__decorate([\n ViewChild(P + '-resize')\n], Pacem2DElement.prototype, \"_resize\", void 0);\n__decorate([\n Debounce(true)\n], Pacem2DElement.prototype, \"_drawDebounced\", null);\nPacem2DElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME, shadow: true, template: `<${P}-resize watch-position=\"true\"></${P}-resize><div class=\"${PCSS}-2d\" part=\"container\"></div><slot></slot>` })\n], Pacem2DElement);\nexport { Pacem2DElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Components, CustomElementUtils, PropertyConverters, Watch, } from '@pacem/pacem-core';\nimport { Pacem2DElement } from './stage';\nexport class DrawableElement extends Components.PacemCrossItemsContainerElement {\n validate(_) {\n // by default no children allowed (Group will except)\n return false;\n }\n findContainer() {\n // override\n return this.parent || this.stage;\n }\n get stage() {\n return this['_scene'] = this['_scene'] || CustomElementUtils.findAncestorOfType(this, Pacem2DElement);\n }\n get parent() {\n return this['_drawableParent'] = this['_drawableParent'] || CustomElementUtils.findAncestor(this, i => i instanceof DrawableElement);\n }\n disconnectedCallback() {\n delete this['_scene'];\n delete this['_drawableParent'];\n super.disconnectedCallback();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'hide':\n this.stage?.draw(this);\n break;\n }\n }\n }\n}\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], DrawableElement.prototype, \"tag\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], DrawableElement.prototype, \"inert\", void 0);\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { Matrix2D } from '@pacem/pacem-foundation';\nimport { DrawableElement } from './drawable-element';\n//namespace Pacem.Components.Drawing {\nconst DEG2RAD = Math.PI / 180.0;\nexport class UiElement extends DrawableElement {\n #transformMatrix = Matrix2D.identity;\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._updateTransformMatrix();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'rotate':\n case 'scaleX':\n case 'scaleY':\n case 'translateX':\n case 'translateY':\n this._updateTransformMatrix();\n // flow down\n case 'opacity':\n this.stage?.draw(this);\n break;\n }\n }\n }\n _updateTransformMatrix() {\n let rotation = DEG2RAD * (this.rotate ?? 0), cos = Math.cos(rotation), sin = Math.sin(rotation), a = (this.scaleX ?? 1) * cos, b = -sin, c = sin, d = (this.scaleY ?? 1) * cos, e = this.translateX ?? 0, f = this.translateY ?? 0;\n this.#transformMatrix = { a, b, c, d, e, f };\n }\n /** @internal */\n get transformMatrix() {\n const m = this.#transformMatrix;\n return { a: m.a, b: m.b, c: m.c, d: m.d, e: m.e, f: m.f };\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"rotate\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"scaleX\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"scaleY\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"translateX\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"translateY\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"opacity\", void 0);\nexport class PresentationElement extends UiElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'stroke':\n case 'lineWidth':\n case 'lineJoin':\n case 'lineCap':\n case 'dashArray':\n case 'fill':\n if (!Utils.isNull(this.stage)) {\n this.stage.draw(this);\n }\n break;\n }\n }\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"stroke\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"fill\", void 0);\n__decorate([\n Watch({\n emit: false, converter: {\n convert: (attr) => attr?.split(',').map(i => parseInt(i)).filter(i => !Number.isNaN(i)),\n convertBack: (prop) => prop?.join(',')\n }\n })\n], PresentationElement.prototype, \"dashArray\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PresentationElement.prototype, \"lineWidth\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"lineJoin\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"lineCap\", void 0);\nexport class ShapeElement extends PresentationElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'data':\n this.stage?.draw(this);\n break;\n }\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.recomputeShape();\n }\n recomputeShape() {\n const { pathData, vertices, boundingRect } = this.getShapeGeometry();\n this.#vertices = vertices;\n this.#boundingRect = boundingRect;\n this.data = pathData;\n }\n get pathData() {\n return this.data;\n }\n #boundingRect;\n get boundingRect() {\n return this.#boundingRect;\n }\n #vertices;\n get vertices() {\n return this.#vertices;\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], ShapeElement.prototype, \"data\", void 0);\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, P, Utils } from '@pacem/pacem-core';\nimport { PresentationElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { DrawableElement } from './drawable-element';\n//namespace Pacem.Components.Drawing {\nlet PacemGroupElement = class PacemGroupElement extends PresentationElement {\n validate(item) {\n return item instanceof DrawableElement && item.parent === this;\n }\n #children = [];\n get childDrawables() {\n return this.#children;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'items':\n case 'datasource':\n this.#children = (val || []);\n const scene = this.stage;\n if (!Utils.isNull(scene)) {\n scene.draw(this, true);\n }\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false })\n], PacemGroupElement.prototype, \"datasource\", void 0);\nPacemGroupElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-group' })\n], PacemGroupElement);\nexport { PacemGroupElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemEllipseElement_1, PacemCircleElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { Rect } from '@pacem/pacem-foundation';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\nfunction full(c, rx, ry) {\n const d = 2 * rx, cx = c.x, cy = c.y;\n return {\n pathData: `M ${cx} ${cy} m ${-rx},0 a ${rx},${ry} 0 1,1 ${d},0 a ${rx},${ry} 0 1,1 ${-d},0`,\n vertices: [],\n boundingRect: { x: cx - rx, y: cy - ry, width: 2 * rx, height: 2 * ry }\n };\n}\nfunction sect(c, rx, ry, start, end) {\n const degToRad = Math.PI / 180;\n const s = degToRad * start, e = degToRad * end;\n //\n const polar = (theta) => rx * ry / Math.sqrt(Math.pow(Math.cos(theta) * ry, 2) + Math.pow(Math.sin(theta) * rx, 2));\n const rhoStart = polar(s), rhoEnd = polar(e);\n const cartesian = (rho, theta) => {\n return { x: rho * Math.cos(theta), y: rho * Math.sin(theta) };\n };\n const cartStart = cartesian(rhoStart, s), cartEnd = cartesian(rhoEnd, e);\n const p0 = { x: c.x + cartStart.x, y: c.y + cartStart.y }, p1 = { x: c.x + cartEnd.x, y: c.y + cartEnd.y };\n let boundingRect = Rect.expand(c, p0, p1);\n if (end < start)\n end += 360;\n if (start <= 0 && end > 0 || end >= 360) {\n boundingRect = Rect.expand(boundingRect, { x: c.x + rx, y: c.y });\n }\n if (start <= 90 && end > 90 || end >= 450) {\n boundingRect = Rect.expand(boundingRect, { x: c.x, y: c.y + ry });\n }\n if (start <= 180 && end > 180 || end >= 540) {\n boundingRect = Rect.expand(boundingRect, { x: c.x - rx, y: c.y });\n }\n if (start <= 270 && end > 270 || end >= 630) {\n boundingRect = Rect.expand(boundingRect, { x: c.x, y: c.y - ry });\n }\n const flag = e - s > Math.PI ? '1' : '0';\n return {\n pathData: `M ${p0.x} ${p0.y} A ${rx},${ry} 0 ${flag},1 ${p1.x},${p1.y} L ${c.x},${c.y} Z`, vertices: [p0, p1], boundingRect\n };\n}\nfunction getShapeGeometry(c, rx, ry, start, end) {\n start ??= 0, end ??= 0;\n start %= 360;\n end %= 360;\n while (start < 0)\n start += 360;\n while (end < start)\n end += 360;\n const threesixty = (start - end).isCloseTo(0);\n return threesixty ? full(c, rx, ry) : sect(c, rx, ry, start, end);\n}\nlet PacemEllipseElement = PacemEllipseElement_1 = class PacemEllipseElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'center':\n case 'rx':\n case 'ry':\n case 'start':\n case 'end':\n this.recomputeShape();\n break;\n }\n }\n }\n getPathData() {\n const a = this.rx, b = this.ry, c = this.center, s = this.start ?? 0, e = this.end ?? 0;\n if (!Utils.isNull(c) && !Utils.isNull(a) && !Utils.isNull(b)) {\n return PacemEllipseElement_1.getPathData(c, a, b, s, e);\n }\n return null;\n }\n getShapeGeometry() {\n const center = this.center ?? { x: 0, y: 0 };\n const a = this.rx ?? 0, b = this.ry ?? 0;\n return getShapeGeometry(center, a, b, this.start, this.end);\n }\n static getPathData(c = { x: NaN, y: NaN }, rx = NaN, ry = NaN, start, end) {\n const { pathData } = getShapeGeometry(c, rx, ry, start, end);\n return pathData;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemEllipseElement.prototype, \"center\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"rx\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"ry\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"start\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"end\", void 0);\nPacemEllipseElement = PacemEllipseElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-ellipse' })\n], PacemEllipseElement);\nexport { PacemEllipseElement };\nlet PacemCircleElement = PacemCircleElement_1 = class PacemCircleElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'center':\n case 'radius':\n case 'start':\n case 'end':\n this.recomputeShape();\n break;\n }\n }\n }\n getPathData() {\n const r = this.radius, c = this.center;\n if (!Utils.isNull(c) && !Utils.isNull(r)) {\n return PacemCircleElement_1.getPathData(c, r, this.start, this.end);\n }\n return null;\n }\n getShapeGeometry() {\n const center = this.center ?? { x: 0, y: 0 };\n const r = this.radius ?? 0;\n return getShapeGeometry(center, r, r, this.start, this.end);\n }\n static getPathData(c = { x: NaN, y: NaN }, r = NaN, start, end) {\n return PacemEllipseElement.getPathData(c, r, r, start, end);\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemCircleElement.prototype, \"center\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCircleElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCircleElement.prototype, \"start\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCircleElement.prototype, \"end\", void 0);\nPacemCircleElement = PacemCircleElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-circle' })\n], PacemCircleElement);\nexport { PacemCircleElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemRectElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\n/*\n r=\"4\" // every corner has a rx equalt o ry equal to 8 units\n r=\"4,8 cut\" // every corner has a rx equal to 4px and a ry equal to 8px (cut corners)\n r=\"4,8 cut 5,6 3,20% round 50%,4\" // top-left corner has a rx equal to 4px and a ry equal to 8px (cut corner), top-right corner has a rx equal to 5px and a ry equal to 6px,\n // bottom-right corner has a rx equal to 3px and a ry equal to 20% the height,\n // bottom-left corner has a rx equal to 50% the width and a ry equal to 4px.\n\n */\nfunction parseCornerRadius(radius) {\n const rx = radius[2], ry = radius[4] ?? rx, type = radius[6] === 'cut' ? CornerType.Cut : CornerType.Rounded;\n return { rx: parseCornerRadiusComponent(rx), ry: parseCornerRadiusComponent(ry), type };\n}\nfunction parseCornerRadiusComponent(radius) {\n const val = parseFloat(radius);\n return { value: val, unit: radius.endsWith('%') ? 'pct' : 'u' };\n}\nfunction stringifyCornerRadiusComponent(radius) {\n return `${radius.value}${radius.unit === 'pct' ? '%' : ''}`;\n}\nconst CORNERS_PATTERN = /(([\\d\\.]+%?)(\\s*,?\\s*([\\d\\.]+%?))?(\\s+(cut|round))?)/g;\nfunction parseCornerRadii(radii) {\n let numbers;\n const acc = [];\n while (numbers = CORNERS_PATTERN.exec(radii)) {\n acc.push(numbers);\n }\n switch (acc.length) {\n case 1:\n const single = parseCornerRadius(acc[0]);\n return [single, single, single, single];\n case 4:\n const topLeft = parseCornerRadius(acc[0]);\n const topRight = parseCornerRadius(acc[1]);\n const bottomRight = parseCornerRadius(acc[2]);\n const bottomLeft = parseCornerRadius(acc[3]);\n return [topLeft, topRight, bottomRight, bottomLeft];\n default:\n return null;\n }\n}\nfunction stringifyCornerRadii(radii) {\n const topLeft = radii[0], topRight = radii[1], bottomRight = radii[2], bottomLeft = radii[3];\n const tlX = stringifyCornerRadiusComponent(topLeft.rx), tlY = stringifyCornerRadiusComponent(topLeft.ry);\n const trX = stringifyCornerRadiusComponent(topRight.rx), trY = stringifyCornerRadiusComponent(topRight.ry);\n const brX = stringifyCornerRadiusComponent(bottomRight.rx), brY = stringifyCornerRadiusComponent(bottomRight.ry);\n const blX = stringifyCornerRadiusComponent(bottomLeft.rx), blY = stringifyCornerRadiusComponent(bottomLeft.ry);\n return `${tlX},${tlY} ${trX},${trY} ${brX},${brY} ${blX},${blY}`;\n}\nexport var CornerType;\n(function (CornerType) {\n CornerType[\"Rounded\"] = \"rounded\";\n CornerType[\"Cut\"] = \"cut\";\n})(CornerType || (CornerType = {}));\nlet PacemRectElement = PacemRectElement_1 = class PacemRectElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first && (name === 'x' || name === 'y' || name === 'w' || name === 'h' || name === 'r' || name === 'cornerType')) {\n this.recomputeShape();\n }\n }\n getPathData() {\n const x = this.x, y = this.y, w = this.w, h = this.h;\n let r = this.r ?? { rx: { value: 0 }, ry: { value: 0 }, type: CornerType.Rounded };\n if (!Utils.isArray(r)) {\n r = [r, r, r, r];\n }\n // forgiving behavior\n r = r.map(i => { return typeof i === 'number' ? { rx: { value: i }, ry: { value: i }, type: this.cornerType } : i; });\n if (!Utils.isNull(x) && !Utils.isNull(y) && !Utils.isNull(w) && !Utils.isNull(h)) {\n return PacemRectElement_1.getPathData(x, y, w, h, r);\n }\n return null;\n }\n getShapeGeometry() {\n const x = this.x, y = this.y, x1 = x + this.w, y1 = y + this.h;\n return {\n pathData: this.getPathData(), vertices: [{ x, y }, { x: x1, y }, { x: x1, y: y1 }, { x, y: y1 }], boundingRect: { x, y, width: this.w, height: this.h }\n };\n }\n static getPathData(x = NaN, y = NaN, w = NaN, h = NaN, r = null) {\n if (!r) {\n return `M ${x} ${y} h ${w} v ${h} h ${-w} z`;\n }\n if (!Utils.isArray(r)) {\n r = [r, r, r, r];\n }\n const tl = r[0], tr = r[1], br = r[2], bl = r[3];\n const vx = (rx) => rx.unit === 'pct' ? rx.value * .01 * w : rx.value;\n const vy = (ry) => ry.unit === 'pct' ? ry.value * .01 * h : ry.value;\n const tlX = vx(tl.rx), tlY = vy(tl.ry);\n const trX = vx(tr.rx), trY = vy(tr.ry);\n const brX = vx(br.rx), brY = vy(br.ry);\n const blX = vx(bl.rx), blY = vy(bl.ry);\n let retval = `M ${x},${y + tlY}`;\n // top-left\n switch (tl.type) {\n case 'cut':\n retval += ` l ${tlX},${-tlY}`;\n break;\n default:\n retval += ` a ${tlX} ${tlY} 0 0 1 ${tlX} ${-tlY}`;\n break;\n }\n retval += ` h ${w - tlX - trX}`;\n // top-right\n switch (tr.type) {\n case 'cut':\n retval += ` l ${trX},${trY}`;\n break;\n default:\n retval += ` a ${trX} ${trY} 0 0 1 ${trX} ${trY}`;\n break;\n }\n retval += ` v ${h - trY - brY}`;\n // bottom-right\n switch (br.type) {\n case 'cut':\n retval += ` l ${-brX},${brY}`;\n break;\n default:\n retval += ` a ${brX} ${brY} 0 0 1 ${-brX} ${brY}`;\n break;\n }\n retval += ` h ${-(w - brX - blX)}`;\n // bottom-left\n switch (bl.type) {\n case 'cut':\n retval += ` l ${-blX},${-blY}`;\n break;\n default:\n retval += ` a ${blX} ${blY} 0 0 1 ${-blX} ${-blY}`;\n break;\n }\n return retval + ' z';\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"x\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"y\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"w\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"h\", void 0);\n__decorate([\n Watch({\n emit: false, converter: {\n convert: attr => parseCornerRadii(attr),\n convertBack: (radii) => stringifyCornerRadii(radii)\n }\n })\n], PacemRectElement.prototype, \"r\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemRectElement.prototype, \"cornerType\", void 0);\nPacemRectElement = PacemRectElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-rect' })\n], PacemRectElement);\nexport { PacemRectElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemLineElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { Shape } from './drawing';\n//namespace Pacem.Components.Drawing {\nlet PacemLineElement = PacemLineElement_1 = class PacemLineElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'from':\n case 'to':\n this.recomputeShape();\n break;\n }\n }\n }\n getShapeGeometry() {\n const from = this.from, to = this.to;\n if (Utils.isNull(from) || Utils.isNull(to)) {\n return Shape.empty();\n }\n const x0 = from.x, y0 = from.y, x1 = to.x, y1 = to.y;\n const boundingRect = { x: Math.min(x0, x1), y: Math.min(y0, y1), width: Math.abs(x0 - x1), height: Math.abs(y0 - y1) };\n return { pathData: this.getPathData(), vertices: [from, to], boundingRect };\n }\n getPathData() {\n const from = this.from, to = this.to;\n if (!Utils.isNull(from) && !Utils.isNull(to)) {\n return PacemLineElement_1.getPathData(from, to);\n }\n return null;\n }\n static getPathData(from = { x: NaN, y: NaN }, to = { x: NaN, y: NaN }) {\n const x0 = from.x, y0 = from.y, x1 = to.x, y1 = to.y;\n return `M ${x0} ${y0} L ${x1} ${y1}`;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemLineElement.prototype, \"from\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemLineElement.prototype, \"to\", void 0);\nPacemLineElement = PacemLineElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-line' })\n], PacemLineElement);\nexport { PacemLineElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\nlet PacemPathElement = class PacemPathElement extends ShapeElement {\n constructor() {\n super(...arguments);\n this.getPathData = () => this.d;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'd' && !first) {\n this.recomputeShape();\n }\n }\n getShapeGeometry() {\n return { pathData: this.getPathData(), /* TODO: parse d */ boundingRect: null, vertices: [] };\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemPathElement.prototype, \"d\", void 0);\nPacemPathElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-path' })\n], PacemPathElement);\nexport { PacemPathElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemPolygonElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { Shape } from './drawing';\n//namespace Pacem.Components.Drawing {\nlet PacemPolygonElement = PacemPolygonElement_1 = class PacemPolygonElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'radius':\n case 'starIndent':\n case 'sides':\n this.recomputeShape();\n break;\n }\n }\n }\n getPathData() {\n const sides = this.sides, radius = this.radius, center = this.center;\n if (!Utils.isNull(sides) && !Utils.isNull(radius)) {\n return PacemPolygonElement_1.getPathData(center, radius, sides, this.starIndent);\n }\n return null;\n }\n getShapeGeometry() {\n const c = this.center ?? { x: 0, y: 0 }, r = this.radius ?? 0, sides = this.sides ?? 3, si = this.starIndent;\n if (sides < 3) {\n return Shape.empty();\n }\n return PacemPolygonElement_1.getShapeGeometry(c, r, sides, si);\n }\n static getShapeGeometry(center, radius, sides, starIndent = .0) {\n const p0 = { x: center.x, y: center.y - radius };\n let retval = `M ${p0.x} ${(p0.y)}`;\n const vertices = [p0];\n const theta = 2 * Math.PI / sides, theta2 = .5 * theta, isStar = starIndent > 0, apothem = radius * Math.cos(theta2);\n for (let j = 1; j < sides; j++) {\n const angle = j * theta, x = center.x + Math.sin(angle) * radius, y = center.y - Math.cos(angle) * radius;\n if (isStar) {\n const innerRadius = apothem * (1.0 - starIndent);\n const angle2 = angle - theta2, x1 = center.x + Math.sin(angle2) * innerRadius, y1 = center.y - Math.cos(angle2) * innerRadius;\n retval += ` L ${x1} ${y1} L ${x} ${y}`;\n vertices.push({ x: x1, y: y1 });\n }\n else {\n retval += ` L ${x} ${y}`;\n }\n vertices.push({ x, y });\n }\n if (isStar) {\n const innerRadius = apothem * (1.0 - starIndent);\n const angle2 = 2 * Math.PI - theta2, x1 = center.x + Math.sin(angle2) * innerRadius, y1 = center.y - Math.cos(angle2) * innerRadius;\n retval += ` L ${x1} ${y1}`;\n vertices.push({ x: x1, y: y1 });\n }\n vertices.push(p0);\n const width = radius * 2;\n return {\n pathData: retval + ' Z', vertices, boundingRect: { x: p0.x - radius, y: p0.y, width, height: width }\n };\n }\n static getPathData(center, radius, sides, starIndent = .0) {\n const { pathData } = PacemPolygonElement_1.getShapeGeometry(center, radius, sides, starIndent);\n return pathData;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPolygonElement.prototype, \"sides\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPolygonElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemPolygonElement.prototype, \"center\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPolygonElement.prototype, \"starIndent\", void 0);\nPacemPolygonElement = PacemPolygonElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-polygon' })\n], PacemPolygonElement);\nexport { PacemPolygonElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemPolylineElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { parseAsNumericalArray } from '@pacem/pacem-foundation';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { Shape } from './drawing';\n//namespace Pacem.Components.Drawing {\nconst PointArrayOrJsonConverter = {\n convert: (attr) => {\n const arr = parseAsNumericalArray(attr);\n if (arr.length % 2 === 0) {\n const retval = [];\n for (let j = 0; j < arr.length; j += 2) {\n retval.push({ x: arr[j], y: arr[j + 1] });\n }\n return retval;\n }\n return JSON.parse(attr);\n },\n convertBack: (prop) => JSON.stringify(prop)\n};\nlet PacemPolylineElement = PacemPolylineElement_1 = class PacemPolylineElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'points':\n case 'closed':\n this.recomputeShape();\n break;\n }\n }\n }\n static getShapeGeometry(points, closed) {\n if (Utils.isNullOrEmpty(points)) {\n return Shape.empty();\n }\n let d = '';\n let xmin = Number.MAX_VALUE, ymin = Number.MAX_VALUE, xmax = Number.MIN_VALUE, ymax = Number.MIN_VALUE;\n for (let j = 0; j < points.length; j++) {\n const { x, y } = points[j];\n d += `${(j === 0 ? 'M' : 'L')} ${x} ${y} `;\n xmin = Math.min(xmin, x);\n xmax = Math.max(xmax, x);\n ymin = Math.min(ymin, y);\n ymax = Math.max(ymax, y);\n }\n const boundingRect = { x: xmin, y: ymin, width: xmax - xmin, height: ymax - ymin };\n if (closed) {\n d += 'Z';\n }\n return { pathData: d, vertices: points, boundingRect };\n }\n getShapeGeometry() {\n return PacemPolylineElement_1.getShapeGeometry(this.points, this.closed);\n }\n getPathData() {\n const { pathData } = this.getShapeGeometry();\n return pathData;\n }\n static getPathData(points, closed) {\n const { pathData } = PacemPolylineElement_1.getShapeGeometry(points, closed);\n return pathData;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PointArrayOrJsonConverter })\n], PacemPolylineElement.prototype, \"points\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], PacemPolylineElement.prototype, \"closed\", void 0);\nPacemPolylineElement = PacemPolylineElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-polyline' })\n], PacemPolylineElement);\nexport { PacemPolylineElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P } from '@pacem/pacem-core';\nimport { UiElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\nlet PacemImageElement = class PacemImageElement extends UiElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'src':\n case 'x':\n case 'y':\n case 'width':\n case 'height':\n this.stage?.draw(this);\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemImageElement.prototype, \"src\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"x\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"y\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"width\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"height\", void 0);\nPacemImageElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-image' })\n], PacemImageElement);\nexport { PacemImageElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { UiElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\nlet PacemTextElement = class PacemTextElement extends UiElement {\n propertyChangedCallback(name, old, val, first) {\n if (!first) {\n switch (name) {\n case 'text':\n case 'color':\n case 'fontFamily':\n case 'fontSize':\n case 'fontWeight':\n case 'fontStyle':\n case 'anchor':\n if (!Utils.isNull(this.stage)) {\n this.stage.draw(this);\n }\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"text\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"fontFamily\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemTextElement.prototype, \"fontSize\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"fontWeight\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"fontStyle\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemTextElement.prototype, \"anchor\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"textAnchor\", void 0);\nPacemTextElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-text' })\n], PacemTextElement);\nexport { PacemTextElement };\n","import { Utils, UI } from '@pacem/pacem-core';\nimport { Rect } from '@pacem/pacem-foundation';\nimport { StageEvent, DrawableEvent, DragEvent } from '../drawing';\n//namespace Pacem.Components.Drawing {\nexport class AdapterUtils {\n static stageDispatch(stage, type, evt) {\n if (stage instanceof EventTarget) {\n stage.dispatchEvent(new StageEvent('stage' + type, stage, evt, stage.transformMatrix));\n }\n }\n static isValidViewbox(viewbox) {\n return !Utils.isNullOrEmpty(viewbox) && Rect.isRect(viewbox) && Number.isFinite(viewbox.x) // isFinite includes NaN check\n && Number.isFinite(viewbox.y) && Number.isFinite(viewbox.width) && Number.isFinite(viewbox.height);\n }\n static itemDispatch(target, type, offset) {\n if (Utils.isNull(target?.stage)) {\n return false;\n }\n var dragArgs, originalEvent, evtType;\n if (offset instanceof Event) {\n originalEvent = offset;\n }\n else {\n dragArgs = { item: target, offset: offset };\n }\n if (typeof type === 'string') {\n evtType = type;\n }\n else {\n evtType = type.type;\n originalEvent = type.originalEvent;\n }\n const m = target.stage.transformMatrix;\n const evt = () => offset instanceof Event\n ? new DrawableEvent(evtType, target, originalEvent, m)\n : new DragEvent(evtType, { detail: dragArgs, cancelable: evtType === UI.DragDropEventType.Init || evtType === UI.DragDropEventType.Drag }, originalEvent, m);\n const itemevt = offset instanceof Event\n ? new DrawableEvent('item' + evtType, target, originalEvent, m)\n : new DragEvent('item' + evtType, { detail: dragArgs, cancelable: evtType === UI.DragDropEventType.Init || evtType === UI.DragDropEventType.Drag }, originalEvent, m);\n var prevent = false;\n if (target instanceof EventTarget) {\n const evnt = evt();\n target.dispatchEvent(evnt);\n prevent = evnt.defaultPrevented;\n }\n target.stage.dispatchEvent(itemevt);\n // was the event (in one of its forms) rejected?\n return prevent || itemevt.defaultPrevented;\n }\n}\n","import { PacemEventTarget, Utils } from '@pacem/pacem-core';\nconst JPEG_QUALITY = .9;\nexport class Pacem2DAdapterElement extends PacemEventTarget {\n constructor() {\n super(...arguments);\n this.DefaultShapeValues = {\n stroke: \"#000\",\n lineWidth: 1,\n fill: \"#fff\"\n };\n }\n snapshotElement(element, bgColor, type, quality) {\n const jpeg = !Utils.isNullOrEmpty(bgColor), mime = type ?? (jpeg ? 'image/jpeg' : null), compression = quality ?? (jpeg ? JPEG_QUALITY : null);\n return Utils.snapshotElement(element, bgColor, mime, compression);\n }\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, CustomElementUtils, Utils, Logging, CustomEventUtils, UI, avoidHandler } from '@pacem/pacem-core';\nimport { Matrix2D, Rect } from '@pacem/pacem-foundation';\nimport { UiElement, ShapeElement } from '../types';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { Pacem2DAdapterElement } from '../adapter';\nimport { getStageOptions } from '../stage';\nimport { AdapterUtils } from './utils';\nimport { PacemGroupElement } from '../group';\nimport { PacemImageElement } from '../image';\nimport { PacemTextElement } from '../text';\nimport { PresentationState, isDrawable, isUiObject, isPresentationObject, isShape, isText, isImage, isGroup, isLinearGradient, isRadialGradient, DrawableEvent } from '../drawing';\n//namespace Pacem.Components.Drawing {\nconst CANVAS_SCENE_VAR = 'pacem:2d-canvas-scene';\nconst PARENT_MATRIX_VAR = 'pacem:2d-parent-matrix';\nconst WORLD_MATRIX_VAR = 'pacem:2d-world-matrix';\nconst SETVAR = CustomElementUtils.setAttachedPropertyValue, GETVAR = CustomElementUtils.getAttachedPropertyValue;\nfunction isNone(fillOrStroke) {\n return fillOrStroke === 'none' || Utils.isNullOrEmpty(fillOrStroke);\n}\nfunction fallback(v, f) {\n return Utils.isNull(v) ? f : v;\n}\n/** Implementation postponed. Focus on SVG adapter. */\nlet PacemCanvasAdapterElement = class PacemCanvasAdapterElement extends Pacem2DAdapterElement {\n constructor() {\n super(...arguments);\n this._pointer = {\n page: { x: Number.NaN, y: Number.NaN }, screen: { x: Number.NaN, y: Number.NaN }, client: { x: Number.NaN, y: Number.NaN }\n };\n this._dragInitHandler = (evt) => {\n const hitTarget = this._hitTarget;\n if (Utils.isNull(hitTarget) || !isUiObject(hitTarget) || !hitTarget.draggable) {\n evt.preventDefault();\n return;\n }\n const args = evt.detail, drawable = hitTarget, initialMatrix = hitTarget.transformMatrix ?? Matrix2D.identity, parentMatrix = GETVAR(hitTarget, PARENT_MATRIX_VAR, Matrix2D.identity);\n args.data = {\n item: drawable,\n initialTransformMatrix: initialMatrix,\n parentMatrix\n };\n const reject = AdapterUtils.itemDispatch(drawable, evt, { x: 0, y: 0 });\n if (reject) {\n // reject dragging\n evt.preventDefault();\n }\n };\n this._draggingHandler = (evt) => {\n avoidHandler(evt);\n this._dragging = true;\n const args = evt.detail;\n const data = args.data;\n const screenOffset = { x: args.currentPosition.x - args.origin.x, y: args.currentPosition.y - args.origin.y };\n const offset = {\n x: screenOffset.x * data.parentMatrix.a + data.initialTransformMatrix.e,\n y: screenOffset.y * data.parentMatrix.d + data.initialTransformMatrix.f\n };\n //console.log(`current pos: ${args.currentPosition.x},${args.currentPosition.y}`);\n //console.log(`origin pos: ${args.origin.x},${args.origin.y}`);\n //console.log(`screen offset: ${screenOffset.x},${screenOffset.y}`);\n //console.log(`offset: ${offset.x},${offset.y}`);\n //console.log(data.item.transformMatrix);\n //console.log(GETVAR(data.item, PARENT_MATRIX_VAR));\n //console.log(GETVAR(data.item, WORLD_MATRIX_VAR));\n //console.log(data.initialTransformMatrix);\n const stageTransformMatrix = data.item.stage.transformMatrix;\n const rejected = AdapterUtils.itemDispatch(data.item, evt, { x: screenOffset.x * stageTransformMatrix.a + stageTransformMatrix.e, y: screenOffset.y * stageTransformMatrix.d + stageTransformMatrix.f });\n if (!rejected) {\n if (data.item instanceof UiElement) {\n data.item.translateX = offset.x;\n data.item.translateY = offset.y;\n }\n else {\n const init = data.initialTransformMatrix, actual = { a: init.a, b: init.b, c: init.c, d: init.d, e: offset.x, f: offset.y };\n Utils.extend(data.item, { transformMatrix: actual });\n }\n // console.log(data.item.transformMatrix);\n }\n };\n this._dragEndHandler = (evt) => {\n this._dragging = false;\n const args = evt.detail, data = args.data, transform = data.item.transformMatrix;\n AdapterUtils.itemDispatch(data.item, evt, { x: transform.e, y: transform.f });\n };\n // #endregion\n this._mouseleaveHandler = (evt) => {\n if (this._dragging) {\n return;\n }\n const hitTarget = this._hitTarget;\n if (Utils.isNull(hitTarget)) {\n return;\n }\n this._scopeEvent = evt;\n const nap = { x: Number.NaN, y: Number.NaN };\n this._pointer = { page: nap, screen: nap, client: nap };\n const canvas = evt.srcElement;\n const stage = GETVAR(canvas, CANVAS_SCENE_VAR);\n this._requestDraw(stage);\n };\n this._mousemoveHandler = (evt) => {\n this._scopeEvent = evt;\n this._pointer = CustomEventUtils.getEventCoordinates(evt);\n const canvas = evt.srcElement;\n const stage = GETVAR(canvas, CANVAS_SCENE_VAR);\n this._requestDraw(stage);\n if (!this._dragging) {\n if (!Utils.isNull(this._hitTarget)) {\n AdapterUtils.stageDispatch(stage, 'move', evt);\n }\n }\n };\n this._mouseDownUpHandler = (evt) => {\n this._scopeEvent = evt;\n this._pointer = CustomEventUtils.getEventCoordinates(evt);\n const canvas = evt.target;\n if (canvas instanceof HTMLCanvasElement) {\n const stage = GETVAR(canvas, CANVAS_SCENE_VAR), hitTarget = this._hitTarget;\n const type = evt.type.replace(/^(mouse|touch)/, ''), fineType = type === 'end' ? 'click' : type;\n const opts = getStageOptions(stage);\n if (CustomEventUtils.matchModifiers(evt, opts.clickModifiers)) {\n if (!Utils.isNull(hitTarget) && hitTarget.stage === stage) {\n AdapterUtils.itemDispatch(hitTarget, fineType, evt);\n }\n else {\n AdapterUtils.stageDispatch(stage, fineType, evt);\n }\n }\n }\n };\n this._scenes = new WeakMap();\n this._handles = new WeakMap();\n }\n snapshot(stage, backgroundColor, type, quality) {\n const scenes = this._scenes;\n if (scenes.has(stage)) {\n const ctx2d = scenes.get(stage).context, srcCanvas = ctx2d.canvas;\n return this.snapshotElement(srcCanvas, backgroundColor, type, quality);\n }\n else {\n return Promise.resolve(null);\n }\n }\n getCanvas(stage) {\n const scenes = this._scenes;\n if (scenes.has(stage)) {\n const ctx2d = scenes.get(stage).context;\n return ctx2d.canvas;\n }\n else {\n return null;\n }\n }\n _getScreenInverseMatrix(m, offset) {\n return Matrix2D.invert({ a: m.a, b: m.b, c: m.c, d: m.d, e: m.e + offset.x, f: m.f + offset.y });\n }\n getTransformMatrix(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n return scenes.get(scene).screenInverseMatrix;\n }\n return Matrix2D.identity;\n }\n #dragger;\n viewActivatedCallback() {\n super.viewActivatedCallback();\n const dragDrop = this.#dragger = document.createElement(P + '-drag-drop');\n dragDrop.mode = UI.DragDataMode.Copy;\n dragDrop.dropBehavior = UI.DropBehavior.None;\n dragDrop.spillBehavior = UI.DropTargetMissedBehavior.None;\n const floater = document.createElement('div');\n floater.hidden = true;\n dragDrop.floater = floater;\n // append\n const shell = CustomElementUtils.findAncestorShell(this);\n shell.appendChild(dragDrop);\n dragDrop.addEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n }\n disconnectedCallback() {\n const dragger = this.#dragger;\n if (!Utils.isNull(dragger)) {\n dragger.removeEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n dragger.remove();\n }\n super.disconnectedCallback();\n }\n invalidateSize(scene, size) {\n const scenes = this._scenes;\n if (!Utils.isNull(scene) && !Utils.isNullOrEmpty(size)) {\n if (scenes.has(scene)) {\n const tuple = scenes.get(scene), ctx = tuple.context;\n ctx.canvas.width = size.width;\n ctx.canvas.height = size.height;\n const offset = tuple.offset = Utils.offsetRect(ctx.canvas);\n // transform matrix\n const stage = { x: 0, y: 0, width: size.width, height: size.height }, aspectRatio = scene.aspectRatio, viewbox = scene.viewbox;\n if (AdapterUtils.isValidViewbox(viewbox)) {\n // defaults to the equivalent of SVG's xMidYMid meet\n let mode = 'contain', align = 'center', valign = 'middle';\n if (typeof aspectRatio === 'object') {\n mode = aspectRatio.slice ? 'cover' : 'contain';\n switch (aspectRatio.x) {\n case 'min':\n align = 'left';\n break;\n case 'max':\n align = 'right';\n break;\n }\n switch (aspectRatio.y) {\n case 'min':\n valign = 'top';\n break;\n case 'max':\n valign = 'bottom';\n break;\n }\n }\n ;\n // mimic svg viewbox\n const mscale = Rect.findTransform({ x: 0, y: 0, width: viewbox.width, height: viewbox.height }, stage, mode, align, valign);\n const m = Matrix2D.translate(mscale, { x: -mscale.a * viewbox.x, y: -mscale.a * viewbox.y });\n tuple.transformMatrix = m;\n tuple.screenInverseMatrix = this._getScreenInverseMatrix(m, offset);\n }\n else {\n tuple.transformMatrix = Matrix2D.identity;\n }\n }\n }\n this._requestDraw(scene);\n }\n getHitTarget(stage) {\n const target = this._hitTarget;\n if (!Utils.isNull(target) && target.stage === stage) {\n return target;\n }\n return null;\n }\n initialize(scene) {\n if (Utils.isNull(scene)) {\n throw 'Provided scene is null or undefined.';\n }\n const scenes = this._scenes;\n const dragger = this.#dragger;\n // already in the store?\n if (scenes.has(scene)) {\n const canvas = scenes.get(scene).context.canvas;\n if (!Utils.isNull(dragger)) {\n dragger.register(canvas);\n }\n return canvas;\n }\n const stage = scene.stage;\n // empty stage DOM\n stage.innerHTML = '';\n const canvas = document.createElement('canvas');\n canvas.setAttribute('part', 'stage');\n SETVAR(canvas, CANVAS_SCENE_VAR, scene);\n const context = canvas.getContext('2d');\n canvas.addEventListener('mousemove', this._mousemoveHandler, false);\n canvas.addEventListener('mouseleave', this._mouseleaveHandler, false);\n canvas.addEventListener('touchstart', this._mouseDownUpHandler, { passive: true });\n canvas.addEventListener('touchmove', this._mouseDownUpHandler, { passive: true });\n canvas.addEventListener('touchend', this._mouseDownUpHandler, { passive: true });\n canvas.addEventListener('click', this._mouseDownUpHandler, false);\n canvas.addEventListener('mousedown', this._mouseDownUpHandler, false);\n canvas.addEventListener('mouseup', this._mouseDownUpHandler, false);\n stage.appendChild(canvas);\n scenes.set(scene, { context, transformMatrix: Matrix2D.identity, offset: Utils.offsetRect(canvas), screenInverseMatrix: Matrix2D.identity });\n if (!Utils.isNull(dragger)) {\n dragger.register(canvas);\n }\n return canvas;\n }\n dispose(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n var tuple = scenes.get(scene), context = tuple.context, canvas = context.canvas;\n const dragger = this.#dragger;\n if (!Utils.isNull(dragger)) {\n dragger.unregister(canvas);\n }\n canvas.removeEventListener('click', this._mouseDownUpHandler, false);\n canvas.removeEventListener('touchend', this._mouseDownUpHandler, false);\n canvas.removeEventListener('mousedown', this._mouseDownUpHandler, false);\n canvas.removeEventListener('mouseup', this._mouseDownUpHandler, false);\n // canvas.removeEventListener('touchmove', this._mouseDownUpHandler);\n canvas.removeEventListener('touchstart', this._mouseDownUpHandler);\n canvas.removeEventListener('mouseleave', this._mouseleaveHandler, false);\n canvas.removeEventListener('mousemove', this._mousemoveHandler, false);\n // remove\n canvas.remove();\n scenes.delete(scene);\n }\n }\n _requestDraw(scene) {\n const handles = this._handles;\n if (handles.has(scene)) {\n cancelAnimationFrame(handles.get(scene));\n }\n const throttle = () => {\n this.draw(scene);\n return requestAnimationFrame(() => { });\n };\n handles.set(scene, throttle());\n }\n #canvasCssStyle;\n draw(scene) {\n const scenes = this._scenes, handles = this._handles;\n if (!Utils.isNull(scene)) {\n if (scene.adapter !== this) {\n // not a pertinent stage anymore\n if (scenes.has(scene)) {\n scenes.delete(scene);\n handles.get(scene);\n }\n return;\n }\n if (!scenes.has(scene)) {\n // forgiving behavior (call initialize() if it's the case)\n this.initialize(scene);\n return;\n }\n if (handles.has(scene)) {\n // already in the drawing loop, reset\n cancelAnimationFrame(handles.get(scene));\n }\n const formerHitTarget = this._hitTarget;\n const items = scene.datasource || [];\n // reset hit target\n this._hitTarget = null;\n // clear stage\n const tuple = scenes.get(scene), context = tuple.context, canvas = context.canvas;\n this.#canvasCssStyle = getComputedStyle(canvas);\n context.resetTransform();\n context.clearRect(0, 0, canvas.width, canvas.height);\n // viewbox\n const m = tuple.transformMatrix;\n context.setTransform(m);\n // hit test\n const pointer = this._pointer, offset = tuple.offset, point = Number.isNaN(pointer.page.x) || Number.isNaN(pointer.page.y) ? null : { x: pointer.page.x - offset.x, y: pointer.page.y - offset.y };\n // draw recursively\n for (let drawable of items) {\n this._draw(scene, context, drawable, { transformMatrix: m }, point);\n }\n // check hit target\n const currentHitTarget = this._hitTarget;\n if (currentHitTarget != formerHitTarget) {\n if (!Utils.isNull(formerHitTarget)) {\n if (formerHitTarget instanceof Element) {\n formerHitTarget.dispatchEvent(new DrawableEvent('out', formerHitTarget, this._scopeEvent, m));\n }\n scene.dispatchEvent(new DrawableEvent('itemout', formerHitTarget, this._scopeEvent, m));\n }\n if (!Utils.isNull(currentHitTarget)) {\n if (currentHitTarget instanceof Element) {\n currentHitTarget.dispatchEvent(new DrawableEvent('over', currentHitTarget, this._scopeEvent, m));\n }\n scene.dispatchEvent(new DrawableEvent('itemover', currentHitTarget, this._scopeEvent, m));\n }\n }\n // do not loop\n // this._requestDraw(scene);\n }\n }\n _draw(scene, ctx, item, state, point) {\n item.stage ??= scene;\n if (isDrawable(item)) {\n if (item.hide) {\n return;\n }\n }\n // store parent matrix value for dragging purposes\n if (isUiObject(item) && item.draggable && !item.hide && !item.inert) {\n SETVAR(item, PARENT_MATRIX_VAR, ctx.getTransform().inverse());\n }\n let t;\n if (isUiObject(item)) {\n t = item.transformMatrix;\n if (!Utils.isNull(t) && !Matrix2D.isIdentity(t)) {\n ctx.transform(t.a, t.b, t.c, t.d, t.e, t.f);\n }\n }\n let contextPresentationState = state;\n if (isPresentationObject(item)) {\n //const stateWithWorldTransformMatrix = Utils.extend({}, state, { transformMatrix: ctx.getTransform() });\n contextPresentationState = PresentationState.combine(item, state, ctx.getTransform());\n // set presentation state\n this._setPresentationState(ctx, contextPresentationState);\n }\n if (isShape(item) || item instanceof ShapeElement) {\n this._drawShape(ctx, item, point);\n }\n else if (isText(item) || item instanceof PacemTextElement) {\n this._drawText(ctx, item, point);\n }\n else if (isImage(item) || item instanceof PacemImageElement) {\n this._drawImage(ctx, item, point);\n }\n else if (isGroup(item) || item instanceof PacemGroupElement) {\n for (let child of item.childDrawables || []) {\n this._draw(scene, ctx, child, contextPresentationState, point);\n }\n }\n // store global matrix value for debugging purposes\n if (isUiObject(item) && item.draggable && !item.hide && !item.inert) {\n SETVAR(item, WORLD_MATRIX_VAR, ctx.getTransform().inverse());\n }\n // reset presentation state\n this._setPresentationState(ctx, state);\n }\n _setPresentationState(ctx, item) {\n ctx.setTransform(item.transformMatrix);\n if (!Utils.isNullOrEmpty(item.stroke) && !isNone(item.stroke)) {\n ctx.strokeStyle = item.stroke;\n }\n else {\n ctx.strokeStyle = 'transparent';\n }\n if (!Utils.isNullOrEmpty(item.lineWidth)) {\n ctx.lineWidth = item.lineWidth;\n }\n else {\n ctx.lineWidth = 0;\n }\n if (!Utils.isNullOrEmpty(item.dashArray)) {\n ctx.setLineDash(item.dashArray);\n }\n else {\n ctx.setLineDash([]);\n }\n if (!Utils.isNullOrEmpty(item.lineCap)) {\n ctx.lineCap = item.lineCap;\n }\n else {\n ctx.lineCap = 'butt';\n }\n if (!Utils.isNullOrEmpty(item.lineJoin)) {\n ctx.lineJoin = item.lineJoin;\n }\n else {\n ctx.lineJoin = 'miter';\n }\n if (typeof item.fill === 'object' && !Utils.isNullOrEmpty(item.fill)) {\n const { stops } = item.fill;\n let gradient;\n if (isLinearGradient(item.fill)) {\n // linear gradient\n const { start, end } = item.fill;\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n }\n else if (isRadialGradient(item.fill)) {\n // radial gradient\n const { center, radius } = item.fill;\n gradient = ctx.createRadialGradient(center.x, center.y, radius, center.x, center.y, radius);\n }\n else {\n throw new Error('Unmanaged gradient type.');\n }\n for (let stop of stops) {\n gradient.addColorStop(stop.offset, stop.color);\n }\n ctx.fillStyle = gradient;\n }\n else if (!Utils.isNullOrEmpty(item.fill) && typeof item.fill === 'string' && !isNone(item.fill)) {\n ctx.fillStyle = item.fill;\n }\n else {\n ctx.fillStyle = 'transparent';\n }\n if (!Utils.isNullOrEmpty(item.opacity)) {\n ctx.globalAlpha = item.opacity;\n }\n else {\n ctx.globalAlpha = 1.0;\n }\n }\n _drawImage(ctx, item, point) {\n const CANVAS_IMAGESOURCE_VAR = 'pacem:2d-canvas-imagesrc';\n let img = GETVAR(item, CANVAS_IMAGESOURCE_VAR);\n const imgLoadHandler = () => {\n let dw = img.naturalWidth, dh = img.naturalHeight, w = item.width, h = item.height;\n if (w > 0 && h > 0) {\n }\n else if (w > 0) {\n h = dh * w / dw;\n }\n else if (h > 0) {\n w = dw * h / dh;\n }\n else {\n w = dw;\n h = dh;\n }\n if (!this._dragging\n && !item.inert /* is hit-test visible? */\n && !Utils.isNull(point)) {\n const path2D = new Path2D(`M ${item.x} ${item.y} h ${w} v ${h} H ${item.x} Z`);\n if (ctx.isPointInPath(path2D, point.x, point.y)) {\n // overwrite current hit-target (last one wins)\n this._hitTarget = item;\n }\n }\n ctx.globalAlpha = fallback(item.opacity, 1);\n ctx.drawImage(img, item.x, item.y, w, h);\n };\n if (Utils.isNull(img)) {\n img = new Image();\n img.src = item.src;\n img.onload = () => {\n SETVAR(item, CANVAS_IMAGESOURCE_VAR, img);\n imgLoadHandler();\n };\n }\n else {\n imgLoadHandler();\n }\n }\n _drawText(ctx, item, point) {\n const defaults = this.DefaultShapeValues;\n const color = ctx.fillStyle = fallback(item.color, defaults.stroke);\n const m = ctx.getTransform(), fontSize = item.fontSize > 0 ? `${item.fontSize}px` : this.#canvasCssStyle.fontSize, fontStyle = item.fontStyle || this.#canvasCssStyle.fontStyle, fontWeight = item.fontWeight || this.#canvasCssStyle.fontWeight;\n ctx.font = `${fontStyle} ${fontWeight} ${fontSize} ${(item.fontFamily ?? this.#canvasCssStyle.fontFamily)}`;\n ctx.textAlign = item.textAnchor === 'middle' ? 'center' : item.textAnchor;\n ctx.fillText(item.text, item.anchor.x, item.anchor.y);\n ctx.globalAlpha = fallback(item.opacity, 1);\n const hasColor = !isNone(color);\n if (!this._dragging\n && !item.inert /* is hit-test visible? */\n && !Utils.isNull(point)) {\n const bbox = ctx.measureText(item.text);\n const width = bbox.width, height = bbox.actualBoundingBoxAscent + bbox.actualBoundingBoxDescent, x = item.anchor.x - bbox.actualBoundingBoxLeft, y = item.anchor.y - bbox.actualBoundingBoxAscent;\n const path2D = new Path2D(`M ${x} ${y} h ${width} v ${height} H ${x} z`);\n if (hasColor && ctx.isPointInPath(path2D, point.x, point.y)) {\n // overwrite current hit-target (last one wins)\n this._hitTarget = item;\n }\n }\n }\n _drawShape(ctx, item, point) {\n if (Utils.isNullOrEmpty(item?.pathData)) {\n return;\n }\n ctx.beginPath();\n // Path2D\n const hasFill = typeof ctx.fillStyle !== 'string' || !isNone(ctx.fillStyle), hasStroke = typeof ctx.strokeStyle !== 'string' || !isNone(ctx.strokeStyle);\n var path2D = new Path2D(item.pathData);\n if (!this._dragging\n && !item.inert /* is hit-test visible? */\n && !Utils.isNull(point)) {\n if ((hasFill && ctx.isPointInPath(path2D, point.x, point.y))\n || (hasStroke && ctx.isPointInStroke(path2D, point.x, point.y))) {\n // overwrite current hit-target (last one wins)\n this._hitTarget = item;\n }\n }\n if (hasStroke) {\n ctx.stroke(path2D);\n }\n if (hasFill) {\n ctx.fill(path2D);\n }\n const hasEnoughVertices = !Utils.isNullOrEmpty(item.vertices) && item.vertices.length > 1, hasMarkerEnd = !Utils.isNull(item.markerEnd), hasMarkerStart = !Utils.isNull(item.markerStart), hasMarkerMid = !Utils.isNull(item.markerMid);\n if (hasMarkerEnd || hasMarkerMid || hasMarkerStart) {\n if (!hasEnoughVertices) {\n this.log(Logging.LogLevel.Warn, \"Not enough vertices were explicited in order to make markers renderable.\");\n }\n }\n // WebGL: we can render markers only if vertices are explicit\n if (hasEnoughVertices) {\n const matrix = ctx.getTransform();\n if (hasMarkerStart) {\n const marker = item.markerEnd, from = item.vertices[1], to = item.vertices[0];\n const orientation = Math.atan2(to.y - from.y, to.x - from.x);\n this._drawMarker(ctx, marker, to, orientation);\n }\n if (hasMarkerMid) {\n const marker = item.markerEnd;\n for (let j = 1; j < item.vertices.length - 1; j++) {\n // reset transform, just in case\n ctx.setTransform(matrix);\n const from = item.vertices[j], to = item.vertices[j + 1];\n const orientation = Math.atan2(to.y - from.y, to.x - from.x);\n this._drawMarker(ctx, marker, to, orientation);\n }\n }\n if (hasMarkerEnd) {\n // reset transform, just in case\n ctx.setTransform(matrix);\n const marker = item.markerEnd, from = item.vertices[item.vertices.length - 2], to = item.vertices[item.vertices.length - 1];\n const orientation = Math.atan2(to.y - from.y, to.x - from.x);\n this._drawMarker(ctx, marker, to, orientation);\n }\n }\n }\n _drawMarker(ctx, marker, point, orientation) {\n const defaults = this.DefaultShapeValues;\n const refX = marker.ref?.x || 0, refY = marker.ref?.y || 0;\n const width = (marker.width || 1) * ctx.lineWidth, height = (marker.width || 1) * ctx.lineWidth;\n let viewbox = marker.viewbox, stage = { x: 0, y: 0, width: width, height: height };\n if (Utils.isNull(viewbox)) {\n viewbox = stage;\n }\n // prepare\n const mscale = { a: stage.width / viewbox.width, d: stage.height / viewbox.height }; // Rect.findTransform({ x: 0, y: 0, width: viewbox.width, height: viewbox.height }, stage, 'stretch', 'left', 'top');\n // execute\n ctx.translate(point.x, point.y);\n ctx.rotate(orientation);\n ctx.scale(mscale.a, mscale.d);\n ctx.translate(-refX, -refY);\n ctx.fillStyle = fallback(marker.fill, defaults.fill);\n ctx.strokeStyle = fallback(marker.stroke, defaults.stroke);\n // Path2D\n const hasMarkerFill = !isNone(marker.fill), hasMarkerStroke = !isNone(marker.stroke);\n var markerPath2D = new Path2D(marker.pathData);\n if (hasMarkerFill) {\n ctx.fill(markerPath2D);\n }\n if (hasMarkerStroke) {\n ctx.stroke(markerPath2D);\n }\n }\n};\nPacemCanvasAdapterElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-canvas-adapter' })\n], PacemCanvasAdapterElement);\nexport { PacemCanvasAdapterElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, CustomElementUtils, CustomEventUtils, Utils, UI, avoidHandler } from '@pacem/pacem-core';\nimport { Matrix2D } from '@pacem/pacem-foundation';\nimport { UiElement, ShapeElement } from '../types';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { Pacem2DAdapterElement } from '../adapter';\nimport { getStageOptions } from '../stage';\nimport { AdapterUtils } from './utils';\nimport { PacemImageElement } from '../image';\nimport { PacemTextElement } from '../text';\nimport { isGroup, isShape, isText, isImage, isUiObject, isPresentationObject, isDrawable, isLinearGradient, isRadialGradient } from '../drawing';\n//namespace Pacem.Components.Drawing {\nconst SVG_NS = 'http://www.w3.org/2000/svg', DRAWABLE_VAR = 'pacem:2-svg-drawable', STAGE_VAR = 'pacem:2d-svg-stage', GETVAR = CustomElementUtils.getAttachedPropertyValue, SETVAR = CustomElementUtils.setAttachedPropertyValue, DELVAR = CustomElementUtils.deleteAttachedPropertyValue;\nfunction fallback(v, f) {\n return Utils.isNull(v) ? f : v;\n}\nfunction replaceChildAt(parent, newChild, targetIndex) {\n if (targetIndex >= parent.children.length) {\n parent.appendChild(newChild);\n return null;\n }\n else {\n return parent.replaceChild(newChild, parent.children.item(targetIndex));\n }\n}\nlet PacemSvgAdapterElement = class PacemSvgAdapterElement extends Pacem2DAdapterElement {\n constructor() {\n super(...arguments);\n this._hitTarget = null;\n this._dragInitHandler = (evt) => {\n const args = evt.detail, el = args.element, drawable = GETVAR(el, DRAWABLE_VAR), stageTransformMatrix = drawable.stage.transformMatrix, initialMatrix = drawable.transformMatrix ?? Matrix2D.identity;\n args.data = {\n stageTransformMatrix, item: drawable,\n initialTransformMatrix: initialMatrix\n };\n const reject = AdapterUtils.itemDispatch(drawable, evt, { x: 0, y: 0 });\n if (reject) {\n // reject dragging\n evt.preventDefault();\n }\n };\n this._draggingHandler = (evt) => {\n avoidHandler(evt);\n this.#dragging = true;\n const el = evt.detail.element;\n const data = evt.detail.data;\n const args = evt.detail;\n const screenOffset = { x: (args.currentPosition.x - args.origin.x) * data.stageTransformMatrix.a, y: (args.currentPosition.y - args.origin.y) * data.stageTransformMatrix.d };\n const offset = {\n x: screenOffset.x + data.initialTransformMatrix.e,\n y: screenOffset.y + data.initialTransformMatrix.f\n }, \n // this is not correct when item or any of its parents have been rotated!\n stageOffset = {\n x: screenOffset.x + data.stageTransformMatrix.e,\n y: screenOffset.y + data.stageTransformMatrix.f\n };\n //console.log(`current pos: ${args.currentPosition.x},${args.currentPosition.y}`);\n //console.log(`origin pos: ${args.origin.x},${args.origin.y}`);\n //console.log(`offset: ${offset.x},${offset.y}`);\n //console.log(data.stageTransformMatrix);\n //console.log(el.style.transform); console.log(data.initialTransformMatrix);\n const rejected = AdapterUtils.itemDispatch(data.item, evt, stageOffset);\n if (!rejected) {\n const init = data.initialTransformMatrix;\n el.style.transform = `matrix(${init.a},${init.b},${init.c},${init.d},${offset.x},${offset.y})`;\n }\n };\n this._dragEndHandler = (evt) => {\n this.#dragging = false;\n const args = evt.detail, el = args.element, data = args.data, transform = Utils.deserializeTransform(el.style);\n // store transform\n const offset = { x: transform.e, y: transform.f };\n if (data.item instanceof UiElement) {\n data.item.translateX = offset.x;\n data.item.translateY = offset.y;\n }\n else {\n const init = data.initialTransformMatrix, actual = { a: init.a, b: init.b, c: init.c, d: init.d, e: offset.x, f: offset.y };\n Utils.extend(data.item, { transformMatrix: actual });\n }\n el.style.transform = '';\n AdapterUtils.itemDispatch(data.item, evt, offset);\n };\n this._mouseleaveHandler = (evt) => {\n if (this.#dragging) {\n return;\n }\n const hitTarget = this._hitTarget;\n if (Utils.isNull(hitTarget)) {\n return;\n }\n this._hitTarget = null;\n if (!Utils.isNull(hitTarget)) {\n this.#dragger.unregister(this._items.get(hitTarget));\n AdapterUtils.itemDispatch(hitTarget, 'out', evt);\n }\n };\n this._mousemoveHandler = (evt) => {\n var pt = CustomEventUtils.getEventCoordinates(evt).client;\n if (!this.#dragging) {\n // not dragging around\n var d = null;\n const root = evt.target.getRootNode();\n root.elementsFromPoint(pt.x, pt.y).find(i => {\n d = GETVAR(i, DRAWABLE_VAR);\n return d && !d.inert;\n });\n var old = this._hitTarget, val = d;\n if (Utils.isNull(d && d.stage) || !this._scenes.has(d.stage) || d.inert) {\n val = null;\n }\n const hitTarget = this._hitTarget = val;\n if (val !== old) {\n if (!Utils.isNull(old)) {\n this.#dragger.unregister(this._items.get(old));\n AdapterUtils.itemDispatch(old, 'out', evt);\n }\n if (!Utils.isNull(val)) {\n if (val.draggable) {\n this.#dragger.register(this._items.get(val));\n }\n AdapterUtils.itemDispatch(val, 'over', evt);\n }\n }\n if (Utils.isNull(hitTarget)) {\n // dispatch only if no hit target\n const svg = evt.currentTarget;\n const stage = GETVAR(svg, STAGE_VAR);\n if (!Utils.isNull(stage)) {\n AdapterUtils.stageDispatch(stage, 'move', evt);\n }\n }\n }\n };\n this._mouseDownUpHandler = (evt) => {\n const svg = evt.currentTarget;\n if (svg instanceof SVGSVGElement) {\n const stage = GETVAR(svg, STAGE_VAR), hitTarget = this._hitTarget;\n const type = evt.type.replace(/^mouse/, '');\n const opts = getStageOptions(stage);\n if (CustomEventUtils.matchModifiers(evt, opts.clickModifiers)) {\n if (!Utils.isNull(hitTarget) && hitTarget.stage === stage) {\n AdapterUtils.itemDispatch(hitTarget, type, evt);\n }\n else {\n AdapterUtils.stageDispatch(stage, type, evt);\n }\n }\n }\n };\n this._scenes = new WeakMap();\n this._markers = new WeakMap();\n this._gradients = new WeakMap();\n this._items = new WeakMap();\n }\n snapshot(stage, background, type, quality) {\n if (this._scenes.has(stage)) {\n const svg = this._scenes.get(stage);\n return this.snapshotElement(svg, background, type, quality);\n }\n else {\n return Promise.resolve(null);\n }\n }\n getTransformMatrix(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n return scenes.get(scene).getScreenCTM().inverse();\n }\n return Matrix2D.identity;\n }\n #dragger;\n viewActivatedCallback() {\n super.viewActivatedCallback();\n const dragDrop = this.#dragger = document.createElement(P + '-drag-drop');\n dragDrop.mode = UI.DragDataMode.Self;\n // append\n const shell = CustomElementUtils.findAncestorShell(this);\n shell.appendChild(dragDrop);\n dragDrop.addEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n }\n disconnectedCallback() {\n const dragger = this.#dragger;\n if (!Utils.isNull(dragger)) {\n dragger.removeEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n dragger.remove();\n }\n super.disconnectedCallback();\n }\n invalidateSize(scene, size) {\n const scenes = this._scenes;\n if (!Utils.isNull(scene) && !Utils.isNullOrEmpty(size)) {\n if (scenes.has(scene)) {\n var svg = scenes.get(scene);\n svg.setAttribute('width', size.width + '');\n svg.setAttribute('height', size.height + '');\n const rect = scene.viewbox, aspectRatio = scene.aspectRatio;\n if (AdapterUtils.isValidViewbox(rect)) {\n svg.setAttribute('viewBox', `${rect.x} ${rect.y} ${rect.width} ${rect.height}`);\n }\n else {\n svg.removeAttribute('viewBox');\n }\n if (Utils.isNullOrEmpty(aspectRatio) || typeof aspectRatio === 'string') {\n svg.removeAttribute('preserveAspectRatio');\n }\n else {\n svg.setAttribute('preserveAspectRatio', `xM${aspectRatio.x.substring(1)}YM${aspectRatio.y.substring(1)} ${(aspectRatio.slice ? 'slice' : 'meet')}`);\n }\n }\n }\n }\n initialize(scene) {\n if (Utils.isNull(scene)) {\n throw 'Provided scene is null or undefined.';\n }\n const scenes = this._scenes;\n // already in the store?\n if (scenes.has(scene)) {\n return scenes.get(scene);\n }\n const stage = scene.stage;\n // empty stage DOM and clear dictionary\n stage.innerHTML = '';\n this._items = new WeakMap();\n var svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('part', 'stage');\n SETVAR(svg, STAGE_VAR, scene);\n stage.appendChild(svg);\n scenes.set(scene, svg);\n const options = { passive: false, capture: true };\n svg.addEventListener('mousemove', this._mousemoveHandler, false);\n svg.addEventListener('click', this._mouseDownUpHandler, false);\n svg.addEventListener('mousedown', this._mouseDownUpHandler, false);\n svg.addEventListener('mouseup', this._mouseDownUpHandler, false);\n svg.addEventListener('mouseleave', this._mouseleaveHandler, false);\n // draw right away\n // this.draw(scene);\n return svg;\n }\n dispose(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n var svg = scenes.get(scene);\n svg.removeEventListener('mousemove', this._mousemoveHandler);\n svg.removeEventListener('click', this._mouseDownUpHandler);\n svg.removeEventListener('mousedown', this._mouseDownUpHandler);\n svg.removeEventListener('mouseup', this._mouseDownUpHandler);\n svg.removeEventListener('mouseleave', this._mouseleaveHandler);\n // remove\n DELVAR(svg, STAGE_VAR);\n svg.remove();\n scenes.delete(scene);\n }\n }\n getHitTarget(scene) {\n return this._hitTarget;\n }\n draw(scene, item, deepRedraw = false) {\n const scenes = this._scenes, dict = this._items;\n if (!Utils.isNull(scene)) {\n if (scene.adapter === this) {\n if (!scenes.has(scene)) {\n // forgiving behavior (call initialize() if it's the case)\n this.initialize(scene);\n }\n }\n else {\n if (scenes.has(scene)) {\n scenes.delete(scene);\n }\n return;\n }\n }\n else {\n return;\n }\n var items = scene.datasource, flow = true, parent = scenes.get(scene);\n // item provided?\n if (!Utils.isNull(item) && dict.has(item)) {\n items = [item];\n parent = dict.get(item).parentNode;\n flow = false;\n }\n if (flow) {\n // sweep everything, quick and dirty\n parent.innerHTML = '<defs></defs>';\n this._markers = new WeakMap();\n }\n this._draw(scene, parent, items || [], flow, deepRedraw);\n }\n #dragging;\n _hasItems(object) {\n return isGroup(object);\n }\n _disposeSvg(el) {\n if (!Utils.isNull(el)) {\n var drawable = GETVAR(el, DRAWABLE_VAR);\n DELVAR(el, DRAWABLE_VAR);\n this._items.delete(drawable);\n }\n }\n _draw(scene, parent, items, flow, deepRedraw) {\n const dict = this._items;\n // children counter\n let j = 0;\n if (parent.firstElementChild instanceof SVGDefsElement) {\n j++;\n }\n if (!Utils.isNullOrEmpty(items)) {\n for (let item of items) {\n item.stage ??= scene;\n let el;\n if (!dict.has(item)) {\n el = this._buildSVGElement(item);\n SETVAR(el, DRAWABLE_VAR, item);\n this._disposeSvg(replaceChildAt(parent, el, j));\n dict.set(item, el);\n }\n else {\n el = dict.get(item);\n if (el.parentNode !== parent) {\n this._disposeSvg(replaceChildAt(parent, el, j));\n }\n }\n if (isDrawable(item)) {\n if (item.hide) {\n el.setAttribute('display', 'none');\n }\n else {\n el.removeAttribute('display');\n }\n el.style.transform = '';\n }\n if (isShape(item)) {\n const path = el;\n path.setAttribute('d', fallback(item.pathData, 'M0,0'));\n // markers\n for (let { marker, suffix } of [{ marker: item.markerStart, suffix: 'start' }, { marker: item.markerEnd, suffix: 'end' }, { marker: item.markerMid, suffix: 'mid' }]) {\n if (marker) {\n const markerSvg = this._ensureMarker(parent, marker);\n path.setAttribute('marker-' + suffix, `url(#${markerSvg.id})`);\n }\n else {\n path.removeAttribute('marker-' + suffix);\n }\n }\n }\n else if (isText(item)) {\n const text = el;\n text.textContent = item.text;\n text.style.fill = Utils.isNullOrEmpty(item.color) ? '' : item.color;\n text.style.fontFamily = Utils.isNullOrEmpty(item.fontFamily) ? '' : item.fontFamily;\n //if (item.fontSize > 0) {\n // text.setAttribute('font-size', item.fontSize.toString());\n //} else {\n // text.removeAttribute('font-size');\n //}\n text.style.fontSize = Utils.isNull(item.fontSize) ? '' : item.fontSize + 'px';\n if (!Utils.isNullOrEmpty(item.fontWeight)) {\n text.style.fontWeight = item.fontWeight;\n }\n if (!Utils.isNullOrEmpty(item.fontStyle)) {\n text.style.fontStyle = item.fontStyle;\n }\n text.setAttribute('text-anchor', fallback(item.textAnchor, 'start'));\n if (!Utils.isNull(item.anchor)) {\n text.setAttribute('x', item.anchor.x.toString());\n text.setAttribute('y', item.anchor.y.toString());\n }\n else {\n text.removeAttribute('x');\n text.removeAttribute('y');\n }\n }\n else if (isImage(item)) {\n const img = el;\n img.setAttribute('href', item.src);\n img.setAttribute('preserveAspectRatio', 'none');\n if (item.width > 0) {\n img.setAttribute('width', '' + item.width);\n }\n else {\n img.removeAttribute('width');\n }\n if (item.height > 0) {\n img.setAttribute('height', '' + item.height);\n }\n else {\n img.removeAttribute('height');\n }\n if (!Utils.isNull(item.x)) {\n img.setAttribute('x', '' + item.x);\n }\n else {\n img.removeAttribute('x');\n }\n if (!Utils.isNull(item.y)) {\n img.setAttribute('y', '' + item.y);\n }\n else {\n img.removeAttribute('y');\n }\n }\n if (isUiObject(item)) {\n const t = item.transformMatrix;\n if (Utils.isNull(t) || Matrix2D.isIdentity(t)) {\n el.removeAttribute('transform');\n }\n else {\n el.setAttribute('transform', `matrix(${t.a} ${t.b} ${t.c} ${t.d} ${t.e} ${t.f})`);\n }\n const opacity = fallback(item.opacity, 1);\n if (opacity === 1) {\n el.removeAttribute('opacity');\n }\n else {\n el.setAttribute('opacity', '' + opacity);\n }\n }\n if (isPresentationObject(item)) {\n if (Utils.isNullOrEmpty(item.fill)) {\n el.removeAttribute('fill');\n }\n else if (typeof item.fill === 'string') {\n el.setAttribute('fill', item.fill);\n }\n else {\n const grad = this._ensureGradient(parent, item.fill);\n el.setAttribute('fill', `url(#${grad.id})`);\n }\n if (Utils.isNullOrEmpty(item.stroke)) {\n el.removeAttribute('stroke');\n }\n else {\n el.setAttribute('stroke', item.stroke);\n }\n if (Utils.isNullOrEmpty(item.dashArray)) {\n el.removeAttribute('stroke-dasharray');\n }\n else {\n el.setAttribute('stroke-dasharray', item.dashArray.join(' '));\n }\n if (Utils.isNullOrEmpty(item.lineCap)) {\n el.removeAttribute('stroke-linecap');\n }\n else {\n el.setAttribute('stroke-linecap', item.lineCap);\n }\n if (Utils.isNullOrEmpty(item.lineJoin)) {\n el.removeAttribute('stroke-linejoin');\n }\n else {\n el.setAttribute('stroke-linejoin', item.lineJoin);\n }\n if (Utils.isNullOrEmpty(item.lineWidth)) {\n el.removeAttribute('stroke-width');\n }\n else {\n el.setAttribute('stroke-width', '' + item.lineWidth);\n }\n //let css = '';\n //if (!Utils.isNullOrEmpty(item.dashArray)) {\n // css += `stroke-dasharray: ${item.dashArray.join(',')};`;\n //}\n //if (!Utils.isNullOrEmpty(item.lineCap)) {\n // css += `stroke-linecap: ${item.lineCap};`;\n //}\n //if (!Utils.isNullOrEmpty(item.lineJoin)) {\n // css += `stroke-linejoin: ${item.lineJoin};`;\n //}\n //el.style.cssText = css;\n //el.setAttribute('stroke-width', '' + fallback(item.lineWidth, defaults.lineWidth));\n }\n // hit test visibility\n if (item.inert) {\n el.style.pointerEvents = 'none';\n }\n else {\n el.style.pointerEvents = '';\n }\n if ((flow || deepRedraw) && this._hasItems(item)) {\n // recursion\n this._draw(scene, el, item.childDrawables, true, deepRedraw);\n }\n j++;\n }\n }\n if (flow) {\n // remove exceeding children (except defs)\n for (let k = parent.children.length - 1; k >= j; k--) {\n const el = parent.children.item(k);\n this._disposeSvg(el);\n el.remove();\n }\n }\n }\n _buildSVGElement(item) {\n if (isShape(item) || item instanceof ShapeElement) {\n return document.createElementNS(SVG_NS, 'path');\n }\n if (isText(item) || item instanceof PacemTextElement) {\n return document.createElementNS(SVG_NS, 'text');\n }\n if (isImage(item) || item instanceof PacemImageElement) {\n return document.createElementNS(SVG_NS, 'image');\n }\n return document.createElementNS(SVG_NS, 'g');\n }\n _ensureGradient(parent, gradient) {\n const store = this._gradients;\n if (!store.has(parent)) {\n store.set(parent, new WeakMap());\n }\n const map = store.get(parent);\n // linear or radial?\n const isLinear = isLinearGradient(gradient), isRadial = isRadialGradient(gradient);\n if (map.has(gradient)) {\n const current = map.get(gradient);\n if ((isLinear && current instanceof SVGLinearGradientElement)\n || (isRadial && current instanceof SVGRadialGradientElement)) {\n // remove from DOM\n current.remove();\n // remove from memoizer\n map.delete(gradient);\n }\n }\n if (!map.has(gradient)) {\n // <defs>\n let defsContainer = parent;\n let defs;\n while (Utils.isNull(defs = defsContainer.querySelector(':scope > defs'))) {\n const parent1 = defsContainer.parentElement;\n if (parent1 instanceof SVGElement) {\n defsContainer = parent1;\n }\n else {\n break;\n }\n }\n if (Utils.isNull(defs)) {\n throw new Error('Must provide a <defs> element.');\n }\n var gradientSvg = null;\n if (isLinear) {\n // create linear gradient node\n gradientSvg = document.createElementNS(SVG_NS, 'linearGradient');\n }\n else if (isRadialGradient(gradient)) {\n // create radial gradient node\n gradientSvg = document.createElementNS(SVG_NS, 'radialGradient');\n }\n else {\n throw new Error('Unmanaged gradient type.');\n }\n gradientSvg.setAttribute('gradientUnits', 'userSpaceOnUse');\n gradientSvg.setAttribute('id', `grad-${Utils.uniqueCode()}`);\n defs.appendChild(gradientSvg);\n map.set(gradient, gradientSvg);\n }\n const retval = map.get(gradient);\n if (isLinear) {\n // linear\n retval.setAttribute('x1', gradient.start.x.toString());\n retval.setAttribute('y1', gradient.start.y.toString());\n retval.setAttribute('x2', gradient.end.x.toString());\n retval.setAttribute('y2', gradient.end.y.toString());\n }\n else if (isRadial) {\n retval.setAttribute('cx', gradient.center.x.toString());\n retval.setAttribute('cy', gradient.center.y.toString());\n retval.setAttribute('r', gradient.radius.toString());\n }\n // stops\n let j = 0;\n for (let stop of gradient.stops) {\n while (retval.children.length <= j) {\n const stopSvgAdd = document.createElementNS(SVG_NS, 'stop');\n retval.appendChild(stopSvgAdd);\n }\n const stopSvg = retval.children.item(j);\n stopSvg.setAttribute('offset', (stop.offset * 100) + '%');\n stopSvg.setAttribute('stop-color', stop.color);\n if (!Utils.isNull(stop.opacity)) {\n stopSvg.setAttribute('stop-opacity', stop.opacity.toString());\n }\n j++;\n }\n while (retval.children.length > gradient.stops.length) {\n const lastChild = retval.children.item(retval.children.length - 1);\n retval.removeChild(lastChild);\n }\n return retval;\n }\n _ensureMarker(parent, marker) {\n const store = this._markers;\n if (!store.has(parent)) {\n store.set(parent, new WeakMap());\n }\n const map = store.get(parent);\n if (!map.has(marker)) {\n const markerSvg = document.createElementNS(SVG_NS, 'marker');\n map.set(marker, markerSvg);\n const markerPath = document.createElementNS(SVG_NS, 'path');\n markerSvg.appendChild(markerPath);\n markerSvg.setAttribute('id', 'mark' + Utils.uniqueCode());\n let defsContainer = parent;\n let defs;\n while (Utils.isNull(defs = defsContainer.querySelector(':scope > defs'))) {\n const parent1 = defsContainer.parentElement;\n if (parent1 instanceof SVGElement) {\n defsContainer = parent1;\n }\n else {\n break;\n }\n }\n if (Utils.isNull(defs)) {\n throw new Error('Must provide a <defs> element.');\n }\n defs.appendChild(markerSvg);\n }\n const markerSvg = map.get(marker), markerPath = markerSvg.firstElementChild;\n // marker attributes\n markerSvg.setAttribute('orient', 'auto-start-reverse');\n if (!Utils.isNullOrEmpty(marker.viewbox)) {\n markerSvg.setAttribute('viewBox', `${marker.viewbox.x} ${marker.viewbox.y} ${marker.viewbox.width} ${marker.viewbox.height}`);\n }\n else {\n markerSvg.removeAttribute('viewBox');\n }\n if (!Utils.isNullOrEmpty(marker.ref)) {\n markerSvg.setAttribute('refX', marker.ref.x.toString());\n markerSvg.setAttribute('refY', marker.ref.y.toString());\n }\n else {\n markerSvg.removeAttribute('refX');\n markerSvg.removeAttribute('refY');\n }\n if (marker.height > 0) {\n markerSvg.setAttribute('markerHeight', marker.height.toString());\n }\n else {\n markerSvg.removeAttribute('markerHeight');\n }\n if (marker.width > 0) {\n markerSvg.setAttribute('markerWidth', marker.width.toString());\n }\n else {\n markerSvg.removeAttribute('markerWidth');\n }\n // path attributes\n markerPath.setAttribute('d', marker.pathData);\n if (!Utils.isNullOrEmpty(marker.fill)) {\n markerPath.setAttribute('fill', marker.fill);\n }\n else {\n markerPath.removeAttribute('fill');\n }\n if (!Utils.isNullOrEmpty(marker.stroke)) {\n markerPath.setAttribute('stroke', marker.stroke);\n }\n else {\n markerPath.removeAttribute('stroke');\n }\n return markerSvg;\n }\n};\nPacemSvgAdapterElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-svg-adapter' })\n], PacemSvgAdapterElement);\nexport { PacemSvgAdapterElement };\n","import { DeepMerger } from '@pacem/pacem-foundation';\nimport * as Output from './index';\nDeepMerger.merge(Output);\n"],"names":["TAG_MIDDLE_NAME","isDrawable","object","Utils","isNull","isUiObject","isGradient","isArray","stops","isLinearGradient","Point","isPoint","start","end","isRadialGradient","center","radius","PresentationState","combine","lhs","rhs","precomputedMatrix","opacity","transformMatrix","Matrix2D","multiply","dashArray","fill","lineCap","lineJoin","lineWidth","stroke","isPresentationObject","isShape","isGroup","isNullOrEmpty","isText","isImage","UI2DEvent","CustomUIEvent","constructor","type","eventInit","originalEvent","super","this","project","pt","x","screenX","y","screenY","Shape","empty","pathData","vertices","boundingRect","width","height","DragEvent","DrawableEvent","args","m","detail","bubbles","cancelable","StageEvent","__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","ASPECTRATIO_PATTERN","aspectRatioPropertyConverter","convert","attr","regArr","exec","toLowerCase","slice","convertBack","val","substring","DEFAULT_STAGE_OPTIONS","panControl","zoomControl","panModifiers","EventKeyModifier","AltKey","zoomModifiers","clickModifiers","getStageOptions","stage","options","Pacem2DElement","extend","Components","PacemItemsContainerElement","identity","_resizeHandler","evt","size","left","top","adapter","_invalidateSize","_zoomHandler","isTrusted","opts","CustomEventUtils","matchModifiers","avoidHandler","scale","deltaY","stageRect","offsetRect","currentTarget","clientX","clientY","_zoom","_panHandler","state","panningStart","actual","_getPanPoint","point","factor","vbox","box","viewbox","_panStartHandler","_stage","style","pointerEvents","aspectRatio","_getActualAspectRatio","wBased","hBased","Math","min","max","_panEndHandler","snapshot","bgColor","quality","Promise","resolve","originalViewBox","_transformMatrixScale","sizeObj","origVbox","mode","Rect","findTransform","a","validate","item","DrawableElement","parent","draw","redraw","disabled","CustomEvent","dispatchEvent","defaultPrevented","_drawDebounced","force","requestDraw","_buildUpDatasourceFromDOM","datasource","items","_zoomFromValue","sizeRect","original","incrementalInverseScale","vsize","targetWidth","targetHeight","alignmentX","alignmentY","vboxRatio","adjX","adjY","targetX","targetY","MouseEvent","getEventCoordinates","page","invalidateSize","prevTransformMatrix","getTransformMatrix","PropertyChangeEvent","propertyName","currentValue","oldValue","zoom","ResizeEvent","viewActivatedCallback","initialize","resize","_resize","addEventListener","ResizeEventName","capture","passive","window","propertyChangedCallback","name","old","first","dispose","disconnectedCallback","resizer","removeEventListener","Watch","converter","PropertyConverters","Element","prototype","reflectBack","emit","Json","Number","ViewChild","PCSS","P","Debounce","CustomElement","tagName","shadow","template","PacemCrossItemsContainerElement","_","findContainer","CustomElementUtils","findAncestorOfType","findAncestor","String","Boolean","DEG2RAD","PI","UiElement","_updateTransformMatrix","rotation","rotate","cos","sin","scaleX","b","scaleY","e","translateX","f","translateY","PresentationElement","split","map","parseInt","filter","isNaN","prop","join","ShapeElement","recomputeShape","getShapeGeometry","data","PacemGroupElement","children","childDrawables","scene","PacemEllipseElement_1","PacemCircleElement_1","rx","ry","isCloseTo","cx","cy","full","degToRad","s","polar","theta","sqrt","pow","rhoStart","rhoEnd","cartesian","rho","cartStart","cartEnd","p0","p1","expand","flag","sect","PacemEllipseElement","getPathData","NaN","PacemCircleElement","PacemRectElement_1","parseCornerRadius","CornerType","Cut","Rounded","parseCornerRadiusComponent","value","parseFloat","unit","endsWith","stringifyCornerRadiusComponent","CORNERS_PATTERN","PacemRectElement","w","h","cornerType","x1","y1","tl","tr","br","bl","vx","vy","tlX","tlY","trX","trY","brX","brY","blX","blY","retval","radii","numbers","acc","push","single","parseCornerRadii","topLeft","topRight","bottomRight","bottomLeft","stringifyCornerRadii","PacemLineElement_1","PacemLineElement","from","to","x0","y0","abs","PacemPathElement","PacemPolygonElement_1","PacemPolygonElement","sides","starIndent","si","theta2","isStar","apothem","j","angle","innerRadius","angle2","PacemPolylineElement_1","PointArrayOrJsonConverter","arr","parseAsNumericalArray","JSON","parse","stringify","PacemPolylineElement","points","closed","xmin","MAX_VALUE","ymin","xmax","MIN_VALUE","ymax","PacemImageElement","PacemTextElement","AdapterUtils","stageDispatch","EventTarget","isValidViewbox","isRect","isFinite","itemDispatch","offset","dragArgs","evtType","Event","itemevt","UI","DragDropEventType","Init","Drag","prevent","evnt","Pacem2DAdapterElement","PacemEventTarget","DefaultShapeValues","snapshotElement","element","jpeg","mime","compression","CANVAS_SCENE_VAR","PARENT_MATRIX_VAR","SETVAR","setAttachedPropertyValue","GETVAR","getAttachedPropertyValue","isNone","fillOrStroke","fallback","v","PacemCanvasAdapterElement","_pointer","screen","client","_dragInitHandler","hitTarget","_hitTarget","draggable","preventDefault","drawable","initialMatrix","parentMatrix","initialTransformMatrix","_draggingHandler","_dragging","screenOffset","currentPosition","origin","stageTransformMatrix","init","_dragEndHandler","transform","_mouseleaveHandler","_scopeEvent","nap","canvas","srcElement","_requestDraw","_mousemoveHandler","_mouseDownUpHandler","HTMLCanvasElement","replace","fineType","_scenes","WeakMap","_handles","backgroundColor","scenes","has","srcCanvas","get","context","getCanvas","_getScreenInverseMatrix","invert","screenInverseMatrix","dragger","dragDrop","document","createElement","DragDataMode","Copy","dropBehavior","DropBehavior","None","spillBehavior","DropTargetMissedBehavior","floater","hidden","findAncestorShell","appendChild","End","remove","tuple","ctx","align","valign","mscale","translate","getHitTarget","register","innerHTML","setAttribute","getContext","set","unregister","delete","handles","cancelAnimationFrame","requestAnimationFrame","throttle","canvasCssStyle","formerHitTarget","getComputedStyle","resetTransform","clearRect","setTransform","pointer","_draw","currentHitTarget","hide","t","inert","getTransform","inverse","isIdentity","contextPresentationState","_setPresentationState","_drawShape","_drawText","_drawImage","child","strokeStyle","setLineDash","fillStyle","gradient","createLinearGradient","Error","createRadialGradient","stop","addColorStop","color","globalAlpha","CANVAS_IMAGESOURCE_VAR","img","imgLoadHandler","dw","naturalWidth","dh","naturalHeight","path2D","Path2D","isPointInPath","drawImage","Image","src","onload","defaults","fontSize","fontStyle","fontWeight","font","fontFamily","textAlign","textAnchor","fillText","text","anchor","hasColor","bbox","measureText","actualBoundingBoxAscent","actualBoundingBoxDescent","actualBoundingBoxLeft","beginPath","hasFill","hasStroke","isPointInStroke","hasEnoughVertices","hasMarkerEnd","markerEnd","hasMarkerStart","markerStart","hasMarkerMid","markerMid","log","Logging","LogLevel","Warn","matrix","marker","orientation","atan2","_drawMarker","refX","ref","refY","hasMarkerFill","hasMarkerStroke","markerPath2D","SVG_NS","DRAWABLE_VAR","STAGE_VAR","DELVAR","deleteAttachedPropertyValue","replaceChildAt","newChild","targetIndex","replaceChild","PacemSvgAdapterElement","el","dragging","stageOffset","deserializeTransform","_items","getRootNode","elementsFromPoint","find","svg","SVGSVGElement","_markers","_gradients","background","getScreenCTM","Self","rect","removeAttribute","createElementNS","deepRedraw","dict","flow","parentNode","_hasItems","_disposeSvg","firstElementChild","SVGDefsElement","_buildSVGElement","path","suffix","markerSvg","_ensureMarker","id","textContent","toString","grad","_ensureGradient","k","store","isLinear","isRadial","current","SVGLinearGradientElement","SVGRadialGradientElement","defs","defsContainer","querySelector","parent1","parentElement","SVGElement","gradientSvg","uniqueCode","stopSvgAdd","stopSvg","lastChild","removeChild","markerPath","DeepMerger","merge","Output"],"mappings":"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"}