i.add(t(e))),i.iterator}filter(t){const i=new List;return this.Po.w.forEach(e=>{t(e)&&i.add(e)}),i.iterator}get count(){return this.Po.count}wl(){this.key=null,this.value=null,this.ri=null}toString(){return"SetIterator"}}class GSet{f;w;constructor(t){this.f=!1,this.w=new Set,t!==void 0&&this.addAll(t)}[Symbol.iterator](){return this.w.values()}values(){return this.w.values()}p(){return this.f=!0,this}At(){return this.f=!1,this}toString(){return"Set()#"+GSet.gs(this)}add(t){return t===null?this:(this.w.add(t),this)}addAll(t){if(t===null)return this;if(Array.isArray(t)){const i=t.length;for(let e=0;et.add(i)),t}toArray(){return Array.from(this.w)}toList(){const t=new List;return this.w.forEach(i=>t.add(i)),t}get count(){return this.w.size}get size(){return this.w.size}get iterator(){return this.w.size<=0?EmptyIterator.instance:new SetIterator(this)}entries(){return this.w.entries()}keys(){return this.w.keys()}forEach(t,i){return this.w.forEach(t,i)}static Sw=1;static Ji(t){t.__gohashid=GSet.Sw++}static gs(t){return t.__gohashid}}class MapKeySetIterator{Z;ri;constructor(t){this.Z=t,this.ri=t.w.keys()}[Symbol.iterator](){return this.Z.w.keys()}key;value;get iterator(){return this}reset(){const t=this.Z;this.ri=t.w.keys()}next(){const t=this.ri.next();return this.value=t.value,this.key=t.value,!t.done}hasNext(){return this.next()}first(){return this.Z.w.size===0?null:(this.ri=this.Z.w.keys(),this.ri.next().value)}any(t){for(const i of this.Z.w)if(t(i[0]))return!0;return!1}all(t){for(const i of this.Z.w)if(!t(i[0]))return!1;return!0}each(t){for(const i of this.Z.w)t(i[0]);return this}map(t){const i=this.Z,e=new List;for(const s of i.w)e.add(t(s[0]));return e.iterator}filter(t){const i=this.Z,e=new List;for(const s of i.w){const n=s[0];t(n)&&e.add(n)}return e.iterator}get count(){return this.Z.size}wl(){this.key=null,this.value=null,this.ri=null}toString(){return"MapKeySetIterator"}}class MapKeySet extends GSet{Z;constructor(t){super(),GSet.Ji(this),this.f=!0,this.Z=t}[Symbol.iterator](){return this.w.keys()}values(){return this.w.keys()}p(){return this}At(){return this}toString(){return"MapKeySet("+this.Z.toString()+")"}add(t){U.n("This Set is read-only: "+this.toString())}has(t){return this.Z.has(t)}contains(t){return this.has(t)}delete(t){U.n("This Set is read-only: "+this.toString())}remove(t){return this.delete(t)}clear(){U.n("This Set is read-only: "+this.toString())}first(){return this.Z.w.size===0?null:this.Z.w.keys().next().value}any(t){for(const i of this.Z.w)if(t(i[0]))return!0;return!1}all(t){for(const i of this.Z.w)if(!t(i[0]))return!1;return!0}each(t){for(const i of this.Z.w)t(i[0]);return this}map(t){const i=new GSet;for(const e of this.Z.w)i.add(t(e[0]));return i}filter(t){const i=new GSet;for(const e of this.Z.w){const s=e[0];t(s)&&i.add(s)}return i}copy(){return new MapKeySet(this.Z)}toSet(){const t=new GSet,i=this.Z.w;for(const e of i)t.add(e[0]);return t}toArray(){const t=this.Z.w,i=new Array(t.size);let e=0;for(const s of t)i[e]=s[0],e++;return i}toList(){const t=new List,i=this.Z.w;for(const e of i)t.add(e[0]);return t}get count(){return this.Z.size}get size(){return this.Z.size}get iterator(){return this.Z.size<=0?EmptyIterator.instance:new MapKeySetIterator(this.Z)}}class MapValueSetIterator{Z;ri;constructor(t){this.Z=t,this.ri=t.w.values()}[Symbol.iterator](){return this.Z.w.values()}key;value;get iterator(){return this}reset(){const t=this.Z;this.ri=t.w.values()}next(){const t=this.ri.next();return this.value=t.value,this.key=t.value,!t.done}hasNext(){return this.next()}first(){return this.Z.w.size===0?null:(this.ri=this.Z.w.values(),this.ri.next().value)}any(t){for(const i of this.Z.w)if(t(i[1]))return!0;return!1}all(t){for(const i of this.Z.w)if(!t(i[1]))return!1;return!0}each(t){for(const i of this.Z.w)t(i[1]);return this}map(t){const i=this.Z,e=new List;for(const s of i.w)e.add(t(s[1]));return e.iterator}filter(t){const i=this.Z,e=new List;for(const s of i.w){const n=s[1];t(n)&&e.add(n)}return e.iterator}get count(){return this.Z.size}wl(){this.key=null,this.value=null,this.ri=null}toString(){return"MapValueSetIterator"}}class KeyValuePair{constructor(t,i){this.key=t,this.value=i}toString(){return"{"+this.key+":"+this.value+"}"}key;value}class MapIterator{Z;ri;constructor(t){this.Z=t,this.ri=t.w.entries()}[Symbol.iterator](){return this.Z.w.entries()}key;value;get iterator(){return this}reset(){const t=this.Z;this.ri=t.w.entries()}next(){const t=this.ri.next();return t.done?(this.key=null,this.value=null,!1):(this.key=t.value[0],this.value=t.value[1],!0)}hasNext(){return this.next()}first(){if(this.Z.w.size===0)return null;this.ri=this.Z.w.entries();const t=this.ri.next().value;return this.key=t[0],this.value=t[1],new KeyValuePair(t[0],t[1])}any(t){return this.Z.any(t)}all(t){return this.Z.all(t)}each(t){return this.Z.each(t),this}map(t){const i=new List;let e=null;return this.Z.w.forEach((s,n)=>{e===null?e=new KeyValuePair(n,s):(e.key=n,e.value=s),i.add(t(e))}),i.iterator}filter(t){const i=new List;let e=null;return this.Z.w.forEach((s,n)=>{e===null?e=new KeyValuePair(n,s):(e.key=n,e.value=s),t(e)&&(i.add(e),e=null)}),i.iterator}get count(){return this.Z.size}wl(){this.key=null,this.value=null,this.ri=null}toString(){return"MapIterator"}}class GMap{f;w;constructor(t){GSet.Ji(this),this.f=!1,this.w=new Map,t!==void 0&&this.addAll(t)}[Symbol.iterator](){return this.w.entries()}entries(){return this.w.entries()}p(){return this.f=!0,this}At(){return this.f=!1,this}toString(){return"Map()#"+GSet.gs(this)}set(t,i){return this.f&&U.D(this,t),this.w.set(t,i),this}add(t,i){return this.set(t,i)}addAll(t){if(t===null)return this;if(this.f&&U.D(this),Array.isArray(t)){const i=t.length;for(let e=0;ei.x.toFixed(t)+" "+i.y.toFixed(t)}toString(){return"Point("+this.x+","+this.y+")"}equals(t){return t instanceof Point?this.px===t.x&&this.py===t.y:!1}equalTo(t,i){return this.px===t&&this.py===i}equalsApprox(t){return Geo.g(this.px,t.x)&&Geo.g(this.py,t.y)}add(t){return Debug&&(U.e(t,Point,Point,"add:p"),this._()),this.px+=t.x,this.py+=t.y,this}subtract(t){return Debug&&(U.e(t,Point,Point,"subtract:p"),this._()),this.px-=t.x,this.py-=t.y,this}offset(t,i){return Debug&&(U.r(t,Point,"offset:dx"),U.r(i,Point,"offset:dy"),this._()),this.px+=t,this.py+=i,this}rotate(t){if(Debug&&(U.r(t,Point,"rotate:angle"),this._()),t===0)return this;const i=this.px,e=this.py;if(i===0&&e===0)return this;let s=0,n=0;if(t>=360?t-=360:t<0&&(t+=360),t===90)s=0,n=1;else if(t===180)s=-1,n=0;else if(t===270)s=0,n=-1;else{const o=t*Math.PI/180;s=Math.cos(o),n=Math.sin(o)}return this.px=s*i-n*e,this.py=n*i+s*e,this}scale(t,i){return Debug&&(U.r(t,Point,"scale:sx"),U.r(i,Point,"scale:sy"),this._()),this.px*=t,this.py*=i,this}distanceSquaredPoint(t){Debug&&U.e(t,Point,Point,"distanceSquaredPoint:p");const i=t.x-this.px,e=t.y-this.py;return i*i+e*e}distanceSquared(t,i){Debug&&(U.r(t,Point,"distanceSquared:px"),U.r(i,Point,"distanceSquared:py"));const e=t-this.px,s=i-this.py;return e*e+s*s}normalize(){Debug&&this._();const t=this.px,i=this.py,e=Math.sqrt(t*t+i*i);return e>0&&(this.px=t/e,this.py=i/e),this}directionPoint(t){return Debug&&U.e(t,Point,Point,"directionPoint:p"),this.wC(t.x-this.px,t.y-this.py)}direction(t,i){return Debug&&(U.r(t,Point,"direction:px"),U.r(i,Point,"direction:py")),this.wC(t-this.px,i-this.py)}wC(t,i){if(t===0)return i>0?90:i<0?270:0;if(i===0)return t>0?0:180;{if(isNaN(t)||isNaN(i))return 0;let e=Math.atan(Math.abs(i/t))*180/Math.PI;return t<0?i<0?e+=180:e=180-e:i<0&&(e=360-e),e}}static compareWithLineSegment(t,i,e,s,n,o){return Debug&&(U.r(t,Point,"compareWithLineSegment:a1x"),U.r(i,Point,"compareWithLineSegment:a1y"),U.r(e,Point,"compareWithLineSegment:a2x"),U.r(s,Point,"compareWithLineSegment:a2y"),U.r(n,Point,"compareWithLineSegment:b1x"),U.r(o,Point,"compareWithLineSegment:b1y")),Geo.hu(t,i,e,s,n,o)}compareWithLineSegmentPoint(t,i){return Debug&&(U.e(t,Point,Point,"compareWithLineSegmentPoint:p"),U.e(i,Point,Point,"compareWithLineSegmentPoint:q")),Geo.hu(t.x,t.y,i.x,i.y,this.x,this.y)}static intersectingLineSegments(t,i,e,s,n,o,r,l){return Debug&&(U.r(t,Point,"intersectingLineSegments:a1x"),U.r(i,Point,"intersectingLineSegments:a1y"),U.r(e,Point,"intersectingLineSegments:a2x"),U.r(s,Point,"intersectingLineSegments:a2y"),U.r(n,Point,"intersectingLineSegments:b1x"),U.r(o,Point,"intersectingLineSegments:b1y"),U.r(r,Point,"intersectingLineSegments:b2x"),U.r(l,Point,"intersectingLineSegments:b2y")),Geo.au(t,i,e,s,n,o,r,l)}projectOntoLineSegment(t,i,e,s){return Debug&&(U.r(t,Point,"projectOntoLineSegment:px"),U.r(i,Point,"projectOntoLineSegment:py"),U.r(e,Point,"projectOntoLineSegment:qx"),U.r(s,Point,"projectOntoLineSegment:qy")),Geo.xl(t,i,e,s,this.px,this.py,this),this}projectOntoLineSegmentPoint(t,i){return Debug&&(U.e(t,Point,Point,"projectOntoLineSegmentPoint:p"),U.e(i,Point,Point,"projectOntoLineSegmentPoint:q")),Geo.xl(t.x,t.y,i.x,i.y,this.px,this.py,this),this}snapToGrid(t,i,e,s){return Debug&&(U.r(t,Point,"snapToGrid:originx"),U.r(i,Point,"snapToGrid:originy"),U.r(e,Point,"snapToGrid:cellwidth"),U.r(s,Point,"snapToGrid:cellheight")),Geo.Vg(this.px,this.py,t,i,e,s,this),this}snapToGridPoint(t,i){return Debug&&(U.e(t,Point,Point,"snapToGridPoint:p"),U.e(i,Size,Point,"snapToGridPoint:q")),Geo.Vg(this.px,this.py,t.x,t.y,i.width,i.height,this),this}setRectSpot(t,i){return Debug&&(U.e(t,Rect,Point,"setRectSpot:r"),U.e(i,Spot,Point,"setRectSpot:spot"),this._()),this.px=t.x+i.x*t.width+i.offsetX,this.py=t.y+i.y*t.height+i.offsetY,this}setSpot(t,i,e,s,n){return Debug&&(U.r(t,Point,"setSpot:x"),U.r(i,Point,"setSpot:y"),U.r(e,Point,"setSpot:w"),U.r(s,Point,"setSpot:h"),(e<0||s<0)&&U.n("Point.setSpot:Width and height cannot be negative"),U.e(n,Spot,Point,"setSpot:spot"),this._()),this.px=t+n.x*e+n.offsetX,this.py=i+n.y*s+n.offsetY,this}F(t){return t.kt(this),this}Xe(t){return t.is(this),this}static distanceLineSegmentSquared(t,i,e,s,n,o){Debug&&(U.r(t,Point,"distanceLineSegmentSquared:px"),U.r(i,Point,"distanceLineSegmentSquared:py"),U.r(e,Point,"distanceLineSegmentSquared:ax"),U.r(s,Point,"distanceLineSegmentSquared:ay"),U.r(n,Point,"distanceLineSegmentSquared:bx"),U.r(o,Point,"distanceLineSegmentSquared:by"));let r=n-e,l=o-s;const h=r*r+l*l,f=e-t,a=s-i,c=-f*r-a*l;if(c<=0||c>=h)return r=n-t,l=o-i,Math.min(f*f+a*a,r*r+l*l);{const u=r*a-l*f;return u*u/h}}static distanceSquared(t,i,e,s){Debug&&(U.r(t,Point,"distanceSquared:px"),U.r(i,Point,"distanceSquared:py"),U.r(e,Point,"distanceSquared:qx"),U.r(s,Point,"distanceSquared:qy"));const n=e-t,o=s-i;return n*n+o*o}static direction(t,i,e,s){Debug&&(U.r(t,Point,"direction:px"),U.r(i,Point,"direction:py"),U.r(e,Point,"direction:qx"),U.r(s,Point,"direction:qy"));const n=e-t,o=s-i;if(n===0)return o>0?90:o<0?270:0;if(o===0)return n>0?0:180;{if(isNaN(n)||isNaN(o))return 0;let r=Math.atan(Math.abs(o/n))*180/Math.PI;return n<0?o<0?r+=180:r=180-r:o<0&&(r=360-r),r}}get x(){return this.px}set x(t){Debug&&(U.i(t,"number",Point,"x"),this._(t)),this.px=t}get y(){return this.py}set y(t){Debug&&(U.i(t,"number",Point,"y"),this._(t)),this.py=t}isReal(){return isFinite(this.x)&&isFinite(this.y)}static No=new Point(0,0).it();static xC=new Point(-1/0,-1/0).it();static bC=new Point(1/0,1/0).it();static kC=new Point(6,6).it();static Hk=new Point(NaN,NaN).it();static qk=[];static a(){const t=Point.qk.pop();return t===void 0?new Point:t}static K(t,i){const e=Point.qk.pop();return e===void 0?new Point(t,i):(e.x=t,e.y=i,e)}static o(t){Point.qk.push(t)}}class Size{sw;sh;f;constructor(t,i){t===void 0?(this.sw=0,this.sh=0):typeof t=="number"&&(t>=0||isNaN(t))&&typeof i=="number"&&(i>=0||isNaN(i))?(this.sw=t,this.sh=i):U.n("Invalid arguments to Size constructor: "+t+", "+i),this.f=!1}c(t){return this.sw=t.sw,this.sh=t.sh,this}s(t,i){return this.sw=t,this.sh=i,this}setTo(t,i){return Debug&&(U.i(t,"number",Size,"setTo:w"),U.i(i,"number",Size,"setTo:h"),t<0&&U.U(t,">= 0",Size,"setTo:w"),i<0&&U.U(i,">= 0",Size,"setTo:h"),this._()),this.sw=t,this.sh=i,this}set(t){return Debug&&(U.e(t,Size,Size,"set:s"),this._()),this.sw=t.sw,this.sh=t.sh,this}copy(){const t=new Size;return t.sw=this.sw,t.sh=this.sh,t}it(){return this.f=!0,Object.freeze(this),this}N(){return this.f||Object.isFrozen(this)?this:this.copy().p()}p(){return this.f||(this.f=!0),this}At(){return this.f&&(Object.isFrozen(this)&&U.n("cannot thaw constant: "+this),this.f=!1),this}_(t){if(Debug&&this.f){let i="The Size is frozen, so its properties cannot be set: "+this.toString();t!==void 0&&(i+=" to value: "+t),U.n(i)}}static parse(t){if(typeof t=="string"){const i=t.split(" ");let e=0,s=0;for(;i[e]==="";)e++;let n=i[e++];n&&(s=parseFloat(n));let o=0;for(;i[e]==="";)e++;return n=i[e++],n&&(o=parseFloat(n)),new Size(s,o)}else return new Size}static stringify(t){return Debug&&U.e(t,Size),t.width.toString()+" "+t.height.toString()}static stringifyFixed(t){return U.i(t,"number",Size,"stringifyFixed:digits"),i=>i.width.toFixed(t)+" "+i.height.toFixed(t)}toString(){return"Size("+this.width+","+this.height+")"}equals(t){return t instanceof Size?this.sw===t.width&&this.sh===t.height:!1}equalTo(t,i){return this.sw===t&&this.sh===i}equalsApprox(t){return Geo.g(this.sw,t.width)&&Geo.g(this.sh,t.height)}inflate(t,i){Debug&&(U.r(t,Size,"inflate:w"),U.r(i,Size,"inflate:h"));const e=this.width+t;this.sw=e>=0?e:0;const s=this.height+i;return this.sh=s>=0?s:0,this}get width(){return this.sw}set width(t){Debug&&(U.i(t,"number",Size,"width"),this._(t)),t<0&&U.U(t,">= 0",Size,"width"),this.sw=t}get height(){return this.sh}set height(t){Debug&&(U.i(t,"number",Size,"height"),this._(t)),t<0&&U.U(t,">= 0",Size,"height"),this.sh=t}isReal(){return isFinite(this.width)&&isFinite(this.height)}static Gh=new Size(0,0).it();static Wk=new Size(1,1).it();static SC=new Size(6,6).it();static fu=new Size(8,8).it();static MC=new Size(10,10).it();static Mw=new Size(1/0,1/0).it();static Pw=new Size(NaN,NaN).it();static PC=[];static a(){const t=Size.PC.pop();return t===void 0?new Size:t}static o(t){Size.PC.push(t)}}class Rect{rx;ry;rw;rh;f;constructor(t,i,e,s){if(t===void 0)this.rx=0,this.ry=0,this.rw=0,this.rh=0;else if(typeof t=="number"&&typeof i=="number"&&typeof e=="number"&&(e>=0||isNaN(e))&&typeof s=="number"&&(s>=0||isNaN(s)))this.rx=t,this.ry=i,this.rw=e,this.rh=s;else if(t instanceof Point){const n=t.x,o=t.y;if(i instanceof Point){const r=i.x,l=i.y;this.rx=Math.min(n,r),this.ry=Math.min(o,l),this.rw=Math.abs(n-r),this.rh=Math.abs(o-l)}else i instanceof Size?(this.rx=n,this.ry=o,this.rw=i.width,this.rh=i.height):U.n("Incorrect second argument supplied to Rect constructor "+i)}else U.n("Invalid arguments to Rect constructor: "+t+", "+i+", "+e+", "+s);this.f=!1}c(t){return this.rx=t.rx,this.ry=t.ry,this.rw=t.rw,this.rh=t.rh,this}s(t,i,e,s){return this.rx=t,this.ry=i,this.rw=e,this.rh=s,this}Vn(t,i){return this.rw=t,this.rh=i,this}setTo(t,i,e,s){return Debug&&(U.i(t,"number",Rect,"setTo:x"),U.i(i,"number",Rect,"setTo:y"),U.i(e,"number",Rect,"setTo:w"),U.i(s,"number",Rect,"setTo:h"),e<0&&U.U(e,">= 0",Rect,"setTo:w"),s<0&&U.U(s,">= 0",Rect,"setTo:h"),this._()),this.rx=t,this.ry=i,this.rw=e,this.rh=s,this}set(t){return Debug&&(U.e(t,Rect,Rect,"set:r"),this._()),this.rx=t.rx,this.ry=t.ry,this.rw=t.rw,this.rh=t.rh,this}setPoint(t){return Debug&&(U.e(t,Point,Rect,"setPoint:p"),this._()),this.rx=t.x,this.ry=t.y,this}setSize(t){return Debug&&(U.e(t,Size,Rect,"setSize:s"),this._()),this.rw=t.width,this.rh=t.height,this}copy(){const t=new Rect;return t.rx=this.rx,t.ry=this.ry,t.rw=this.rw,t.rh=this.rh,t}it(){return this.f=!0,Object.freeze(this),this}N(){return this.f||Object.isFrozen(this)?this:this.copy().p()}p(){return this.f||(this.f=!0),this}At(){return this.f&&(Object.isFrozen(this)&&U.n("cannot thaw constant: "+this),this.f=!1),this}_(t){if(Debug&&this.f){let i="The Rect is frozen, so its properties cannot be set: "+this.toString();t!==void 0&&(i+=" to value: "+t),U.n(i)}}static parse(t){if(typeof t=="string"){const i=t.split(" ");let e=0,s=0;for(;i[e]==="";)e++;let n=i[e++];n&&(s=parseFloat(n));let o=0;for(;i[e]==="";)e++;n=i[e++],n&&(o=parseFloat(n));let r=0;for(;i[e]==="";)e++;n=i[e++],n&&(r=parseFloat(n));let l=0;for(;i[e]==="";)e++;return n=i[e++],n&&(l=parseFloat(n)),new Rect(s,o,r,l)}else return new Rect}static stringify(t){return Debug&&U.e(t,Rect),t.x.toString()+" "+t.y.toString()+" "+t.width.toString()+" "+t.height.toString()}static stringifyFixed(t){return U.i(t,"number",Rect,"stringifyFixed:digits"),i=>i.x.toFixed(t)+" "+i.y.toFixed(t)+" "+i.width.toFixed(t)+" "+i.height.toFixed(t)}toString(){return"Rect("+this.x+","+this.y+","+this.width+","+this.height+")"}equals(t){return t instanceof Rect?this.rx===t.x&&this.ry===t.y&&this.rw===t.width&&this.rh===t.height:!1}equalTo(t,i,e,s){return this.rx===t&&this.ry===i&&this.rw===e&&this.rh===s}equalsApprox(t){return Geo.g(this.rx,t.x)&&Geo.g(this.ry,t.y)&&Geo.g(this.rw,t.width)&&Geo.g(this.rh,t.height)}equalsApproxTo(t,i,e,s){return Geo.g(this.rx,t)&&Geo.g(this.ry,i)&&Geo.g(this.rw,e)&&Geo.g(this.rh,s)}equalsApproxClose(t){return Geo.G(this.rx,t.x)&&Geo.G(this.ry,t.y)&&Geo.G(this.rw,t.width)&&Geo.G(this.rh,t.height)}containsPoint(t){return Debug&&U.e(t,Point,Rect,"containsPoint:p"),this.rx<=t.x&&this.rx+this.rw>=t.x&&this.ry<=t.y&&this.ry+this.rh>=t.y}containsRect(t){return Debug&&U.e(t,Rect,Rect,"containsRect:r"),this.rx<=t.x&&t.x+t.width<=this.rx+this.rw&&this.ry<=t.y&&t.y+t.height<=this.ry+this.rh}contains(t,i,e,s){return Debug?(U.r(t,Rect,"contains:x"),U.r(i,Rect,"contains:y"),e===void 0?e=0:U.r(e,Rect,"contains:w"),s===void 0?s=0:U.r(s,Rect,"contains:h"),(e<0||s<0)&&U.n("Rect.contains:Width and height cannot be negative")):(e===void 0&&(e=0),s===void 0&&(s=0)),this.rx<=t&&t+e<=this.rx+this.rw&&this.ry<=i&&i+s<=this.ry+this.rh}offset(t,i){return Debug&&(U.r(t,Rect,"offset:dx"),U.r(i,Rect,"offset:dy"),this._()),this.rx+=t,this.ry+=i,this}inflate(t,i){return Debug&&(U.r(t,Rect,"inflate:w"),U.r(i,Rect,"inflate:h")),this.Nw(i,t,i,t)}addMargin(t){return Debug&&U.e(t,Margin,Rect,"addMargin:m"),this.Nw(t.top,t.right,t.bottom,t.left)}subtractMargin(t){return Debug&&U.e(t,Margin,Rect,"subtractMargin:m"),this.Nw(-t.top,-t.right,-t.bottom,-t.left)}grow(t,i,e,s){return Debug&&(U.r(t,Rect,"grow:t"),U.r(i,Rect,"grow:r"),U.r(e,Rect,"grow:b"),U.r(s,Rect,"grow:l")),this.Nw(t,i,e,s)}Nw(t,i,e,s){Debug&&this._();const n=this.rw;i+s<=-n?(this.rx+=n/2,this.rw=0):(this.rx-=s,this.rw+=i+s);const o=this.rh;return t+e<=-o?(this.ry+=o/2,this.rh=0):(this.ry-=t,this.rh+=t+e),this}intersectRect(t){return Debug&&U.e(t,Rect,Rect,"intersectRect:r"),this.NC(t.x,t.y,t.width,t.height)}intersect(t,i,e,s){return Debug&&(U.r(t,Rect,"intersect:x"),U.r(i,Rect,"intersect:y"),U.r(e,Rect,"intersect:w"),U.r(s,Rect,"intersect:h"),(e<0||s<0)&&U.n("Rect.intersect:Width and height cannot be negative")),this.NC(t,i,e,s)}NC(t,i,e,s){Debug&&this._();const n=Math.max(this.rx,t),o=Math.max(this.ry,i),r=Math.min(this.rx+this.rw,t+e),l=Math.min(this.ry+this.rh,i+s);return this.rx=n,this.ry=o,this.rw=Math.max(0,r-n),this.rh=Math.max(0,l-o),this}intersectsRect(t){return Debug&&U.e(t,Rect,Rect,"intersectsRect:r"),this.intersects(t.x,t.y,t.width,t.height)}intersects(t,i,e,s){Debug&&(U.r(t,Rect,"intersects:x"),U.r(i,Rect,"intersects:y"),U.r(t,Rect,"intersects:w"),U.r(i,Rect,"intersects:h"),(e<0||s<0)&&U.n("Rect.intersects:Width and height cannot be negative"));let n=this.rw;const o=this.rx;if(n!==1/0&&e!==1/0&&(n+=o,e+=t,isNaN(e)||isNaN(n)||o>e||t>n))return!1;let r=this.rh;const l=this.ry;return!(r!==1/0&&s!==1/0&&(r+=l,s+=i,isNaN(s)||isNaN(r)||l>s||i>r))}intersectsRectPlus(t,i){let e=this.rw,s=t.width+i+i;const n=this.rx,o=t.x-i;if(e+=n,s+=o,n>s||o>e)return!1;let r=this.rh,l=t.height+i+i;const h=this.ry,f=t.y-i;return r+=h,l+=f,!(h>l||f>r)}unionPoint(t){return Debug&&U.e(t,Point,Rect,"unionPoint:p"),this.unionNoCheck(t.x,t.y,0,0)}unionRect(t){return Debug&&U.e(t,Rect,Rect,"unionRect:r"),this.unionNoCheck(t.rx,t.ry,t.rw,t.rh)}union(t,i,e,s){return Debug?(U.r(t,Rect,"union:x"),U.r(i,Rect,"union:y"),e===void 0?e=0:U.r(e,Rect,"union:w"),s===void 0?s=0:U.r(s,Rect,"union:h"),(e<0||s<0)&&U.n("Rect.union:Width and height cannot be negative"),this._()):(e===void 0&&(e=0),s===void 0&&(s=0)),this.unionNoCheck(t,i,e,s)}unionNoCheck(t,i,e,s){const n=Math.min(this.rx,t),o=Math.min(this.ry,i),r=Math.max(this.rx+this.rw,t+e),l=Math.max(this.ry+this.rh,i+s);return this.rx=n,this.ry=o,this.rw=r-n,this.rh=l-o,this}setSpot(t,i,e){return Debug&&(U.r(t,Rect,"setSpot:x"),U.r(i,Rect,"setSpot:y"),U.e(e,Spot,Rect,"setSpot:spot"),this._()),this.rx=t-e.offsetX-e.x*this.rw,this.ry=i-e.offsetY-e.y*this.rh,this}static contains(t,i,e,s,n,o,r,l){return Debug?(U.r(t,Rect,"contains:rx"),U.r(i,Rect,"contains:ry"),U.r(e,Rect,"contains:rw"),U.r(s,Rect,"contains:rh"),U.r(n,Rect,"contains:x"),U.r(o,Rect,"contains:y"),r===void 0?r=0:U.r(r,Rect,"contains:w"),l===void 0?l=0:U.r(l,Rect,"contains:h"),(e<0||s<0||r<0||l<0)&&U.n("Rect.contains:Width and height cannot be negative")):(r===void 0&&(r=0),l===void 0&&(l=0)),t<=n&&n+r<=t+e&&i<=o&&o+l<=i+s}static intersects(t,i,e,s,n,o,r,l){Debug&&(U.r(t,Rect,"intersects:rx"),U.r(i,Rect,"intersects:ry"),U.r(e,Rect,"intersects:rw"),U.r(s,Rect,"intersects:rh"),U.r(n,Rect,"intersects:x"),U.r(o,Rect,"intersects:y"),U.r(r,Rect,"intersects:w"),U.r(l,Rect,"intersects:h"),(e<0||s<0||r<0||l<0)&&U.n("Rect.intersects:Width and height cannot be negative"));let h=e,f=r;const a=t,c=n;if(h+=a,f+=c,a>f||c>h)return!1;let u=s,d=l;const m=i,g=o;return u+=m,d+=g,!(m>d||g>u)}static intersectsLineSegment(t,i,e,s,n,o,r,l){return Debug&&(U.r(t,Rect,"intersectsLineSegment:x"),U.r(i,Rect,"intersectsLineSegment:y"),U.r(e,Rect,"intersectsLineSegment:w"),U.r(s,Rect,"intersectsLineSegment:h"),U.r(n,Rect,"intersectsLineSegment:p1x"),U.r(o,Rect,"intersectsLineSegment:p1y"),U.r(r,Rect,"intersectsLineSegment:p2x"),U.r(l,Rect,"intersectsLineSegment:p2y"),(e<0||s<0)&&U.n("Rect.intersectsLineSegment: width and height cannot be negative")),Geo.CC(t,i,e,s,n,o,r,l)}get x(){return this.rx}set x(t){Debug&&(U.i(t,"number",Rect,"x"),this._(t)),this.rx=t}get y(){return this.ry}set y(t){Debug&&(U.i(t,"number",Rect,"y"),this._(t)),this.ry=t}get width(){return this.rw}set width(t){Debug&&(U.i(t,"number",Rect,"width"),this._(t)),t<0&&U.U(t,">= 0",Rect,"width"),this.rw=t}get height(){return this.rh}set height(t){Debug&&(U.i(t,"number",Rect,"height"),this._(t)),t<0&&U.U(t,">= 0",Rect,"height"),this.rh=t}get left(){return this.rx}set left(t){Debug&&(U.i(t,"number",Rect,"left"),this._(t)),this.rx=t}get top(){return this.ry}set top(t){Debug&&(U.i(t,"number",Rect,"top"),this._(t)),this.ry=t}get right(){return this.rx+this.rw}set right(t){Debug&&(U.r(t,Rect,"right"),this._(t)),this.rx+=t-(this.rx+this.rw)}get bottom(){return this.ry+this.rh}set bottom(t){Debug&&(U.r(t,Rect,"top"),this._(t)),this.ry+=t-(this.ry+this.rh)}get position(){return new Point(this.rx,this.ry)}set position(t){Debug&&(U.e(t,Point,Rect,"position"),this._(t)),this.rx=t.x,this.ry=t.y}get size(){return new Size(this.rw,this.rh)}set size(t){Debug&&(U.e(t,Size,Rect,"size"),this._(t)),this.rw=t.width,this.rh=t.height}get center(){return new Point(this.rx+this.rw/2,this.ry+this.rh/2)}set center(t){Debug&&(U.e(t,Point,Rect,"center"),this._(t)),this.rx=t.x-this.rw/2,this.ry=t.y-this.rh/2}get centerX(){return this.rx+this.rw/2}set centerX(t){Debug&&(U.r(t,Rect,"centerX"),this._(t)),this.rx=t-this.rw/2}get centerY(){return this.ry+this.rh/2}set centerY(t){Debug&&(U.r(t,Rect,"centerY"),this._(t)),this.ry=t-this.rh/2}isReal(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)}isEmpty(){return this.width===0&&this.height===0}static zg=new Rect(0,0,0,0).it();static sF=new Rect(NaN,NaN,NaN,NaN).it();static jk=[];static a(){const t=Rect.jk.pop();return t===void 0?new Rect:t}static K(t,i,e,s){const n=Rect.jk.pop();return n===void 0?new Rect(t,i,e,s):n.s(t,i,e,s)}static o(t){Rect.jk.push(t)}}class Margin{mt;mr;mb;ml;f;constructor(t,i,e,s){t===void 0?(this.mt=0,this.mr=0,this.mb=0,this.ml=0):i===void 0?(i=t,e=t,s=t,this.mt=t,this.mr=i,this.mb=e,this.ml=s):e===void 0?(e=t,s=i,this.mt=t,this.mr=i,this.mb=e,this.ml=s):s!==void 0?(this.mt=t,this.mr=i,this.mb=e,this.ml=s):U.n("Invalid arguments to Margin constructor: "+t+", "+i+", "+e+", "+s),this.f=!1}c(t){return this.mt=t.mt,this.mr=t.mr,this.mb=t.mb,this.ml=t.ml,this}setTo(t,i,e,s){return Debug&&(U.i(t,"number",Margin,"setTo:t"),U.i(i,"number",Margin,"setTo:r"),U.i(e,"number",Margin,"setTo:b"),U.i(s,"number",Margin,"setTo:l"),this._()),this.mt=t,this.mr=i,this.mb=e,this.ml=s,this}set(t){return Debug&&(U.e(t,Margin,Margin,"assign:m"),this._()),this.mt=t.mt,this.mr=t.mr,this.mb=t.mb,this.ml=t.ml,this}copy(){const t=new Margin;return t.mt=this.mt,t.mr=this.mr,t.mb=this.mb,t.ml=this.ml,t}it(){return this.f=!0,Object.freeze(this),this}N(){return this.f||Object.isFrozen(this)?this:this.copy().p()}p(){return this.f||(this.f=!0),this}At(){return this.f&&(Object.isFrozen(this)&&U.n("cannot thaw constant: "+this),this.f=!1),this}_(t){if(Debug&&this.f){let i="The Margin is frozen, so its properties cannot be set: "+this.toString();t!==void 0&&(i+=" to value: "+t),U.n(i)}}static parse(t){if(typeof t=="string"){const i=t.split(" ");let e=0,s=NaN;for(;i[e]==="";)e++;let n=i[e++];if(n&&(s=parseFloat(n)),isNaN(s))return new Margin;let o=NaN;for(;i[e]==="";)e++;if(n=i[e++],n&&(o=parseFloat(n)),isNaN(o))return new Margin(s);let r=NaN;for(;i[e]==="";)e++;if(n=i[e++],n&&(r=parseFloat(n)),isNaN(r))return new Margin(s,o);let l=NaN;for(;i[e]==="";)e++;return n=i[e++],n&&(l=parseFloat(n)),isNaN(l)?new Margin(s,o):new Margin(s,o,r,l)}else return new Margin}static stringify(t){return Debug&&U.e(t,Margin),t.top.toString()+" "+t.right.toString()+" "+t.bottom.toString()+" "+t.left.toString()}static stringifyFixed(t){return U.i(t,"number",Margin,"stringifyFixed:digits"),i=>i.top.toFixed(t)+" "+i.right.toFixed(t)+" "+i.bottom.toFixed(t)+" "+i.left.toFixed(t)}toString(){return"Margin("+this.top+","+this.right+","+this.bottom+","+this.left+")"}equals(t){return t instanceof Margin?this.mt===t.top&&this.mr===t.right&&this.mb===t.bottom&&this.ml===t.left:!1}equalTo(t,i,e,s){return this.mt===t&&this.mr===i&&this.mb===e&&this.ml===s}equalsApprox(t){return Geo.g(this.mt,t.top)&&Geo.g(this.mr,t.right)&&Geo.g(this.mb,t.bottom)&&Geo.g(this.ml,t.left)}get top(){return this.mt}set top(t){Debug&&(U.r(t,Margin,"top"),this._(t)),this.mt=t}get right(){return this.mr}set right(t){Debug&&(U.r(t,Margin,"right"),this._(t)),this.mr=t}get bottom(){return this.mb}set bottom(t){Debug&&(U.r(t,Margin,"bottom"),this._(t)),this.mb=t}get left(){return this.ml}set left(t){Debug&&(U.r(t,Margin,"left"),this._(t)),this.ml=t}isReal(){return isFinite(this.top)&&isFinite(this.right)&&isFinite(this.bottom)&&isFinite(this.left)}static Xg=new Margin(0,0,0,0).it();static AC=new Margin(2,2,2,2).it();static LC=[];static a(){const t=Margin.LC.pop();return t===void 0?new Margin:t}static o(t){Margin.LC.push(t)}}class Spot{sx;sy;ox;oy;f;constructor(t,i,e,s){t===void 0?(this.sx=0,this.sy=0,this.ox=0,this.oy=0):(i===void 0&&(i=0),e===void 0&&(e=0),s===void 0&&(s=0),this.sx=t,this.sy=i,this.ox=e,this.oy=s),this.f=!1}c(t){return this.sx=t.sx,this.sy=t.sy,this.ox=t.ox,this.oy=t.oy,this}setTo(t,i,e,s){return Debug&&(this.Cw(t,"setTo:x"),this.Cw(i,"setTo:y"),this.Aw(e,"setTo:offx"),this.Aw(s,"setTo:offy"),this._()),this.sx=t,this.sy=i,this.ox=e,this.oy=s,this}set(t){return Debug&&(U.e(t,Spot,Spot,"set:s"),this._()),this.sx=t.sx,this.sy=t.sy,this.ox=t.ox,this.oy=t.oy,this}copy(){const t=new Spot;return t.sx=this.sx,t.sy=this.sy,t.ox=this.ox,t.oy=this.oy,t}it(){return this.f=!0,Object.freeze(this),this}N(){return this.f||Object.isFrozen(this)?this:this.copy().p()}p(){return this.f||(this.f=!0),this}At(){return this.f&&(Object.isFrozen(this)&&U.n("cannot thaw constant: "+this),this.f=!1),this}_(t){if(Debug&&this.f){let i="The Spot is frozen, so its properties cannot be set: "+this.toString();t!==void 0&&(i+=" to value: "+t),U.n(i)}}Ye(t){return this.sx=NaN,this.sy=NaN,this.ox=t,this}Cw(t,i){(isNaN(t)||t>1||t<0)&&U.U(t,"0 <= "+i+" <= 1",Spot,i)}Aw(t,i){(isNaN(t)||t===1/0||t===-1/0)&&U.U(t,"real number, not NaN or Infinity",Spot,i)}static parse(t){if(typeof t=="string"){if(t=t.trim(),t==="None")return Spot.None;if(t==="TopLeft")return Spot.TopLeft;if(t==="Top"||t==="TopCenter"||t==="MiddleTop")return Spot.TopCenter;if(t==="TopRight")return Spot.TopRight;if(t==="Left"||t==="LeftCenter"||t==="MiddleLeft")return Spot.LeftCenter;if(t==="Center")return Spot.Center;if(t==="Right"||t==="RightCenter"||t==="MiddleRight")return Spot.RightCenter;if(t==="BottomLeft")return Spot.BottomLeft;if(t==="Bottom"||t==="BottomCenter"||t==="MiddleBottom")return Spot.BottomCenter;if(t==="BottomRight")return Spot.BottomRight;if(t==="TopSide")return Spot.TopSide;if(t==="LeftSide")return Spot.LeftSide;if(t==="RightSide")return Spot.RightSide;if(t==="BottomSide")return Spot.BottomSide;if(t==="TopBottomSides")return Spot.TopBottomSides;if(t==="LeftRightSides")return Spot.LeftRightSides;if(t==="TopLeftSides")return Spot.TopLeftSides;if(t==="TopRightSides")return Spot.TopRightSides;if(t==="BottomLeftSides")return Spot.BottomLeftSides;if(t==="BottomRightSides")return Spot.BottomRightSides;if(t==="NotTopSide")return Spot.NotTopSide;if(t==="NotLeftSide")return Spot.NotLeftSide;if(t==="NotRightSide")return Spot.NotRightSide;if(t==="NotBottomSide")return Spot.NotBottomSide;if(t==="AllSides")return Spot.AllSides;if(t==="Default")return Spot.Default;const i=t.split(" ");let e=0,s=0;for(;i[e]==="";)e++;let n=i[e++];n!==void 0&&n.length>0&&(s=parseFloat(n));let o=0;for(;i[e]==="";)e++;n=i[e++],n!==void 0&&n.length>0&&(o=parseFloat(n));let r=0;for(;i[e]==="";)e++;n=i[e++],n!==void 0&&n.length>0&&(r=parseFloat(n));let l=0;for(;i[e]==="";)e++;return n=i[e++],n!==void 0&&n.length>0&&(l=parseFloat(n)),new Spot(s,o,r,l)}else return new Spot}static stringify(t){return Debug&&U.e(t,Spot),t.isSpot()?t.x.toString()+" "+t.y.toString()+" "+t.offsetX.toString()+" "+t.offsetY.toString():t.toString()}static stringifyFixed(t){return U.i(t,"number",Spot,"stringifyFixed:digits"),i=>i.x.toFixed(t)+" "+i.y.toFixed(t)+" "+i.offsetX.toFixed(t)+" "+i.offsetY.toFixed(t)}toString(){return this.isSpot()?this.ox===0&&this.oy===0?"Spot("+this.x+","+this.y+")":"Spot("+this.x+","+this.y+","+this.offsetX+","+this.offsetY+")":this.equals(Spot.None)?"None":this.equals(Spot.TopLeft)?"TopLeft":this.equals(Spot.TopCenter)?"Top":this.equals(Spot.TopRight)?"TopRight":this.equals(Spot.LeftCenter)?"Left":this.equals(Spot.Center)?"Center":this.equals(Spot.RightCenter)?"Right":this.equals(Spot.BottomLeft)?"BottomLeft":this.equals(Spot.BottomCenter)?"Bottom":this.equals(Spot.BottomRight)?"BottomRight":this.equals(Spot.TopSide)?"TopSide":this.equals(Spot.LeftSide)?"LeftSide":this.equals(Spot.RightSide)?"RightSide":this.equals(Spot.BottomSide)?"BottomSide":this.equals(Spot.TopBottomSides)?"TopBottomSides":this.equals(Spot.LeftRightSides)?"LeftRightSides":this.equals(Spot.TopLeftSides)?"TopLeftSides":this.equals(Spot.TopRightSides)?"TopRightSides":this.equals(Spot.BottomLeftSides)?"BottomLeftSides":this.equals(Spot.BottomRightSides)?"BottomRightSides":this.equals(Spot.NotTopSide)?"NotTopSide":this.equals(Spot.NotLeftSide)?"NotLeftSide":this.equals(Spot.NotRightSide)?"NotRightSide":this.equals(Spot.NotBottomSide)?"NotBottomSide":this.equals(Spot.AllSides)?"AllSides":this.equals(Spot.Default)?"Default":"None"}equals(t){return t instanceof Spot?(this.sx===t.x||isNaN(this.sx)&&isNaN(t.x))&&(this.sy===t.y||isNaN(this.sy)&&isNaN(t.y))&&this.ox===t.offsetX&&this.oy===t.offsetY:!1}opposite(){return new Spot(.5-(this.sx-.5),.5-(this.sy-.5),-this.ox,-this.oy)}includesSide(t){if(!this.isSide())return!1;if(!t.isSide())if(t.equals(Spot.Left))t=Spot.LeftSide;else if(t.equals(Spot.Right))t=Spot.RightSide;else if(t.equals(Spot.Top))t=Spot.TopSide;else if(t.equals(Spot.Bottom))t=Spot.BottomSide;else return!1;const i=this.oy,e=t.offsetY;return(i&e)===e}get x(){return this.sx}set x(t){Debug&&(this.Cw(t,"x"),this._(t)),this.sx=t}get y(){return this.sy}set y(t){Debug&&(this.Cw(t,"y"),this._(t)),this.sy=t}get offsetX(){return this.ox}set offsetX(t){Debug&&(this.Aw(t,"offsetX"),this._(t)),this.ox=t}get offsetY(){return this.oy}set offsetY(t){Debug&&(this.Aw(t,"offsetY"),this._(t)),this.oy=t}isSpot(){return!isNaN(this.x)&&!isNaN(this.y)}isNoSpot(){return isNaN(this.x)||isNaN(this.y)}isSide(){return isNaN(this.x)&&isNaN(this.y)&&this.offsetX===1&&this.offsetY!==0}isNone(){return isNaN(this.x)&&isNaN(this.y)&&this.offsetX===0&&this.offsetY===0}isDefault(){return isNaN(this.x)&&isNaN(this.y)&&this.offsetX===-1&&this.offsetY===0}static None=new Spot(0,0,0,0).Ye(0).it();static Default=new Spot(0,0,-1,0).Ye(-1).it();static TopLeft=new Spot(0,0,0,0).it();static TopCenter=new Spot(.5,0,0,0).it();static TopRight=new Spot(1,0,0,0).it();static LeftCenter=new Spot(0,.5,0,0).it();static Center=new Spot(.5,.5,0,0).it();static RightCenter=new Spot(1,.5,0,0).it();static BottomLeft=new Spot(0,1,0,0).it();static BottomCenter=new Spot(.5,1,0,0).it();static BottomRight=new Spot(1,1,0,0).it();static MiddleTop=Spot.TopCenter;static MiddleLeft=Spot.LeftCenter;static MiddleRight=Spot.RightCenter;static MiddleBottom=Spot.BottomCenter;static Top=Spot.TopCenter;static Left=Spot.LeftCenter;static Right=Spot.RightCenter;static Bottom=Spot.BottomCenter;static TopSide=new Spot(0,0,1,1).Ye(1).it();static LeftSide=new Spot(0,0,1,2).Ye(1).it();static RightSide=new Spot(0,0,1,4).Ye(1).it();static BottomSide=new Spot(0,0,1,8).Ye(1).it();static TopBottomSides=new Spot(0,0,1,9).Ye(1).it();static LeftRightSides=new Spot(0,0,1,6).Ye(1).it();static TopLeftSides=new Spot(0,0,1,3).Ye(1).it();static TopRightSides=new Spot(0,0,1,5).Ye(1).it();static BottomLeftSides=new Spot(0,0,1,10).Ye(1).it();static BottomRightSides=new Spot(0,0,1,12).Ye(1).it();static NotTopSide=new Spot(0,0,1,14).Ye(1).it();static NotLeftSide=new Spot(0,0,1,13).Ye(1).it();static NotRightSide=new Spot(0,0,1,11).Ye(1).it();static NotBottomSide=new Spot(0,0,1,7).Ye(1).it();static AllSides=new Spot(0,0,1,15).Ye(1).it();static vk=new Spot(.156,.156).it();static Jk=new Spot(.844,.844).it();static TC=[];static a(){const t=Spot.TC.pop();return t===void 0?new Spot:t}static o(t){Spot.TC.push(t)}}class Transform{m11;m12;m21;m22;dx;dy;constructor(){this.m11=1,this.m12=0,this.m21=0,this.m22=1,this.dx=0,this.dy=0}set(t){return this.m11=t.m11,this.m12=t.m12,this.m21=t.m21,this.m22=t.m22,this.dx=t.dx,this.dy=t.dy,this}setTo(t,i,e,s,n,o){return this.m11=t,this.m12=i,this.m21=e,this.m22=s,this.dx=n,this.dy=o,this}copy(){const t=new Transform;return t.m11=this.m11,t.m12=this.m12,t.m21=this.m21,t.m22=this.m22,t.dx=this.dx,t.dy=this.dy,t}toString(){return"Transform("+this.m11+","+this.m12+","+this.m21+","+this.m22+","+this.dx+","+this.dy+")"}equals(t){return this.m11===t.m11&&this.m12===t.m12&&this.m21===t.m21&&this.m22===t.m22&&this.dx===t.dx&&this.dy===t.dy}$k(){return this.dx===0&&this.dy===0&&this.m11===1&&this.m12===0&&this.m21===0&&this.m22===1}Vi(){return this.m11=1,this.m12=0,this.m21=0,this.m22=1,this.dx=0,this.dy=0,this}uf(t){const i=this.m11*t.m11+this.m21*t.m12,e=this.m12*t.m11+this.m22*t.m12,s=this.m11*t.m21+this.m21*t.m22,n=this.m12*t.m21+this.m22*t.m22;return this.dx=this.m11*t.dx+this.m21*t.dy+this.dx,this.dy=this.m12*t.dx+this.m22*t.dy+this.dy,this.m11=i,this.m12=e,this.m21=s,this.m22=n,this}DC(t){const i=1/(t.m11*t.m22-t.m12*t.m21),e=t.m22*i,s=-t.m12*i,n=-t.m21*i,o=t.m11*i,r=i*(t.m21*t.dy-t.m22*t.dx),l=i*(t.m12*t.dx-t.m11*t.dy),h=this.m11*e+this.m21*s,f=this.m12*e+this.m22*s,a=this.m11*n+this.m21*o,c=this.m12*n+this.m22*o;return this.dx=this.m11*r+this.m21*l+this.dx,this.dy=this.m12*r+this.m22*l+this.dy,this.m11=h,this.m12=f,this.m21=a,this.m22=c,this}Lw(){const t=1/(this.m11*this.m22-this.m12*this.m21),i=this.m22*t,e=-this.m12*t,s=-this.m21*t,n=this.m11*t,o=t*(this.m21*this.dy-this.m22*this.dx),r=t*(this.m12*this.dx-this.m11*this.dy);return this.m11=i,this.m12=e,this.m21=s,this.m22=n,this.dx=o,this.dy=r,this}ms(t,i,e){if(t>=360?t-=360:t<0&&(t+=360),t===0)return this;this.Bs(i,e);let s=0,n=0;if(t===90)s=0,n=1;else if(t===180)s=-1,n=0;else if(t===270)s=0,n=-1;else{const f=t*Math.PI/180;s=Math.cos(f),n=Math.sin(f)}const o=this.m11*s+this.m21*n,r=this.m12*s+this.m22*n,l=this.m11*-n+this.m21*s,h=this.m12*-n+this.m22*s;return this.m11=o,this.m12=r,this.m21=l,this.m22=h,this.Bs(-i,-e),this}Bs(t,i){return this.dx+=this.m11*t+this.m21*i,this.dy+=this.m12*t+this.m22*i,this}ot(t,i){return i===void 0&&(i=t),this.m11*=t,this.m12*=t,this.m21*=i,this.m22*=i,this}nF(){if(this.m11===1&&this.m12===0)return 0;let t=Math.atan2(this.m12,this.m11)*180/Math.PI;return t<0&&(t+=360),t}kt(t){const i=t.x,e=t.y;return t.s(i*this.m11+e*this.m21+this.dx,i*this.m12+e*this.m22+this.dy)}is(t){const i=1/(this.m11*this.m22-this.m12*this.m21),e=this.m22*i,s=-this.m12*i,n=-this.m21*i,o=this.m11*i,r=t.x-this.dx,l=t.y-this.dy;return t.s(r*e+l*n,r*s+l*o)}Tw(t){const i=1/(this.m11*this.m22-this.m12*this.m21),e=this.m22*i,s=-this.m12*i,n=-this.m21*i,o=this.m11*i,r=i*(this.m21*this.dy-this.m22*this.dx),l=i*(this.m12*this.dx-this.m11*this.dy),h=t.x*1.25,f=t.y*1.2;return t.s(h*e+f*n+r,h*s+f*o+l)}Yg(t){const i=t.x,e=t.y,s=i+t.width,n=e+t.height,o=this.m11,r=this.m12,l=this.m21,h=this.m22,f=this.dx,a=this.dy,c=i*o+e*l+f,u=i*r+e*h+a,d=s*o+e*l+f,m=s*r+e*h+a,g=i*o+n*l+f,p=i*r+n*h+a,w=s*o+n*l+f,x=s*r+n*h+a;let k=c,b=c,S=u,M=u;return k=Math.min(k,d),b=Math.max(b,d),S=Math.min(S,m),M=Math.max(M,m),k=Math.min(k,g),b=Math.max(b,g),S=Math.min(S,p),M=Math.max(M,p),k=Math.min(k,w),b=Math.max(b,w),S=Math.min(S,x),M=Math.max(M,x),t.s(k,S,b-k,M-S),t}static FC=[];static a(){const t=Transform.FC.pop();return t===void 0?new Transform:t}static o(t){Transform.FC.push(t)}static Zk="54a702f3e53909c447824c6706603faf4c"}const Geo={oF:"7da71ca0ad381e90",zn:4*((Math.sqrt(2)-1)/3),RC:null,Dw:y=>{if(y<=0)return 0;let t=Geo.RC;if(t===null){t=[];for(let i=0;i<=2e3;i++)t[i]=Math.sqrt(i);Geo.RC=t}if(y<1){const i=1/y;return i<=2e3?1/t[i|0]:Math.sqrt(y)}else return y<=2e3?t[y|0]:Math.sqrt(y)},g:(y,t)=>{const i=y-t;return i<.5&&i>-.5},G:(y,t)=>{const i=y-t;return i<5e-8&&i>-5e-8},zi:(y,t,i,e,s,n,o)=>{s<=0&&(s=1e-6);let r=0,l=0,h=0,f=0;if(yu-d)if(y-i>s||i-y>s){const g=(e-t)/(i-y)*(n-y)+t;if(g-s<=o&&o<=g+s)return!0}else return!0;else if(t-e>s||e-t>s){const g=(i-y)/(e-t)*(o-t)+y;if(g-s<=n&&n<=g+s)return!0}else return!0}return!1},Fw:(y,t,i,e,s,n,o,r,l,h,f,a)=>{if(!Geo.zi(y,t,o,r,a,i,e)||!Geo.zi(y,t,o,r,a,s,n)){const c=(y+i)/2,u=(t+e)/2,d=(i+s)/2,m=(e+n)/2,g=(s+o)/2,p=(n+r)/2,w=(c+d)/2,x=(u+m)/2,k=(d+g)/2,b=(m+p)/2,S=(w+k)/2,M=(x+b)/2;return Geo.Fw(y,t,c,u,w,x,S,M,l,h,f,a)||Geo.Fw(S,M,k,b,g,p,o,r,l,h,f,a)}else return Geo.zi(y,t,o,r,a,h,f)},IC:(y,t,i,e,s,n,o,r,l)=>{const h=(y+i)/2,f=(t+e)/2,a=(i+s)/2,c=(e+n)/2,u=(s+o)/2,d=(n+r)/2,m=(h+a)/2,g=(f+c)/2,p=(a+u)/2,w=(c+d)/2;return l.s((m+p)/2,(g+w)/2),l},rF:(y,t,i,e,s,n,o,r)=>{const l=(y+i)/2,h=(t+e)/2,f=(i+s)/2,a=(e+n)/2,c=(s+o)/2,u=(n+r)/2,d=(l+f)/2,m=(h+a)/2,g=(f+c)/2,p=(a+u)/2;return Point.direction(d,m,g,p)},cu:(y,t,i,e,s,n,o,r,l,h)=>{if(!Geo.zi(y,t,o,r,l,i,e)||!Geo.zi(y,t,o,r,l,s,n)){const f=(y+i)/2,a=(t+e)/2,c=(i+s)/2,u=(e+n)/2,d=(s+o)/2,m=(n+r)/2,g=(f+c)/2,p=(a+u)/2,w=(c+d)/2,x=(u+m)/2,k=(g+w)/2,b=(p+x)/2;Geo.cu(y,t,f,a,g,p,k,b,l,h),Geo.cu(k,b,w,x,d,m,o,r,l,h)}else h.unionNoCheck(y,t,0,0),h.unionNoCheck(o,r,0,0);return h},Xn:(y,t,i,e,s,n,o,r,l,h)=>{if(!Geo.zi(y,t,o,r,l,i,e)||!Geo.zi(y,t,o,r,l,s,n)){const f=(y+i)/2,a=(t+e)/2,c=(i+s)/2,u=(e+n)/2,d=(s+o)/2,m=(n+r)/2,g=(f+c)/2,p=(a+u)/2,w=(c+d)/2,x=(u+m)/2,k=(g+w)/2,b=(p+x)/2;Geo.Xn(y,t,f,a,g,p,k,b,l,h),Geo.Xn(k,b,w,x,d,m,o,r,l,h)}else h.length===0&&(h.push(y),h.push(t)),h.push(o),h.push(r);return h},Qk:(y,t,i,e,s,n,o,r,l,h)=>{if(Geo.zi(y,t,s,n,h,i,e))return Geo.zi(y,t,s,n,h,r,l);{const f=(y+i)/2,a=(t+e)/2,c=(i+s)/2,u=(e+n)/2,d=(f+c)/2,m=(a+u)/2;return Geo.Qk(y,t,f,a,d,m,o,r,l,h)||Geo.Qk(d,m,c,u,s,n,o,r,l,h)}},SE:(y,t,i,e,s,n,o)=>{const r=(y+i)/2,l=(t+e)/2,h=(i+s)/2,f=(e+n)/2;return o.s((r+h)/2,(l+f)/2),o},_k:(y,t,i,e,s,n,o,r)=>{if(Geo.zi(y,t,s,n,o,i,e))r.unionNoCheck(y,t,0,0),r.unionNoCheck(s,n,0,0);else{const l=(y+i)/2,h=(t+e)/2,f=(i+s)/2,a=(e+n)/2,c=(l+f)/2,u=(h+a)/2;Geo._k(y,t,l,h,c,u,o,r),Geo._k(c,u,f,a,s,n,o,r)}return r},Kg:(y,t,i,e,s,n,o,r)=>{if(Geo.zi(y,t,s,n,o,i,e))r.length===0&&(r.push(y),r.push(t)),r.push(s),r.push(n);else{const l=(y+i)/2,h=(t+e)/2,f=(i+s)/2,a=(e+n)/2,c=(l+f)/2,u=(h+a)/2;Geo.Kg(y,t,l,h,c,u,o,r),Geo.Kg(c,u,f,a,s,n,o,r)}return r},Ug:(y,t,i,e,s,n,o,r,l,h,f,a,c,u)=>{if(!Geo.zi(y,t,o,r,c,i,e)||!Geo.zi(y,t,o,r,c,s,n)){const d=(y+i)/2,m=(t+e)/2,g=(i+s)/2,p=(e+n)/2,w=(s+o)/2,x=(n+r)/2,k=(d+g)/2,b=(m+p)/2,S=(g+w)/2,M=(p+x)/2,A=(k+S)/2,C=(b+M)/2;let P=1/0,N=!1,T=0,L=0;if(Geo.Ug(y,t,d,m,k,b,A,C,l,h,f,a,c,u)){const D=(u.x-l)**2+(u.y-h)**2;D{let u=0;if(!Geo.zi(y,t,o,r,c,i,e)||!Geo.zi(y,t,o,r,c,s,n)){const d=(y+i)/2,m=(t+e)/2,g=(i+s)/2,p=(e+n)/2,w=(s+o)/2,x=(n+r)/2,k=(d+g)/2,b=(m+p)/2,S=(g+w)/2,M=(p+x)/2,A=(k+S)/2,C=(b+M)/2;u+=Geo.Gg(y,t,d,m,k,b,A,C,l,h,f,a,c),u+=Geo.Gg(A,C,S,M,w,x,o,r,l,h,f,a,c)}else{const d=(y-o)*(h-a)-(t-r)*(l-f);if(d===0)return u;const m=((y*r-t*o)*(l-f)-(y-o)*(l*a-h*f))/d,g=((y*r-t*o)*(h-a)-(t-r)*(l*a-h*f))/d;if(m>=f)return u;let p=0,w=0;if((l>f?l-f:f-l)<(h>a?h-a:a-h)){if(tw)return u}else if(yw)return u;d>0?u++:d<0&&u--}return u},xl:(y,t,i,e,s,n,o)=>{if(Geo.G(y,i)){let r=0,l=0;tl?(o.s(y,l),!1):(o.s(y,h),!0)}else if(Geo.G(t,e)){let r=0,l=0;yl?(o.s(l,t),!1):(o.s(h,t),!0)}else{const r=(i-y)**2+(e-t)**2,l=((y-s)*(y-i)+(t-n)*(t-e))/r;if(l<-5e-6)return o.s(y,t),!1;if(l>1.000005)return o.s(i,e),!1;{const h=y+l*(i-y),f=t+l*(e-t);return o.s(h,f),!0}}},Yn:(y,t,i,e,s,n,o,r,l)=>{if(Geo.g(y,i)&&Geo.g(t,e))return l.s(y,t),!1;if(Geo.G(s,o)){if(Geo.G(y,i))return Geo.xl(y,t,i,e,s,n,l),!1;{const f=(e-t)/(i-y)*(s-y)+t;return Geo.xl(y,t,i,e,s,f,l)}}else{const h=(r-n)/(o-s);if(Geo.G(y,i)){const f=h*(y-s)+n;let a=0,c=0;return tc?(l.s(y,c),!1):(l.s(y,f),!0)}else{const f=(e-t)/(i-y);if(Geo.G(h,f))return Geo.xl(y,t,i,e,s,n,l),!1;{const a=(f*y-h*s+n-t)/(f-h);if(Geo.G(f,0)){let c=0,u=0;return yu?(l.s(u,t),!1):(l.s(a,t),!0)}else{const c=f*(a-y)+t;return Geo.xl(y,t,i,e,a,c,l)}}}}},ME:(y,t,i,e,s)=>Geo.Yn(i.x,i.y,e.x,e.y,y.x,y.y,t.x,t.y,s),PE:(y,t,i,e,s,n,o,r,l,h)=>{let f=1/0;function a(S,M){const A=(S-y)**2+(M-t)**2;A{let h=1e21,f=y,a=t;if(Geo.Yn(y,t,y,e,s,n,o,r,l)){const c=(l.x-s)**2+(l.y-n)**2;cGeo.CC(y.x,y.y,y.width,y.height,t.x,t.y,i.x,i.y),CC:(y,t,i,e,s,n,o,r)=>{const l=y,h=y+i,f=t,a=t+e;if(s===o){let c=0,u=0;return n=f}if(n===r){let c=0,u=0;return s=l}return!!(Rect.contains(y,t,i,e,s,n)||Rect.contains(y,t,i,e,o,r)||Geo.au(l,f,h,f,s,n,o,r)||Geo.au(h,f,h,a,s,n,o,r)||Geo.au(h,a,l,a,s,n,o,r)||Geo.au(l,a,l,f,s,n,o,r))},au:(y,t,i,e,s,n,o,r)=>y===i&&t===e&&s===o&&n===r?y===s&&t===n:Geo.hu(y,t,i,e,s,n)*Geo.hu(y,t,i,e,o,r)<=0&&Geo.hu(s,n,o,r,y,t)*Geo.hu(s,n,o,r,i,e)<=0,hu:(y,t,i,e,s,n)=>{const o=i-y,r=e-t;let l=s-y,h=n-t,f=l*r-h*o;return f===0&&(f=l*o+h*r,f>0&&(l-=o,h-=r,f=l*o+h*r,f<0&&(f=0))),f},Hg:y=>(y<0&&(y+=360),y>=360&&(y-=360),y),OC:(y,t,i,e,s,n)=>{const o=Math.PI;n||(e=e*(o/180),s=s*(o/180));const r=e>s?-1:1,l=1e-5,h=o*2,f=[],a=o/2;let c=e,u=Math.min(h,Math.abs(s-e));if(ul;){const d=c+r*Math.min(u,a);f.push(Geo.lF(i,c,d,y,t)),u-=Math.abs(d-c),c=d}return f},lF:(y,t,i,e,s)=>{const n=(i-t)/2,o=y*Math.cos(n),r=y*Math.sin(n),l=o,h=-r,f=l*l+h*h,a=f+l*o+h*r,c=4/3*(Math.sqrt(2*f*a)-a)/(l*r-h*o),u=l-c*h,d=h+c*l,m=u,g=-d,p=n+t,w=Math.cos(p),x=Math.sin(p);return[e+y*Math.cos(t),s+y*Math.sin(t),e+u*w-d*x,s+u*x+d*w,e+m*w-g*x,s+m*x+g*w,e+y*Math.cos(i),s+y*Math.sin(i)]},Vg:(y,t,i,e,s,n,o)=>{const r=s,l=n,h=Math.floor((y-i)/r)*r+i,f=Math.floor((t-e)/l)*l+e;let a=h;h+r-y{let i=Math.max(y,t),e=Math.min(y,t),s=1,n=1;do s=i%e,n=e,i=e,e=s;while(s>0);return n},hF:(y,t,i,e)=>{const s=i<0,n=e<0;let o=0,r=0,l=0;y{let o=0;if(e>0)if(i>0){const r=y*y,l=t*t,h=y*i,f=t*e;let a=-l+f,c=-l+Math.sqrt(h*h+f*f),u=a;const d=9999999999;for(let p=0;p0)a=u;else if(k<0)c=u;else break}s=r*i/(u+r),n=l*e/(u+l);const m=s-i,g=n-e;o=Math.sqrt(m*m+g*g)}else s=0,n=t,o=Math.abs(e-t);else{const r=y*y-t*t,l=y*i;if(l(y[y.Line=1]="Line",y[y.Rectangle=2]="Rectangle",y[y.Ellipse=3]="Ellipse",y[y.Path=4]="Path",y))(GeometryType||{}),GeometryStretch=(y=>(y[y.None=0]="None",y[y.Default=1]="Default",y[y.Fill=2]="Fill",y[y.Uniform=6]="Uniform",y))(GeometryStretch||{});class Geometry{l;jg;vg;df;uu;du;Kn;Un;Gn;$;Me;Pe;ee;se;Vs;gf;mf;constructor(t){Debug&&arguments.length>1&&U.n("Geometry constructor can take at most one optional argument, the Geometry type."),GSet.Ji(this),this.l=2,t===void 0?t=4:Debug&&U.j(t,GeometryType,"GeometryType"),this.$=t,this.Me=0,this.Pe=0,this.ee=0,this.se=0,t===4?this.Vs=new List:this.Vs=Geometry.Iw,this.jg=this.Vs.at,this.vg=new Rect().p(),this.df=null,this.uu=null,this.du=NaN,this.Kn=Spot.TopLeft,this.Un=Spot.BottomRight,this.gf=NaN,this.mf=NaN,this.Gn=2}copy(){const t=new Geometry;if(t.l=this.l&-2,t.$=this.$,t.Me=this.Me,t.Pe=this.Pe,t.ee=this.ee,t.se=this.se,this.$===4){const i=this.Vs.h,e=t.Vs;for(let s=0;si.toString(t)}ai(t){t in GeometryType?this.type=t:U.hr(this,t)}toString(t){t===void 0&&(t=-1);const i=s=>s===0?"0":s.toFixed(t);let e;switch(this.type){case 1:return t<0?"M"+this.startX.toString()+" "+this.startY.toString()+"L"+this.endX.toString()+" "+this.endY.toString():"M"+i(this.startX)+" "+i(this.startY)+"L"+i(this.endX)+" "+i(this.endY);case 2:return e=new Rect(this.startX,this.startY,0,0),e.union(this.endX,this.endY,0,0),t<0?"M"+e.x.toString()+" "+e.y.toString()+"H"+e.right.toString()+"V"+e.bottom.toString()+"H"+e.left.toString()+"z":"M"+i(e.x)+" "+i(e.y)+"H"+i(e.right)+"V"+i(e.bottom)+"H"+i(e.left)+"z";case 3:if(e=new Rect(this.startX,this.startY,0,0),e.union(this.endX,this.endY,0,0),t<0){const r=e.left.toString()+" "+(e.y+e.height/2).toString(),l=e.right.toString()+" "+(e.y+e.height/2).toString();return"M"+r+"A"+(e.width/2).toString()+" "+(e.height/2).toString()+" 0 0 1 "+l+"A"+(e.width/2).toString()+" "+(e.height/2).toString()+" 0 0 1 "+r}else{const r=i(e.left)+" "+i(e.y+e.height/2),l=i(e.right)+" "+i(e.y+e.height/2);return"M"+r+"A"+i(e.width/2)+" "+i(e.height/2)+" 0 0 1 "+l+"A"+i(e.width/2)+" "+i(e.height/2)+" 0 0 1 "+r}case 4:let s="";const n=this.figures.h,o=n.length;for(let r=0;r0&&(s+=" x "),l.isFilled&&(s+="F "),s+=l.toString(t)}return s;default:return GeometryType[this.type]}}static fillPath(t){typeof t!="string"&&U.Pi(t,"string",Geometry,"fillPath:str");const i=t.split(/[Xx]/),e=i.length;let s="";for(let n=0;n=k-1||o[r+1].match(P)!==null?!0:(u=!1,!1)}function m(){return r++,o[r]}function g(T){let L=parseFloat(m()),D=parseFloat(m());l===l.toLowerCase()&&(L=c.x+L,D=c.y+D),T.s(L,D)}function p(){return g(c),c}function w(){return g(a),a}function x(){const T=h.toLowerCase();return T==="c"||T==="s"||T==="q"||T==="t"?new Point(2*c.x-a.x,2*c.y-a.y):new Point(c.x,c.y)}const k=o.length,b=GeoStream.VC(null);let S=!1,M=!1,A=!1,C=!0;const P=new RegExp("["+Geometry.Jg+"]");for(;!(r>=k-1);){if(h=l,l=m(),l==="")continue;u=!0;let T=!1;switch(l.toUpperCase()){case"X":C=!0,S=!1,M=!1;break;case"M":const L=p();for(b.Ni===null||C===!0?(b.gu(L.x,L.y,S,!1,!M,A),C=!1):b.fF(L.x,L.y),f.c(c);!d();){const D=p();b.dr(D.x,D.y)}break;case"L":for(;!d();){const D=p();b.dr(D.x,D.y)}u&&(T=!0);break;case"H":for(;!d();)c.s((l===l.toLowerCase()?c.x:0)+parseFloat(m()),c.y),b.dr(c.x,c.y);break;case"V":for(;!d();)c.s(c.x,(l===l.toLowerCase()?c.y:0)+parseFloat(m())),b.dr(c.x,c.y);u&&(T=!0);break;case"C":for(;!d();){const D=new Point;g(D);const F=w(),I=p();b.gr(D.x,D.y,F.x,F.y,I.x,I.y)}u&&(T=!0);break;case"S":for(;!d();){const D=x(),F=w(),I=p();b.gr(D.x,D.y,F.x,F.y,I.x,I.y)}u&&(T=!0);break;case"Q":for(;!d();){const D=w(),F=p();b.Ow(D.x,D.y,F.x,F.y)}u&&(T=!0);break;case"T":for(;!d();){const D=x();a.c(D);const F=p();b.Ow(D.x,D.y,F.x,F.y),a.c(F)}u&&(T=!0);break;case"B":for(;!d();){const D=parseFloat(m()),F=parseFloat(m());let I=parseFloat(m()),R=parseFloat(m());const O=parseFloat(m());let Y=O,K=!1;d()||(Y=parseFloat(m()),d()||(K=parseFloat(m())!==0)),l===l.toLowerCase()&&(I+=c.x,R+=c.y),b.cF(D,F,I,R,O,Y,K)}u&&(T=!0);break;case"A":for(;!d();){const D=Math.abs(parseFloat(m())),F=Math.abs(parseFloat(m())),I=parseFloat(m());let R=!1,O=!1,Y=0,K=0;const B=m();B.length===1?(R=!!parseFloat(B),O=!!parseFloat(m()),Y=parseFloat(m()),K=parseFloat(m())):B.length===2?(R=!!parseFloat(B[0]),O=!!parseFloat(B[1]),Y=parseFloat(m()),K=parseFloat(m())):(R=!!parseFloat(B[0]),O=!!parseFloat(B[1]),Y=parseFloat(B.slice(2)),K=parseFloat(m())),l===l.toLowerCase()&&(Y=c.x+Y,K=c.y+K),c.s(Y,K),b.uF(D,F,I,R,O,Y,K)}u&&(T=!0);break;case"Z":b.dF(),c.c(f);break;case"F":{let D="",F=1;for(;o[r+F];){if(o[r+F]==="0"){A=!0,F++;continue}if(o[r+F].match(/[Uu]/)!==null){F++;continue}if(o[r+F].match(P)===null){F++;continue}D=o[r+F];break}D.match(/[Mm]/)?S=!0:b.gF();break}case"U":{let D="",F=1;for(;o[r+F];){if(o[r+F].match(/[Ff]/)!==null){F++;continue}if(o[r+F].match(P)===null){F++;continue}D=o[r+F];break}D.match(/[Mm]/)?M=!0:b.mF(!1);break}default:if(l==="0"||l==="1")break;U.nt("Unknown geometry command: "+l);break}if(T){U.nt(`Bad geometry command: ${l}, next token: ${m()},
string: ${t}`);break}}const N=b.$g;if(GeoStream.zC(b),i){const T=N.figures.iterator;for(;T.next();){const L=T.value;L.isFilled=!0}}return N}static XC(t,i){const e=t.length,s=Point.a();for(let n=0;n=t)return 0;if((n>r?n-r:r-n)<(o>l?o-l:l-o)){if(ol)return 0}else if(ao)return 0}else if(nr)return 0}else if(fn)return 0;return h>0?1:-1}KC(t,i,e){const s=this.figures.h,n=s.length;for(let o=0;o1&&(t=1),i===void 0&&(i=new Point),this.type===1)return i.s(this.startX+t*(this.endX-this.startX),this.startY+t*(this.endY-this.startY)),i;const e=this.flattenedSegments,s=this.flattenedLengths,n=this.flattenedTotalLength,o=e.length,r=n*t;let l=0;for(let h=0;h=r){const d=r-l,m=u===0?0:d/u,g=e[h],p=g[c*2],w=g[c*2+1],x=g[c*2+2],k=g[c*2+3];return i.s(p+(x-p)*m,w+(k-w)*m),i}l+=u}}return i}getAngleAlongPath(t){if(t<0?t=0:t>1&&(t=1),this.type===1)return Math.atan2(this.endY-this.startY,this.endX-this.startX)*180/Math.PI;const i=this.flattenedSegments,e=this.flattenedLengths,s=this.flattenedTotalLength,n=i.length,o=s*t;let r=0;for(let l=0;l=o){const u=i[l],d=u[a*2],m=u[a*2+1],g=u[a*2+2],p=u[a*2+3];return Math.abs(g-d)<1&&Math.abs(p-m)<1?0:Math.abs(g-d)<1?p-m>=0?90:270:Math.abs(p-m)<1?g-d>=0?0:180:Math.atan2(p-m,g-d)*180/Math.PI}r+=c}}return NaN}getPointAndAngleAlongPath(t,i){if(t<0?t=0:t>1&&(t=1),i===void 0&&(i=[]),i.length=3,this.type===1)return i[0]=this.startX+t*(this.endX-this.startX),i[1]=this.startY+t*(this.endY-this.startY),i[2]=Math.atan2(this.endY-this.startY,this.endX-this.startX)*180/Math.PI,i;const e=this.flattenedSegments,s=this.flattenedLengths,n=this.flattenedTotalLength,o=e.length,r=n*t;let l=0;for(let h=0;h=r){const d=r-l,m=u===0?0:d/u,g=e[h],p=g[c*2],w=g[c*2+1],x=g[c*2+2],k=g[c*2+3];i[0]=p+(x-p)*m,i[1]=w+(k-w)*m;let b;return Math.abs(x-p)<1&&Math.abs(k-w)<1?b=0:Math.abs(x-p)<1?b=k-w>=0?90:270:Math.abs(k-w)<1?b=x-p>=0?0:180:b=Math.atan2(k-w,x-p)*180/Math.PI,i[2]=b,i}l+=u}}return i}getFractionForPoint(t){if(this.type===1){const i=this.startX,e=this.startY,s=this.endX,n=this.endY;if(i===s&&e===n)return 0;{const o=t.x,r=t.y;let l=0,h=0;if(i===s)return e=h?h===e?0:1:Math.abs(r-e)/(h-l);if(e===n)return i=h?h===i?0:1:Math.abs(o-i)/(h-l);{const f=(s-i)**2+(n-e)**2,a=Point.a();Geo.xl(i,e,s,n,o,r,a);const c=a.x,u=a.y;return Point.o(a),Math.sqrt(((c-i)**2+(u-e)**2)/f)}}}else if(this.type===2){const i=this.startX,e=this.startY,s=this.endX,n=this.endY;if(i===s&&e===n)return 0;{const o=s-i,r=n-e,l=o*2+r*2;let h=t.x,f=t.y;h=Math.min(Math.max(h,i),s),f=Math.min(Math.max(f,e),n);const a=Math.abs(h-i),c=Math.abs(h-s),u=Math.abs(f-e),d=Math.abs(f-n),m=Math.min(a,c,u,d);if(m===u)return h/l;if(m===c)return(o+f)/l;if(m===d)return(o*2+r-h)/l;if(m===a)return(o*2+r*2-f)/l}}else{const i=this.flattenedSegments,e=this.flattenedLengths,s=this.flattenedTotalLength,n=Point.a();let o=1/0,r=0,l=0;const h=i.length;let f=0,a=0;for(let u=0;u1?1:c}return 0}get flattenedSegments(){return this.UC(),this.df}UC(){if(this.df===null){const t=this.df=[],i=this.uu=[];this.wF(t,i)}}get flattenedLengths(){return this.UC(),this.uu}get flattenedTotalLength(){let t=this.du;if(isNaN(t)){if(this.type===1){const i=Math.abs(this.endX-this.startX),e=Math.abs(this.endY-this.startY);t=Math.sqrt(i*i+e*e)}else if(this.type===2){const i=Math.abs(this.endX-this.startX),e=Math.abs(this.endY-this.startY);t=i*2+e*2}else{const i=this.flattenedLengths,e=i.length;t=0;for(let s=0;s=4&&(t.push(e),i.push(this.sS(e))),e=[],e.push(d.endX),e.push(d.endY),r=d.endX,l=d.endY,h=r,f=l;break;case 2:e.push(d.endX),e.push(d.endY),r=d.endX,l=d.endY;break;case 3:Geo.Xn(r,l,d.point1X,d.point1Y,d.point2X,d.point2Y,d.endX,d.endY,.5,e),r=d.endX,l=d.endY;break;case 4:Geo.Kg(r,l,d.point1X,d.point1Y,d.endX,d.endY,.5,e),r=d.endX,l=d.endY;break;case 5:{const m=d.Co(o),g=m.length;if(g===0){e.push(d.centerX),e.push(d.centerY),r=d.centerX,l=d.centerY;break}for(let p=0;p=4&&(t.push(e),i.push(this.sS(e)))}}}get type(){return this.$}set type(t){this.$!==t&&(Debug&&U.j(t,GeometryType,"GeometryType"),this.f&&U.D(this,t),this.$=t,t===4?this.Vs=new List:(Geometry.Iw===null&&(Geometry.Iw=new List().p()),this.Vs=Geometry.Iw),this.Mt=!0)}get startX(){return this.Me}set startX(t){this.Me!==t&&(Debug&&U.r(t,Geometry,"startX"),this.f&&U.D(this,t),this.Me=t,this.Mt=!0)}get startY(){return this.Pe}set startY(t){this.Pe!==t&&(Debug&&U.r(t,Geometry,"startY"),this.f&&U.D(this,t),this.Pe=t,this.Mt=!0)}get endX(){return this.ee}set endX(t){this.ee!==t&&(Debug&&U.r(t,Geometry,"endX"),this.f&&U.D(this,t),this.ee=t,this.Mt=!0)}get endY(){return this.se}set endY(t){this.se!==t&&(Debug&&U.r(t,Geometry,"endY"),this.f&&U.D(this,t),this.se=t,this.Mt=!0)}get figures(){return this.Vs}set figures(t){this.Vs!==t&&(Debug&&U.e(t,List,Geometry,"figures"),this.f&&U.D(this,t),this.Vs=t,this.Mt=!0)}add(t){return Debug&&U.e(t,PathFigure,Geometry,"add"),this.Vs.add(t),this}setSpots(t,i,e,s,n,o,r,l){return this.f&&U.D(this),this.Kn=new Spot(t,i,n,o).p(),this.Un=new Spot(e,s,r,l).p(),this}get spot1(){return this.Kn}set spot1(t){Debug&&U.e(t,Spot,Geometry,"spot1"),this.f&&U.D(this,t),this.Kn=t.N()}get spot2(){return this.Un}set spot2(t){Debug&&U.e(t,Spot,Geometry,"spot2"),this.f&&U.D(this,t),this.Un=t.N()}get defaultStretch(){return this.Gn}set defaultStretch(t){this.Gn=t}get bounds(){return this.tS()&&this.Ew(),this.vg}}Geometry.stringify=Geometry.stringify,Geometry.stringifyFixed=Geometry.stringifyFixed,Geometry.fillPath=Geometry.fillPath,Geometry.parse=Geometry.parse;class PathFigure{l;Me;Pe;pf;Zg;Ke;constructor(t,i,e,s,n){e===void 0&&(e=!0),s===void 0&&(s=!0),n===void 0&&(n=!1),this.l=2|(e?4:0)|(s?8:0)|(n?16:0),t!==void 0?(Debug&&U.r(t,PathFigure,"sx"),this.Me=t):this.Me=0,i!==void 0?(Debug&&U.r(i,PathFigure,"sy"),this.Pe=i):this.Pe=0,this.pf=new List,this.Zg=this.pf.at,this.Ke=null}copy(){const t=new PathFigure;t.l=this.l&-2,t.Me=this.Me,t.Pe=this.Pe;const i=this.pf.h,e=i.length,s=t.pf;for(let n=0;no===0?"0":o.toFixed(t);i="M"+n(this.startX)+" "+n(this.startY)}const e=this.segments.h,s=e.length;for(let n=0;n(y[y.Move=1]="Move",y[y.Line=2]="Line",y[y.Bezier=3]="Bezier",y[y.QuadraticBezier=4]="QuadraticBezier",y[y.Arc=5]="Arc",y[y.SvgArc=6]="SvgArc",y))(SegmentType||{});class PathSegment{$;l;ee;se;ln;kl;Sl;pr;zs;constructor(t,i,e,s,n,o,r,l){if(GSet.Ji(this),t===void 0?t=2:Debug&&U.j(t,SegmentType,"SegmentType"),this.$=t,this.l=2,i!==void 0?(Debug&&U.r(i,PathSegment,"ex"),this.ee=i):this.ee=0,e!==void 0?(Debug&&U.r(e,PathSegment,"ey"),this.se=e):this.se=0,s===void 0&&(s=0),n===void 0&&(n=0),o===void 0&&(o=0),r===void 0&&(r=0),t===6){let h=o;h=h%360,h<0&&(h+=360),this.ln=h,this.kl=0,Debug&&U.r(s,PathSegment,"x1"),this.Sl=Math.max(s,0),Debug&&U.r(n,PathSegment,"y1"),this.pr=Math.max(n,0),typeof r=="boolean"?r&&(this.isLargeArc=!0):typeof r=="number"&&r&&(this.isLargeArc=!0),l&&(this.isClockwiseArc=!0)}else Debug&&U.r(s,PathSegment,"x1"),this.ln=s,Debug&&U.r(n,PathSegment,"y1"),this.kl=n,Debug&&U.r(o,PathSegment,"x2"),t===5&&(o=Math.max(o,0)),this.Sl=o,typeof r=="number"?(t===5&&(r=Math.max(r,0)),this.pr=r):this.pr=0;this.zs=null}copy(){const t=new PathSegment;return t.$=this.$,t.l=this.l&-2,t.ee=this.ee,t.se=this.se,t.ln=this.ln,t.kl=this.kl,t.Sl=this.Sl,t.pr=this.pr,t}equalsApprox(t){if(!(t instanceof PathSegment)||this.type!==t.type||this.isClosed!==t.isClosed)return!1;switch(this.type){case 1:case 2:return Geo.g(this.endX,t.endX)&&Geo.g(this.endY,t.endY);case 3:return Geo.g(this.endX,t.endX)&&Geo.g(this.endY,t.endY)&&Geo.g(this.point1X,t.point1X)&&Geo.g(this.point1Y,t.point1Y)&&Geo.g(this.point2X,t.point2X)&&Geo.g(this.point2Y,t.point2Y);case 4:return Geo.g(this.endX,t.endX)&&Geo.g(this.endY,t.endY)&&Geo.g(this.point1X,t.point1X)&&Geo.g(this.point1Y,t.point1Y);case 5:return Geo.g(this.startAngle,t.startAngle)&&Geo.g(this.sweepAngle,t.sweepAngle)&&Geo.g(this.centerX,t.centerX)&&Geo.g(this.centerY,t.centerY)&&Geo.g(this.radiusX,t.radiusX)&&Geo.g(this.radiusY,t.radiusY);case 6:return this.isClockwiseArc===t.isClockwiseArc&&this.isLargeArc===t.isLargeArc&&Geo.g(this.xAxisRotation,t.xAxisRotation)&&Geo.g(this.endX,t.endX)&&Geo.g(this.endY,t.endY)&&Geo.g(this.radiusX,t.radiusX)&&Geo.g(this.radiusY,t.radiusY);default:return!1}}ai(t){t in SegmentType?this.type=t:U.hr(this,t)}toString(t){t===void 0&&(t=-1);const i=s=>s===0?"0":s.toFixed(t);let e="";switch(this.type){case 1:t<0?e="M"+this.endX.toString()+" "+this.endY.toString():e="M"+i(this.endX)+" "+i(this.endY);break;case 2:t<0?e="L"+this.endX.toString()+" "+this.endY.toString():e="L"+i(this.endX)+" "+i(this.endY);break;case 3:t<0?e="C"+this.point1X.toString()+" "+this.point1Y.toString()+" "+this.point2X.toString()+" "+this.point2Y.toString()+" "+this.endX.toString()+" "+this.endY.toString():e="C"+i(this.point1X)+" "+i(this.point1Y)+" "+i(this.point2X)+" "+i(this.point2Y)+" "+i(this.endX)+" "+i(this.endY);break;case 4:t<0?e="Q"+this.point1X.toString()+" "+this.point1Y.toString()+" "+this.endX.toString()+" "+this.endY.toString():e="Q"+i(this.point1X)+" "+i(this.point1Y)+" "+i(this.endX)+" "+i(this.endY);break;case 5:t<0?e="B"+this.startAngle.toString()+" "+this.sweepAngle.toString()+" "+this.centerX.toString()+" "+this.centerY.toString()+" "+this.radiusX.toString()+" "+this.radiusY.toString():e="B"+i(this.startAngle)+" "+i(this.sweepAngle)+" "+i(this.centerX)+" "+i(this.centerY)+" "+i(this.radiusX)+" "+i(this.radiusY);break;case 6:t<0?e="A"+this.radiusX.toString()+" "+this.radiusY.toString()+" "+this.xAxisRotation.toString()+" "+(this.isLargeArc?1:0)+" "+(this.isClockwiseArc?1:0)+" "+this.endX.toString()+" "+this.endY.toString():e="A"+i(this.radiusX)+" "+i(this.radiusY)+" "+i(this.xAxisRotation)+" "+(this.isLargeArc?1:0)+" "+(this.isClockwiseArc?1:0)+" "+i(this.endX)+" "+i(this.endY);break;default:e=SegmentType[this.type]}return e+(this.isClosed?"z":"")}static Move=1;static Line=2;static Bezier=3;static QuadraticBezier=4;static Arc=5;static SvgArc=6;get f(){return(this.l&1)!==0}set f(t){t?this.l|=1:this.l&=-2}get Mt(){return(this.l&2)!==0}set Mt(t){t?this.l|=2:this.l&=-3}p(){return this.f=!0,this}close(){return this.isClosed=!0,this}Co(t){if(this.zs!==null&&t.Mt===!1)return this.zs;const i=this.radiusX;let e=this.radiusY;if(e===void 0&&(e=i),i===0||e===0)return this.zs=[],this.zs;const s=this.ln,n=this.kl,o=Geo.OC(0,0,i1&&(o*=Math.sqrt(p),r*=Math.sqrt(p));let w=(h===f?-1:1)*Math.sqrt((o*o*r*r-o*o*g*g-r*r*m*m)/(o*o*g*g+r*r*m*m));isNaN(w)&&(w=0);let x=w*o*g/r,k=w*-r*m/o;isNaN(x)&&(x=0),isNaN(k)&&(k=0);const b=(s+a)/2+u*x-d*k,S=(n+c)/2+d*x+u*k,M=(z,V)=>Math.sqrt(z*z+V*V),A=(z,V,H,W)=>(z*H+V*W)/(M(z,V)*M(H,W)),C=(z,V,H,W)=>(z*W=1&&(F=0),!f&&F>0&&(F=F-2*Math.PI),f&&F<0&&(F=F+2*Math.PI);const R=o>r?o:r,O=o>r?1:o/r,Y=o>r?r/o:1,K=Geo.OC(0,0,R,P,P+F,!0),B=Transform.a();return B.Vi(),B.Bs(b,S),B.ms(this.ln,0,0),B.ot(O,Y),Geometry.XC(K,B),Transform.o(B),this.zs=K,this.zs}get isClosed(){return(this.l&8)!==0}set isClosed(t){this.isClosed!==t&&(t?this.l|=8:this.l&=-9,this.Mt=!0)}get type(){return this.$}set type(t){Debug&&U.j(t,SegmentType,"SegmentType"),this.f&&U.D(this,t),this.$=t,this.Mt=!0}get endX(){return this.ee}set endX(t){Debug&&U.r(t,PathSegment,"endX"),this.f&&U.D(this,t),this.ee=t,this.Mt=!0}get endY(){return this.se}set endY(t){Debug&&U.r(t,PathSegment,"endY"),this.f&&U.D(this,t),this.se=t,this.Mt=!0}get point1X(){return this.ln}set point1X(t){Debug&&U.r(t,PathSegment,"point1X"),this.f&&U.D(this,t),this.ln=t,this.Mt=!0}get point1Y(){return this.kl}set point1Y(t){Debug&&U.r(t,PathSegment,"point1Y"),this.f&&U.D(this,t),this.kl=t,this.Mt=!0}get point2X(){return this.Sl}set point2X(t){Debug&&U.r(t,PathSegment,"point2X"),this.f&&U.D(this,t),this.Sl=t,this.Mt=!0}get point2Y(){return this.pr}set point2Y(t){Debug&&U.r(t,PathSegment,"point2Y"),this.f&&U.D(this,t),this.pr=t,this.Mt=!0}get centerX(){return this.ln}set centerX(t){Debug&&U.r(t,PathSegment,"centerX"),this.f&&U.D(this,t),this.ln=t,this.Mt=!0}get centerY(){return this.kl}set centerY(t){Debug&&U.r(t,PathSegment,"centerY"),this.f&&U.D(this,t),this.kl=t,this.Mt=!0}get radiusX(){return this.Sl}set radiusX(t){Debug&&U.r(t,PathSegment,"radiusX"),t<0&&U.U(t,">= zero",PathSegment,"radiusX"),this.f&&U.D(this,t),this.Sl=t,this.Mt=!0}get radiusY(){return this.pr}set radiusY(t){Debug&&U.r(t,PathSegment,"radiusY"),t<0&&U.U(t,">= zero",PathSegment,"radiusY"),this.f&&U.D(this,t),this.pr=t,this.Mt=!0}get startAngle(){return this.ee}set startAngle(t){Debug&&U.r(t,PathSegment,"startAngle"),this.f&&U.D(this,t),t=t%360,t<0&&(t+=360),this.ee=t,this.Mt=!0}get sweepAngle(){return this.se}set sweepAngle(t){Debug&&U.r(t,PathSegment,"sweepAngle"),this.f&&U.D(this,t),t>360&&(t=360),t<-360&&(t=-360),this.se=t,this.Mt=!0}get isClockwiseArc(){return(this.l&4)!==0}set isClockwiseArc(t){this.f&&U.D(this,t),t?this.l|=4:this.l&=-5,this.Mt=!0}get isLargeArc(){return(this.l&16)!==0}set isLargeArc(t){this.f&&U.D(this,t),t?this.l|=16:this.l&=-17,this.Mt=!0}get xAxisRotation(){return this.ln}set xAxisRotation(t){Debug&&U.r(t,PathSegment,"xAxisRotation"),this.f&&U.D(this,t),t=t%360,t<0&&(t+=360),this.ln=t,this.Mt=!0}}class InputEvent{C;Vw;zw;Qg;_g;tm;im;em;sm;nm;om;rm;lm;hm;Ao;am;fm;cm;Ne;constructor(){this.C=null,this.Vw=new Point(0,0).p(),this.zw=new Point(0,0).p(),this.Qg=0,this._g=0,this.tm=1,this.im="",this.em="",this.sm=!1,this.nm=!1,this.om=0,this.rm=0,this.lm=!1,this.hm=!1,this.Ao=!1,this.am=null,this.fm=0,this.cm=null,this.Ne=null}copy(){const t=new InputEvent;return this.clone(t)}clone(t){return t.C=this.C,t.Vw.c(this.viewPoint),t.zw.c(this.documentPoint),t.Qg=this.Qg,t._g=this._g,t.tm=this.tm,t.im=this.im,t.em=this.em,t.sm=this.sm,t.nm=this.nm,t.om=this.om,t.rm=this.rm,t.lm=this.lm,t.hm=this.hm,t.Ao=this.Ao,t.am=this.am,t.fm=this.fm,t.cm=this.cm,t.Ne=this.Ne,t}toString(){let t="^";return this.modifiers!==0&&(t+="M:"+this.modifiers),this.button!==0&&(t+="B:"+this.button),this.key!==""&&(t+="K:"+this.key),this.clickCount!==0&&(t+="C:"+this.clickCount),this.delta!==0&&(t+="D:"+this.delta),this.handled&&(t+="h"),this.bubbles&&(t+="b"),this.documentPoint!==null&&(t+="@"+this.documentPoint.toString()),t}get diagram(){return this.C}set diagram(t){this.C=t}get viewPoint(){return this.Vw}set viewPoint(t){Debug&&U.e(t,Point,InputEvent,"viewPoint"),this.Vw.c(t)}get documentPoint(){return this.zw}set documentPoint(t){Debug&&U.e(t,Point,InputEvent,"documentPoint"),this.zw.c(t)}getMultiTouchViewPoint(t,i){const e=this.diagram;return e===null||e.GC(this.event,t,i),i}getMultiTouchDocumentPoint(t,i){const e=this.diagram;return e===null||(e.GC(this.event,t,i),i.c(e.transformViewToDoc(i))),i}get modifiers(){return this.Qg}set modifiers(t){this.Qg=t}get button(){return this._g}set button(t){if(this._g=t,this.event===null)switch(t){case 0:this.buttons=1;return;case 1:this.buttons=4;return;case 2:this.buttons=2;return}}get buttons(){return this.tm}set buttons(t){this.tm=t}get key(){return this.im}set key(t){this.im=t}get code(){return this.em}set code(t){this.em=t}get down(){return this.sm}set down(t){this.sm=t}get up(){return this.nm}set up(t){this.nm=t}get clickCount(){return this.om}set clickCount(t){this.om=t}get delta(){return this.rm}set delta(t){this.rm=t}get isMultiTouch(){return this.lm}set isMultiTouch(t){this.lm=t}get handled(){return this.hm}set handled(t){this.hm=t}get bubbles(){return this.Ao}set bubbles(t){this.Ao=t}get event(){return this.am}set event(t){this.am=t}get isTouchEvent(){const t=this.event;return t===null?!1:t.pointerType==="touch"||t.pointerType==="pen"}get timestamp(){return this.fm}set timestamp(t){this.fm=t}get targetDiagram(){return this.cm}set targetDiagram(t){this.cm=t}get targetObject(){return this.Ne}set targetObject(t){this.Ne=t}get control(){return(this.modifiers&1)!==0}set control(t){this.modifiers=t?this.modifiers|1:this.modifiers&-2}get shift(){return(this.modifiers&4)!==0}set shift(t){this.modifiers=t?this.modifiers|4:this.modifiers&-5}get alt(){return(this.modifiers&2)!==0}set alt(t){this.modifiers=t?this.modifiers|2:this.modifiers&-3}get meta(){return(this.modifiers&8)!==0}set meta(t){this.modifiers=t?this.modifiers|8:this.modifiers&-9}get left(){const t=this.event;return t!==null&&(t.type==="mousedown"||t.type==="mouseup"||t.type==="pointerdown"||t.type==="pointerup")?this.button===0:(this.buttons&1)!==0}set left(t){t?this.buttons|=1:this.buttons&=-2}get right(){const t=this.event;return t!==null&&(t.type==="mousedown"||t.type==="mouseup"||t.type==="pointerdown"||t.type==="pointerup")?this.button===2:(this.buttons&2)!==0}set right(t){t?this.buttons|=2:this.buttons&=-3}get middle(){const t=this.event;return t!==null&&(t.type==="mousedown"||t.type==="mouseup"||t.type==="pointerdown"||t.type==="pointerup")?this.button===1:(this.buttons&4)!==0}set middle(t){t?this.buttons|=4:this.buttons&=-5}get commandKey(){const t=this.code,i=this.key;return"cxvyzagCXVYZAG".includes(i)?i.toLowerCase():t==="KeyC"?"c":t==="KeyX"?"x":t==="KeyV"?"v":t==="KeyY"?"y":t==="KeyZ"?"z":t==="KeyA"?"a":t==="KeyG"?"g":t!==""?t:i}}class DiagramEvent{C;Lt;um;dm;constructor(){this.C=null,this.Lt="",this.um=null,this.dm=null}copy(){const t=new DiagramEvent;return t.C=this.C,t.Lt=this.Lt,t.um=this.um,t.dm=this.dm,t}toString(){let t="*"+this.name;return this.subject!==null&&(t+=":"+this.subject.toString()),this.parameter!==null&&(t+="("+this.parameter.toString()+")"),t}get diagram(){return this.C}set diagram(t){this.C=t}get name(){return this.Lt}set name(t){this.Lt=t}get subject(){return this.um}set subject(t){this.um=t}get parameter(){return this.dm}set parameter(t){this.dm=t}}var ChangeType=(y=>(y[y.Transaction=1]="Transaction",y[y.Property=2]="Property",y[y.Insert=3]="Insert",y[y.Remove=4]="Remove",y))(ChangeType||{});class ChangedEvent{mu;gm;hn;Ci;C;pu;yf;wf;xf;bf;constructor(){this.mu=2,this.gm="",this.hn="",this.Ci=null,this.C=null,this.pu=null,this.yf=null,this.wf=null,this.xf=null,this.bf=null}static Transaction=1;static Property=2;static Insert=3;static Remove=4;clear(){this.Ci=null,this.C=null,this.pu=null,this.yf=null,this.wf=null,this.xf=null,this.bf=null}copy(){const t=new ChangedEvent;t.mu=this.mu,t.gm=this.gm,t.hn=this.hn,t.Ci=this.Ci,t.C=this.C,t.pu=this.pu;let i=this.yf;return U.W(i)&&U.rt(i.copyFrozen)?t.yf=i.copyFrozen():t.yf=i,i=this.wf,U.W(i)&&U.rt(i.copyFrozen)?t.wf=i.copyFrozen():t.wf=i,i=this.xf,U.W(i)&&U.rt(i.copyFrozen)?t.xf=i.copyFrozen():t.xf=i,i=this.bf,U.W(i)&&U.rt(i.copyFrozen)?t.bf=i.copyFrozen():t.bf=i,t}ai(t){t in ChangeType?this.change=t:U.hr(this,t)}toString(){let t="";return this.change===1?t+="* ":this.change===2?t+=this.model!==null?"!m":"!d":t+=(this.model!==null?"!m":"!d")+this.change,this.propertyName&&typeof this.propertyName=="string"&&(t+=" "+this.propertyName),this.modelChange&&this.modelChange!==this.propertyName&&(t+=" "+this.modelChange),t+=": ",this.change===1?this.oldValue!==null&&(t+=" "+this.oldValue):(this.object!==null&&(t+=U.toString(this.object)),this.oldValue!==null&&(t+=" old: "+U.toString(this.oldValue)),this.oldParam!==null&&(t+=" "+this.oldParam),this.newValue!==null&&(t+=" new: "+U.toString(this.newValue)),this.newParam!==null&&(t+=" "+this.newParam)),t}getValue(t){return t?this.oldValue:this.newValue}getParam(t){return t?this.oldParam:this.newParam}canUndo(){return this.model!==null||this.diagram!==null}undo(){this.canUndo()&&(this.model!==null?this.model.changeState(this,!0):this.diagram!==null&&this.diagram.HC(this,!0))}canRedo(){return this.model!==null||this.diagram!==null}redo(){this.canRedo()&&(this.model!==null?this.model.changeState(this,!1):this.diagram!==null&&this.diagram.HC(this,!1))}get model(){return this.Ci}set model(t){this.Ci=t}get diagram(){return this.C}set diagram(t){this.C=t}get change(){return this.mu}set change(t){this.mu=t}get modelChange(){return this.gm}set modelChange(t){Debug&&U.i(t,"string",ChangedEvent,"modelChange"),this.gm=t}get propertyName(){return this.hn}set propertyName(t){Debug&&typeof t!="string"&&U.P(t,ChangedEvent,"propertyName"),this.hn=t}get isTransactionFinished(){return this.mu===1&&(this.hn==="CommittedTransaction"||this.hn==="FinishedUndo"||this.hn==="FinishedRedo")}get object(){return this.pu}set object(t){this.pu=t}get oldValue(){return this.yf}set oldValue(t){this.yf=t}get oldParam(){return this.wf}set oldParam(t){this.wf=t}get newValue(){return this.xf}set newValue(t){this.xf=t}get newParam(){return this.bf}set newParam(t){this.bf=t}}class Transaction{qC;Lt;nS;constructor(){this.qC=new List().p(),this.Lt="",this.nS=!1}toString(t){let i="Transaction: "+this.name+" "+this.changes.count.toString()+(this.isComplete?"":", incomplete");if(t!==void 0&&t>0){const e=this.changes.count;for(let s=0;s=0;i--){const e=t.elt(i);e!==null&&e.clear()}t.clear(),t.p()}canUndo(){return this.isComplete}undo(){if(this.canUndo())for(let t=this.changes.count-1;t>=0;t--){const i=this.changes.elt(t);i!==null&&i.undo()}}canRedo(){return this.isComplete}redo(){if(!this.canRedo())return;const t=this.changes.count;for(let i=0;i=t;e--){const s=i.elt(e);s!==null&&s.undo(),i.At(),i.removeAt(e)}i.p()}thaw(){this.changes.At()}optimize(){if(!this.isComplete)return;const t=this.changes;t.At();const i=new GMap;for(let s=0;s0&&t.setElt(r,null),o.set(n.propertyName,s))}let e=0;for(let s=0;se&&t.setElt(e,n),e++)}for(;t.length>e;)t.pop();t.p()}get changes(){return this.qC}get name(){return this.Lt}set name(t){this.Lt=t}get isComplete(){return this.nS}set isComplete(t){this.nS=t}}class UndoManager{Xw;Xi;WC;Xs;oS;mm;Hn;Yw;rS;an;kf;Kw;Ys;Uw;Gw;pm;Hw;constructor(t){this.Xw=new GSet,this.Xi=!1,this.WC=new List().p(),this.Xs=-1,this.oS=999,this.Ys=!1,this.mm=null,this.Hn=0,this.Yw=!1,Debug&&(this.Yw=!0),this.rS=23,this.an=new List().p(),this.kf=new List,this.Kw=!0,this.Uw=!1,this.Gw=!1,this.pm=!1,this.Hw=!1,t&&Object.assign(this,t)}toString(t){let i="UndoManager "+this.historyIndex+"<"+this.history.count+"<="+this.maxHistoryLength;i+="[";let e=this.nestedTransactionNames.count;for(let s=0;s0&&(i+=" "),i+=this.nestedTransactionNames.elt(s);if(i+="]",t!==void 0&&t>0){e=this.history.count;for(let s=0;s=0;i--){const e=t.elt(i);e!==null&&e.clear()}t.clear(),this.Xs=-1,t.p(),this.Ys=!1,this.mm=null,this.Hn=0,this.an.At(),this.an.clear(),this.an.p(),this.kf.clear(),this.Uw=!1,this.Gw=!1,this.pm=!1,this.Hw=!1}copyProperties(t){this.isEnabled=t.isEnabled,this.maxHistoryLength=t.maxHistoryLength,this.yu=t.yu}addModel(t){this.Xw.add(t)}removeModel(t){this.Xw.delete(t)}startTransaction(t){if(t===void 0&&(t=""),t===null&&(t=""),this.isUndoingRedoing)return!1;this.Kw===!0&&(this.Kw=!1,this.Hn++,this.Ml||this.Pl("StartingFirstTransaction",t,this.currentTransaction),this.Hn>0&&this.Hn--),this.isEnabled&&(this.an.At(),this.an.add(t),this.an.p(),this.currentTransaction===null?this.kf.add(0):this.kf.add(this.currentTransaction.changes.count)),this.Hn++;const i=this.transactionLevel===1;return i&&(this.Ml||this.Pl("StartedTransaction",t,this.currentTransaction)),i}commitTransaction(t){return t===void 0&&(t=""),this.jC(!0,t)}rollbackTransaction(){return this.jC(!1,"")}jC(t,i){if(this.isUndoingRedoing)return!1;this.yu&&this.transactionLevel<1&&U.nt("Ending transaction without having started a transaction: "+i);const e=this.transactionLevel===1;let s=this.currentTransaction;e&&t&&(this.Ml||this.Pl("CommittingTransaction",i,s));let n=0;if(this.transactionLevel>0&&(this.Hn--,this.isEnabled)){const o=this.an.count;o>0&&(i===""&&(i=this.an.elt(0)),this.an.At(),this.an.removeAt(o-1),this.an.p());const r=this.kf.count;r>0&&(n=this.kf.elt(r-1),this.kf.removeAt(r-1))}if(e){if(t){if(this.pm=!1,s===null&&i!==""&&(s=this.currentTransaction),this.isEnabled&&s!==null){const o=s;o.isComplete||(o.isComplete=!0,o.name=i),this.discardHistoryAfterIndex();const r=this.history;r.At();const l=this.maxHistoryLength;if(l>=0){if(l===0)r.clear();else if(r.count>=l){const h=r.elt(0);h!==null&&h.clear(),r.removeAt(0),this.Xs--}}l!==0&&(r.count===0||r.get(r.count-1)!==o)&&(r.add(o),this.Xs++),r.p(),s=o}this.Ml||this.Pl("CommittedTransaction",i,s)}else{this.Ys=!0;try{this.isEnabled&&s!==null&&(s.isComplete=!0,s.undo())}finally{this.Ml||this.Pl("RolledBackTransaction",i,s),this.Ys=!1}s!==null&&s.clear()}return this.mm=null,this.qw&&this.clear(),this.qw=!1,this.Ww=!1,!0}else return this.isEnabled&&!t&&s!==null&&s.xF(n),!1}discardHistoryAfterIndex(){if(this.isUndoingRedoing||!this.canRedo())return;const t=this.history;t.At();for(let i=t.count-1;i>this.historyIndex;i--){const e=t.elt(i);e!==null&&e.clear(),t.removeAt(i),this.pm=!0}t.p()}thaw(){this.history.At()}NE(t){this.Hn+=t,this.Hn<0&&(this.Hn=0)}canUndo(){if(!this.isEnabled||this.transactionLevel>0)return!1;const t=this.transactionToUndo;return!!(t!==null&&t.canUndo())}undo(){if(!this.canUndo())return;const t=this.transactionToUndo;try{this.Ys=!0,this.Pl("StartingUndo","Undo",t),this.Xs--,t.undo()}catch(i){U.nt("undo error: "+i.toString())}finally{this.Pl("FinishedUndo","Undo",t),this.Ys=!1}}canRedo(){if(!this.isEnabled||this.transactionLevel>0)return!1;const t=this.transactionToRedo;return!!(t!==null&&t.canRedo())}redo(){if(!this.canRedo())return;const t=this.transactionToRedo;try{this.Ys=!0,this.Pl("StartingRedo","Redo",t),this.Xs++,t.redo()}catch(i){U.nt("redo error: "+i.toString())}finally{this.Pl("FinishedRedo","Redo",t),this.Ys=!1}}Pl(t,i,e){e===void 0&&(e=null);const s=new ChangedEvent;s.change=1,s.propertyName=t,s.object=e,s.oldValue=i;const n=this.models;for(;n.next();){const o=n.value;s.model=o,o.bF(s)}}handleChanged(t){if(this.isEnabled&&!this.isUndoingRedoing&&!this.skipsEvent(t)){let i=this.currentTransaction;i===null&&(i=new Transaction,this.mm=i);const e=t.copy(),s=i.changes;if(s.At(),s.add(e),s.p(),this.yu&&this.rS>0&&this.transactionLevel<=0&&!this.Kw){const n=t.diagram;if(n!==null&&n.qh===!1)return;U.nt("Change not within a transaction: "+e.toString()),this.rS--}}}skipsEvent(t){if(t===null||t.change===1)return!0;const i=t.object;if(i===null)return!1;if(i.layer!==void 0){const e=i.layer;if(e!==null&&e.isTemporary)return!0}else if(i.isTemporary)return!0;return!1}get models(){return this.Xw.iterator}get isEnabled(){return this.Xi}set isEnabled(t){this.Xi=t}get transactionToUndo(){return this.historyIndex>=0&&this.historyIndex<=this.history.count-1?this.history.elt(this.historyIndex):null}get transactionToRedo(){return this.historyIndex0}get yu(){return this.Yw}set yu(t){this.Yw=t}get nestedTransactionNames(){return this.an}get qw(){return this.Uw}set qw(t){this.Uw=t}get Ww(){return this.Gw}set Ww(t){this.Gw=t}get Ml(){return this.Hw}set Ml(t){this.Hw=t}get isJustDiscarded(){return this.pm}}class Tool{C;Lt;Xi;lS;hS;ym;vC;constructor(){GSet.Ji(this),this.C=Diagram.wm(),this.Lt="",this.Xi=!0,this.lS=!1,this.hS=null,this.vC=new InputEvent,this.ym=-1}get diagram(){return this.C}set diagram(t){t instanceof Diagram&&(this.C=t)}toString(){return this.name!==""?this.name+" Tool":U.Bn(this.constructor)}updateAdornments(t){}canStart(){return this.isEnabled}doStart(){}doActivate(){this.isActive=!0}doDeactivate(){this.isActive=!1}doStop(){}doCancel(){this.transactionResult=null,this.stopTool()}stopTool(){const t=this.diagram;t.currentTool===this&&(t.currentTool=null,t.currentCursor="")}doMouseDown(){!this.isActive&&this.canStart()&&this.doActivate()}doMouseMove(){}doMouseUp(){this.stopTool()}doMouseWheel(){}canStartMultiTouch(){return!0}standardPinchZoomStart(){const t=this.diagram,i=t.lastInput,e=i.getMultiTouchViewPoint(0,Point.K(NaN,NaN)),s=i.getMultiTouchViewPoint(1,Point.K(NaN,NaN));if(!e.isReal()||!s.isReal()){Point.o(e),Point.o(s);return}if(this.doCancel(),t.getInputOption("hasGestureZoom")){t.aS=t.scale;const n=s.x-e.x,o=s.y-e.y,r=Math.sqrt(n*n+o*o);t.fS=r,i.bubbles=!1}Point.o(e),Point.o(s)}standardPinchZoomMove(){const t=this.diagram,i=t.lastInput,e=i.getMultiTouchViewPoint(0,Point.K(NaN,NaN)),s=i.getMultiTouchViewPoint(1,Point.K(NaN,NaN));if(!e.isReal()||!s.isReal()){Point.o(e),Point.o(s);return}if(this.doCancel(),t.getInputOption("hasGestureZoom")){const n=s.x-e.x,o=s.y-e.y,l=Math.sqrt(n*n+o*o)/t.fS,h=new Point((Math.min(s.x,e.x)+Math.max(s.x,e.x))/2,(Math.min(s.y,e.y)+Math.max(s.y,e.y))/2),f=t.aS*l,a=t.commandHandler;if(f!==t.scale&&a.canResetZoom(f)){const c=t.zoomPoint;t.zoomPoint=h,a.resetZoom(f),t.zoomPoint=c}i.bubbles=!1}Point.o(e),Point.o(s)}doKeyDown(){this.diagram.lastInput.code==="Escape"&&this.doCancel()}doKeyUp(){}startTransaction(t){return t===void 0&&(t=this.name),this.transactionResult=null,this.diagram.startTransaction(t)}stopTransaction(){const t=this.diagram;return this.transactionResult===null?t.rollbackTransaction():t.commitTransaction(this.transactionResult)}standardMouseSelect(){const t=this.diagram;if(!t.allowSelect)return;const i=t.lastInput,e=t.findPartAt(i.documentPoint,!1);if(e!==null){if(U.rr?i.meta:i.control){t.O("ChangingSelection",t.selection);let s=e;for(;s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&(s.isSelected=!s.isSelected),t.O("ChangedSelection",t.selection)}else if(i.shift){if(!e.isSelected){t.O("ChangingSelection",t.selection);let s=e;for(;s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&(s.isSelected=!0),t.O("ChangedSelection",t.selection)}}else if(!e.isSelected){let s=e;for(;s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&t.select(s)}}else i.left&&!(U.rr?i.meta:i.control)&&!i.shift&&t.clearSelection()}standardMouseClick(t,i){t===void 0&&(t=null),i===void 0&&(i=o=>!o.layer?.isTemporary);const e=this.diagram,s=e.lastInput,n=e.findObjectAt(s.documentPoint,t,i);return s.targetObject=n,this.kF(n,s,e),s.handled}kF(t,i,e){if(i.handled=!1,t!==null&&!t.isEnabledObject())return;let s=0;i.left?i.clickCount===1?s=1:i.clickCount===2?s=2:s=1:i.right&&i.clickCount===1&&(s=3);let n="ObjectSingleClicked";if(t!==null){switch(s){case 1:n="ObjectSingleClicked";break;case 2:n="ObjectDoubleClicked";break;case 3:n="ObjectContextClicked";break}s!==0&&e.O(n,t)}else{switch(s){case 1:n="BackgroundSingleClicked";break;case 2:n="BackgroundDoubleClicked";break;case 3:n="BackgroundContextClicked";break}s!==0&&e.O(n)}if(t!==null)for(;t!==null;){let o=null;switch(s){case 1:o=t.click;break;case 2:o=t.doubleClick?t.doubleClick:t.click;break;case 3:o=t.contextClick;break}if(o!==null&&(o(i,t),i.handled))break;t=t.panel}else{let o=null;switch(s){case 1:o=e.click;break;case 2:o=e.doubleClick?e.doubleClick:e.click;break;case 3:o=e.contextClick;break}o!==null&&o(i)}}standardMouseOver(){const t=this.diagram,i=t.lastInput;if(t.animationManager.bi===!0)return;const e=t.skipsUndoManager;t.skipsUndoManager=!0;let s=t.viewportBounds.containsPoint(i.documentPoint)?t.findObjectAt(i.documentPoint,null,null):null;i.event&&(i.event.type==="pointercancel"||i.event.type==="pointerout")&&(s=null),i.targetObject=s;let n=!1;if(s!==t.Sf){let o=t.Sf;const r=o;for(t.Sf=s,this.doCurrentObjectChanged(o,s),i.handled=!1;o!==null;){const l=o.mouseLeave;if(l!==null&&(s===o||s!==null&&s.isContainedBy(o)||(l(i,o,s),n=!0,i.handled)))break;o=o.panel}for(o=r,i.handled=!1;s!==null;){const l=s.mouseEnter;if(l!==null&&(o===s||o!==null&&o.isContainedBy(s)||(l(i,s,o),n=!0,i.handled)))break;s=s.panel}s=t.Sf}if(s!==null){let o=s,r="";for(;o!==null&&(r=o.cursor,r==="");)o=o.panel;for(t.currentCursor=r,i.handled=!1,o=s;o!==null;){const l=o.mouseOver;if(l!==null&&(l(i,o),n=!0,i.handled))break;o=o.panel}}else{this.doUpdateCursor(null);const o=t.mouseOver;o!==null&&(o(i),n=!0)}n&&t.requestUpdate(),t.skipsUndoManager=e}doUpdateCursor(t){const i=this.diagram;i&&(i.currentCursor="")}doCurrentObjectChanged(t,i){}standardMouseWheel(){const t=this.diagram,i=t.lastInput;let e=i.delta;if(e===0||!t.documentBounds.isReal())return;const s=t.commandHandler,n=t.toolManager.mouseWheelBehavior;if(s!==null&&(n===2&&!i.shift||n===1&&i.control)){if(e>0?s.canIncreaseZoom():s.canDecreaseZoom()){const o=t.zoomPoint;t.zoomPoint=i.viewPoint,e>0?s.increaseZoom():s.decreaseZoom(),t.zoomPoint=o}i.bubbles=!1}else if(n===2&&i.shift||n===1&&!i.control){const o=t.position.copy(),r=i.event,l=r.deltaMode;let h=r.deltaX,f=r.deltaY,a="pixel";if((h!==0||f!==0)&&!i.shift){switch(l){case 0:a="pixel";break;case 1:a="line";break;case 2:a="page";break}if(h!==0&&t.allowHorizontalScroll){const c=t.scrollHorizontalLineChange;h=h*(c/16),t.scroll(a,h>0?"right":"left",Math.abs(h))}if(f!==0&&t.allowVerticalScroll){const c=t.scrollVerticalLineChange;f=f*(c/16),t.scroll(a,f>0?"down":"up",Math.abs(f))}}else!i.shift&&t.allowVerticalScroll?(e=e*3*t.scrollVerticalLineChange,t.scroll(a,e>0?"up":"down",Math.abs(e))):i.shift&&t.allowHorizontalScroll&&(e=e*3*t.scrollHorizontalLineChange,t.scroll(a,e>0?"left":"right",Math.abs(e)));this.doWheelChange(t,o,i)}}doWheelChange(t,i,e){(!t.position.equals(i)||e.event.wheelDeltaX!==0)&&(e.bubbles=!1)}standardWaitAfter(t,i){Debug&&U.i(t,"number",Tool,"standardWaitAfter:delay"),i===void 0&&(i=this.diagram.lastInput),this.cancelWaitAfter();const e=this,s=i.clone(this.vC);this.ym=U.lr(()=>e.doWaitAfter(s),t)}cancelWaitAfter(){this.ym!==-1&&U.Bg(this.ym),this.ym=-1}doWaitAfter(t){}findToolHandleAt(t,i){const s=this.diagram.findObjectAt(t,n=>{for(;n!==null&&!(n.panel instanceof Adornment);)n=n.panel;return n});return s===null?null:s.part.category===i?s:null}isBeyondDragSize(t,i){const e=this.diagram;t===void 0&&(t=e.firstInput.viewPoint),i===void 0&&(i=e.lastInput.viewPoint);const s=e.toolManager.dragSize;let n=s.width,o=s.height;return e.firstInput.isTouchEvent&&(n+=6,o+=6),Math.abs(i.x-t.x)>n||Math.abs(i.y-t.y)>o}get name(){return this.Lt}set name(t){U.i(t,"string",Tool,"name"),this.Lt=t}get isEnabled(){return this.Xi}set isEnabled(t){U.i(t,"boolean",Tool,"isEnabled"),this.Xi=t}get isActive(){return this.lS}set isActive(t){U.i(t,"boolean",Tool,"isActive"),this.lS=t}get transactionResult(){return this.hS}set transactionResult(t){t!==null&&U.i(t,"string",Tool,"transactionResult"),this.hS=t}}var WheelMode=(y=>(y[y.Scroll=1]="Scroll",y[y.Zoom=2]="Zoom",y[y.None=3]="None",y))(WheelMode||{}),GestureMode=(y=>(y[y.Zoom=1]="Zoom",y[y.Cancel=2]="Cancel",y[y.None=3]="None",y))(GestureMode||{});class ToolManager extends Tool{JC;$C;ZC;cS;uS;dS;gS;mS;pS;yS;xm;Wh;constructor(t){super(),this.name="ToolManager",this.JC=new List,this.$C=new List,this.ZC=new List,this.cS=850,this.uS=850,this.dS=new Size(2,2).it(),this.gS=5e3,this.mS=1,this.pS=1,this.yS=null,this.xm=null,this.Wh=-1,t&&Object.assign(this,t)}static WheelScroll=1;static WheelZoom=2;static WheelNone=3;static GestureZoom=1;static GestureCancel=2;static GestureNone=3;get mouseWheelBehavior(){return this.mS}set mouseWheelBehavior(t){U.j(t,WheelMode,"WheelMode"),this.mS=t}get gestureBehavior(){return this.pS}set gestureBehavior(t){U.j(t,GestureMode,"GestureMode"),this.pS=t}initializeStandardTools(){}updateAdornments(t){const i=this.currentToolTip;if(i instanceof Adornment&&this.xm===t){const e=i.adornedObject;(t!==null?e!==null&&e.part===t:e===null)?this.showToolTip(i,e):this.hideToolTip()}}doMouseDown(){const t=this.diagram,i=t.lastInput;if(i.isTouchEvent&&this.gestureBehavior===2&&(i.bubbles=!1),i.isMultiTouch){if(this.cancelWaitAfter(),this.gestureBehavior===3){i.bubbles=!0;return}if(this.gestureBehavior===2)return;if(t.currentTool.canStartMultiTouch()){t.currentTool.standardPinchZoomStart();return}}const e=t.undoManager;Debug&&e.yu&&e.transactionLevel!==0&&U.nt("WARNING: In ToolManager.doMouseDown: UndoManager.transactionLevel is not zero");const s=this.mouseDownTools.length;for(let n=0;n0&&s!==1/0){const n=this;this.Wh=U.lr(()=>n.hideToolTip(),s)}}positionToolTip(t,i){if(t.hasPlaceholder())return;const e=t,s=this.diagram,n=s.lastInput.documentPoint.copy(),o=e.measuredBounds,r=s.viewportBounds;s.lastInput.isTouchEvent&&(n.x-=o.width),n.x+o.width>r.right&&(n.x-=o.width+5/s.scale),n.xr.bottom?n.y-=o.height+5/s.scale:n.y+=20/s.scale,n.y30&&t.vw(),t._C(this.draggedParts),t.ku=!0,this.startTransaction("Drag"),this.startPoint=t.firstInput.documentPoint,t.isMouseCaptured=!0,t.allowDragOut&&this.MF()}DS(t){if(!this.dragsLink)return;const i=this.diagram,e=i.model.km(),s=t.first();e&&t.count===1&&s instanceof Link&&this.mayDragLink(s)?(this.draggedLink=s,this.draggedLink.canRelinkFrom()&&this.draggedLink.canRelinkTo()&&this.draggedLink.clearAdornments(),this.fn=i.toolManager.findTool("Relinking"),this.fn===null&&(this.fn=new RelinkingTool,this.fn.diagram=i),this.fn.originalLink=this.draggedLink):(this.draggedLink=null,this.fn=null)}mayDragLink(t){const i=this.diagram;return i!==null&&i.allowRelink}computeEffectiveCollection(t,i){return this.diagram.commandHandler.computeEffectiveCollection(t,i)}Ks(t){return t===void 0?new DraggingInfo(Point.No):this.isGridSnapEnabled?new DraggingInfo(new Point(Math.round(t.x*1e3)/1e3,Math.round(t.y*1e3)/1e3)):new DraggingInfo(t.copy())}doDeactivate(){this.isActive=!1;const t=this.diagram;this.diagram.layout.isRealtime=this.TS,t.ku=!1,t.Nl=!0,t.cacheGroupExternalLinks(!1),t.stopAutoScroll(),this.FS(),t.RS(this.draggedParts),this.xu=null,this.currentPart=null,this.draggedParts=null,this.isDragOutStarted=!1,this.wu=!1,DraggingTool.PF(),this.tA(),this.Mf.s(NaN,NaN),DraggingTool.vh!==null&&(DraggingTool.vh.currentCursor=""),DraggingTool.vh=null,DraggingTool.bt=null,this.Cl(),t.isMouseCaptured=!1,t.currentCursor="",t.bu=!1,this.stopTransaction(),t.IS(!0)}stopTransaction(){const t=this.diagram,i=super.stopTransaction();return i&&t.undoManager.transactionToUndo!==null&&t.undoManager.transactionToUndo.optimize(),i}FS(){const t=this.diagram,i=t.skipsUndoManager;t.skipsUndoManager=!0;const e=t.lastInput;this.iA(e,null),t.skipsUndoManager=i,this.yr.length=0}eA(){this.Cl(),this.OS();const t=this.diagram;this.Mf.isReal()&&(t.position=this.Mf),t.stopAutoScroll()}doCancel(){this.Cl(),this.OS();const t=this.diagram;this.Mf.isReal()&&(t.position=this.Mf),this.stopTool()}doKeyDown(){const t=this.diagram;if(!this.isActive)return;const i=t.lastInput,e=t.previousInput;i.code==="Escape"?this.doCancel():(i.code!==e.code||i.modifiers!==e.modifiers)&&this.doMouseMove()}doKeyUp(){this.isActive&&this.doMouseMove()}NF(t,i){let e=1/0,s=1/0,n=-1/0,o=-1/0;const r=t.iterator;for(;r.next();){const l=r.value;if(!l.isVisible())continue;const h=l.location,f=h.x,a=h.y;isNaN(f)||isNaN(a)||(fn&&(n=f),a>o&&(o=a))}return e===1/0?i.s(0,0,0,0):i.s(e,s,n-e,o-s),i}ES(t){if(this.copiedParts!==null)return;const i=this.diagram;if(t&&(i.isReadOnly||i.isModelReadOnly)||this.draggedParts===null)return;const e=i.undoManager;e.isEnabled&&e.isInTransaction?e.currentTransaction!==null&&e.currentTransaction.changes.count>0&&(i.undoManager.rollbackTransaction(),i.startTransaction("Drag")):this.OS(),i.skipsUndoManager=!t,i.partManager.addsToTemporaryLayer=!t,this.startPoint=i.firstInput.documentPoint;const s=this.copiesEffectiveCollection?this.draggedParts.toKeySet():i.selection,n=i.copyParts(s,i,!0),o=new GMap,r=this.draggedParts.iterator;for(;r.next();){const h=r.key;if(h.Ce()&&h.canCopy()){const f=n.get(h);if(f===null)continue;f.location=h.location,f.ensureBounds(),o.set(f,this.Ks(f.location))}}const l=n.iterator;for(;l.next();){const h=l.value;h instanceof Link&&h.canCopy()&&o.set(h,this.Ks())}if(this.copiedParts=o,this.DS(o.toKeySet()),this.draggedLink!==null){const h=this.draggedLink,f=h.routeBounds;h.wr(this.startPoint.x-(f.x+f.width/2),this.startPoint.y-(f.y+f.height/2))}this.doUpdateCursor(null)}Cl(){const t=this.diagram;if(this.copiedParts!==null){if(t.removeParts(this.copiedParts.toKeySet(),!1),this.copiedParts=null,this.draggedParts!==null){const i=this.draggedParts.iterator;for(;i.next();)if(i.key instanceof Link){const s=i.value;s.point=new Point(0,0)}}this.doUpdateCursor(null)}t.skipsUndoManager=!1,t.partManager.addsToTemporaryLayer=!1,this.startPoint=t.firstInput.documentPoint}tA(){this.draggedLink!==null&&(this.dragsLink&&this.fn!==null&&(this.fn.stopDraggingMouseMove(),this.fn.originalLink=null),this.draggedLink=null,this.fn=null)}Pf(t,i){if(t===null)return;const e=this.diagram,s=this.startPoint,n=Point.a();n.c(e.lastInput.documentPoint),this.moveParts(t,n.subtract(s),i),Point.o(n),e.getRenderingHint("temporaryPixelRatio")===!0&&e.Al===null&&e.avgSpf>30&&(e.vw(),e.Su())}moveParts(t,i,e){e===void 0&&(e=!1);const s=this.diagram;s!==null&&s.BS(t,i,this.dragOptions,e)}OS(){if(this.draggedParts===null)return;const t=this.diagram;let i=this.draggedParts.iterator;for(;i.next();){const e=i.key;e.Ce()&&(e.location=i.value.point)}for(i=this.draggedParts.iterator;i.next();){const e=i.key;if(e instanceof Link&&e.suspendsRouting){const s=i.value.point;this.draggedParts.set(e,this.Ks()),e.wr(-s.x,-s.y)}}t.maybeUpdate()}CF(t){if(t===null)return!0;const i=t.part;return!!(i===null||i instanceof Adornment||i.layer?.isTemporary||this.draggedParts&&this.draggedParts.has(i)||this.copiedParts&&this.copiedParts.has(i))}VS(t){const i=this.diagram;this.dragsLink&&(this.draggedLink!==null&&(this.draggedLink.fromNode=null,this.draggedLink.toNode=null),this.sA(!1));const e=this.findDragOverObject(t),s=i.lastInput;s.targetObject=e,this.doUpdateCursor(e);const n=i.skipsUndoManager;let o=!1;try{if(i.skipsUndoManager=!0,o=this.iA(s,e),!this.isActive&&DraggingTool.bt===null)return;const r=e!==null?e.part:null;if(r===null||i.handlesDragDropForTopLevelParts&&r.isTopLevel&&!(r instanceof Group)){const l=i.mouseDragOver;l!==null&&(l(s),o=!0)}if(!this.isActive&&DraggingTool.bt===null||(this.doDragOver(t,e),!this.isActive&&DraggingTool.bt===null))return}finally{i.skipsUndoManager=n,o&&i.maybeUpdate()}this.xu=e,!i.isReadOnly&&(i.allowMove||i.allowCopy)&&(i.allowHorizontalScroll||i.allowVerticalScroll)&&i.doAutoScroll(s.viewPoint)}findDragOverObject(t){return this.diagram.zS(t,null,i=>!this.CF(i))}doUpdateCursor(t){const i=this.diagram;(t===null||this.xu!==t)&&(!this.diagram.currentTool.isActive||this.mayCopy()?i.currentCursor=this.copyCursor:this.mayMove()?i.currentCursor=this.moveCursor:this.mayDragOut()&&(i.currentCursor=this.nodropCursor))}iA(t,i){let e=!1,s=this.yr.length;const n=s>0?this.yr[0]:null;if(i===n)return!1;t.handled=!1;for(let r=0;rs.findValidLinkablePort(f,i)),r=Point.a();let l=1/0,h=null;for(const f=o.iterator;f.next();){const a=f.value;if(a.part===null)continue;const u=a.getDocumentPoint(Spot.Center,r),d=t.distanceSquaredPoint(u);df.suspendsRouting=!1)}}if(this.doDropOnto(t,e),!this.isActive&&DraggingTool.bt===null)return;const o=Rect.a(),r=i.selection.iterator;for(;r.next();){const l=r.value;l instanceof Node&&this.LF(i,l,o)}Rect.o(o)}AF(t,i){const e=this.diagram,s=i.part;if(e.handlesDragDropForTopLevelParts&&s!==null&&s.isTopLevel&&!(s instanceof Group)){const n=e.mouseDrop;n!==null&&n(t)}}LF(t,i,e){if(!i.canAvoid())return;let s=!1;e=i.getAvoidableRect(e),t.viewportBounds.containsRect(e)&&(s=!0);const n=this.copiedParts||this.draggedParts;if(n===null)return;const o=t.KS(e,l=>l.part,l=>l instanceof Link,!0,l=>l instanceof Link,s);if(o.count===0)return;const r=o.iterator;for(;r.next();){const l=r.value;n.has(l)&&n.has(i)||!l.isMemberOf(i)&&l.isAvoiding&&l.invalidateRoute()}}doDropOnto(t,i){}doMouseMove(){if(!this.isActive)return;const t=this.diagram,i=t.lastInput;if(this.simulatedMouseMove(i.event,i.documentPoint,i.targetDiagram))return;this.currentPart!==null&&this.draggedParts!==null&&(this.mayCopy()?(this.ES(!1),this.Pf(this.copiedParts,!1)):this.mayMove()?(this.Cl(),this.Pf(this.draggedParts,!0)):this.mayDragOut()?(this.ES(!1),this.Pf(this.copiedParts,!1)):this.Cl(),this.VS(t.lastInput.documentPoint))}doMouseUp(){if(!this.isActive)return;const t=this.diagram,i=t.lastInput;if(this.simulatedMouseUp(i.event,i.documentPoint,i.targetDiagram))return;let e=!1;const s=this.mayCopy();if(s&&this.copiedParts!==null?(this.Cl(),this.ES(!0),this.Pf(this.copiedParts,!1),this.copiedParts!==null&&(t.O("ChangingSelection",t.selection),t.clearSelection(!0),this.copiedParts.iteratorKeys.each(n=>{n.isSelected=!0}))):(e=!0,this.Cl(),this.mayMove()&&(this.Pf(this.draggedParts,!0),this.VS(t.lastInput.documentPoint))),this.wu=!0,this.rA(t.lastInput.documentPoint),this.isActive){const n=s&&this.copiedParts,o=n?this.copiedParts?.toKeySet():this.draggedParts?this.draggedParts.toKeySet():null;this.copiedParts=null,e&&this.TF(),t.invalidateDocumentBounds(),t.RS(this.draggedParts),this.transactionResult=n?"Copy":"Move",t.O(n?"SelectionCopied":"SelectionMoved",o)}this.stopTool(),s&&t.O("ChangedSelection",t.selection)}simulatedMouseMove(t,i,e){if(DraggingTool.bt===null)return!1;const s=DraggingTool.bt.diagram;e instanceof Diagram||(e=null);const n=DraggingTool.vh;if(e!==n){if(n!==null&&n!==s){n.stopAutoScroll(),DraggingTool.bt.isDragOutStarted=!1;const r=n.toolManager.findTool("Dragging");r!==null&&r.doSimulatedDragLeave()}if(DraggingTool.vh=e,e!==null&&e!==s){DraggingTool.bt.eA();const r=e.toolManager.findTool("Dragging");r!==null&&(r.lA(),r.doSimulatedDragEnter())}this.doUpdateCursor(null)}if(e===null||e===s||!e.allowDrop||e.isReadOnly||!e.allowInsert)return!1;const o=e.toolManager.findTool("Dragging");if(o!==null){let r=i;t!==null&&(t.targetTouches!==void 0&&(t.targetTouches.length>0?t=t.targetTouches[0]:t.changedTouches.length>0&&(t=t.changedTouches[0])),r=e.getMouse(t)),e.lastInput.documentPoint=r,e.lastInput.viewPoint=e.transformDocToView(r),e.lastInput.down=!1,e.lastInput.up=!1,o.doSimulatedDragOver()}return!0}simulatedMouseUp(t,i,e){if(DraggingTool.bt===null)return!1;const s=DraggingTool.vh,n=DraggingTool.bt.diagram;if(e===null)return DraggingTool.bt.doCancel(),!0;if(e!==s){if(s!==null){const r=s.toolManager.findTool("Dragging");if(s!==null&&s!==n&&r!==null)return s.stopAutoScroll(),DraggingTool.bt.isDragOutStarted=!1,r.doSimulatedDragLeave(),!1}DraggingTool.vh=e;const o=e.toolManager.findTool("Dragging");o!==null&&(DraggingTool.bt.eA(),o.lA(),o.doSimulatedDragEnter())}if(e!==this.diagram){let o=i;t!==null?(t.targetTouches!==void 0&&(t.targetTouches.length>0?t=t.targetTouches[0]:t.changedTouches.length>0&&(t=t.changedTouches[0])),o=e.getMouse(t)):o===null&&(o=new Point),e.lastInput.documentPoint=o,e.lastInput.viewPoint=e.transformDocToView(o),e.lastInput.down=!1,e.lastInput.up=!0;const r=e.toolManager.findTool("Dragging");r!==null&&r.doSimulatedDrop();const l=DraggingTool.bt;if(l!==null){const h=l.mayCopy();l.transactionResult=h?"Copy":"Move",l.stopTool()}return!0}return!1}TF(){if(this.draggedParts===null)return;const t=this.draggedParts.iterator;for(;t.next();){const i=t.key;if(i instanceof Node){const e=i.containingGroup;e!==null&&e.hasPlaceholder()&&!this.draggedParts.has(e)&&e.placeholder.u()}}}mayCopy(){if(!this.isCopyEnabled)return!1;const t=this.diagram;if(t.isReadOnly||t.isModelReadOnly||!t.allowInsert||!t.allowCopy||!(U.rr?t.lastInput.alt:t.lastInput.control))return!1;const i=t.selection.iterator;for(;i.next();)if(i.value.canCopy())return!0;return!!(this.draggedLink!==null&&this.dragsLink&&this.draggedLink.canCopy())}mayDragOut(){if(!this.isCopyEnabled)return!1;const t=this.diagram;if(!t.allowDragOut||!t.allowCopy||t.allowMove)return!1;const i=t.selection.iterator;for(;i.next();)if(i.value.canCopy())return!0;return!!(this.draggedLink!==null&&this.dragsLink&&this.draggedLink.canCopy())}mayMove(){const t=this.diagram;if(t.isReadOnly||!t.allowMove)return!1;const i=t.selection.iterator;for(;i.next();)if(i.value.canMove())return!0;return!!(this.draggedLink!==null&&this.dragsLink&&this.draggedLink.canMove())}lA(){DraggingTool.Jw.has(this)||DraggingTool.Jw.add(this)}static PF(){if(DraggingTool.Jw.count>0){const t=DraggingTool.Jw,i=t.length;for(let e=0;e{n.isSelected=!0,s.add(n)})),this.rA(t.lastInput.documentPoint),t.invalidateDocumentBounds(),this.copiedParts!==null&&(this.transactionResult="ExternalCopy"),this.copiedParts=null,t.doFocus(),t.bu=!1,t.O("ExternalObjectsDropped",s,e),this.stopTransaction(),t.O("ChangedSelection",t.selection)}t.animationManager.Mu=!1}hA(t,i,e){if(this.copiedParts!==null)return;const s=this.diagram;if(s.isReadOnly||s.isModelReadOnly)return;s.skipsUndoManager=!i,s.partManager.addsToTemporaryLayer=!i,this.startPoint=e.documentPoint;const n=s.copyParts(t,s,!0),o=Rect.a();this.NF(t,o);const r=o.x+o.width/2,l=o.y+o.height/2;Rect.o(o);const h=this.bm,f=new GMap,a=Point.a(),c=t.iterator;for(;c.next();){const d=c.value;if(d instanceof Link&&d.canCopy()){const m=n.get(d);if(m===null)continue;m.points=d.points,m.wr(h.x-r,h.y-l),m.suspendsRouting=!0,f.set(m,this.Ks())}}const u=t.iterator;for(;u.next();){const d=u.value;if(d.Ce()&&d.canCopy()){const m=n.get(d);if(m===null)continue;const g=d.location;a.s(h.x-(r-g.x),h.y-(l-g.y)),m.location=a,m.ensureBounds(),f.set(m,this.Ks(a))}}if(Point.o(a),this.copiedParts=f,this.DS(f.toKeySet()),this.draggedLink!==null){const d=this.draggedLink,m=d.routeBounds;d.wr(this.startPoint.x-(m.x+m.width/2),this.startPoint.y-(m.y+m.height/2))}this.doUpdateCursor(null)}MF(){this.isDragOutStarted=!0,this.wu=!1,DraggingTool.bt=this,DraggingTool.vh=this.diagram,this.doSimulatedDragOut()}doSimulatedDragOut(){const t=this.diagram;!this.mayCopy()&&!this.mayMove()?t.currentCursor=this.nodropCursor:t.currentCursor="",this.xu=null}computeMove(t,i,e,s){const n=this.diagram;return n!==null?n.computeMove(t,i,this.dragOptions,s):new Point}static Jw=new List;static bt=null;static vh=null}ToolManager.prototype.doCancel=function(){DraggingTool.bt!==null&&DraggingTool.bt.doCancel(),Tool.prototype.doCancel.call(this)};class LinkingBaseTool extends Tool{US;GS;Ll;HS;qS;Jh;WS;$h;jS;vS;JS;$S;ZS;QS;aA;_S;Tl;tM;constructor(){super(),this.US=100,this.GS=!1,this.Ll="pointer",this.HS=new Link({layerName:"Tool"}).add(new Shape({isPanelMain:!0,stroke:"blue"}).theme("stroke","tempLink"),new Shape({toArrow:"Standard",fill:"blue",stroke:"blue"}).theme("fill","tempLink").theme("stroke","tempLink")).Kt(),this.Jh=new Shape("Rectangle",{portId:"",fill:null,stroke:"magenta",strokeWidth:2,desiredSize:Size.Wk}).theme("stroke","tempPort"),this.qS=new Node({selectable:!1,layerName:"Tool"}).add(this.Jh).Kt(),this.$h=new Shape("Rectangle",{portId:"",fill:null,stroke:"magenta",strokeWidth:2,desiredSize:Size.Wk}).theme("stroke","tempPort"),this.WS=new Node({selectable:!1,layerName:"Tool"}).add(this.$h).Kt(),this.jS=null,this.vS=null,this.JS=null,this.$S=null,this.ZS=null,this.QS=!0,this.aA=new GMap,this._S=null,this.Tl=null,this.tM=null}doStop(){this.diagram.stopAutoScroll(),this.originalLink=null,this.originalFromNode=null,this.originalFromPort=null,this.originalToNode=null,this.originalToPort=null,this.validPortsCache.clear(),this.targetPort=null}get portGravity(){return this.US}set portGravity(t){U.i(t,"number",LinkingBaseTool,"portGravity"),t>=0&&(this.US=t)}get isUnconnectedLinkValid(){return this.GS}set isUnconnectedLinkValid(t){U.i(t,"boolean",LinkingBaseTool,"isUnconnectedLinkValid"),this.GS=t}get linkingCursor(){return this.Ll}set linkingCursor(t){this.Ll=t}get temporaryLink(){return this.HS}set temporaryLink(t){U.e(t,Link,LinkingBaseTool,"temporaryLink"),t.Kt(),this.HS=t}get temporaryFromNode(){return this.qS}set temporaryFromNode(t){U.e(t,Node,LinkingBaseTool,"temporaryFromNode"),t.Kt(),this.qS=t,t&&(this.Jh=t.port)}get temporaryFromPort(){return this.Jh}set temporaryFromPort(t){if(U.e(t,GraphObject,LinkingBaseTool,"temporaryFromPort"),this.Jh!==null){const i=this.Jh.panel;if(i!==null){const e=i.T.indexOf(this.Jh);i.removeAt(e),i.insertAt(e,t)}}this.Jh=t}get temporaryToNode(){return this.WS}set temporaryToNode(t){U.e(t,Node,LinkingBaseTool,"temporaryToNode"),t.Kt(),this.WS=t,t&&(this.$h=t.port)}get temporaryToPort(){return this.$h}set temporaryToPort(t){if(U.e(t,GraphObject,LinkingBaseTool,"temporaryToPort"),this.$h!==null){const i=this.$h.panel;if(i!==null){const e=i.T.indexOf(this.$h);i.removeAt(e),i.insertAt(e,t)}}this.$h=t}get originalLink(){return this.jS}set originalLink(t){t!==null&&U.e(t,Link,LinkingBaseTool,"originalLink"),this.jS=t}get originalFromNode(){return this.vS}set originalFromNode(t){t!==null&&U.e(t,Node,LinkingBaseTool,"originalFromNode"),this.vS=t}get originalFromPort(){return this.JS}set originalFromPort(t){t!==null&&U.e(t,GraphObject,LinkingBaseTool,"originalFromPort"),this.JS=t}get originalToNode(){return this.$S}set originalToNode(t){t!==null&&U.e(t,Node,LinkingBaseTool,"originalToNode"),this.$S=t}get originalToPort(){return this.ZS}set originalToPort(t){t!==null&&U.e(t,GraphObject,LinkingBaseTool,"originalToPort"),this.ZS=t}get isForwards(){return this.QS}set isForwards(t){this.QS=t}get validPortsCache(){return this.aA}get targetPort(){return this._S}set targetPort(t){t!==null&&U.e(t,GraphObject,LinkingBaseTool,"targetPort"),this._S=t}copyPortProperties(t,i,e,s,n){if(t===null||i===null||e===null||s===null)return;const o=i.getDocumentScale(),r=Size.a();r.width=i.naturalBounds.width*o,r.height=i.naturalBounds.height*o,s.desiredSize=r,Size.o(r),n?(s.toSpot=i.toSpot,s.toEndSegmentLength=i.toEndSegmentLength):(s.fromSpot=i.fromSpot,s.fromEndSegmentLength=i.fromEndSegmentLength),e.locationSpot=Spot.Center;const l=Point.a();e.location=i.getDocumentPoint(Spot.Center,l),Point.o(l),s.angle=i.getDocumentAngle(),this.portTargeted!==null&&this.portTargeted(t,i,e,s,n)}setNoTargetPortProperties(t,i,e){i!==null&&(i.desiredSize=Size.Wk,i.fromSpot=Spot.None,i.toSpot=Spot.None),t!==null&&(t.location=this.diagram.lastInput.documentPoint),this.portTargeted!==null&&this.portTargeted(null,null,t,i,e)}doMouseDown(){this.isActive&&this.doMouseMove()}doMouseMove(){if(this.isActive){const t=this.diagram;if(this.targetPort=this.findTargetPort(this.isForwards),this.targetPort!==null&&this.targetPort.part instanceof Node){const i=this.targetPort.part;this.isForwards?this.copyPortProperties(i,this.targetPort,this.temporaryToNode,this.temporaryToPort,!0):this.copyPortProperties(i,this.targetPort,this.temporaryFromNode,this.temporaryFromPort,!1)}else this.isForwards?this.setNoTargetPortProperties(this.temporaryToNode,this.temporaryToPort,!0):this.setNoTargetPortProperties(this.temporaryFromNode,this.temporaryFromPort,!1);(t.allowHorizontalScroll||t.allowVerticalScroll)&&t.doAutoScroll(t.lastInput.viewPoint)}}findValidLinkablePort(t,i){if(t===null)return null;const e=t.part;if(!(e instanceof Node))return null;for(;t!==null;){const s=i?t.toLinkable:t.fromLinkable;if(s===!0&&(t.portId!==null||t instanceof Node)&&(i?this.isValidTo(e,t):this.isValidFrom(e,t)))return t;if(s===!1)return null;t=t.panel}return null}findTargetPort(t){const i=this.diagram,e=i.lastInput.documentPoint;let s=this.portGravity;const n=i.findObjectsNear(e,s,h=>this.findValidLinkablePort(h,t),null,!0);let o=1/0,r=null;const l=n.iterator;for(;l.next();){const h=l.value,f=h.part;if(!(f instanceof Node))continue;const a=h.getDocumentPoint(Spot.Center,Point.a()),c=e.x-a.x,u=e.y-a.y;Point.o(a);const d=c*c+u*u;if(d=e)return!1}return!0}isValidTo(t,i){if(t===null||i===null)return this.isUnconnectedLinkValid;if(this.diagram.currentTool===this&&(t.layer!==null&&!t.layer.allowLink||i.toLinkable!==!0))return!1;const e=i.toMaxLinks;if(e<1/0){if(this.originalLink!==null&&t===this.originalToNode&&i===this.originalToPort)return!0;let s=i.portId;if(s===null&&(s=""),t.findLinksInto(s).count>=e)return!1}return!0}isInSameNode(t,i){if(t===null||i===null)return!1;if(t===i)return!0;const e=t.part,s=i.part;return e!==null&&e===s}isLinked(t,i){if(t===null||i===null)return!1;const e=t.part;if(!(e instanceof Node))return!1;let s=t.portId;s===null&&(s="");const n=i.part;if(!(n instanceof Node))return!1;let o=i.portId;o===null&&(o="");const r=n.findLinksInto(o);for(;r.next();){const l=r.value;if(l.fromNode===e&&l.fromPortId===s)return!0}return!1}isValidLink(t,i,e,s){if(!this.isValidFrom(t,i)||!this.isValidTo(e,s)||i!==null&&s!==null&&(!(i.fromLinkableSelfNode&&s.toLinkableSelfNode)&&this.isInSameNode(i,s)||!(i.fromLinkableDuplicates&&s.toLinkableDuplicates)&&this.isLinked(i,s))||this.originalLink!==null&&(t!==null&&this.isLabelDependentOnLink(t,this.originalLink)||e!==null&&this.isLabelDependentOnLink(e,this.originalLink))||t!==null&&e!==null&&(t.data===null&&e.data!==null||t.data!==null&&e.data===null)||!this.isValidCycle(t,e,this.originalLink))return!1;let n;return t!==null&&i!==null&&(n=t.linkValidation,n!==null&&!n(t,i,e,s,this.originalLink))||e!==null&&s!==null&&(n=e.linkValidation,n!==null&&!n(t,i,e,s,this.originalLink))?!1:(n=this.linkValidation,n!==null?n(t,i,e,s,this.originalLink):!0)}isLabelDependentOnLink(t,i){if(t===null)return!1;const e=t.labeledLink;if(e===null)return!1;if(e===i)return!0;const s=new GSet;return s.add(t),this.iM(e,i,s)}iM(t,i,e){if(t===i)return!0;const s=t.fromNode;if(s!==null&&s.labeledLink&&(e.add(s),this.iM(s.labeledLink,i,e)))return!0;const n=t.toNode;return!!(n!==null&&n.labeledLink&&(e.add(n),this.iM(n.labeledLink,i,e)))}isValidCycle(t,i,e){if(e===void 0&&(e=null),t===null||i===null)return this.isUnconnectedLinkValid;const s=this.diagram;let n=1;if(s&&(s.model.Sm()?n=s.isTreePathToChildren?5:6:n=s.validCycle),n===1)return!0;if(n===5){const o=e||this.temporaryLink;if(o!==null&&!o.isTreeLink)return!0;const r=i.linksConnected;for(;r.next();){const l=r.value;if(l!==e&&l.isTreeLink&&l.toNode===i)return!1}return!this.Pu(t,i,e,!0)}else if(n===6){const o=e||this.temporaryLink;if(o!==null&&!o.isTreeLink)return!0;const r=t.linksConnected;for(;r.next();){const l=r.value;if(l!==e&&l.isTreeLink&&l.fromNode===t)return!1}return!this.Pu(t,i,e,!0)}else{if(n===2)return!this.DF(t,i,e);if(n===3)return!this.Pu(t,i,e,!1);if(n===4)return!this.FF(t,i,e)}return!0}Pu(t,i,e,s){if(t===i)return!0;if(t===null||i===null)return!1;const n=t.linksConnected;for(;n.next();){const o=n.value;if(o===e||s&&!o.isTreeLink||o.toNode!==t)continue;const r=o.fromNode;if(!(r===t||r===null)&&this.Pu(r,i,e,s))return!0}return!1}DF(t,i,e){if(t===i)return!0;const s=new GSet;return s.add(i),this.fA(s,t,i,e)}fA(t,i,e,s){if(i===e)return!0;if(i===null||e===null||t.has(i))return!1;t.add(i);const n=i.linksConnected;for(;n.next();){const o=n.value;if(o===s||o.toNode!==i)continue;const r=o.fromNode;if(!(r===i||r===null)&&this.fA(t,r,e,s))return!0}return!1}FF(t,i,e){if(t===i)return!0;const s=new GSet;return s.add(i),this.cA(s,t,i,e)}cA(t,i,e,s){if(i===e)return!0;if(i===null||e===null||t.has(i))return!1;t.add(i);const n=i.linksConnected;for(;n.next();){const o=n.value;if(o===s)continue;const r=o.fromNode,l=o.toNode,h=r===i?l:r;if(!(h===i||h===null)&&this.cA(t,h,e,s))return!0}return!1}get linkValidation(){return this.Tl}set linkValidation(t){t!==null&&U.P(t,LinkingBaseTool,"linkValidation"),this.Tl=t}get portTargeted(){return this.tM}set portTargeted(t){t!==null&&U.P(t,LinkingBaseTool,"portTargeted"),this.tM=t}}var LinkingDirection=(y=>(y[y.Either=1]="Either",y[y.ForwardsOnly=2]="ForwardsOnly",y[y.BackwardsOnly=3]="BackwardsOnly",y))(LinkingDirection||{});class LinkingTool extends LinkingBaseTool{eM;sM;S;nM;constructor(t){super(),this.name="Linking",this.eM={},this.sM=null,this.S=1,this.nM=null,t&&Object.assign(this,t)}static Either=1;static ForwardsOnly=2;static BackwardsOnly=3;get archetypeLinkData(){return this.eM}set archetypeLinkData(t){t!==null&&U.Mo(t,LinkingTool,"archetypeLinkData"),t instanceof GraphObject&&U.e(t,Link,LinkingTool,"archetypeLinkData"),this.eM=t}get archetypeLabelNodeData(){return this.sM}set archetypeLabelNodeData(t){t!==null&&U.Mo(t,LinkingTool,"archetypeLabelNodeData"),t instanceof GraphObject&&U.e(t,Node,LinkingTool,"archetypeLabelNodeData"),this.sM=t}get direction(){return this.S}set direction(t){U.j(t,LinkingDirection,"LinkingDirection"),this.S=t}get startObject(){return this.nM}set startObject(t){t!==null&&U.e(t,GraphObject,LinkingTool,"startObject"),this.nM=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return t.isReadOnly||t.isModelReadOnly||!t.allowLink||!t.model.$w()||!t.lastInput.left||t.currentTool!==this&&!this.isBeyondDragSize()?!1:this.findLinkablePort()!==null}findLinkablePort(){const t=this.diagram;let i=this.startObject;if(i===null&&(i=t.findObjectAt(t.firstInput.documentPoint,null,null)),i===null)return null;const e=i.part;if(!(e instanceof Node))return null;const s=this.direction;if(s===1||s===2){const n=this.findValidLinkablePort(i,!1);if(n!==null)return this.isForwards=!0,n;if(this.startObject===e){const o=e.port;if(this.findValidLinkablePort(o,!1))return this.isForwards=!0,o}}if(s===1||s===3){const n=this.findValidLinkablePort(i,!0);if(n!==null)return this.isForwards=!1,n;if(this.startObject===e){const o=e.port;if(this.findValidLinkablePort(o,!0))return this.isForwards=!1,o}}return null}doActivate(){const t=this.diagram,i=this.findLinkablePort();if(i===null){this.stopTool();return}if(this.startTransaction(this.name),t.isMouseCaptured=!0,t.currentCursor=this.linkingCursor,this.isForwards){this.temporaryToNode!==null&&(this.temporaryToNode.location=t.lastInput.documentPoint),this.originalFromPort=i;const e=this.originalFromPort.part;e instanceof Node&&(this.originalFromNode=e),this.copyPortProperties(this.originalFromNode,this.originalFromPort,this.temporaryFromNode,this.temporaryFromPort,!1)}else{this.temporaryFromNode!==null&&(this.temporaryFromNode.location=t.lastInput.documentPoint),this.originalToPort=i;const e=this.originalToPort.part;e instanceof Node&&(this.originalToNode=e),this.copyPortProperties(this.originalToNode,this.originalToPort,this.temporaryToNode,this.temporaryToPort,!0)}t.add(this.temporaryFromNode),this.temporaryFromNode&&this.temporaryFromNode.ensureBounds(),t.add(this.temporaryToNode),this.temporaryToNode&&this.temporaryToNode.ensureBounds(),this.temporaryLink!==null&&(this.temporaryFromNode!==null&&(this.temporaryLink.fromNode=this.temporaryFromNode),this.temporaryToNode!==null&&(this.temporaryLink.toNode=this.temporaryToNode),this.temporaryLink.isTreeLink=this.isNewTreeLink(),this.temporaryLink.invalidateRoute(),t.add(this.temporaryLink)),this.isActive=!0}doDeactivate(){this.isActive=!1;const t=this.diagram;t.remove(this.temporaryLink),t.remove(this.temporaryFromNode),t.remove(this.temporaryToNode),t.isMouseCaptured=!1,t.currentCursor="",this.stopTransaction()}doStop(){super.doStop(),this.startObject=null}doMouseUp(){if(this.isActive){const t=this.diagram;this.transactionResult=null;let i=null,e=null,s=null,n=null,o=null;try{this.targetPort=this.findTargetPort(this.isForwards);const r=this.targetPort;if(r!==null){const l=r.part;l instanceof Node&&(this.isForwards?(this.originalFromNode!==null&&(i=this.originalFromNode,e=this.originalFromPort),s=l,n=r):(i=l,e=r,this.originalToNode!==null&&(s=this.originalToNode,n=this.originalToPort)))}else this.isForwards?this.originalFromNode!==null&&this.isUnconnectedLinkValid&&(i=this.originalFromNode,e=this.originalFromPort):this.originalToNode!==null&&this.isUnconnectedLinkValid&&(s=this.originalToNode,n=this.originalToPort);i!==null||s!==null?(o=this.insertLink(i,e,s,n),o!==null?(r===null&&(this.isForwards?o.defaultToPoint=t.lastInput.documentPoint:o.defaultFromPoint=t.lastInput.documentPoint),t.allowSelect&&(t.O("ChangingSelection",t.selection),t.clearSelection(!0),o.isSelected=!0),this.transactionResult=this.name,t.O("LinkDrawn",o)):this.doNoLink(i,e,s,n)):this.isForwards?this.doNoLink(this.originalFromNode,this.originalFromPort,null,null):this.doNoLink(null,null,this.originalToNode,this.originalToPort)}finally{this.stopTool(),o&&t.allowSelect&&t.O("ChangedSelection",t.selection)}}}isNewTreeLink(){const t=this.archetypeLinkData;if(t===null)return!0;if(t instanceof Link)return t.isTreeLink;const i=this.diagram;if(i===null)return!0;const e=i.partManager.getLinkCategoryForData(t),s=i.partManager.findLinkTemplateForCategory(e);return s!==null?s.isTreeLink:!0}insertLink(t,i,e,s){return this.diagram.partManager.insertLink(t,i,e,s)}doNoLink(t,i,e,s){}}class RelinkingTool extends LinkingBaseTool{uA=null;dA=null;oM=null;rM=null;ps;lM;constructor(t){super(),this.name="Relinking",this.fromHandleArchetype=new Shape("Diamond",{desiredSize:Size.fu,fill:"lightblue",stroke:"dodgerblue",cursor:this.linkingCursor,segmentIndex:0}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.toHandleArchetype=new Shape("Diamond",{desiredSize:Size.fu,fill:"lightblue",stroke:"dodgerblue",cursor:this.linkingCursor,segmentIndex:-1}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.ps=null,this.lM=new Rect,t&&Object.assign(this,t)}updateAdornments(t){if(t===null||!(t instanceof Link))return;let i="RelinkFrom",e=null;if(t.isSelected&&!this.diagram.isReadOnly){const s=t.selectionObject;s!==null&&t.canRelinkFrom()&&t.actualBounds.isReal()&&t.isVisible()&&s.actualBounds.isReal()&&s.isVisibleObject()&&(e=t.findAdornment(i),e===null&&(e=this.makeAdornment(s,!1),t.addAdornment(i,e)))}if(e===null&&t.removeAdornment(i),i="RelinkTo",e=null,t.isSelected&&!this.diagram.isReadOnly){const s=t.selectionObject;s!==null&&t.canRelinkTo()&&t.actualBounds.isReal()&&t.isVisible()&&s.actualBounds.isReal()&&s.isVisibleObject()&&(e=t.findAdornment(i),e===null?(e=this.makeAdornment(s,!0),t.addAdornment(i,e)):e.u())}e===null&&t.removeAdornment(i)}makeAdornment(t,i){let e=i?this.rM:this.oM;return e&&(e=e.copy(),e.adornedObject=t),e}get fromHandleArchetype(){return this.uA}set fromHandleArchetype(t){t!==null&&U.e(t,GraphObject,RelinkingTool,"fromHandleArchetype"),this.uA=t,t!==null?this.oM=new Adornment(Panel.Link).add(t).Kt():this.oM=null}get toHandleArchetype(){return this.dA}set toHandleArchetype(t){t!==null&&U.e(t,GraphObject,RelinkingTool,"toHandleArchetype"),this.dA=t,t!==null?this.rM=new Adornment(Panel.Link).add(t).Kt():this.rM=null}get handle(){return this.ps}set handle(t){t!==null&&(U.e(t,GraphObject,RelinkingTool,"handle"),t.part instanceof Adornment||U.n("new handle is not in an Adornment: "+t)),this.ps=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(t.isReadOnly||t.isModelReadOnly||!t.allowRelink||!t.model.$w()||!t.lastInput.left)return!1;let e=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkFrom");return e===null&&(e=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkTo")),e!==null}doActivate(){const t=this.diagram;if(this.originalLink===null){let e=this.handle;if(e===null&&(e=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkFrom"),e===null&&(e=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkTo"))),e===null)return;const s=e.part;if(!(s instanceof Adornment)||!(s.adornedPart instanceof Link))return;this.handle=e,this.isForwards=s===null||s.category==="RelinkTo",this.originalLink=s.adornedPart}const i=this.originalLink;i!==null&&(this.startTransaction(this.name),t.isMouseCaptured=!0,t.currentCursor=this.linkingCursor,this.originalFromPort=i.fromPort,this.originalFromNode=i.fromNode,this.originalToPort=i.toPort,this.originalToNode=i.toNode,this.lM.set(i.actualBounds),i.pointsCount>0&&(i.fromNode===null&&(this.temporaryFromPort!==null&&(this.temporaryFromPort.desiredSize=Size.Gh),this.temporaryFromNode!==null&&(this.temporaryFromNode.location=i.getPoint(0))),i.toNode===null&&(this.temporaryToPort!==null&&(this.temporaryToPort.desiredSize=Size.Gh),this.temporaryToNode!==null&&(this.temporaryToNode.location=i.getPoint(i.pointsCount-1)))),this.copyPortProperties(this.originalFromNode,this.originalFromPort,this.temporaryFromNode,this.temporaryFromPort,!1),this.copyPortProperties(this.originalToNode,this.originalToPort,this.temporaryToNode,this.temporaryToPort,!0),t.add(this.temporaryFromNode),t.add(this.temporaryToNode),this.temporaryLink!==null&&(this.temporaryFromNode!==null&&(this.temporaryLink.fromNode=this.temporaryFromNode),this.temporaryToNode!==null&&(this.temporaryLink.toNode=this.temporaryToNode),this.copyLinkProperties(i,this.temporaryLink),this.temporaryLink.invalidateRoute(),t.add(this.temporaryLink)),this.isActive=!0)}copyLinkProperties(t,i){if(t===null||i===null)return;i.adjusting=t.adjusting,i.corner=t.corner;let e=t.curve;(e===11||e===10)&&(e=0),i.curve=e,i.curviness=t.curviness,i.isTreeLink=t.isTreeLink,i.points=t.points,i.routing=t.routing,i.smoothness=t.smoothness,i.fromSpot=t.fromSpot,i.fromEndSegmentLength=t.fromEndSegmentLength,i.fromShortLength=t.fromShortLength,i.toSpot=t.toSpot,i.toEndSegmentLength=t.toEndSegmentLength,i.toShortLength=t.toShortLength}doDeactivate(){this.isActive=!1;const t=this.diagram;t.remove(this.temporaryLink),t.remove(this.temporaryFromNode),t.remove(this.temporaryToNode),t.isMouseCaptured=!1,t.currentCursor="",this.stopTransaction()}doStop(){super.doStop(),this.handle=null}doMouseUp(){if(this.isActive){const t=this.diagram;this.transactionResult=null;let i=this.originalFromNode,e=this.originalFromPort,s=this.originalToNode,n=this.originalToPort,o=this.originalLink;try{if(this.targetPort=this.findTargetPort(this.isForwards),this.targetPort!==null){const r=this.targetPort.part;r instanceof Node&&(this.isForwards?(s=r,n=this.targetPort):(i=r,e=this.targetPort))}else this.isUnconnectedLinkValid?this.isForwards?(s=null,n=null):(i=null,e=null):o=null;o!==null?(this.reconnectLink(o,this.isForwards?s:i,this.isForwards?n:e,this.isForwards),this.targetPort===null&&(this.isForwards?o.defaultToPoint=t.lastInput.documentPoint:o.defaultFromPoint=t.lastInput.documentPoint,o.invalidateRoute()),this.transactionResult=this.name,t.O("LinkRelinked",o,this.isForwards?this.originalToPort:this.originalFromPort)):this.originalLink!==null&&this.doNoRelink(this.originalLink,this.isForwards),this.originalLink!==null&&this.originalLink.invalidateOtherJumpOvers(this.lM)}finally{this.stopTool()}}}reconnectLink(t,i,e,s){const n=e!==null&&e.portId!==null?e.portId:"";return s?(t.toNode=i,t.toPortId=n):(t.fromNode=i,t.fromPortId=n),!0}doNoRelink(t,i){}doDraggingMouseMove(t,i,e,s){t!==null?(this.copyPortProperties(t,i,this.temporaryFromNode,this.temporaryFromPort,!1),this.diagram.add(this.temporaryFromNode)):this.diagram.remove(this.temporaryFromNode),e!==null?(this.copyPortProperties(e,s,this.temporaryToNode,this.temporaryToPort,!0),this.diagram.add(this.temporaryToNode)):this.diagram.remove(this.temporaryToNode)}stopDraggingMouseMove(){this.diagram.remove(this.temporaryFromNode),this.diagram.remove(this.temporaryToNode)}}var ReshapingBehavior=(y=>(y[y.None=0]="None",y[y.Horizontal=1]="Horizontal",y[y.Vertical=2]="Vertical",y[y.All=3]="All",y))(ReshapingBehavior||{});class LinkReshapingTool extends Tool{br;hM;aM;ps;Zw;fM;Mm;constructor(t){super(),this.name="LinkReshaping",this.br=new Shape("Rectangle",{desiredSize:Size.SC,fill:"lightblue",stroke:"dodgerblue"}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.hM=new Shape("Diamond",{desiredSize:Size.fu,fill:"lightblue",stroke:"dodgerblue",cursor:"move"}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.aM=3,this.ps=null,this.Zw=null,this.fM=new Point,this.Mm=new List,t&&Object.assign(this,t)}static None=0;static Horizontal=1;static Vertical=2;static All=3;getReshapingBehavior(t){return t?t.kr:0}setReshapingBehavior(t,i){t.kr=i}updateAdornments(t){if(t===null||!(t instanceof Link))return;let i=null;if(t.isSelected&&!this.diagram.isReadOnly){const e=t.path;e!==null&&t.canReshape()&&t.actualBounds.isReal()&&t.isVisible()&&e.actualBounds.isReal()&&e.isVisibleObject()&&(i=t.findAdornment(this.name),(i===null||i.cM!==t.pointsCount||i.uM!==t.resegmentable)&&(i=this.makeAdornment(e),i!==null&&(i.cM=t.pointsCount,i.uM=t.resegmentable,t.addAdornment(this.name,i))))}i===null&&t.removeAdornment(this.name)}makeAdornment(t){const i=t.part,e=i.points,s=i.pointsCount,n=i.isOrthogonal;let o=null;if(e!==null&&s>1){o=new Adornment,o.type=Panel.Link;const r=i.firstPickIndex,l=i.lastPickIndex,h=n?1:0;if(i.resegmentable&&i.computeCurve()!==9)for(let f=r+h;fe.firstPickIndex+1&&s0))this.RF(t,i);else if(t instanceof Panel){const e=t.elements;for(;e.next();){const s=e.value;this.updateResizeHandles(s,i)}}}}RF(t,i){let e=t.alignment;e.isNoSpot()&&(e=Spot.Center);let s=i;if(e.x<=0)e.y<=0?s+=225:e.y>=1?s+=135:s+=180;else if(e.x>=1)e.y<=0?s+=315:e.y>=1&&(s+=45);else if(e.y<=0)s+=270;else if(e.y>=1)s+=90;else return;s<0?s+=360:s>=360&&(s-=360),s<22.5?t.cursor="e-resize":s<67.5?t.cursor="se-resize":s<112.5?t.cursor="s-resize":s<157.5?t.cursor="sw-resize":s<202.5?t.cursor="w-resize":s<247.5?t.cursor="nw-resize":s<292.5?t.cursor="n-resize":s<337.5?t.cursor="ne-resize":t.cursor="e-resize"}get handleArchetype(){return this.br}set handleArchetype(t){t!==null&&U.e(t,GraphObject,ResizingTool,"handleArchetype"),this.br=t}get handle(){return this.ps}set handle(t){t!==null&&(U.e(t,GraphObject,ResizingTool,"handle"),t.part instanceof Adornment||U.n("new handle is not in an Adornment: "+t)),this.ps=t}get adornedObject(){return this.ys}set adornedObject(t){t!==null&&(U.e(t,GraphObject,ResizingTool,"handle"),t.part instanceof Adornment&&U.n("new handle must not be in an Adornment: "+t)),this.ys=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return t.isReadOnly||!t.allowResize||!t.lastInput.left?!1:this.findToolHandleAt(t.firstInput.documentPoint,this.name)!==null}doActivate(){const t=this.diagram;this.handle===null&&(this.handle=this.findToolHandleAt(t.firstInput.documentPoint,this.name)),this.handle!==null&&(this.adornedObject=this.handle.part.adornedObject,this.adornedObject!==null&&this.adornedObject.part!==null&&(t.isMouseCaptured=!0,t.animationManager.stopAnimation(),t.ku=!0,this.startTransaction(this.name),this.Pm.set(this.adornedObject.getDocumentPoint(this.handle.alignment.opposite())),this.Cf.set(this.adornedObject.part.location),this.mM.set(this.adornedObject.desiredSize),this.tx=this.computeCellSize(),this.Qw=this.computeMinSize(),this._w=this.computeMaxSize(),this.isActive=!0))}doDeactivate(){const t=this.diagram;t.ku=!1,t.Nl=!0,this.stopTransaction(),this.handle=null,this.ys=null,t.isMouseCaptured=!1,this.isActive=!1}stopTransaction(){const t=this.diagram,i=super.stopTransaction();return i&&t.undoManager.transactionToUndo!==null&&t.undoManager.transactionToUndo.optimize(),i}doCancel(){this.adornedObject!==null&&this.adornedObject.part!==null&&(this.adornedObject.desiredSize=this.originalDesiredSize,this.adornedObject.part.location=this.originalLocation),this.stopTool()}doMouseMove(){const t=this.diagram;if(!this.isActive||this.adornedObject===null||this.handle===null)return;const i=this.Qw,e=this._w,s=this.tx,n=t.lastInput.documentPoint,o=this.adornedObject.getLocalPoint(n,Point.a()),r=this.computeReshape(),l=this.computeResize(o,this.handle.alignment,i,e,s,r);this.resize(l),t.maybeUpdate(),Point.o(o)}doMouseUp(){const t=this.diagram;if(this.isActive&&this.adornedObject!==null&&this.handle!==null){const i=this.Qw,e=this._w,s=this.tx,n=this.adornedObject.getLocalPoint(t.lastInput.documentPoint,Point.a()),o=this.computeReshape(),r=this.computeResize(n,this.handle.alignment,i,e,s,o);this.resize(r),Point.o(n),t.invalidateDocumentBounds(),this.transactionResult=this.name,t.O("PartResized",this.adornedObject,this.originalDesiredSize)}this.stopTool()}resize(t){const i=this.diagram,e=this.adornedObject;if(e===null)return;e.desiredSize=t.size;const s=e.part;if(s===null||this.handle===null)return;s.ensureBounds();const n=e.getDocumentPoint(this.handle.alignment.opposite());if(s instanceof Group){const o=new List;o.add(s);let r;!this.dragsMembers&&!s.hasPlaceholder()&&(r=new DraggingOptions,r.dragsMembers=!1),i.moveParts(o,this.oppositePoint.copy().subtract(n),!0,r)}else s.location=s.location.copy().subtract(n).add(this.oppositePoint);i.maybeUpdate()}computeResize(t,i,e,s,n,o){if(this.adornedObject===null)return Rect.zg;i.isNoSpot()&&(i=Spot.Center);const r=this.adornedObject.naturalBounds,l=r.x,h=r.y,f=r.x+r.width,a=r.y+r.height;let c=1;if(!o){let m=r.width,g=r.height;m<=0&&(m=1),g<=0&&(g=1),c=g/m}const u=Point.a();Geo.Vg(t.x,t.y,l,h,n.width,n.height,u);const d=r.copy();return i.x<=0?i.y<=0?(d.x=Math.max(u.x,f-s.width),d.x=Math.min(d.x,f-e.width),d.width=Math.max(f-d.x,e.width),d.y=Math.max(u.y,a-s.height),d.y=Math.min(d.y,a-e.height),d.height=Math.max(a-d.y,e.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(c*d.width,s.height),e.height),d.width=d.height/c):(d.width=Math.max(Math.min(d.height/c,s.width),e.width),d.height=c*d.width),d.x=f-d.width,d.y=a-d.height)):i.y>=1?(d.x=Math.max(u.x,f-s.width),d.x=Math.min(d.x,f-e.width),d.width=Math.max(f-d.x,e.width),d.height=Math.max(Math.min(u.y-h,s.height),e.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(c*d.width,s.height),e.height),d.width=d.height/c):(d.width=Math.max(Math.min(d.height/c,s.width),e.width),d.height=c*d.width),d.x=f-d.width)):(d.x=Math.max(u.x,f-s.width),d.x=Math.min(d.x,f-e.width),d.width=f-d.x,o||(d.height=Math.max(Math.min(c*d.width,s.height),e.height),d.width=d.height/c,d.y=h+.5*(a-h-d.height))):i.x>=1?i.y<=0?(d.width=Math.max(Math.min(u.x-l,s.width),e.width),d.y=Math.max(u.y,a-s.height),d.y=Math.min(d.y,a-e.height),d.height=Math.max(a-d.y,e.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(c*d.width,s.height),e.height),d.width=d.height/c):(d.width=Math.max(Math.min(d.height/c,s.width),e.width),d.height=c*d.width),d.y=a-d.height)):i.y>=1?(d.width=Math.max(Math.min(u.x-l,s.width),e.width),d.height=Math.max(Math.min(u.y-h,s.height),e.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(c*d.width,s.height),e.height),d.width=d.height/c):(d.width=Math.max(Math.min(d.height/c,s.width),e.width),d.height=c*d.width))):(d.width=Math.max(Math.min(u.x-l,s.width),e.width),o||(d.height=Math.max(Math.min(c*d.width,s.height),e.height),d.width=d.height/c,d.y=h+.5*(a-h-d.height))):i.y<=0?(d.y=Math.max(u.y,a-s.height),d.y=Math.min(d.y,a-e.height),d.height=a-d.y,o||(d.width=Math.max(Math.min(d.height/c,s.width),e.width),d.height=c*d.width,d.x=l+.5*(f-l-d.width))):i.y>=1&&(d.height=Math.max(Math.min(u.y-h,s.height),e.height),o||(d.width=Math.max(Math.min(d.height/c,s.width),e.width),d.height=c*d.width,d.x=l+.5*(f-l-d.width))),Point.o(u),d}computeReshape(){let t=0;return this.adornedObject instanceof Shape&&(t=this.adornedObject.pM()),!(t===6||this.diagram.lastInput.shift)}computeMinSize(){if(this.adornedObject===null)return Size.Gh;const t=this.adornedObject.minSize.copy(),i=this.minSize;return!isNaN(i.width)&&i.width>t.width&&(t.width=i.width),!isNaN(i.height)&&i.height>t.height&&(t.height=i.height),t}computeMaxSize(){if(this.adornedObject===null)return Size.Mw;const t=this.adornedObject.maxSize.copy(),i=this.maxSize;return!isNaN(i.width)&&i.width0&&(t.width=n.width),!isNaN(n.height)&&n.height>0&&(t.height=n.height)}let e=this.cellSize;isNaN(t.width)&&!isNaN(e.width)&&e.width>0&&(t.width=e.width),isNaN(t.height)&&!isNaN(e.height)&&e.height>0&&(t.height=e.height);const s=this.diagram;if((isNaN(t.width)||isNaN(t.height))&&s){const n=s.grid;n!==null&&n.visible&&this.isGridSnapEnabled&&(e=n.gridCellSize,isNaN(t.width)&&!isNaN(e.width)&&e.width>0&&(t.width=e.width),isNaN(t.height)&&!isNaN(e.height)&&e.height>0&&(t.height=e.height))}return(isNaN(t.width)||t.width===0||t.width===1/0)&&(t.width=1),(isNaN(t.height)||t.height===0||t.height===1/0)&&(t.height=1),t}get minSize(){return this.Sr}set minSize(t){if(U.e(t,Size,ResizingTool,"minSize"),!this.Sr.equals(t)){let e=t.width;isNaN(e)&&(e=0);let s=t.height;isNaN(s)&&(s=0),this.Sr.s(e,s)}}get maxSize(){return this.Mr}set maxSize(t){if(U.e(t,Size,ResizingTool,"maxSize"),!this.Mr.equals(t)){let e=t.width;isNaN(e)&&(e=1/0);let s=t.height;isNaN(s)&&(s=1/0),this.Mr.s(e,s)}}get cellSize(){return this.Lo}set cellSize(t){U.e(t,Size,ResizingTool,"cellSize"),this.Lo.equals(t)||this.Lo.c(t)}get isGridSnapEnabled(){return this.Nf}set isGridSnapEnabled(t){U.i(t,"boolean",ResizingTool,"isGridSnapEnabled"),this.Nf=t}get dragsMembers(){return this.gM}set dragsMembers(t){U.i(t,"boolean",ResizingTool,"dragsMembers"),this.gM=t}get oppositePoint(){return this.Pm}set oppositePoint(t){U.e(t,Point,ResizingTool,"oppositePoint"),this.Pm.equals(t)||this.Pm.c(t)}get originalDesiredSize(){return this.mM}get originalLocation(){return this.Cf}}class RotatingTool extends Tool{yM;wM;ys=null;br=null;ix=null;ps=null;xM;Nm;Cf;bM;kM;constructor(t){super(),this.name="Rotating",this.yM=45,this.wM=2,this.Cf=new Point,this.ys=null,this.handleArchetype=new Shape("Ellipse",{desiredSize:Size.fu,fill:"lightblue",stroke:"dodgerblue",strokeWidth:1,cursor:"pointer"}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.ps=null,this.xM=0,this.Nm=new Point(NaN,NaN),this.bM=0,this.kM=50,t&&Object.assign(this,t)}updateAdornments(t){if(t!==null){if(t.Fl()){const i=t.rotateObject;if(i===t||i===t.path||i.isPanelMain)return}if(t.isSelected&&!this.diagram.isReadOnly){const i=t.rotateObject;if(i!==null&&t.canRotate()&&t.actualBounds.isReal()&&t.isVisible()&&i.actualBounds.isReal()&&i.isVisibleObject()){let e=t.findAdornment(this.name);if((e===null||e.adornedObject!==i)&&(e=this.makeAdornment(i)),e!==null){e.angle=i.getDocumentAngle(),e.hasPlaceholder()||(e.location=this.computeAdornmentLocation(i)),t.addAdornment(this.name,e);return}}}t.removeAdornment(this.name)}}makeAdornment(t){let i=null;const e=t.part?.rotateAdornmentTemplate;return e?i=e.copy():this.ix!==null&&(i=this.ix.copy()),i===null?null:(i.adornedObject=t,i)}get handleArchetype(){return this.br}set handleArchetype(t){t!==null&&U.e(t,GraphObject,RotatingTool,"handleArchetype"),this.br=t,t!==null?this.ix=new Adornment(Panel.Position,{locationSpot:Spot.Center}).add(t).Kt():this.ix=null}get handle(){return this.ps}set handle(t){t!==null&&(U.e(t,GraphObject,RotatingTool,"handle"),t.part instanceof Adornment||U.n("new handle is not in an Adornment: "+t)),this.ps=t}get adornedObject(){return this.ys}set adornedObject(t){t!==null&&(U.e(t,GraphObject,RotatingTool,"handle"),t.part instanceof Adornment&&U.n("new handle must not be in an Adornment: "+t)),this.ys=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return t.isReadOnly||!t.allowRotate||!t.lastInput.left?!1:this.findToolHandleAt(t.firstInput.documentPoint,this.name)!==null}doActivate(){const t=this.diagram;if(this.adornedObject===null){if(this.handle===null&&(this.handle=this.findToolHandleAt(t.firstInput.documentPoint,this.name)),this.handle===null)return;this.adornedObject=this.handle.part.adornedObject}this.adornedObject===null||this.adornedObject.part===null||(t.isMouseCaptured=!0,t.delaysLayout=!0,this.startTransaction(this.name),this.xM=this.adornedObject.angle,this.Nm=this.computeRotationPoint(this.adornedObject),this.Cf=this.adornedObject.part.location.copy(),this.isActive=!0)}computeRotationPoint(t){const i=t.part;if(i!==null){const e=i.locationObject;if(i.rotationSpot.isSpot())return t.getDocumentPoint(i.rotationSpot);if(t===i||t===e)return e.getDocumentPoint(i.locationSpot)}return t.getDocumentPoint(Spot.Center)}computeAdornmentLocation(t){let i=this.rotationPoint;i.isReal()||(i=this.computeRotationPoint(t));const e=t.getLocalPoint(i);let s=this.handleAngle;s<0?s+=360:s>=360&&(s-=360),s=Math.round(Math.round(s/45)*45);const n=this.handleDistance;return s===0?e.x=t.naturalBounds.width+n:s===45?(e.x=t.naturalBounds.width+n,e.y=t.naturalBounds.height+n):s===90?e.y=t.naturalBounds.height+n:s===135?(e.x=-n,e.y=t.naturalBounds.height+n):s===180?e.x=-n:s===225?(e.x=-n,e.y=-n):s===270?e.y=-n:s===315&&(e.x=t.naturalBounds.width+n,e.y=-n),t.getDocumentPoint(e)}doDeactivate(){const t=this.diagram;this.stopTransaction(),this.handle=null,this.ys=null,this.Nm=new Point(NaN,NaN),t.isMouseCaptured=!1,this.isActive=!1}stopTransaction(){const t=this.diagram,i=super.stopTransaction();return i&&t.undoManager.transactionToUndo!==null&&t.undoManager.transactionToUndo.optimize(),i}doCancel(){const t=this.diagram;t.delaysLayout=!1,this.rotate(this.originalAngle),this.stopTool()}doMouseMove(){const t=this.diagram;if(this.isActive){const i=this.computeRotate(t.lastInput.documentPoint);this.rotate(i)}}doMouseUp(){const t=this.diagram;if(this.isActive){t.delaysLayout=!1;const i=this.computeRotate(t.lastInput.documentPoint);this.rotate(i),t.invalidateDocumentBounds(),this.transactionResult=this.name,t.O("PartRotated",this.adornedObject,this.originalAngle)}this.stopTool()}rotate(t){Debug&&U.r(t,RotatingTool,"rotate:newangle");const i=this.adornedObject;if(i===null||i.part===null)return;i.angle=t;const e=i.part;e.ensureBounds();const s=e.locationObject,n=e.rotateObject;if(s===n||s.isContainedBy(n)){const o=this.Cf.copy();e.location=o.subtract(this.rotationPoint).rotate(t-this.originalAngle).add(this.rotationPoint)}this.diagram.maybeUpdate()}computeRotate(t){let i=this.rotationPoint.directionPoint(t)-this.handleAngle;const e=this.adornedObject?.panel;e&&(i-=e.getDocumentAngle()),i>=360?i-=360:i<0&&(i+=360);const s=Math.min(Math.abs(this.snapAngleMultiple),180),n=Math.min(Math.abs(this.snapAngleEpsilon),s/2);return!this.diagram.lastInput.shift&&s>0&&n>0&&(i%ss-n&&(i=(Math.floor(i/s)+1)*s)),i>=360?i-=360:i<0&&(i+=360),i}get snapAngleMultiple(){return this.yM}set snapAngleMultiple(t){U.i(t,"number",RotatingTool,"snapAngleMultiple"),this.yM=t}get snapAngleEpsilon(){return this.wM}set snapAngleEpsilon(t){U.i(t,"number",RotatingTool,"snapAngleEpsilon"),this.wM=t}get originalAngle(){return this.xM}get rotationPoint(){return this.Nm}set rotationPoint(t){this.Nm=t.copy()}get handleAngle(){return this.bM}set handleAngle(t){U.i(t,"number",RotatingTool,"handleAngle"),this.bM=t}get handleDistance(){return this.kM}set handleDistance(t){U.i(t,"number",RotatingTool,"handleDistance"),this.kM=t}}class ClickSelectingTool extends Tool{constructor(t){super(),this.name="ClickSelecting",t&&Object.assign(this,t)}canStart(){return!(!this.isEnabled||this.isBeyondDragSize())}doMouseUp(){this.isActive&&(this.standardMouseSelect(),this.standardMouseClick()||this.diagram.lastInput.isTouchEvent&&this.diagram.toolManager.doToolTip()),this.stopTool()}}class ActionTool extends Tool{Af;constructor(t){super(),this.name="Action",this.Af=null,t&&Object.assign(this,t)}canStart(){if(!this.isEnabled)return!1;const t=this.diagram,i=t.lastInput,e=t.findObjectAt(i.documentPoint,s=>{for(;s.panel!==null;){if(s.isActionable)return s;s=s.panel}return s});return e!==null&&e.isActionable?(this.Af=e,t.Sf=t.findObjectAt(i.documentPoint,null,null),!0):!1}doMouseDown(){if(!this.isActive)this.canStart()&&this.doActivate();else{const i=this.diagram.lastInput,e=this.Af;if(e===null)return;i.targetObject=e,e.actionDown!==null&&e.actionDown(i,e)}}doMouseMove(){if(this.isActive){const i=this.diagram.lastInput,e=this.Af;if(e===null)return;i.targetObject=e,e.actionMove!==null&&e.actionMove(i,e)}}doMouseUp(){if(this.isActive){const i=this.diagram.lastInput,e=this.Af;if(e===null)return;i.targetObject=e,e.actionUp!==null&&e.actionUp(i,e),this.standardMouseClick(s=>{for(;s.panel!==null;){if(s.isActionable&&s===e)return s;s=s.panel}return s},s=>s===e)}this.stopTool()}doCancel(){const i=this.diagram.lastInput,e=this.Af;e!==null&&(i.targetObject=e,e.actionCancel!==null&&e.actionCancel(i,e),this.stopTool())}doStop(){this.Af=null}}class ClickCreatingTool extends Tool{Rl;SM;Nf;MM;constructor(t){super(),this.name="ClickCreating",this.Rl=null,this.SM=!0,this.Nf=!1,this.MM=new Point(0,0),t&&Object.assign(this,t)}canStart(){if(!this.isEnabled||this.archetypeNodeData===null)return!1;const t=this.diagram;if(t.isReadOnly||t.isModelReadOnly||!t.allowInsert||!t.lastInput.left||this.isBeyondDragSize())return!1;if(this.isDoubleClick){if(t.lastInput.clickCount===1&&(this.MM=t.lastInput.viewPoint.copy()),t.lastInput.clickCount!==2||this.isBeyondDragSize(this.MM))return!1}else if(t.lastInput.clickCount!==1)return!1;return!(t.currentTool!==this&&t.findPartAt(t.lastInput.documentPoint,!0)!==null)}doMouseUp(){const t=this.diagram;this.isActive&&this.insertPart(t.lastInput.documentPoint),this.stopTool()}insertPart(t){const i=this.diagram,e=this.archetypeNodeData;if(e===null)return null;let s=null;try{if(i.O("ChangingSelection",i.selection),this.startTransaction(this.name),e instanceof Part)e.Ce()&&(e.Kt(),s=e.copy(),s!==null&&i.add(s));else if(e!==null){const n=i.model.copyNodeData(e);U.W(n)&&(i.model.addNodeData(n),s=i.findPartForData(n))}if(s!==null){const n=Point.K(t.x,t.y);this.isGridSnapEnabled&&this.diagram.PM(s,t,n),s.location=n,i.allowSelect&&(i.clearSelection(!0),s.isSelected=!0),Point.o(n)}i.invalidateDocumentBounds(),this.transactionResult=this.name,i.O("PartCreated",s)}finally{this.stopTransaction(),i.O("ChangedSelection",i.selection)}return s}get archetypeNodeData(){return this.Rl}set archetypeNodeData(t){t!==null&&U.Mo(t,ClickCreatingTool,"archetypeNodeData"),this.Rl=t}get isDoubleClick(){return this.SM}set isDoubleClick(t){U.i(t,"boolean",ClickCreatingTool,"isDoubleClick"),this.SM=t}get isGridSnapEnabled(){return this.Nf}set isGridSnapEnabled(t){U.i(t,"boolean",ClickCreatingTool,"isGridSnapEnabled"),this.Nf=t}}class DragSelectingTool extends Tool{jh;NM;Il;constructor(t){super(),this.name="DragSelecting",this.jh=175,this.NM=!1,this.Il=new Part({layerName:"Tool",selectable:!1}).add(new Shape("Rectangle",{name:"SHAPE",fill:null,stroke:"magenta"}).theme("stroke","dragSelect")).Kt(),t&&Object.assign(this,t)}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(!t.allowSelect)return!1;const i=t.lastInput;return!(!i.left||t.currentTool!==this&&(!this.isBeyondDragSize()||i.timestamp-t.firstInput.timestamp{const e=i.diagram;e!==null&&e.Ai(root.document,"scroll",i.CM,!1),i.stopTool()},t&&Object.assign(this,t)}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return!(!t.allowHorizontalScroll&&!t.allowVerticalScroll||!t.lastInput.left||t.currentTool!==this&&!this.isBeyondDragSize())}doActivate(){const t=this.diagram;this.Ao?(t.lastInput.bubbles=!0,t.Ut(root.document,"scroll",this.CM,!1)):(t.currentCursor="move",t.isMouseCaptured=!0,this.ex.c(t.position)),this.isActive=!0}doDeactivate(){const t=this.diagram;t.currentCursor="",t.isMouseCaptured=!1,this.isActive=!1}doCancel(){const t=this.diagram;t.position=this.ex,t.isMouseCaptured=!1,this.stopTool()}doMouseMove(){this.mA()}doMouseUp(){this.mA(),this.stopTool()}mA(){const t=this.diagram;if(this.isActive&&t){if(this.Ao){t.lastInput.bubbles=!0;return}const i=t.position,e=t.firstInput.documentPoint,s=t.lastInput.documentPoint;let n=i.x+e.x-s.x,o=i.y+e.y-s.y;t.allowHorizontalScroll||(n=i.x),t.allowVerticalScroll||(o=i.y),t.position=this.gA.s(n,o)}}get bubbles(){return this.Ao}set bubbles(t){U.i(t,"boolean",PanningTool,"bubbles"),this.Ao=t}get originalPosition(){return this.ex}}class HTMLInfo{nx;lx;AM;LM;constructor(t){this.nx=null,this.lx=null,this.AM=null,this.LM=null,t&&Object.assign(this,t)}get mainElement(){return this.AM}set mainElement(t){t!==null&&U.e(t,HTMLElement,HTMLInfo,"mainElement"),this.AM=t}get show(){return this.nx}set show(t){this.nx!==t&&(t!==null&&U.P(t,HTMLInfo,"show"),this.nx=t)}get hide(){return this.lx}set hide(t){this.lx!==t&&(t!==null&&U.P(t,HTMLInfo,"hide"),this.lx=t)}get valueFunction(){return this.LM}set valueFunction(t){this.LM=t}}class ContextMenuButtonInfo{fi;hx;Tf;constructor(t,i,e){this.fi=t,this.hx=i,this.Tf=e}}class ContextMenuTool extends Tool{TM;ax;DM;FM;fx;cx;Cm;constructor(t){super(),this.name="ContextMenu",this.TM=null,this.ax=null,this.DM=null,this.FM=new Point,this.fx=null,this.Cm=!1;const i=this;this.cx=()=>i.stopTool(),t&&Object.assign(this,t)}IF(){const t=new HTMLInfo;t.show=(r,l,h)=>h.showDefaultContextMenu(),t.hide=(r,l)=>l.hideDefaultContextMenu(),ContextMenuTool.Nu=t;const i=this;this.cx=()=>i.stopTool();const e=U.ds("div"),s=U.ds("div");e.style.cssText="top: 0px;z-index:10002;position: fixed;display: none;text-align: center;left: 25%;width: 50%;background-color: #F5F5F5;padding: 16px;border: 16px solid #444;border-radius: 10px;margin-top: 10px",s.style.cssText="z-index:10001;position: fixed;display: none;top: 0;left: 0;width: 100%;height: 100%;background-color: black;opacity: 0.8;";const n=U.ds("style");root.document.getElementsByTagName("head")[0].appendChild(n),n.sheet.insertRule(".goCXul { list-style: none; }",0),n.sheet.insertRule(".goCXli {font:700 1.5em Helvetica, Arial, sans-serif;position: relative;min-width: 60px; }",0),n.sheet.insertRule(".goCXa {color: #444;display: inline-block;padding: 4px;text-decoration: none;margin: 2px;border: 1px solid gray;border-radius: 10px; }",0);const o=this.diagram;o!==null&&(o.Ut(e,"contextmenu",ContextMenuTool.Zh,!1),o.Ut(e,"selectstart",ContextMenuTool.Zh,!1),o.Ut(s,"contextmenu",ContextMenuTool.Zh,!1)),e.className="goCXforeground",s.className="goCXbackground",root.document.body&&(root.document.body.appendChild(e),root.document.body.appendChild(s)),ContextMenuTool.Am=e,ContextMenuTool.Lm=s,ContextMenuTool.RM=!0}static Nu=null;static RM=!1;static Lm;static Am;static Zh(t){return t.preventDefault(),!1}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return this.isBeyondDragSize()||!t.lastInput.right||t.lastInput.clickCount>1?!1:!!(t.lastInput.isTouchEvent&&this.defaultTouchContextMenu!==null||this.findObjectWithContextMenu()!==null)}doStart(){const t=this.diagram;this.FM.set(t.firstInput.documentPoint)}doStop(){this.hideContextMenu(),this.currentObject=null,this.Cm=!1}findObjectWithContextMenu(t){t===void 0&&(t=null);const i=this.diagram,e=i.lastInput;let s=null;if(t instanceof Diagram||(t instanceof GraphObject?s=t:s=i.findObjectAt(e.documentPoint,null,n=>!n.layer?.isTemporary)),s!==null){let n=s;for(;n!==null;){if(n.contextMenu!==null)return n;n=n.panel}if(i.lastInput.isTouchEvent&&this.defaultTouchContextMenu)return s.part}else if(i.contextMenu!==null)return i;return null}doActivate(){}doMouseDown(){if(super.doMouseDown(),this.isActive&&this.currentContextMenu instanceof Adornment){const t=this.diagram.toolManager.findTool("Action");t!==null&&t.canStart()&&(t.doActivate(),t.doMouseDown(),t.doDeactivate())}this.diagram.toolManager.mouseDownTools.has(this)&&this.doContextClick()}doMouseUp(){if(this.isActive&&this.currentContextMenu instanceof Adornment){const t=this.diagram.toolManager.findTool("Action");t!==null&&t.canStart()&&(t.doActivate(),t.doCancel(),t.doDeactivate())}this.doContextClick()}doContextClick(){const t=this.diagram;if(!this.isActive)this.canStart()&&(this.openMenu(!0),this.isActive||this.stopTool());else{const i=this.currentContextMenu;if(i===null)return;let e=null;i instanceof HTMLInfo||(e=t.findObjectAt(t.lastInput.documentPoint,null,null),e!==null&&e.isContainedBy(i)&&this.standardMouseClick(null,null)),this.maybeStopTool(e)}}maybeStopTool(t){this.stopTool(),this.canStart()&&(this.diagram.currentTool=this,this.doMouseUp())}openMenu(t,i){if(i===void 0&&(i=null),this.Cm)return;this.Cm=!0,t&&this.standardMouseSelect();const e=this.standardMouseClick();if(this.Cm=!1,!e){this.isActive=!0;const s=ContextMenuTool.Nu;if(i===null&&(i=this.findObjectWithContextMenu()),i!==null){const n=i.contextMenu;n!==null?(this.currentObject=i instanceof GraphObject?i:null,this.showContextMenu(n,this.currentObject)):s!==null&&this.showContextMenu(s,this.currentObject)}else s!==null&&this.showContextMenu(s,null);this.currentContextMenu instanceof Adornment&&!this.currentContextMenu.visible&&this.stopTool()}}doMouseMove(){const t=this.diagram.toolManager.findTool("Action");t!==null&&t.doMouseMove(),this.isActive&&this.diagram.toolManager.doMouseMove()}showContextMenu(t,i){Debug&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("showContextMenu:contextMenu must be an Adornment or HTMLInfo."),i!==null&&U.e(i,GraphObject,ContextMenuTool,"showContextMenu:obj");const e=this.diagram;if(t!==this.currentContextMenu&&this.hideContextMenu(),t instanceof Adornment){const s=t;s.layerName="Tool",s.selectable=!1,s.scale=1/e.scale,s.category=this.name,s.hasPlaceholder()&&(s.placeholder.scale=e.scale);const n=s.diagram;n!==null&&n!==e&&n.remove(s),e.add(s),i!==null?s.adornedObject=i:s.data=e.model,s.ensureBounds(),this.positionContextMenu(s,i)}else t instanceof HTMLInfo&&t.show!==null&&t.show(i,e,this);this.currentContextMenu=t}positionContextMenu(t,i){if(t.hasPlaceholder())return;const e=t,s=this.diagram,n=s.lastInput.documentPoint.copy(),o=e.measuredBounds,r=s.viewportBounds;s.lastInput.isTouchEvent&&(n.x-=o.width),n.x+o.width>r.right&&(n.x-=o.width+5/s.scale),n.xr.bottom&&(n.y-=o.height+5/s.scale),n.ye.commandHandler.copySelection(),e=>e.commandHandler.canCopySelection())),i.add(new ContextMenuButtonInfo("Cut",e=>e.commandHandler.cutSelection(),e=>e.commandHandler.canCutSelection())),i.add(new ContextMenuButtonInfo("Delete",e=>e.commandHandler.deleteSelection(),e=>e.commandHandler.canDeleteSelection())),i.add(new ContextMenuButtonInfo("Paste",e=>e.commandHandler.pasteSelection(t.mouseDownPoint),e=>e.commandHandler.canPasteSelection(t.mouseDownPoint))),i.add(new ContextMenuButtonInfo("Select All",e=>e.commandHandler.selectAll(),e=>e.commandHandler.canSelectAll())),i.add(new ContextMenuButtonInfo("Undo",e=>e.commandHandler.undo(),e=>e.commandHandler.canUndo())),i.add(new ContextMenuButtonInfo("Redo",e=>e.commandHandler.redo(),e=>e.commandHandler.canRedo())),i.add(new ContextMenuButtonInfo("Scroll To Part",e=>e.commandHandler.scrollToPart(),e=>e.commandHandler.canScrollToPart())),i.add(new ContextMenuButtonInfo("Zoom To Fit",e=>e.commandHandler.zoomToFit(),e=>e.commandHandler.canZoomToFit())),i.add(new ContextMenuButtonInfo("Reset Zoom",e=>e.commandHandler.resetZoom(),e=>e.commandHandler.canResetZoom())),i.add(new ContextMenuButtonInfo("Group Selection",e=>e.commandHandler.groupSelection(),e=>e.commandHandler.canGroupSelection())),i.add(new ContextMenuButtonInfo("Ungroup Selection",e=>e.commandHandler.ungroupSelection(),e=>e.commandHandler.canUngroupSelection())),i.add(new ContextMenuButtonInfo("Edit Text",e=>e.commandHandler.editTextBlock(),e=>e.commandHandler.canEditTextBlock())),i}showDefaultContextMenu(){const t=this.diagram;this.fx===null&&(this.fx=this.OF()),ContextMenuTool.Am.innerHTML="",ContextMenuTool.Lm.addEventListener("pointerdown",this.cx,!1);const i=this,e=U.ds("ul");e.className="goCXul",ContextMenuTool.Am.appendChild(e),e.innerHTML="";const s=this.fx.iterator;for(;s.next();){const n=s.value,o=n.hx,r=n.Tf;if(!U.rt(o)||U.rt(r)&&!r(t))continue;const l=U.ds("li");l.className="goCXli";const h=U.ds("a");h.className="goCXa",h.href="#",h.hx=o,h.addEventListener("pointerdown",function(f){return this.hx(t),i.stopTool(),f.preventDefault(),!1},!1),h.textContent=n.fi,l.appendChild(h),e.appendChild(l)}ContextMenuTool.Am.style.display="block",ContextMenuTool.Lm.style.display="block"}hideDefaultContextMenu(){if(this.currentContextMenu===null||this.currentContextMenu!==ContextMenuTool.Nu)return;ContextMenuTool.Am.style.display="none",ContextMenuTool.Lm.style.display="none";const t=this.diagram;t!==null&&t.Ai(ContextMenuTool.Lm,"pointerdown",this.cx,!1),this.currentContextMenu=null}get currentContextMenu(){return this.TM}set currentContextMenu(t){Debug&&t!==null&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("ContextMenuTool.currentContextMenu must be an Adornment or HTMLInfo."),this.TM=t,this.ax=t instanceof Adornment?t.adornedPart:null}get defaultTouchContextMenu(){return ContextMenuTool.RM===!1&&ContextMenuTool.Nu===null&&Diagram.isUsingDOM()&&this.IF(),ContextMenuTool.Nu}set defaultTouchContextMenu(t){Debug&&t!==null&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("ContextMenuTool.defaultTouchContextMenu must be an Adornment or HTMLInfo."),t===null&&(ContextMenuTool.RM=!0),ContextMenuTool.Nu=t}get currentObject(){return this.DM}set currentObject(t){t!==null&&U.e(t,GraphObject,ContextMenuTool,"currentObject"),this.DM=t}get mouseDownPoint(){return this.FM}}var TextEditingAccept=(y=>(y[y.LostFocus=1]="LostFocus",y[y.MouseDown=2]="MouseDown",y[y.Tab=3]="Tab",y[y.Enter=4]="Enter",y))(TextEditingAccept||{}),TextEditingStarting=(y=>(y[y.SingleClick=1]="SingleClick",y[y.SingleClickSelected=2]="SingleClickSelected",y[y.DoubleClick=3]="DoubleClick",y))(TextEditingStarting||{}),TextEditingState=(y=>(y[y.None=1]="None",y[y.Active=2]="Active",y[y.Editing=3]="Editing",y[y.Validating=4]="Validating",y[y.Invalid=5]="Invalid",y[y.Validated=6]="Validated",y))(TextEditingState||{});class TextEditingTool extends Tool{Ae;IM;OM;Ol;vt;EM;BM;VM;ux;zM;constructor(t){super(),this.name="TextEditing",this.Ae=new TextBlock,this.IM=null,this.OM=2,this.Ol=null,this.vt=1,this.EM=1,this.BM=!0,this.VM=null,this.ux=new HTMLInfo,this.EF(this.ux),t&&Object.assign(this,t)}static LostFocus=1;static MouseDown=2;static Tab=3;static Enter=4;static SingleClick=1;static SingleClickSelected=2;static DoubleClick=3;static StateNone=1;static StateActive=2;static StateEditing=3;static StateValidating=4;static StateInvalid=5;static StateValidated=6;EF(t){if(!Diagram.isUsingDOM())return;const i=U.ds("textarea");this.zM=i;const e=this;i.addEventListener("input",function(s){if(e.textBlock===null)return;const n=e.measureTemporaryTextBlock(this.value),o=this.textScale;this.style.width=20+Math.max(e.textBlock.measuredBounds.width,n.measuredBounds.width)*o+"px",this.rows=Math.max(e.textBlock.lineCount,n.lineCount)},!1),i.addEventListener("keydown",function(s){if(s.isComposing||e.textBlock===null)return;const n=s.key;if(n==="Enter"){e.textBlock.isMultiline===!1&&s.preventDefault(),e.acceptText(4);return}else if(n==="Tab"){e.acceptText(3),s.preventDefault();return}else n==="Escape"&&(e.doCancel(),e.diagram!==null&&e.diagram.doFocus())},!1),i.addEventListener("focus",function(s){e.BF(s)},!1),i.addEventListener("blur",function(s){e.VF(s)},!1),t.valueFunction=()=>i.value,t.mainElement=i,t.show=(s,n,o)=>{if(!(s instanceof TextBlock)||!n||!n.div||!(o instanceof TextEditingTool))return;if(o.state===5){i.style.border="3px solid red",i.focus();return}const r=s.getDocumentPoint(Spot.Center),l=n.position,h=n.scale;let f=s.getDocumentScale()*h;f{s.div&&s.div.removeChild(i)}}get textBlock(){return this.IM}set textBlock(t){t!==null&&U.e(t,TextBlock,TextEditingTool,"textBlock"),this.IM=t}get currentTextEditor(){return this.VM}set currentTextEditor(t){this.VM=t}get defaultTextEditor(){return this.ux}set defaultTextEditor(t){Debug&&!(t instanceof HTMLInfo)&&U.n("TextEditingTool.defaultTextEditor must be an HTMLInfo."),this.ux=t}get starting(){return this.OM}set starting(t){U.j(t,TextEditingStarting,"TextEditingStarting"),this.OM=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(t===null||t.isReadOnly||TextEditingTool.Df&&TextEditingTool.Df!==this&&(TextEditingTool.Df.acceptText(2),TextEditingTool.Df&&TextEditingTool.Df!==this)||!t.lastInput.left||this.isBeyondDragSize())return!1;const i=t.lastInput.documentPoint,e=t.findObjectAt(i);if(e===null||!(e instanceof TextBlock)||!e.editable||e.part===null||!e.part.canEdit())return!1;const s=e.part;return!(s===null||this.starting===2&&!s.isSelected||this.starting===3&&t.lastInput.clickCount<2)}doStart(){TextEditingTool.Df=this,this.textBlock!==null&&this.doActivate()}doActivate(){if(this.isActive)return;const t=this.diagram;if(t===null)return;let i=this.textBlock;if(i===null&&(i=t.findObjectAt(t.lastInput.documentPoint)),i===null||!(i instanceof TextBlock)||(this.textBlock=i,i.part===null))return;t.animationManager.stopAnimation(),this.isActive=!0,this.vt=2;let s=this.defaultTextEditor;i.textEditor!==null&&(s=i.textEditor),this.Ae=this.textBlock.copy();const n=new Rect(this.textBlock.getDocumentPoint(Spot.TopLeft),this.textBlock.getDocumentPoint(Spot.BottomRight));t.scrollToRect(n),s!==null&&s.show!==null&&s.show(i,t,this),this.currentTextEditor=s}doCancel(){this.stopTool()}doMouseUp(){this.canStart()&&this.doActivate()}doMouseDown(){this.isActive&&this.acceptText(2)}acceptText(t){switch(t){case 2:this.vt===6?this.currentTextEditor instanceof HTMLElement&&this.currentTextEditor.focus():(this.vt===2||this.vt===5||this.vt===3)&&(this.vt=4,this.pA());break;case 1:case 4:case 3:if(t===4&&this.textBlock!==null&&this.textBlock.isMultiline===!0)return;(this.vt===2||this.vt===5||this.vt===3)&&(this.vt=4,this.pA());break}}pA(){const t=this.textBlock,i=this.diagram,e=this.currentTextEditor;if(t!==null&&e!==null){const s=t.text;let n="";if(e.valueFunction!==null&&(n=e.valueFunction()),!this.isValidText(t,s,n)){this.vt=5,this.doError(s,n);return}this.startTransaction(this.name),this.vt=6,this.transactionResult=this.name,t.text=n,this.doSuccess(s,n),i!==null&&i.O("TextEdited",t,s),this.stopTransaction(),this.stopTool(),i!==null&&i.doFocus()}}doError(t,i){const e=this.textBlock;if(e===null)return;e.errorFunction!==null&&e.errorFunction(this,t,i);const s=this.currentTextEditor;s!==null&&s.show!==null&&s.show(e,this.diagram,this)}doSuccess(t,i){const e=this.textBlock;e!==null&&e.textEdited!==null&&e.textEdited(e,t,i)}doDeactivate(){const t=this.diagram;if(t!==null){if(this.vt=1,this.currentTextEditor!==null){const i=this.currentTextEditor;i!==null&&i.hide!==null&&i.hide(t,this)}this.textBlock=null,this.isActive=!1}}doStop(){TextEditingTool.Df=null}BF(t){if(this.currentTextEditor===null||this.state===1)return;const i=this.zM;this.vt===2&&(this.vt=3),U.rt(i.select)&&this.selectsTextOnActivate&&(i.select(),i.setSelectionRange(0,9999))}VF(t){if(this.currentTextEditor===null||this.state===1)return;const i=this.zM;U.rt(i.focus)&&i.focus(),U.rt(i.select)&&this.selectsTextOnActivate&&(i.select(),i.setSelectionRange(0,9999))}isValidText(t,i,e){U.e(t,TextBlock,TextEditingTool,"isValidText:textblock");const s=this.textValidation;if(s!==null&&!s(t,i,e))return!1;const n=t.textValidation;return!(n!==null&&!n(t,i,e))}get textValidation(){return this.Ol}set textValidation(t){t!==null&&U.P(t,TextEditingTool,"textValidation"),this.Ol=t}get minimumEditorScale(){return this.EM}set minimumEditorScale(t){t!==null&&U.i(t,"number",TextEditingTool,"minimumEditorScale"),this.EM=t}get selectsTextOnActivate(){return this.BM}set selectsTextOnActivate(t){t!==null&&U.i(t,"boolean",TextEditingTool,"selectsTextOnActivate"),this.BM=t}get state(){return this.vt}set state(t){this.vt!==t&&(U.j(t,TextEditingState,"TextEditingState"),this.vt=t)}measureTemporaryTextBlock(t){const i=this.Ae;return i.text=t,this.textBlock!==null&&i.dt(this.textBlock.El,1/0),i}static Df=null}var AnimationStyle=(y=>(y[y.Default=1]="Default",y[y.AnimateLocations=2]="AnimateLocations",y[y.None=3]="None",y))(AnimationStyle||{});class AnimationManager{C;Li;Xi;Pr;qn;To;XM;YM;Tm;bi;Ff;cn;Dm;Qh;gx;Fm;mx;Rf;Mu;Rm;constructor(t){this.C=Diagram.wm(),this.Li=!1,this.Tm=!1,this.bi=!1,this.Ff=!1,this.mx=!0,this.Rf=1,this.Mu=!1,this.Xi=!0,this.Pr=!0,this.To=600,this.XM=!1,this.YM=!1,this.qn=new GSet,this.cn=new Animation,this.Dm=new Animation,this.cn.ws=this,this.Qh=new GSet,this.gx=new GSet,this.Fm=new GSet,this.Rm=new GSet,t&&Object.assign(this,t)}Do(t){this.C=t}AE(){return this.C}canStart(t){return!0}Bl(t){return!this.Xi||!this.canStart(t)?!1:(this.qn.add(t),this.defaultAnimation.isAnimating&&this.stopAnimation(),this.C.Ti(),this.bi=!0,!0)}getBundleAnimation(){return this.Dm}KM(){if(!this.Xi||(this.Dm.ge.count>0&&this.Dm.start(),!this.bi))return;const t=this.cn,i=this.C,e=this.qn.has("Model");if(e&&(this.Ff=!0,this.Rf===1?(t.isViewportUnconstrained=!0,t.ge.clear(),t.add(i,"position",i.position.copy().offset(0,-200),i.position),t.add(i,"opacity",0,1)):this.Rf===3&&t.ge.clear(),this.Rf===2&&i.yx.equals(i.gt)?this.mx=!0:this.mx=!1,i.O("InitialAnimationStarting",this)),e&&!this.Pr||t.ge.count===0){this.qn.clear(),this.bi=!1,t.ge.clear(),t.wx(i),this.Ff=!1,i.L();return}this.qn.clear(),i.Nr=!1;const s=t.ge.get(i);i.autoScale!==1&&s!==null&&(delete s.li.scale,delete s.xs.scale);const n=this;root.requestAnimationFrame(()=>{n.bi===!1||t.Li||(i.getRenderingHint("temporaryPixelRatio")&&i.vw(),i.UM(),n.bi=!1,t.start(),t.Li&&(n.Cu(),i.invalidateDocumentBounds(),t.yA(0),i.xr(!0),n.Au(),i.O("AnimationStarting",n)))})}GM(){return this.qn.has("Trigger")&&this.qn.count===1}wA(t,i,e,s){this.isTicking||this.GM()||t instanceof Link&&(t.fromNode!==null||t.toNode!==null)||this.cn.add(t,"position",i,e,s)}xx(t){return this.cn.xx(t)}HM(t){return this.cn.HM(t)}zF(t){const i=this.Qh,e=this;function s(){if(e.Fm.count>0&&(i.addAll(e.Fm),e.Fm.clear(),e.Li=!0),e.Li===!1||i.count===0)return;e.gx.addAll(i);const n=e.gx.iterator;for(;n.next();){const o=n.value;o.Li!==!1&&(o.XF()?o.xA(!1):o.If=!0)}if(e.gx.clear(),e.Li===!1){root.requestAnimationFrame(s);return}e.Cu(),e.C.xr(),e.Au(),root.requestAnimationFrame(s)}this.Li?this.YF(t):(this.Li=!0,i.add(t),root.requestAnimationFrame(()=>s()))}YF(t){this.Fm.add(t)}KF(){const t=this.Qh.iterator;for(;t.next();)t.value.If=!1}Cu(){if(this.Tm)return;const t=this.C;this.XM=t.skipsUndoManager,this.YM=t.me,t.skipsUndoManager=!0,t.me=!0,this.Tm=!0}Au(){const t=this.C;t.skipsUndoManager=this.XM,t.me=this.YM,this.Tm=!1}stopAnimation(t){const i=this.cn;if(this.bi===!0&&(this.bi=!1,this.Ff=!1,this.qn.clear(),i.UF()&&this.C.requestUpdate()),!this.Li){i.ge.clear(),i.wx(this.C);return}if(i.Lu(!0),i.wx(null),t===!0){const e=this.Qh.toArray();for(let s=0;s{!i.isAnimating&&i.runCount===1/0&&i.start()})}get duration(){return this.To}set duration(t){U.i(t,"number",AnimationManager,"duration"),t<1&&U.U(t,">= 1",AnimationManager,"duration"),this.To=t}get isAnimating(){return this.Li}get isTicking(){return this.Tm}get isInitial(){return this.Pr}set isInitial(t){U.i(t,"boolean",AnimationManager,"isInitial"),this.Pr=t}get defaultAnimation(){return this.cn}get activeAnimations(){return this.Qh}get initialAnimationStyle(){return this.Rf}set initialAnimationStyle(t){Debug&&U.j(t,AnimationStyle,"AnimationStyle"),this.Rf=t}static bx=new GMap;static defineAnimationEffect(t,i){AnimationManager.bx.set(t,i)}static jM(t,i,e,s,n){t===null&&(t=[0,0,0,0]),i===null&&(i=[0,0,0,0]);let o=t[0],r=t[1];const l=t[2],h=t[3];let f=i[0],a=i[1];const c=i[2],u=i[3];l===0||l===100?(o=f,r=a):(c===0||c===100)&&(f=o,a=r),Math.abs(f-o)>180&&(f>o?o+=360:f+=360);const d=n(e,o,f-o,s)%360,m=n(e,r,a-r,s),g=n(e,l,c-l,s),p=n(e,h,u-h,s);return"hsla("+d+", "+m+"%, "+g+"%, "+p+")"}static Default=1;static AnimateLocations=2;static None=3}{const y=AnimationManager.bx,t=(i,e,s,n,o,r)=>{i.position=new Point(n(o,e.x,s.x-e.x,r),n(o,e.y,s.y-e.y,r))};y.set("position:diagram",t),y.set("position",t),y.set("position:part",(i,e,s,n,o,r)=>{o{o{o{const l=i.actualBounds,h=s.actualBounds,f=h.x+h.width/2-l.width/2,a=h.y+h.height/2-l.height/2;o{i.desiredSize=new Size(n(o,e.width,s.width-e.width,r),n(o,e.height,s.height-e.height,r))}),y.set("width",(i,e,s,n,o,r)=>{i.width=n(o,e,s-e,r)}),y.set("height",(i,e,s,n,o,r)=>{i.height=n(o,e,s-e,r)}),y.set("fill",(i,e,s,n,o,r)=>{i.fill=AnimationManager.jM(e,s,o,r,n)}),y.set("stroke",(i,e,s,n,o,r)=>{i.stroke=AnimationManager.jM(e,s,o,r,n)}),y.set("strokeWidth",(i,e,s,n,o,r)=>{i.strokeWidth=n(o,e,s-e,r)}),y.set("strokeDashOffset",(i,e,s,n,o,r)=>{i.strokeDashOffset=n(o,e,s-e,r)}),y.set("background",(i,e,s,n,o,r)=>{i.background=AnimationManager.jM(e,s,o,r,n)}),y.set("opacity",(i,e,s,n,o,r)=>{i.opacity=n(o,e,s-e,r)}),y.set("scale",(i,e,s,n,o,r)=>{i.scale=n(o,e,s-e,r)}),y.set("angle",(i,e,s,n,o,r)=>{i.angle=n(o,e,s-e,r)})}class Animation{kx;Im;Li;Tu;To;bs;MA;Bf;ge;Sx;li;Wn;Du;Vf;Mx;Px;If;vM;Nx;ws;C;JM;$M;ZM;constructor(t){this.C=null,this.ws=null,this.vM=null,this.Nx=null,this.JM=!1,this.Li=!1,this.If=!1,this.li=0,this.Wn=0,this.kx=Animation.EaseInOutQuad,this.Im=Animation.EaseInOutQuad,this.Du=!1,this.Vf=!1,this.Mx=1,this.Px=0,this.To=NaN,this.bs=NaN,this.$M=0,this.Tu=null,this.MA=Point.No,this.ge=new GMap,this.Sx=new GMap,this.Bf=new GSet,this.ZM=1,t&&Object.assign(this,t)}suspend(){this.If=!0}advanceTo(t,i){i&&(this.If=!1),this.Du&&t>=this.bs&&(this.Vf=!0,t=t-this.bs),this.$M=t,this.xA(!0),this.ws.Cu(),this.C.xr(),this.ws.Au(),this.C.redraw()}wx(t){if(this.Sx.clear(),this.Vf=!1,this.Px=0,this.bs=NaN,this.Bf.count>0&&this.Bf.clear(),t!==null){const i=t.links;for(;i.next();)i.value.Cr=null}}UF(){return this.ge.count>0}start(){if(this.ge.count===0)return this;if(this.Li)return this;let t=this.C;const i=this.ge.iterator;for(;i.next();){const s=i.key;t===null&&(s instanceof Diagram?t=s:s instanceof GraphObject&&(t=s.diagram))}if(t!==null)this.C=t,this.ws=t.animationManager;else return this;const e=this.ws;return e.isEnabled===!1?this:(this.bs=isNaN(this.To)?e.duration:this.To,this.Im=this.kx,e.Ff&&e.Rf===1&&this===e.defaultAnimation&&(this.Im=Animation.EaseOutExpo,this.bs=isNaN(this.To)?e.duration===600?900:e.duration:this.To),this.ZM=t.scrollMode,this.isViewportUnconstrained&&(t._h=2),e.Cu(),this.Bf.each(s=>{s.data=null,t.add(s)}),e.Au(),this.Li=!0,this.li=+new Date,this.Wn=this.li+this.bs,e.zF(this),this)}addTemporaryPart(t,i){return t.Ce()?(Debug&&(i===void 0&&U.n("addTemporaryPart: Required Diagram argument missing"),t.diagram===i&&U.n("addTemporaryPart: Part already in Diagram, did you mean to pass in a copy?"),this.C!==null&&this.C!==i&&U.n("addTemporaryPart: A different Diagram is already associated with this Animation: "+this.C.toString())),this.Bf.add(t),this.C=i,this):this}add(t,i,e,s,n){if(this.C===null&&(t instanceof Diagram?this.C=t:t instanceof GraphObject&&t.diagram!==null&&(this.C=t.diagram)),t instanceof Part){if(!t.isAnimated)return this;i==="position"&&(i="position:part")}return this.qM(t,i,e,s,n),this}qM(t,i,e,s,n){const o=this.ge;let r,l,h;if(t instanceof Diagram&&i==="position"&&(i="position:diagram"),(i==="fill"||i==="stroke"||i==="background")&&(Brush.Fo(e),Brush.QM(),e=[Brush.Yi.n0,Brush.Yi.n1,Brush.Yi.n2,Brush.Yi.n3],Brush.Fo(s),Brush.QM(),s=[Brush.Yi.n0,Brush.Yi.n1,Brush.Yi.n2,Brush.Yi.n3]),o.has(t))r=o.get(t),l=r.li,h=r.xs,l[i]===void 0&&(l[i]=this.Fu(e)),h[i]=this.Fu(s);else{if(i==="position"&&e.equalsApprox(s))return;l={},h={},l[i]=this.Fu(e),h[i]=this.Fu(s),r=new AnimationState(l,h,n),o.set(t,r)}const f=l[i];f instanceof Point&&!f.isReal()&&f.c(this.MA),n&&i.indexOf("position:")===0&&t instanceof Part?r.Cx.location=this.Fu(t.location):n&&(r.Cx[i]=this.Fu(e))}Fu(t){return t instanceof Point||t instanceof Size?t.copy():t}GF(t){const i=this.ge;if(i.has(t)){const e=i.get(t);e.Ax=!0}}xx(t){if(!this.Li)return!1;const i=this.ge.get(t);return i!==null&&i.Ax}HM(t){if(!this.Li)return!1;const i=this.ge.get(t);return i!==null&&!!(i.li.position||i.li["position:part"]||i.li.location)}XF(){if(this.Bf.count>0)return!0;const t=this.ge.iterator;for(;t.next();){const i=t.key;if(i instanceof GraphObject&&i.diagram!==null||i instanceof Diagram)return!0}return!1}xA(t){if(this.If&&!t)return;const i=this.ws;if(this.Li===!1)return;const e=+new Date;let s=e>this.Wn?this.bs:e-this.li;t&&(s=this.$M,sthis.Wn&&(this.Du&&!this.Vf?(this.li=+new Date,this.Wn=this.li+this.bs,this.Vf=!0):this.Lu(!1))}yA(t){const i=this.bs,e=this.ge.iterator,s=this.Vf;for(;e.next();){const n=e.key;if(n instanceof GraphObject&&n.diagram===null)continue;const o=e.value,r=s?o.xs:o.li,l=s?o.li:o.xs,h=AnimationManager.bx;for(const f in l)f==="position"&&(l["position:placeholder"]||l["position:nodeCollapse"])||h.get(f)!==null&&h.get(f)(n,r[f],l[f],this.Im,t,i,this)}}stop(){return this.Li?(this.Lu(!0),this):this}Lu(t){if(this.Nx!==null&&this.Nx.HF(this.vM),!this.Li)return;const i=this.C,e=this.ws;e.Ff=!1,this.Li=!1,this.If=!1,e.Cu();const s=this.ge,n=this.Bf.iterator;for(;n.next();)i.remove(n.value);const o=this.Du,r=s.iterator,l=AnimationManager.bx;for(;r.next();){const f=r.key,a=r.value,c=o?a.xs:a.li,u=o?a.li:a.xs,d=a.Cx;for(const m in u)if(l.get(m)!==null){let g=m;a.Lx&&(g==="position:nodeCollapse"||g==="position:placeholder")&&(g="position"),l.get(g)(f,c[m],d[m]!==void 0?d[m]:a.Lx?c[m]:u[m],this.Im,this.bs,this.bs,this)}a.Lx&&d.location!==void 0&&f instanceof Part&&(f.location=d.location),a.Ax&&f instanceof Part&&f.Ki(!1)}this.Px++;const h=!t&&this.Mx>this.Px;if(!h&&(this===e.Dm||this===e.defaultAnimation)&&this.ge.clear(),i.Tx.clear(),i.IS(!1),i.invalidateDocumentBounds(),i.L(),i.xr(!0),e.defaultAnimation===this){const f=e.Rm.iterator;for(;f.next();)f.value.qF();e.Rm.clear()}if(i.xr(!0),this.isViewportUnconstrained&&(i.scrollMode=this.ZM),e.Au(),h){this.Vf=!1,this.start();return}this.wx(null),i.PA(),e.Lu(this),this.Tu&&this.Tu(this),i.requestUpdate()}Of(t,i){const e=i.actualBounds;let s=null;if(i instanceof Group&&(s=i.placeholder),s!==null&&s.visible){const n=s.getDocumentPoint(Spot.TopLeft),o=s.padding;n.x+=o.left,n.y+=o.top,this.add(t,"position",n,t.position,!1)}else this.add(t,"position",new Point(e.x+e.width/2,e.y+e.height/2),t.position,!1);this.add(t,"scale",.01,t.scale,!1),t instanceof Group&&this.WF(t,i)}WF(t,i){const e=t.memberParts;for(;e.next();){const s=e.value;s instanceof Node&&this.Of(s,i)}}Ef(t,i){if(!t.isVisible())return;let e=null;if(i instanceof Group&&(e=i.placeholder),e!==null&&e.visible){const s=e.getDocumentPoint(Spot.TopLeft),n=e.padding;s.x+=n.left,s.y+=n.top,this.add(t,"position:placeholder",t.position,s,!0)}else this.add(t,"position:nodeCollapse",t.position,i,!0);this.add(t,"scale",t.scale,.01,!0),this.GF(t),t instanceof Group&&this.jF(t,i)}jF(t,i){const e=t.memberParts;for(;e.next();){const s=e.value;s instanceof Node&&this.Ef(s,i)}}get duration(){return this.To}set duration(t){U.i(t,"number",Animation,"duration"),t<1&&U.U(t,">= 1",Animation,"duration"),this.To=t}get reversible(){return this.Du}set reversible(t){this.Du=t}get runCount(){return this.Mx}set runCount(t){t>0?this.Mx=t:U.n("Animation.runCount value must be a positive integer.")}get finished(){return this.Tu}set finished(t){this.Tu!==t&&(t!==null&&U.P(t,Animation,"finished"),this.Tu=t)}get easing(){return this.kx}set easing(t){this.kx=t}get isViewportUnconstrained(){return this.JM}set isViewportUnconstrained(t){this.JM=t}get isAnimating(){return this.Li}getTemporaryState(t){let i=this.Sx.get(t);return i===null&&(i={},this.Sx.set(t,i)),i}static EaseLinear=(t,i,e,s)=>e*t/s+i;static EaseInOutQuad=(t,i,e,s)=>(t/=s/2,t<1?e/2*t*t+i:-e/2*(--t*(t-2)-1)+i);static EaseInQuad=(t,i,e,s)=>e*(t/=s)*t+i;static EaseOutQuad=(t,i,e,s)=>-e*(t/=s)*(t-2)+i;static EaseInExpo=(t,i,e,s)=>t===0?i:e*Math.pow(2,10*(t/s-1))+i;static EaseOutExpo=(t,i,e,s)=>t===s?i+e:e*(-Math.pow(2,-10*t/s)+1)+i}class AnimationState{li;xs;Cx;Lx;Ax;constructor(t,i,e){this.li=t,this.xs=i,this.Cx={},this.Lx=e,this.Ax=!1}}var TriggerStart=(y=>(y[y.Default=1]="Default",y[y.Immediate=2]="Immediate",y[y.Bundled=3]="Bundled",y))(TriggerStart||{});class AnimationTrigger{Ne;hn;Ru;zf;constructor(t,i,e){e&&Debug&&U.j(e,TriggerStart,"TriggerStart"),this.Ne=null,this.hn=t,this.Ru=e||1,this.zf=null,i!==void 0&&(this.zf=i,e===void 0&&(this.Ru=2))}copy(){const t=new AnimationTrigger(this.hn);t.Ru=this.Ru;const i=this.zf;if(i!==null){const e={};i.duration!==void 0&&(e.duration=i.duration),i.finished!==void 0&&(e.finished=i.finished),i.easing!==void 0&&(e.easing=i.easing),t.zf=e}return t}get propertyName(){return this.hn}set propertyName(t){this.hn=t}get animationSettings(){return this.zf}set animationSettings(t){this.zf=t}vF(t){const i=this.zf;i!==null&&(i.duration&&(t.duration=i.duration),i.finished&&(t.finished=i.finished),i.easing&&(t.easing=i.easing))}get startCondition(){return this.Ru}set startCondition(t){Debug&&U.j(t,TriggerStart,"TriggerStart"),this.Ru=t}static Default=1;static Immediate=2;static Bundled=3}class Layer{C;Lt;ii;Ar;Vl;zl;Xl;Yl;Kl;Ul;Gl;Hl;ql;Wl;jl;vl;Tf;Jl;Dx;Om;Iu;Ft;constructor(t){GSet.Ji(this),this.C=null,this.Ft=new List,this.Lt="",this.ii=1,this.Ar=!1,this.Vl=!0,this.zl=!0,this.Xl=!0,this.Yl=!0,this.Kl=!0,this.Ul=!0,this.Gl=!0,this.Hl=!0,this.ql=!0,this.Wl=!0,this.jl=!0,this.vl=!0,this.Tf=!0,this.Jl=!0,this.Dx=!0,this.Om=!1,this.Iu=[],t&&Object.assign(this,t)}JF(){const t=this.Ft;for(let i=0;i0&&(h+=e+" Parts "),s>0&&(h+=s+" Nodes "),n>0&&(h+=n+" Groups "),o>0&&(h+=o+" Links "),r>0&&(h+=r+" Adornments "),t>1){const f=this.Ft.iterator;for(;f.next();){const a=f.value;h+=`
`+a.toString();const c=a.data;c!==null&&GSet.gs(c)&&(h+=" #"+GSet.gs(c)),a instanceof Node?h+=" "+U.toString(c):a instanceof Link&&(h+=" "+U.toString(a.fromNode)+" "+U.toString(a.toNode))}}return i+" "+this.Ft.count+": "+h}findObjectAt(t,i,e){if(i===void 0&&(i=null),e===void 0&&(e=null),this.Jl===!1)return null;Debug&&!t.isReal()&&U.n("findObjectAt: Point must have a real value, not: "+t.toString());let s=!1;this.diagram!==null&&this.diagram.viewportBounds.containsPoint(t)&&(s=!0);const n=Point.a(),o=this.Ft.h,r=o.length;for(let l=r;l--;){const h=o[l];if(s===!0&&h.Dl()===!1||!h.isVisible())continue;n.c(t),n.Xe(h.Us);let f=h.NA(n,i,e);if(f!==null&&(i!==null&&(f=i(f)),f!==null&&(e===null||e(f))))return Point.o(n),f}return Point.o(n),null}findObjectsAt(t,i,e,s){if(i===void 0&&(i=null),e===void 0&&(e=null),!(s instanceof List)&&!(s instanceof GSet)&&(s=new GSet),this.Jl===!1)return s;Debug&&!t.isReal()&&U.n("findObjectsAt: Point must have a real value, not: "+t.toString());let n=!1;this.diagram!==null&&this.diagram.viewportBounds.containsPoint(t)&&(n=!0);const o=Point.a(),r=this.Ft.h,l=r.length;for(let h=l;h--;){const f=r[h];if(n===!0&&f.Dl()===!1||!f.isVisible())continue;o.c(t),o.Xe(f.Us);let a=f;f.CA(o,i,e,s)&&(i!==null&&(a=i(a)),a!==null&&(e===null||e(a))&&s.add(a))}return Point.o(o),s}findObjectsIn(t,i,e,s,n){if(i===void 0&&(i=null),e===void 0&&(e=null),s===void 0&&(s=!1),!(n instanceof List)&&!(n instanceof GSet)&&(n=new GSet),this.Jl===!1)return n;Debug&&!t.isReal()&&U.n("findObjectsIn: Rect must have a real value, not: "+t.toString());let o=!1;this.diagram!==null&&this.diagram.viewportBounds.containsRect(t)&&(o=!0);const r=this.Ft.h,l=r.length;for(let h=l;h--;){const f=r[h];if(o===!0&&f.Dl()===!1||!f.isVisible())continue;let a=f;f.Em(t,i,e,s,n)&&(i!==null&&(a=i(a)),a!==null&&(e===null||e(a))&&n.add(a))}return n}KS(t,i,e,s,n,o,r){if(this.Jl===!1)return n;const l=this.Ft.h,h=l.length;for(let f=h;f--;){const a=l[f];if(r===!0&&a.Dl()===!1||!o(a)||!a.isVisible())continue;let c=a;a.Em(t,i,e,s,n)&&(i!==null&&(c=i(c)),c!==null&&(e===null||e(c))&&n.add(c))}return n}findObjectsNear(t,i,e,s,n,o){if(e===void 0&&(e=null),s===void 0&&(s=null),n===void 0&&(n=!0),n!==!1&&n!==!0&&((n instanceof List||n instanceof GSet)&&(o=n),n=!0),!(o instanceof List)&&!(o instanceof GSet)&&(o=new GSet),this.Jl===!1)return o;Debug&&!t.isReal()&&U.n("findObjectsNear: Point must have a real value, not: "+t.toString());let r=!1;this.diagram!==null&&this.diagram.viewportBounds.containsPoint(t)&&(r=!0);const l=Point.a(),h=Point.a(),f=this.Ft.h,a=f.length;for(let c=a;c--;){const u=f[c];if(r===!0&&u.Dl()===!1||!u.isVisible())continue;l.c(t),l.Xe(u.Us),h.s(t.x+i,t.y),h.Xe(u.Us);let d=u;u.AA(l,h,e,s,n,o)&&(e!==null&&(d=e(d)),d!==null&&(s===null||s(d))&&o.add(d))}return Point.o(l),Point.o(h),o}t2(){return this.Ft.h}ks(t,i){if(!this.visible)return;const e=this.Ft.h,s=e.length;if(s===0)return;const n=U.lt(),o=U.lt();for(let r=0;r0&&o.push(l))}for(let r=0;re.Vm||f.height*n>e.Vm?i.Ui(t,e):this._F(t,i,e),a&&(t.restore(),t.clearContextCache(!0))}_F(t,i,e){if(t instanceof SVGContext){i.Ui(t,e);return}const s=i.actualBounds,n=i.naturalBounds;if(s.width===0||s.height===0||isNaN(s.x)||isNaN(s.y)||!i.isVisible())return;const o=i.F;if(i.background===null){i.un(t,"rgba(0,0,0,0.3)",!0,!1,n,s),t.fillRect(s.x,s.y,s.width,s.height);return}if(t.transform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),i.un(t,i.background,!0,!1,n,s),t.fillRect(0,0,n.width/2,n.height/2),!o.$k()){const r=1/(o.m11*o.m22-o.m12*o.m21);t.transform(o.m22*r,-o.m12*r,-o.m21*r,o.m11*r,r*(o.m21*o.dy-o.m22*o.dx),r*(o.m12*o.dx-o.m11*o.dy))}}QF(t,i,e,s){const n=2/s,o=4/s;for(let r=0;r=s.count)t=s.count;else if(s.elt(t)===i)return-1;s.insertAt(t,i),i.zm(e);const n=this.diagram;return n!==null&&(e?n.L():n.ia(i)),this.Fx(t,i),t}ne(t,i,e){if(!e&&i.layer!==this&&i.layer!==null)return i.layer.ne(t,i,e);const s=this.Ft;if(t<0||t>=s.length){if(t=s.indexOf(i),t<0)return-1}else if(s.elt(t)!==i&&(t=s.indexOf(i),t<0))return-1;i.Xm(e),s.removeAt(t);const n=this.diagram;return n!==null&&(e?n.L():n.ne(i)),i._M(null),t}Fx(t,i){t=this.tR(t,i),i instanceof Group&&this.iR(t,i),i.svg!==null&&i.svg.remove()}tR(t,i){const e=i.zOrder;if(isNaN(e))return t;const s=this.Ft,n=s.count;if(n<=1)return t;if(t<0&&(t=s.indexOf(i)),t<0)return-1;let o=t-1,r=NaN;for(;o>=0&&(r=s.elt(o).zOrder,!!isNaN(r));)o--;let l=t+1,h=NaN;for(;le)for(;;){if(o===-1||r<=e)return o++,o===t?t:(s.removeAt(t),s.insertAt(o,i),o);for(r=NaN;--o>=0&&(r=s.elt(o).zOrder,!!isNaN(r)););}else if(!isNaN(h)&&h=e)return l--,l===t?t:(s.removeAt(t),s.insertAt(l,i),l);for(h=NaN;++l=0)||e<0&&r.containingGroup===i&&(e=o,t>=0))break}if(!(e<0)&&e1)&&U.U(t,"0 <= value <= 1",Layer,"opacity"),this.ii=t;const e=this.diagram;e!==null&&e.L(),this.t("opacity",i,t)}}get isViewportAligned(){return this.Om}set isViewportAligned(t){const i=this.Om;i!==t&&(this.Om=t,this.diagram&&(this.TA(),this.diagram.L()),this.t("isViewportAligned",i,t),t&&(this.isInDocumentBounds=!1))}TA(){if(!this.Om)return;const t=this.diagram,i=this.Ft.h,e=i.length,s=t.Pt,n=t.Nt;for(let o=0;o(y[y.None=1]="None",y[y.Uniform=2]="Uniform",y[y.UniformToFill=3]="UniformToFill",y))(AutoScale||{}),CycleMode=(y=>(y[y.All=1]="All",y[y.NotDirected=2]="NotDirected",y[y.NotDirectedFast=3]="NotDirectedFast",y[y.NotUndirected=4]="NotUndirected",y[y.DestinationTree=5]="DestinationTree",y[y.SourceTree=6]="SourceTree",y))(CycleMode||{}),ScrollMode=(y=>(y[y.Document=1]="Document",y[y.Infinite=2]="Infinite",y))(ScrollMode||{}),CollapsePolicy=(y=>(y[y.TreeParent=1]="TreeParent",y[y.AllParents=2]="AllParents",y[y.AnyParents=3]="AnyParents",y))(CollapsePolicy||{});class Diagram{ws;_t;s2;Rx;Lr;Bu;Ix;Ox;Ex;Bx;Vx;zx;ea;_h;Xx;Yx;Kx;$l;Xf;Tr;Ym;Ux;Gx;Vu;jn;Dr;sa;Ro;Km;Yf;Um;Kf;zu;Fr;vn;o2;l2;Hx;qx;h2;Wx;a2;f2;c2;jx;Gm;Rr;Ir;Or;Er;Br;Vr;vx;zr;Jx;Xr;Yr;Kr;Ur;$x;u2;Io;d2;Zx;Qx;g2;Ci;m2;p2;w2;Xs;Oo;Xi;_x;Vl;zl;t1;i1;Xl;Yl;Kl;e1;Ul;Gl;Hl;ql;Wl;jl;vl;s1;o1;b2;Xu;Yu;l1;h1;a1;f1;Hm;c1;u1;d1;ei;k2;g1;S2;Ku;dn;Jn;oe;$n;DA;Zl;M2;P2;qm;m1;Uu;Wm;p1;Gr;Ql;na;N2;C2;jm;w1;b1;es;Gu;vm;Hu;_l;Uf;Jm;Hr;oa;A2;$m;Zt;F;Ue;Nr;Gi;Ss;L2;th;qr;Nl;Wr;ra;Gf;T2;qu;la;Wu;Wt;ih;gt;ot;ju;Pt;Nt;wt;Hf;jw;k1;ha;qf;S1;M1;P1;nR;oR;Hi;Al;Vm;Zm;D2;F2;FA;Qm;rR;lR;hR;N1;aR;fR;cR;aa;RA;eh;fa;ca;ua;da;Su;Zh;si;Tt;Wf;aS;fS;Sf;ii;static C1=null;static IA=new GMap;static R2;static I2=null;ku;A1;L1;T1;D1;F1;_m;O2;t0;i0;e0;yx;E2;B2;jf;constructor(t,i){if(Diagram.kw||(Diagram.Zk(),Diagram.kw=!0),GSet.Ji(this),Diagram.OA(this),this.Zt=!0,this.Tt=null,this.Pt=0,this.Nt=0,this.wt=null,Diagram.isUsingDOM()){const s=this,n=()=>{s.Ai(root.document,"DOMContentLoaded",n,!1),s.setRTL()};root.document.body!==null?this.setRTL():s.Ut(root.document,"DOMContentLoaded",n,!1)}this.Hf=null,Diagram.V2("Model",PartManager);const e=this;return this.m2=s=>e.partManager.doModelDataChanged(s),this.p2=s=>e.partManager.doModelChanged(s),this.S1=null,this.M1=null,this.EA(),this.model=Model.z2(),this.themeManager=new ThemeManager,this.Io=!0,this.BA(),this.layout=new Layout,this.Io=!1,this.rR=null,this.lR=null,this.hR=null,this.N1=null,this.aR=null,this.fR=null,this.cR=null,this.aa=null,this.RA=null,this.eh=null,this.fa=null,this.ca=null,this.ua=null,this.da=null,this.Su=()=>{},this.Zh=null,this.Hu=!1,this.Wf=new DiagramHelper(this),t!==void 0&&(typeof t=="string"||root.Element&&t instanceof Element?this.X2(t):i=t),i&&this.setProperties(i),this.Zt=!1,this.requestUpdate(),this}SF(){return this.wt!==null}get renderer(){return this.Uf}set renderer(t){if(this instanceof Overview)return;t===""&&(t="default");const i=t.toLowerCase(),e=this.Uf;if(i===e)return;this.Uf=i;let s=null;i==="default"||i==="canvas"?(s=this._l.get("svg"),s!==null&&s.Et.remove(),this.wt&&(this.si=this.wt.ci),this.si.clearContextCache(!0)):i==="svg"?(this._l.has("svg")?s=this._l.get("svg"):(s=new SVGSurface(this,root.document),this.addRenderer("svg",s)),this.div!==null&&this.div.appendChild(s.Et),this.si=s.ci,this.wt&&(this.wt.ci.setTransform(this.Hi,0,0,this.Hi,0,0),this.wt.ci.clearRect(0,0,this.Pt,this.Nt))):i==="debug"&&(this._l.has("SVG")||(s=new SVGSurface(this,root.document),this.addRenderer("SVG",s),s.Et.style.backgroundColor="whitesmoke",this.div!==null&&this.div.after(s.Et))),this.Zt||this.redraw()}EA(){this.jf=new List,this.setupRouters(),this.ws=new AnimationManager,this.ws.Do(this),this._t=17,this.s2=!1,this.ju=!1,this.Rx="default",this.Wt=new List,this._l=new GMap,this.Uf="default",this.resetRenderingHints(),this.uR(),this.ii=1,this.gt=new Point(NaN,NaN).p(),this.yx=new Point(NaN,NaN),this.ot=1,this.$m=1,this.Ix=new Point(NaN,NaN).p(),this.Ox=NaN,this.Ex=1e-4,this.Bx=100,this.F=new Transform,this.Vx=new Point(NaN,NaN).p(),this.zx=new Rect(NaN,NaN,NaN,NaN).p(),this.ea=new Margin(0,0,0,0).p(),this._h=1,this.Xx=!1,this.Yx=null,this.Kx=null,this.$l=1,this.Xf=Spot.Default,this.Tr=1,this.Ym=Spot.Default,this.Ux=Spot.None,this.Gx=Spot.None,this.Ue=!0,this.Vu=!1,this.jn=new Set,this.Dr=new GSet,this.sa=new GSet,this.Ro=!1,this.ih=new GMap,this.qu=!0,this.Km=250,this.Yf=-1,this.Um=new Margin(16,16,16,16).p(),this.Nr=!1,this.Kf=!1,this.zu=!0,this.Jm=new InputEvent,this.Jm.diagram=this,this.Hr=new InputEvent,this.Hr.diagram=this,this.oa=new InputEvent,this.oa.diagram=this,this.Fr=null,this.vn=null,this.jw=!1,this.dR(),this.Wr=new GSet,this.Hx=!0,this.qx=1,this.h2=!1,this.Wx=1,this.jx="auto",this.Gm="auto",this.Rr=null,this.Ir=null,this.Or=null,this.Er=null,this.Br=null,this.Vr=null,this.vx=null,this.zr=null,this.Jx=!1,this.Xr=null,this.Yr=null,this.Kr=null,this.Ur=null,this.$x=!1,this.k1={},this.ha=[null,null],this.Io=!1,this.d2=!1,this.Zx=!1,this.Qx=!1,this.g2=!0,this.Ss=!1,this.la=!1,this.w2=!0,this.Xs=-2,this.th=new GMap,this.Wu=new List,this.Oo=!1,this.Xi=!0,this._x=!0,this.Vl=!0,this.zl=!0,this.t1=!1,this.i1=!0,this.Xl=!0,this.Yl=!0,this.Kl=!0,this.e1=!0,this.Ul=!0,this.Gl=!0,this.Hl=!0,this.ql=!0,this.Wl=!0,this.jl=!0,this.vl=!0,this.s1=!0,this.o1=!0,this.b2=!1,this.qf=!1,this.Xu=!0,this.Yu=!0,this.l1=!0,this.h1=!0,this.a1=16,this.f1=16,this.Hm=!1,this.c1=!1,this.u1=0,this.d1=0,this.ei=new Margin(5).p(),this.k2=new GSet().p(),this.g1=999999999,this.S2=new GSet().p(),this.ra=!0,this.Ku=!0,this.Gf=!0,this.dn=!1,this.Jn=!1,this.qr=!0,this.Nl=!1,this.$n=!1,this.DA=new GSet,this.T2=new GSet,this.Zl=null,this.M2=new Size(8,8),this.P2=999,this.qm=!1,this.aS=1,this.fS=0,this.Gi={scale:1,position:new Point,bounds:new Rect,canvasSize:new Size,newCanvasSize:new Size,isScroll:!1},this.Gi.canvasSize=this.Gi.canvasSize,this.Gi.newCanvasSize=this.Gi.newCanvasSize,this.Gi.isScroll=!1,this.m1=new Rect(NaN,NaN,NaN,NaN).p(),this.Uu=new Size(NaN,NaN).p(),this.Wm=new Rect(NaN,NaN,NaN,NaN).p(),this.p1=!1,this.gR(),this.es=null,this.Gu=!1,this.Sf=null,this.partManager=new PartManager,this.toolManager=new ToolManager,this.toolManager.initializeStandardTools(),this.defaultTool=this.toolManager,this.currentTool=this.defaultTool,this.L1=null,this.T1=new DraggingOptions,this.D1=null,this.F1=null,this.A1=!1,this.ku=!1,this.commandHandler=new CommandHandler,this.i0=null,this.e0=Point.Hk,this.E2=!1,this.Hi=1,this.Al=null,this.Vm=1,this._m=0,this.O2=[0,0,0,0,0],this.t0=0,this.Zm=1,this.D2=0,this.F2=new Point,this.FA=500,this.vm=new Point,this.Qm=!1}static VA=root.document!==void 0;static isUsingDOM(){return Diagram.VA}static useDOM(t){Diagram.VA=t?root.document!==void 0:!1}static ss=new WeakMap;clear(){this.animationManager.stopAnimation(),this.model.clear(),Diagram.zA(),this.XA(!1),this.Wu.clear(),this.YA(),this.Zl=null,this.invalidateDocumentBounds(),this.ensureBounds(),this.L()}XA(t){this.animationManager.stopAnimation(!0),this.k2=new GSet().p(),this.S2=new GSet().p();const i=this.skipsUndoManager,e=this.Ci!==null&&this.Ci!==void 0;e&&(this.skipsUndoManager=!0);let s=null;this.es!==null&&(s=this.es.part,s!==null&&this.remove(s));const n=[],o=this.Wt.length;if(t){for(let r=0;rt?new Margin(t/2):1.5)),this.w1=this.jm,this.b1=new Adornment(Panel.Link).add(new Shape({isPanelMain:!0,fill:null,stroke:"dodgerblue",strokeWidth:3}).theme("stroke","selection").theme("strokeWidth","selection"))}setRTL(t){let i=t===void 0?this.div:t;i===null&&(i=root.document.body);const e=U.ds("div");e.dir="rtl",e.style.cssText="font-size: 14px; width: 1px; height: 1px; position: absolute; top: -1000px; overflow: scroll;",e.textContent="A",i.appendChild(e);let s="reverse";e.scrollLeft>0?s="default":(e.scrollLeft=1,e.scrollLeft===0&&(s="negative")),i.removeChild(e),this.Rx=s}setScrollWidth(t){let i=t===void 0?this.div:t;i===null&&(i=root.document.body);let e=0;if(Diagram.isUsingDOM()){let s=Diagram.I2,n=Diagram.R2;s===null&&(Diagram.I2=U.ds("p"),s=Diagram.I2,s.style.width="100%",s.style.height="200px",s.style.boxSizing="content-box",Diagram.R2=U.ds("div"),n=Diagram.R2,n.style.position="absolute",n.style.visibility="hidden",n.style.width="200px",n.style.height="150px",n.style.boxSizing="content-box",n.appendChild(s)),n.style.overflow="hidden",i.appendChild(n);const o=s.offsetWidth;n.style.overflow="scroll";let r=s.offsetWidth;o===r&&(r=n.clientWidth),i.removeChild(n),e=o-r,e===0&&!U.rr&&(e=11)}this._t=e,this.s2=!0}ai(t){t in AutoScale?this.autoScale=t:U.hr(this,t)}toString(t){t===void 0&&(t=0);let i="";this.div&&this.div.id&&(i=this.div.id);let e='Diagram "'+i+'"';if(t<=0)return e;const s=this.Wt.iterator;for(;s.next();){const n=s.value;e+=`
`+n.toString(t-1)}return e}static OA(t){Diagram.C1=t}static wm(){return Diagram.C1}static fromDiv(t){let i=t;if(typeof t=="string"&&(i=root.document.getElementById(t)),i instanceof HTMLDivElement){const e=Diagram.ss.get(i);if(e)return e}return null}get div(){return this.Tt}set div(t){if(t!==null&&U.e(t,HTMLDivElement,Diagram,"div"),this.Tt!==t){const i=this.Tt;if(i!==null){if(Diagram.ss.delete(i),i.goDiagram=void 0,i.go=void 0,i.innerHTML="",this.wt!==null){const s=this.wt.Et;this.Ai(s,"pointermove",this.fa,!1),this.Ai(s,"pointerdown",this.eh,!1),this.Ai(s,"pointerup",this.ca,!1),this.Ai(s,"pointerout",this.ua,!1),this.Ai(s,"pointercancel",this.da,!1),this.wt.dispose()}this.Hf&&(this.Hf.disconnect(),this.Hf=null);const e=this.toolManager;e!==null&&(e.mouseDownTools.each(s=>s.cancelWaitAfter()),e.mouseMoveTools.each(s=>s.cancelWaitAfter()),e.mouseUpTools.each(s=>s.cancelWaitAfter())),e.cancelWaitAfter(),this.currentTool.doCancel(),this.wt=null,this.Ai(root,"resize",this.N1,!1),this.Ai(root,"wheel",this.aa,!0),Diagram.wm()===this&&Diagram.OA(null)}else this.eh===null&&(this.$n=!1);if(this.Tt=null,t!==null){const e=Diagram.ss.get(t);e&&(e.div=null),this.X2(t),this.Su(),this.themeManager&&this.themeManager.mR()}else this.themeManager&&this.themeManager.pR()}}setupRouters(){this.jf.push(new AvoidsNodesRouter)}X2(t){const i=this;if(!Diagram.isUsingDOM())return;t==null&&U.n("Diagram setup requires an argument DIV."),i.Tt!==null&&U.n("Diagram has already completed setup."),typeof t=="string"?i.Tt=root.document.getElementById(t):t instanceof HTMLDivElement?i.Tt=t:U.n("No DIV or DIV id supplied: "+t),i.Tt===null&&U.n("Invalid DIV id; could not get element with id: "+t);const e=Diagram.ss.get(i.Tt);if(e&&e!==this&&U.n("Invalid div id; div already has a Diagram associated with it."),!i.Hf&&root.ResizeObserver){const a=root.ResizeObserver,c=U.Kk(()=>i.requestUpdate(),250,!1);i.Hf=new a(()=>c()),i.Hf.observe(i.Tt)}root.getComputedStyle(i.Tt,null).position==="static"&&(i.Tt.style.position="relative");let s=5;const n="rgba(2"+s+"5, 255, 255, 0)";s--,i.Tt.style["-webkit-tap-highlight-color"]=n,i.Tt.innerHTML="",Diagram.ss.set(i.Tt,i),i.Tt.goDiagram=i,i.Tt.go=root.go;const o=new CanvasSurface(i);o.style!==void 0&&(o.style.position="absolute",o.style.top="0px",o.style.left="0px",root.getComputedStyle(i.Tt,null).getPropertyValue("direction")==="rtl"&&(i.ju=!0),o.style.zIndex="2",o.style.userSelect="none",o.style.MozUserSelect="none",o.style.touchAction="none",o.style.letterSpacing="normal !important",o.style.wordSpacing="normal !important",o.style.lang="unknown"),i.wt=o,i.si=o.ci;const r=i.si;i.Hi=i.computePixelRatio(),i.viewSize.isReal()||(i.Pt=i.Tt.clientWidth||1,i.Nt=i.Tt.clientHeight||1),i.KA(i.Pt,i.Nt);const l=i;i.Tt.insertBefore(o.Et,i.Tt.firstChild);const h=new CanvasSurface(null);if(h.width=1,h.height=1,i.nR=h,i.oR=h.ci,Diagram.isUsingDOM()){const a=U.ds("div"),c=U.ds("div");a.style.position="absolute",a.style.overflow="auto",a.style.width=i.Pt+"px",a.style.height=i.Nt+"px",a.style.zIndex="1",c.style.position="absolute",c.style.width="1px",c.style.height="1px",i.Tt.appendChild(a),a.appendChild(c),a.onscroll=Diagram.yR,a.addEventListener("pointerdown",Diagram.wR),a.C=i,a.xR=!0,a.bR=!0,i.S1=a,i.M1=c}i.Su=U.Kk(()=>{i.Al=null,i.L()},300,!1),i.N1=U.Kk(()=>{i.UM()},250,!1),i.Zh=a=>(a.preventDefault(),!1),i.aa=a=>{if(!l.isEnabled)return;const c=l.vf(a,!0);c.bubbles=!0;let u=0,d=0;c.delta=0,a.deltaX!==void 0?(a.deltaX!==0&&(u=a.deltaX>0?1:-1),a.deltaY!==0&&(d=a.deltaY>0?1:-1),c.delta=Math.abs(a.deltaX)>Math.abs(a.deltaY)?-u:-d):a.wheelDeltaX!==void 0?(a.wheelDeltaX!==0&&(u=a.wheelDeltaX>0?-1:1),a.wheelDeltaY!==0&&(d=a.wheelDeltaY>0?-1:1),c.delta=Math.abs(a.wheelDeltaX)>Math.abs(a.wheelDeltaY)?-u:-d):a.wheelDelta!==void 0&&a.wheelDelta!==0&&(c.delta=a.wheelDelta>0?1:-1),l.doMouseWheel(),l.ga(c,a)},i.RA=a=>{if(!l.isEnabled)return;i.qf=!1,l.vf(a,!0);const c=l.currentTool;c.cancelWaitAfter(),c.standardMouseOver()},i.eh=a=>{if(!l.isEnabled)return;i.qf=!0;const c=l.k1;c[a.pointerId]===void 0&&(c[a.pointerId]=a);const u=l.ha;let d=!1;if(u[0]!==null&&(u[0].pointerId===a.pointerId||u[0].pointerType!==a.pointerType))u[0]=a;else if(u[1]!==null&&u[1].pointerId===a.pointerId)u[1]=a,d=!0;else if(u[0]===null)u[0]=a;else if(u[1]===null)u[1]=a,d=!0;else{a.preventDefault();return}const m=a.pointerType==="touch"||a.pointerType==="pen";m&&(l.jw=!1,l.Qm=!0);const g=l.kR(a,a,d),p=l.F2,w=m?25:10;if(a.timeStamp-l.D2w||Math.abs(p.y-a.screenY)>w)?l.Zm++:l.Zm=1,g.clickCount=l.Zm,l.D2=a.timeStamp,l.F2.setTo(a.screenX,a.screenY),l.doMouseDown(),a.button===1){a.preventDefault();return}l.ga(g,a)},i.fa=a=>{if(!l.isEnabled)return;i.qf=!0;const c=l.ha;if(c[0]!==null&&(c[0].pointerId===a.pointerId||c[0].pointerType!==a.pointerType))c[0]=a;else if(c[1]!==null&&c[1].pointerId===a.pointerId){c[1]=a;return}else if(c[0]===null)c[0]=a;else return;if(c[0].pointerId!==a.pointerId)return;const u=l.SR(a,a,c[1]!==null);l.doMouseMove(),l.ga(u,a)},i.ca=a=>{if(!l.isEnabled)return;i.qf=!0;const c=a.pointerType==="touch"||a.pointerType==="pen",u=l.k1;if(c&&l.jw){delete u[a.pointerId],a.preventDefault();return}const d=l.ha;if(d[0]!==null&&(d[0].pointerId===a.pointerId||d[0].pointerType!==a.pointerType))d[0]=null;else if(d[1]!==null&&d[1].pointerId===a.pointerId){d[1]=null;return}else return;const m=l.Y2(a,!1,!0,!1,!0,!1);let g=root.document.elementFromPoint(a.clientX,a.clientY)||null;g!==null&&g.shadowRoot!==void 0&&g.shadowRoot!==null&&(g=g.shadowRoot.elementFromPoint(a.clientX,a.clientY)),g!==null&&g.C instanceof Diagram&&g.C!==l&&g.C.o0(a,m),g===null&&(g=a.target),l.o0(a,m),m.clickCount=l.Zm,m.targetDiagram=l.I1(a,g),m.targetObject=null,l.doMouseUp(),l.ga(m,a),c&&(l.Qm=!1)},i.ua=a=>{if(!l.isEnabled)return;i.qf=!1;const c=l.k1;c[a.pointerId]&&delete c[a.pointerId];const u=l.ha;if(u[0]!==null&&u[0].pointerId===a.pointerId&&(u[0]=null),u[1]!==null&&u[1].pointerId===a.pointerId&&(u[1]=null),a.pointerType==="touch"||a.pointerType==="pen")return;const d=l.currentTool;d.cancelWaitAfter(),d.standardMouseOver()},i.da=a=>{const c=l.ha;c[0]!==null&&c[0].pointerId===a.pointerId?(c[0]=null,l.Qm=!1):c[1]!==null&&c[1].pointerId===a.pointerId&&(c[1]=null)};const f=r;if(i.P1=f.z[U.Os("7eba17a4ca3b1a8346")][U.Os("78a118b7")](f.z,Diagram.vu,s,s),r.clearContextCache(!0),i.MR(),this.Uf==="svg"){const a=this._l.get("svg");this.Tt&&this.Tt.appendChild(a.Et),this.si=a.ci}}addEventListener(t,i,e,s){t.addEventListener(i,e,{capture:s,passive:!1})}Ut(t,i,e,s){t.addEventListener(i,e,{capture:s,passive:!1})}removeEventListener(t,i,e,s){t.removeEventListener(i,e,{capture:s})}Ai(t,i,e,s){t.removeEventListener(i,e,{capture:s})}MR(){const t=this;let i=this.wt.Et;i instanceof HTMLCanvasElement||(i=t.div),this.Ut(i,"pointerdown",t.eh,!1),this.Ut(i,"pointermove",t.fa,!1),this.Ut(i,"pointerup",t.ca,!1),this.Ut(i,"pointerout",t.ua,!1),this.Ut(i,"pointercancel",t.da,!1),this.Ut(i,"pointerenter",t.PR,!1),this.Ut(i,"pointerleave",t.NR,!1),this.Ut(i,"wheel",t.aa,!1),this.Ut(i,"keydown",t.CR,!1),this.Ut(i,"keyup",t.AR,!1),this.Ut(i,"blur",t.LR,!1),this.Ut(i,"focus",t.TR,!1),this.Ut(i,"selectstart",e=>(e.preventDefault(),!1),!1),this.Ut(i,"contextmenu",e=>(e.preventDefault(),!1),!1),this.Ut(root,"resize",t.N1,!1)}vw(){this._m>30&&(this.Al=1)}IS(t){this.Al!==null&&(this.Al=null,t&&this.Su(),Debug&&Debug.drawFrames||(this._m=0,this.O2=[0,0,0,0,0],this.t0=0))}computePixelRatio(){return this.Al!==null?this.Al:root.devicePixelRatio||1}get avgSpf(){return this._m}doMouseDown(){this.currentTool.doMouseDown()}doMouseMove(){this.currentTool.doMouseMove()}doMouseUp(){this.currentTool.doMouseUp()}doMouseWheel(){this.currentTool.doMouseWheel()}doKeyDown(){this.currentTool.doKeyDown()}doKeyUp(){this.currentTool.doKeyUp()}doFocus(){this.focus()}focus(){if(this.wt)if(this.scrollsPageOnFocus)this.wt.focus();else{const t=root.scrollX,i=root.scrollY;this.wt.focus(),root.scrollTo(t,i)}}TR(t){const i=Diagram.ss.get(this);i&&i.O("GainedFocus")}LR(t){const i=Diagram.ss.get(this);i&&i.O("LostFocus")}UM(){if(this.wt===null)return;const i=this.Tt;if(i===null||i.clientWidth===0||i.clientHeight===0)return;this.s2||this.setScrollWidth();const e=this.Jn?this._t:0,s=this.dn?this._t:0,n=this.Hi;if(this.Hi=this.computePixelRatio(),this.Hi!==n&&(this.Vu=!0,this.requestUpdate()),i.clientWidth!==this.Pt+e||i.clientHeight!==this.Nt+s){this.ma(),this.Ue=!0;const o=this.layout;o!==null&&o.isViewportSized&&this.autoScale===1&&(this.Kf=!0,o.invalidateLayout()),this.Ss||this.requestUpdate()}}BA(){let t=0,i=new Layer;i.name="Grid",i.allowSelect=!1,i.pickable=!1,i.isTemporary=!0,i.isInDocumentBounds=!1,this.jr(i,t++),i=new Layer,i.name="ViewportBackground",i.isViewportAligned=!0,i.isTemporary=!0,i.isInDocumentBounds=!1,this.jr(i,t++),i=new Layer,i.name="Background",this.jr(i,t++),i=new Layer,i.name="",this.jr(i,t++),i=new Layer,i.name="Foreground",this.jr(i,t++),i=new Layer,i.name="ViewportForeground",i.isViewportAligned=!0,i.isTemporary=!0,i.isInDocumentBounds=!1,this.jr(i,t++),i=new Layer,i.name="Adornment",i.isTemporary=!0,i.isInDocumentBounds=!1,this.jr(i,t++),i=new Layer,i.name="Tool",i.isTemporary=!0,i.isInDocumentBounds=!0,this.jr(i,t++)}UA(){const t=new Panel(Panel.Grid,{name:"GRID"}).add(new Shape("LineH",{stroke:"lightgray",strokeWidth:.5,interval:1}).theme("stroke","gridMinor"),new Shape("LineV",{stroke:"lightgray",strokeWidth:.5,interval:1}).theme("stroke","gridMinor"),new Shape("LineH",{stroke:"gray",strokeWidth:.5,interval:5}).theme("stroke","gridMajor"),new Shape("LineV",{stroke:"gray",strokeWidth:.5,interval:5}).theme("stroke","gridMajor"),new Shape("LineH",{stroke:"gray",strokeWidth:1,interval:10}).theme("stroke","gridMajor"),new Shape("LineV",{stroke:"gray",strokeWidth:1,interval:10}).theme("stroke","gridMajor")),i=new Part({layerName:"Grid",zOrder:0,isInDocumentBounds:!1,isAnimated:!1,pickable:!1,locationObjectName:"GRID"}).add(t);return this.add(i),this.partManager.parts.delete(i),t.visible=!1,t}static yR(){const t=Diagram.ss.get(this.parentElement||this);if(t){if(t.c1){t.c1=!1;return}if(!t.isEnabled){t.GA();return}t.diagramScroll(this)}}static wR(t){if(!this.C.isEnabled){this.C.updateScroll();return}this.C.u1=t.target.scrollTop,this.C.d1=t.target.scrollLeft}diagramScroll(t){if(this.wt===null)return;const i=this.S1,e=this.M1;this.Hm=!0;let s=this.documentBounds,n=this.viewportBounds;const o=this.ea;let r=s.x-o.left,l=s.y-o.top;const h=s.width+o.left+o.right,f=s.height+o.top+o.bottom;let a=s.right+o.right,c=s.bottom+o.bottom,u=n.x,d=n.y;const m=n.width,g=n.height;let p=n.right,w=n.bottom;const x=this.scale;let k,b=t.scrollLeft;if(this.ju)switch(this.Rx){case"negative":b=b+t.scrollWidth-t.clientWidth;break;case"reverse":b=t.scrollWidth-b-t.clientWidth;break}const S=b;if(mp)){const M=i.scrollWidth-this.Pt;this.position=k.s(-M+S-this.Pt/x+a,this.position.y)}if(t.bR&&this.allowVerticalScroll&&(lw)){const M=i.scrollHeight-this.Nt;this.position=k.s(this.position.x,-M+t.scrollTop-this.Nt/x+c)}Point.o(k),this.oh(),this.Hm=!1,this.Ku=!1,s=this.documentBounds,n=this.viewportBounds,a=s.right,p=n.right,c=s.bottom,w=n.bottom,r=s.x,u=n.x,l=s.y,d=n.y,m>=h&&r>=u&&a<=p&&(e.style.width="1px"),g>=f&&l>=d&&c<=w&&(e.style.height="1px")}computeBounds(t){return t===void 0&&(t=new Rect),this.Ti(),this.HA(t)}HA(t){if(this.fixedBounds.isReal())return t.c(this.fixedBounds),t.addMargin(this.ei),t;let i=!0;const e=this.Wt.h,s=e.length;for(let n=0;nl?h=(r-this._t)/n:l=(o-this._t)/s);let u=0;return t===2?u=Math.min(h,l):t===3&&(h>l?u=(r-this._t)/n:u=(o-this._t)/s),u>i&&(u=i),uthis.maxScale&&(u=this.maxScale),u}zoomToFit(){const t=this._h;this._h=1,this.scale=this.Ju(2),this.alignDocument(Spot.Center,Spot.Center),t!==1&&(this.Gs(!1),this.K2(this.documentBounds,this.Pt/this.ot,this.Nt/this.ot,this.Xf,!1)),this._h=t}zoomToRect(t,i){i===void 0&&(i=2);const e=t.width,s=t.height;if(e===0||s===0||isNaN(e)&&isNaN(s))return;let n=1;if(i===2||i===3)if(isNaN(e))n=this.viewportBounds.height*this.scale/s;else if(isNaN(s))n=this.viewportBounds.width*this.scale/e;else{const o=this.Pt,r=this.Nt;i===3?r/s>o/e?n=(r-(this.dn?this._t:0))/s:n=(o-(this.Jn?this._t:0))/e:n=Math.min(r/s,o/e)}this.scale=n,this.position=new Point(t.x,t.y)}get DR(){return this.Zt}set DR(t){this.Zt=t}alignDocument(t,i){this.ensureBounds();const e=this.documentBounds,s=this.viewportBounds;this.position=new Point(e.x+(t.x*e.width+t.offsetX)-(i.x*s.width-i.offsetX),e.y+(t.y*e.height+t.offsetY)-(i.y*s.height-i.offsetY))}focusObject(t){if(t instanceof GraphObject){this.i0=t;const i=Point.a();this.e0=this.transformDocToView(t.getDocumentPoint(Spot.TopLeft,i)),Point.o(i)}else this.i0=null,this.e0=Point.Hk}K2(t,i,e,s,n){const o=Point.K(this.gt.x,this.gt.y);let r=o.x,l=o.y;if(this.i0!==null){let h=Point.a();h=this.i0.getDocumentPoint(Spot.TopLeft,h),r=h.x-this.e0.x/this.scale,l=h.y-this.e0.y/this.scale,s=Spot.None,Point.o(h)}if(n||this.scrollMode===1){s.isSpot()&&(i>t.width&&(r=t.x+(s.x*t.width+s.offsetX)-(s.x*i-s.offsetX)),e>t.height&&(l=t.y+(s.y*t.height+s.offsetY)-(s.y*e-s.offsetY)));const h=this.ea,f=i-t.width;if(it.left?r=t.left:rt.top?l=t.top:ls.part,s=>s.canSelect());if(e instanceof Part)return e}else{const e=this.zS(t,s=>s.part);if(e instanceof Part)return e}return null}findObjectAt(t,i,e){i===void 0&&(i=null),e===void 0&&(e=null),this.Ti();const s=this.Wt.iteratorBackwards;for(;s.next();){const n=s.value;if(!n.visible)continue;const o=n.findObjectAt(t,i,e);if(o!==null)return o}return null}zS(t,i,e){i===void 0&&(i=null),e===void 0&&(e=null),this.Ti();const s=this.Wt.iteratorBackwards;for(;s.next();){const n=s.value;if(!n.visible||n.isTemporary)continue;const o=n.findObjectAt(t,i,e);if(o!==null)return o}return null}findPartsAt(t,i,e){return i===void 0&&(i=!0),this.RR(t,s=>s.part,i?s=>s instanceof Part&&s.canSelect():null,e)}RR(t,i,e,s){i===void 0&&(i=null),e===void 0&&(e=null),!(s instanceof List)&&!(s instanceof GSet)&&(s=new GSet),this.Ti();const n=this.Wt.iteratorBackwards;for(;n.next();){const o=n.value;!o.visible||o.isTemporary||o.findObjectsAt(t,i,e,s)}return s}findObjectsAt(t,i,e,s){i===void 0&&(i=null),e===void 0&&(e=null),!(s instanceof List)&&!(s instanceof GSet)&&(s=new GSet),this.Ti();const n=this.Wt.iteratorBackwards;for(;n.next();){const o=n.value;o.visible&&o.findObjectsAt(t,i,e,s)}return s}findPartsIn(t,i,e,s){return i===void 0&&(i=!1),e===void 0&&(e=!0),this.IR(t,null,n=>n instanceof Part&&(!e||n.canSelect()),i,s)}findObjectsIn(t,i,e,s,n){i===void 0&&(i=null),e===void 0&&(e=null),s===void 0&&(s=!1),!(n instanceof List)&&!(n instanceof GSet)&&(n=new GSet),this.Ti();const o=this.Wt.iteratorBackwards;for(;o.next();){const r=o.value;r.visible&&r.findObjectsIn(t,i,e,s,n)}return n}KS(t,i,e,s,n,o){const r=new GSet;this.Ti();const l=this.Wt.iteratorBackwards;for(;l.next();){const h=l.value;h.visible&&h.KS(t,i,e,s,r,n,o)}return r}IR(t,i,e,s,n){i===void 0&&(i=null),e===void 0&&(e=null),s===void 0&&(s=!1),!(n instanceof List)&&!(n instanceof GSet)&&(n=new GSet),this.Ti();const o=this.Wt.iteratorBackwards;for(;o.next();){const r=o.value;!r.visible||r.isTemporary||r.findObjectsIn(t,i,e,s,n)}return n}findPartsNear(t,i,e,s,n){return e===void 0&&(e=!0),s===void 0&&(s=!0),this.OR(t,i,null,o=>o instanceof Part&&(!s||o.canSelect()),e,n)}findObjectsNear(t,i,e,s,n,o){e===void 0&&(e=null),s===void 0&&(s=null),n===void 0&&(n=!0),n!==!1&&n!==!0&&((n instanceof List||n instanceof GSet)&&(o=n),n=!0),!(o instanceof List)&&!(o instanceof GSet)&&(o=new GSet),this.Ti();const r=this.Wt.iteratorBackwards;for(;r.next();){const l=r.value;l.visible&&l.findObjectsNear(t,i,e,s,n,o)}return o}OR(t,i,e,s,n,o){e===void 0&&(e=null),s===void 0&&(s=null),n===void 0&&(n=!0),n!==!1&&n!==!0&&((n instanceof List||n instanceof GSet)&&(o=n),n=!0),!(o instanceof List)&&!(o instanceof GSet)&&(o=new GSet),this.Ti();const r=this.Wt.iteratorBackwards;for(;r.next();){const l=r.value;!l.visible||l.isTemporary||l.findObjectsNear(t,i,e,s,n,o)}return o}acceptEvent(t){return this.vf(t,t instanceof MouseEvent)}vf(t,i){const e=this.Hr;this.Hr=this.oa,this.oa=e,e.diagram=this,e.event=t,i?this.o0(t,e):(e.viewPoint=this.Hr.viewPoint,e.documentPoint=this.Hr.documentPoint);let s=0;const n=t;return n.ctrlKey&&(s+=1),n.altKey&&(s+=2),n.shiftKey&&(s+=4),n.metaKey&&(s+=8),e.modifiers=s,e.button=n.button,n.buttons!==void 0&&(e.buttons=n.buttons),U.rr&&n.button===0&&n.ctrlKey&&(e.button=2),e.down=!1,e.up=!1,e.clickCount=1,e.delta=0,e.handled=!1,e.bubbles=!1,e.timestamp=t.timeStamp,e.isMultiTouch=!1,e.targetDiagram=this.I1(t,t.target),e.targetObject=null,e}I1(t,i){if(i===null)return null;const e=Diagram.ss.get(i);if(e)return e;let s=t.path;if(!s&&U.rt(t.composedPath)&&(s=t.composedPath()),s&&s[0]){const n=Diagram.ss.get(s[0]);if(n)return n}return null}kR(t,i,e){const s=this.Y2(t,!0,!1,!1,!0,e);return this.o0(i,s),s.targetDiagram=this.I1(t,t.target),s.targetObject=null,e||s.clone(this.Jm),s}SR(t,i,e){const s=this.Y2(t,!1,!1,!1,!1,e);let n=root.document.elementFromPoint(i.clientX,i.clientY)||null;n!==null&&n.shadowRoot!==void 0&&n.shadowRoot!==null&&(n=n.shadowRoot.elementFromPoint(i.clientX,i.clientY));let o=this,r=t;if(n){const l=this.I1(t,n);l&&(r=i,o=l)}return s.targetDiagram=o,this.o0(r,s),s.targetObject=null,s}Y2(t,i,e,s,n,o){const r=this.Hr;this.Hr=this.oa,this.oa=r,r.diagram=this,r.clickCount=1,r.delta=0;let l=0;return t.ctrlKey&&(l+=1),t.altKey&&(l+=2),t.shiftKey&&(l+=4),t.metaKey&&(l+=8),r.modifiers=l,r.event=t,r.timestamp=t.timeStamp,r.button=e?this.firstInput.button:t.button,r.buttons=t.buttons,U.rr&&t.button===0&&t.ctrlKey&&(r.button=2),r.down=i,r.up=e,r.handled=s,r.bubbles=n,r.isMultiTouch=o,r}ga(t,i){return t.bubbles?(Debug&&Debug.handleMessages&&U.nt("NOT handled "+i.type+" "+t.toString()),!0):(Debug&&Debug.handleMessages&&U.nt("handled "+i.type+" "+this.currentTool.name+" "+t.toString()),i.stopPropagation!==void 0&&i.stopPropagation(),i.cancelable!==!1&&i.preventDefault(),i.cancelBubble=!0,!1)}CR(t){const i=Diagram.ss.get(this);if(!i||!i.isEnabled)return!1;const e=i.vf(t,!1);return e.key=t.key,e.code=t.code,e.down=!0,i.doKeyDown(),i.ga(e,t)}AR(t){const i=Diagram.ss.get(this);if(!i||!i.isEnabled)return!1;const e=i.vf(t,!1);return e.key=t.key,e.code=t.code,e.up=!0,i.doKeyUp(),i.ga(e,t)}PR(t){const i=Diagram.ss.get(this);if(!i||!i.isEnabled)return!1;const e=i.vf(t,!0);return i.mouseEnter!==null&&i.mouseEnter(e),i.currentTool.standardMouseOver(),i.ga(e,t)}NR(t){const i=Diagram.ss.get(this);if(!i||!i.isEnabled)return!1;const e=i.vf(t,!0);return i.mouseLeave!==null&&i.mouseLeave(e),i.ga(e,t)}getMouse(t){const i=this.wt;if(i===null)return new Point(0,0);const e=i.getBoundingClientRect(),s=(t.clientX-e.left)*(this.Pt/e.width),n=(t.clientY-e.top)*(this.Nt/e.height);return new Point(s,n).Xe(this.F)}o0(t,i){const e=this.wt;let s=0,n=0;if(e!==null){const r=e.getBoundingClientRect();s=(t.clientX-r.left)*(this.Pt/r.width),n=(t.clientY-r.top)*(this.Nt/r.height)}i.viewPoint.s(s,n);const o=Point.K(s,n);this.F.is(o),i.documentPoint.c(o),Point.o(o)}GC(t,i,e){let s;if(this.ha[0]!==null)s=this.ha[i];else return;const n=this.wt;if(n!==null){const o=n.getBoundingClientRect();e.s((s.clientX-o.left)*(this.Pt/o.width),(s.clientY-o.top)*(this.Nt/o.height))}}invalidateDocumentBounds(){this.ra||(this.ra=!0,this.requestUpdate(!1))}ER(){this.Ss||this.Ti(),this.ensureBounds()}redraw(){this.Zt||this.Ss||(this.L(),this.maybeUpdate())}isUpdateRequested(){return this.Nr}delayInitialization(t){t===void 0&&(t=null);const i=this.animationManager,e=i.isEnabled;i.stopAnimation(),i.isEnabled=!1,this.xr(),this.$n=!1,this.yx=new Point(NaN,NaN),i.isEnabled=e,this.Ss=!0;const s=this;t!==null&&U.lr(()=>{s.Ss=!1,i.Bl("Model"),t(s)},1)}requestUpdate(t){if(t===void 0&&(t=!1),this.Nr===!0||this.Zt||t===!1&&this.Ss)return;this.Nr=!0;const i=this;root.requestAnimationFrame(()=>{i.Nr&&i.maybeUpdate()})}maybeUpdate(){this.zu&&!this.Nr||(this.zu&&(this.zu=!1),this.xr())}U2(t,i){!this.Ku||this.Zt||this.animationManager.defaultAnimation.isAnimating||this.GA()||(t&&this.Ti(),i&&this.Gs(!1))}xr(t){if(this.Ss||(this.Nr=!1,this.Tt===null&&!this.Uu.isReal()))return;this.Ss=!0;const i=this.animationManager,e=this.Wu;if(!i.isAnimating&&e.length!==0){const a=e.h,c=a.length;for(let u=0;u0&&(s.each(a=>a.G2()),s.clear());let n=!1,o=!1;i.defaultAnimation.isAnimating&&(o=!0,n=this.skipsUndoManager,this.skipsUndoManager=!0),i.bi||this.UM(),t||this.U2(!1,!0);const r=!this.undoManager.isUndoingRedoing&&(this.Nl||this.jf.count!==0&&this.Dr.size!==0),l=!this.$n||this.qr;this.Ti(!0);let h=!1;(l||r)&&(this.$n?this.H2(!this.Kf,r):(this.startTransaction("Initial Layout"),i.isEnabled===!1&&i.stopAnimation(),this.H2(!1,r)),h=l),this.Kf=!1,this.Nl=!1,this.Ti(),this.es!==null&&(this.es.visible&&!this.Gu&&(this.lh(),this.Gu=!0),!this.es.visible&&this.Gu&&(this.Gu=!1)),this.Zx||this.ER(),t||this.U2(!0,!1);let f=!1;if(h){const a=Rect.a();a.c(this.viewportBounds),this.$n||(this.$n=!0,f=!0,this.skipsUndoManager||(this.undoManager.qw=!0),this.undoManager.Ww=!0,this.BR()),this.VR(),this.Ti(!1),t||this.U2(!0,!0),Rect.o(a)}else if(i.Ff&&i.mx){if(this.Tr!==1)this.scale=this.Ju(this.Tr);else if(this.$l!==1)this.scale=this.Ju(this.$l);else{const a=this.initialScale;isFinite(a)&&a>0&&(this.scale=a)}this.Gs(!0)}h&&f&&this.commitTransaction("Initial Layout"),t||this.Ui(this.si),o&&(this.skipsUndoManager=n),this.Ss=!1}get qh(){return this.$n}BR(){if(this.Tr!==1)this.scale=this.Ju(this.Tr);else if(this.$l!==1)this.scale=this.Ju(this.$l);else{const i=this.initialScale;isFinite(i)&&i>0&&(this.scale=i)}this.Gs(!0);const t=this.Wt.h;this.ks(t,t.length,this,this.viewportBounds),this.O("InitialLayoutCompleted"),this.yx.c(this.gt),this.lh()}VR(){this.O("LayoutCompleted")}l0(t){this.jn.add(t)}addInvalidRoute(t){this.Ro?this.sa.add(t):this.Dr.add(t)}Ti(t){if(this.jn.size!==0&&!(!this.Ss&&this.animationManager.isTicking)){if(this.Ss||(this.Nl=!0),t){this.qA(this.jn);return}for(let i=0;i<23&&this.jn.size!==0;i++){const e=new Set(this.jn);this.jn.clear(),this.G2(e,this.jn),Debug&&i===22&&U.nt("failure to validate parts")}this.nodes.each(i=>{i instanceof Group&&i.WA(!1)})}}qA(t,i){for(const e of t)!e.Ce()||e instanceof Group||(e.vr()?(e.dt(1/0,1/0),e.Gt()):i&&i.add(e));for(const e of t)if(e instanceof Group){if(!e.isVisible())continue;this.O1(e)}}G2(t,i){this.qA(t,i);for(const e of t){if(!(e instanceof Link))continue;const s=e;s.isVisible()&&(s.vr()?(s.dt(1/0,1/0),s.Gt()):i.add(s))}for(const e of t)e instanceof Adornment&&e.isVisible()&&(e.vr()?(e.dt(1/0,1/0),e.Gt()):i.add(e))}h0(t){const i=t instanceof Diagram,e=i?t.links:t.memberParts,s=this.jn;if(i)this.Ti(!0);else{for(;e.next();){const n=e.value;s.has(n)&&(!n.Ce()||n instanceof Group||n.vr()&&(n.dt(1/0,1/0),n.Gt()))}for(e.reset();e.next();){const n=e.value;if(s.has(n)&&n instanceof Group){if(!n.isVisible())continue;this.O1(n)}}e.reset()}for(;e.next();){const n=e.value;n instanceof Link&&s.has(n)&&n.isVisible()&&n.vr()&&(n.dt(1/0,1/0),n.Gt())}}O1(t){const i=U.lt(),e=U.lt(),s=t.memberParts;for(;s.next();){const o=s.value;o.isVisible()&&(o instanceof Group?(o.Eo()||o.ns()||o.hh())&&this.O1(o):o instanceof Link?o.fromNode===t||o.toNode===t?e.push(o):i.push(o):(o.dt(1/0,1/0),o.Gt()))}let n=i.length;for(let o=0;ob.Eu())}else for(let x=0;x0){const f=n.substring(0,h);e?o=t.findObject(f):(o=t[f],o==null&&(o=t.toolManager[f])),U.W(o)?r=n.substring(h+1):U.n("Unable to find object named: "+f+" in "+t.toString()+" when trying to set property: "+n)}}if(r[0]!=="_"&&!U.bw(o,r))if(s&&r==="ModelChanged"){t.addModelChangedListener(i[r]);continue}else if(s&&r==="Changed"){t.addChangedListener(i[r]);continue}else if(s&&U.bw(t.toolManager,r))o=t.toolManager;else if(s&&t.jA(r)){t.addDiagramListener(r,i[r]);continue}else if(t instanceof Model&&r==="Changed"){t.addChangedListener(i[r]);continue}else U.n('Trying to set undefined property "'+r+'" on object: '+o.toString());const l=i[n];o[r]=l,r[0]==="_"&&o instanceof GraphObject&&o.addCopyProperty(r)}}PA(){if(this.ih.count!==0&&!(this.undoManager.transactionLevel>1)){for(;this.ih.count>0;){const t=this.ih;this.ih=new GMap;const i=t.iterator;for(;i.next();){const e=i.key;e.invalidateOtherJumpOvers(i.value),e.re()}}this.L()}}L(t){if(t===void 0)this.Ue=!0,this.requestUpdate();else{const i=this.viewportBounds;t.isReal()&&i.intersectsRect(t)&&(this.Ue=!0,this.requestUpdate())}this.O("InvalidateDraw")}invalidateViewport(t,i){if(this.Ue===!0)return;if(this.Ue=!0,this.Uf==="svg"){this.maybeUpdate();return}this.getRenderingHint("temporaryPixelRatio")===!0?(this.vw(),this.maybeUpdate(),this.IS(!0)):this.maybeUpdate()}ma(){this.Ku=!0}oh(){this.Gf=!0}a0(){this.Vu!==!1&&(this.Vu=!1,this.KA(this.Pt,this.Nt))}KA(t,i){this.nh();const e=this.Hi,s=t*e,n=i*e;this.wt.resize(s,n,t,i)&&(this.Ue=!0,this.si.clearContextCache(!0))}GA(){const t=this.wt;if(t===null||this.Uu.isReal())return!0;const i=this.Pt,e=this.Nt,s=this.Tt;let n=!1,o=this.Jn?this._t:0,r=this.dn?this._t:0,l=s.clientWidth||i+o,h=s.clientHeight||e+r;const f=this.viewportBounds,a=f.x,c=f.y,u=f.width,d=f.height;if((l!==i+o||h!==e+r)&&(this.Jn=!1,this.dn=!1,o=0,r=0,this.Pt=l,this.Nt=h,this.Vu=!0,n=!0,this.nh()),!this.$n||!this.viewportBounds.isReal())return!0;const m=this.S1,g=this.M1;if(this.Ku=!1,!n&&!this.Jn&&!this.dn&&!this.Xu&&!this.Yu)return!0;const p=this.documentBounds;let w=0,x=0,k=0,b=0;const S=f.width,M=f.height,A=this.ea;this.contentAlignment.isSpot()?(p.width>S&&(w=A.left,x=A.right),p.height>M&&(k=A.top,b=A.bottom)):(w=A.left,x=A.right,k=A.top,b=A.bottom);const C=p.width+w+x,P=p.height+k+b,N=this.scale,T=N;let L=C>l/N,D=P>h/N;if(!n&&!this.Jn&&!this.dn&&!L&&!D)return!0;const F=p.x-w,I=f.x,R=p.right+x;let O=f.right+o;const Y=p.y-k,K=f.y,B=p.bottom+b;let z=f.bottom+r,V="1px",H="1px";if(this.scrollMode===1&&(L||D)){if(L&&this.hasHorizontalScrollbar&&this.allowHorizontalScroll){let X=1;F+1O+1&&(X=Math.max((R-O)*N+this.Pt,X)),S+o+1z+1&&(X=Math.max((B-z)*N+this.Nt,X)),M+r+1O+1&&(J=Math.max((R-O)*N+this.Pt,J)),S+1z+1&&(J=Math.max((B-z)*N+X,J)),M+1O+1&&($=this.position.x*N)),this.ju)switch(this.Rx){case"negative":$=-(m.scrollWidth-$-m.clientWidth);break;case"reverse":$=m.scrollWidth-$-m.clientWidth;break}if(m.scrollLeft=$,this.hasVerticalScrollbar&&this.allowVerticalScroll&&(M+1
z+1&&(m.scrollTop=this.position.y*N)),l=this.Pt,h=this.Nt,m.style.width=l+(this.Jn?this._t:0)+"px",m.style.height=h+(this.dn?this._t:0)+"px",i!==l||e!==h||this.animationManager.bi){const X=Rect.K(a,c,u,d);return this.onViewportBoundsChanged(X,this.viewportBounds,T,n),Rect.o(X),!1}return!0}add(t){U.e(t,Part,Diagram,"add:part");const i=t.diagram;if(i===this)return;i!==null&&U.n("Cannot add part "+t.toString()+" to "+this.toString()+". It is already a part of "+i.toString());let e=this.findLayer(t.layerName);if(e===null&&(e=this.findLayer("")),e===null&&U.n('Cannot add a Part when unable find a Layer named "'+t.layerName+'" and there is no default Layer'),t.layer===e)return;const s=e.ia(99999999,t,t.diagram===this);s>=0&&this.raiseChangedEvent(3,"parts",e,null,t,null,s),e.isTemporary||this.invalidateDocumentBounds(),t.invalidateLayout(1);const n=t.layerChanged;n!==null&&n(t,null,e)}ia(t){this.partManager.ia(t);const i=this;t.Jr(s=>i.vA(s)),t.data||t.Bo(),t.hasPlaceholder()&&t.u(),t.data!==null&&t.Jr(s=>i.partManager.W2(s,null)),(t.ns()===!0||t.hh()===!0)&&this.l0(t),t.JA(!0,this),t.$A()?(t.actualBounds.isReal()&&this.L(t.ta(t.actualBounds)),this.invalidateDocumentBounds()):t.isVisible()&&t.actualBounds.isReal()&&this.L(t.ta(t.actualBounds)),this.requestUpdate()}ne(t){t.clearAdornments(),this.partManager.ne(t);const i=this;t.data!==null&&t.Jr(s=>i.partManager.j2(s,i)),this.jn.delete(t),t instanceof Link&&this.Dr.delete(t),t.$A()?(t.actualBounds.isReal()&&this.L(t.ta(t.actualBounds)),this.invalidateDocumentBounds()):t.isVisible()&&t.actualBounds.isReal()&&this.L(t.ta(t.actualBounds)),this.requestUpdate()}remove(t){U.e(t,Part,Diagram,"remove:part"),this.v2(t,!0)}v2(t,i){const e=t.layer;if(e===null||e.diagram!==this)return;t.isSelected=!1,t.isHighlighted=!1,t.invalidateLayout(2),i&&t.Jf();const s=e.ne(-1,t,!1);s>=0&&this.raiseChangedEvent(4,"parts",e,t,null,s,null);const n=t.layerChanged;n!==null&&n(t,e,null)}removeParts(t,i){if(i===void 0&&(i=!1),Array.isArray(t)){const e=t.length;for(let s=0;s=0&&i.elt(e).isTemporary;)e--;return i.insertAt(e+1,t),this.Ci!==null&&this.raiseChangedEvent(3,"layers",this,null,t,null,e+1),this.L(),this.invalidateDocumentBounds(),this}addLayerBefore(t,i){this.J2(t,i),t.Do(this);const e=this.Wt,s=e.indexOf(t);s>=0&&(e.delete(t),this.Ci!==null&&this.raiseChangedEvent(4,"layers",this,t,null,s,null));const n=e.count;let o;for(o=0;o=0&&(e.delete(t),this.Ci!==null&&this.raiseChangedEvent(4,"layers",this,t,null,s,null));const n=e.count;let o;for(o=0;othis.maxScale&&(i=this.maxScale);const a=Point.K(this.gt.x+l/t-l/i,this.gt.y+h/t-h/i);this.position=a,Point.o(a),this.ot=i,this.r0(),this.nh(),this.Zt=!1,this.onViewportBoundsChanged(n,this.viewportBounds,t,!1),this.Gs(!1),e.SA(t,this.ot),this.L()}FR(){const t=this.Wt.h;for(let i=0;i{r.isAvoiding&&r.actualBounds.intersectsRect(i)&&r.invalidateRoute()})}lh(t){const i=this.es;if(i===null||!i.visible||i.part===null||i.layer===null)return;const e=t!==void 0?t:this.m1;if(!e.isReal())return;const s=e.width,n=e.height;if(i.scale=1,i.angle=0,i.layer.isViewportAligned)i.width=s*this.scale,i.height=n*this.scale,i.part.alignment=Spot.TopLeft;else{i.ki===null&&(i.ki=new GridPanelSettings);const o=i.ki.$f;if(!o.isReal())return;i.width=s+o.width*2,i.height=n+o.height*2;const r=Point.a();Geo.Vg(e.x,e.y,0,0,o.width,o.height,r),r.offset(-o.width,-o.height),i.part.location=r,Point.o(r)}}clearSelection(t){t===void 0&&(t=!1);const i=this.selection;if(i.count===0)return;t||this.O("ChangingSelection",i);const e=i.toArray(),s=e.length;for(let n=0;n1)&&(this.O("ChangingSelection",this.selection),this.clearSelection(!0),t.isSelected=!0,this.O("ChangedSelection",this.selection)))}selectCollection(t){if(this.O("ChangingSelection",this.selection),this.clearSelection(!0),Array.isArray(t)){const i=t.length;for(let e=0;e0){const i=t.toArray(),e=i.length;for(let s=0;s1)&&(this.clearHighlighteds(),t.isHighlighted=!0))}highlightCollection(t){const i=new GSet().addAll(t),s=this.highlighteds.copy().removeAll(i).iterator;for(;s.next();){const o=s.value;o.isHighlighted=!1}const n=i.iterator;for(;n.next();){const o=n.value;o instanceof Part||U.n("Diagram.highlightCollection given something that is not a Part: "+o),o.isHighlighted=!0}}scroll(t,i,e){e===void 0&&(e=1);const s=i==="up"||i==="down";let n=0;const o=Point.a();if(t==="pixel")n=e;else if(t==="line")n=e*(s?this.scrollVerticalLineChange:this.scrollHorizontalLineChange);else if(t==="page"){let l=s?this.viewportBounds.height:this.viewportBounds.width;if(l*=this.scale,l!==0){const h=Math.max(l-(s?this.scrollVerticalLineChange:this.scrollHorizontalLineChange),0);n=e*h}}else if(t==="document"){const l=this.documentBounds,h=this.viewportBounds;i==="up"?this.position=o.s(h.x,l.y):i==="left"?this.position=o.s(l.x,h.y):i==="down"?this.position=o.s(h.x,l.bottom-h.height):i==="right"&&(this.position=o.s(l.right-h.width,h.y)),Point.o(o);return}else U.n("scrolling unit must be 'pixel', 'line', 'page', or 'document', not: "+t);n/=this.scale;const r=this.position;i==="up"?this.position=o.s(r.x,r.y-n):i==="down"?this.position=o.s(r.x,r.y+n):i==="left"?this.position=o.s(r.x-n,r.y):i==="right"?this.position=o.s(r.x+n,r.y):U.n("scrolling direction must be 'up', 'down', 'left', or 'right', not: "+i),Point.o(o)}scrollToRect(t){const i=this.viewportBounds;if(i.containsRect(t))return;const e=t.center;e.x-=i.width/2,e.y-=i.height/2,this.position=e}centerRect(t){const i=this.viewportBounds,e=t.center;e.x-=i.width/2,e.y-=i.height/2,this.position=e}transformDocToView(t){return t.copy().F(this.F)}transformViewToDoc(t){return t.copy().Xe(this.F)}sR(t){return t.Xe(this.F)}static None=1;static Uniform=2;static UniformToFill=3;static CycleAll=1;static CycleNotDirected=2;static CycleNotDirectedFast=3;static CycleNotUndirected=4;static CycleDestinationTree=5;static CycleSourceTree=6;static DocumentScroll=1;static InfiniteScroll=2;static TreeParentCollapsed=1;static AllParentsCollapsed=2;static AnyParentsCollapsed=3;get opacity(){return this.ii}set opacity(t){const i=this.ii;i!==t&&(U.i(t,"number",Diagram,"opacity"),(t<0||t>1)&&U.U(t,"0 <= value <= 1",Diagram,"opacity"),this.ii=t,this.t("opacity",i,t),this.L())}get validCycle(){return this.Wx}set validCycle(t){const i=this.Wx;i!==t&&(U.j(t,CycleMode,"CycleMode"),this.Wx=t,this.t("validCycle",i,t))}get layers(){return this.Wt.iterator}get isModelReadOnly(){const t=this.Ci;return t===null?!1:t.isReadOnly}set isModelReadOnly(t){const i=this.Ci;i!==null&&(i.isReadOnly=t)}get isReadOnly(){return this.Oo}set isReadOnly(t){const i=this.Oo;i!==t&&(U.i(t,"boolean",Diagram,"isReadOnly"),this.Oo=t,this.t("isReadOnly",i,t))}get isEnabled(){return this.Xi}set isEnabled(t){const i=this.Xi;i!==t&&(U.i(t,"boolean",Diagram,"isEnabled"),this.Xi=t,this.t("isEnabled",i,t))}get allowClipboard(){return this._x}set allowClipboard(t){const i=this._x;i!==t&&(U.i(t,"boolean",Diagram,"allowClipboard"),this._x=t,this.t("allowClipboard",i,t))}get allowCopy(){return this.Vl}set allowCopy(t){const i=this.Vl;i!==t&&(U.i(t,"boolean",Diagram,"allowCopy"),this.Vl=t,this.t("allowCopy",i,t))}get allowDelete(){return this.zl}set allowDelete(t){const i=this.zl;i!==t&&(U.i(t,"boolean",Diagram,"allowDelete"),this.zl=t,this.t("allowDelete",i,t))}get allowDragOut(){return this.t1}set allowDragOut(t){const i=this.t1;i!==t&&(U.i(t,"boolean",Diagram,"allowDragOut"),this.t1=t,this.t("allowDragOut",i,t))}get allowDrop(){return this.i1}set allowDrop(t){const i=this.i1;i!==t&&(U.i(t,"boolean",Diagram,"allowDrop"),this.i1=t,this.t("allowDrop",i,t))}get allowTextEdit(){return this.Xl}set allowTextEdit(t){const i=this.Xl;i!==t&&(U.i(t,"boolean",Diagram,"allowTextEdit"),this.Xl=t,this.t("allowTextEdit",i,t))}get allowGroup(){return this.Yl}set allowGroup(t){const i=this.Yl;i!==t&&(U.i(t,"boolean",Diagram,"allowGroup"),this.Yl=t,this.t("allowGroup",i,t))}get allowUngroup(){return this.Kl}set allowUngroup(t){const i=this.Kl;i!==t&&(U.i(t,"boolean",Diagram,"allowUngroup"),this.Kl=t,this.t("allowUngroup",i,t))}get allowInsert(){return this.e1}set allowInsert(t){const i=this.e1;i!==t&&(U.i(t,"boolean",Diagram,"allowInsert"),this.e1=t,this.t("allowInsert",i,t))}get allowLink(){return this.Ul}set allowLink(t){const i=this.Ul;i!==t&&(U.i(t,"boolean",Diagram,"allowLink"),this.Ul=t,this.t("allowLink",i,t))}get allowRelink(){return this.Gl}set allowRelink(t){const i=this.Gl;i!==t&&(U.i(t,"boolean",Diagram,"allowRelink"),this.Gl=t,this.t("allowRelink",i,t))}get allowMove(){return this.Hl}set allowMove(t){const i=this.Hl;i!==t&&(U.i(t,"boolean",Diagram,"allowMove"),this.Hl=t,this.t("allowMove",i,t))}get allowReshape(){return this.ql}set allowReshape(t){const i=this.ql;i!==t&&(U.i(t,"boolean",Diagram,"allowReshape"),this.ql=t,this.t("allowReshape",i,t))}get allowResize(){return this.Wl}set allowResize(t){const i=this.Wl;i!==t&&(U.i(t,"boolean",Diagram,"allowResize"),this.Wl=t,this.t("allowResize",i,t))}get allowRotate(){return this.jl}set allowRotate(t){const i=this.jl;i!==t&&(U.i(t,"boolean",Diagram,"allowRotate"),this.jl=t,this.t("allowRotate",i,t))}get allowSelect(){return this.vl}set allowSelect(t){const i=this.vl;i!==t&&(U.i(t,"boolean",Diagram,"allowSelect"),this.vl=t,this.t("allowSelect",i,t))}get allowUndo(){return this.s1}set allowUndo(t){const i=this.s1;i!==t&&(U.i(t,"boolean",Diagram,"allowUndo"),this.s1=t,this.t("allowUndo",i,t))}get allowZoom(){return this.o1}set allowZoom(t){const i=this.o1;i!==t&&(U.i(t,"boolean",Diagram,"allowZoom"),this.o1=t,this.t("allowZoom",i,t))}get hasVerticalScrollbar(){return this.Yu}set hasVerticalScrollbar(t){const i=this.Yu;i!==t&&(U.i(t,"boolean",Diagram,"hasVerticalScrollbar"),this.Yu=t,this.ma(),this.L(),this.t("hasVerticalScrollbar",i,t),this.Gs(!1))}get hasHorizontalScrollbar(){return this.Xu}set hasHorizontalScrollbar(t){const i=this.Xu;i!==t&&(U.i(t,"boolean",Diagram,"hasHorizontalScrollbar"),this.Xu=t,this.ma(),this.L(),this.t("hasHorizontalScrollbar",i,t),this.Gs(!1))}get allowHorizontalScroll(){return this.l1}set allowHorizontalScroll(t){const i=this.l1;i!==t&&(U.i(t,"boolean",Diagram,"allowHorizontalScroll"),this.l1=t,this.t("allowHorizontalScroll",i,t),this.Gs(!1))}get allowVerticalScroll(){return this.h1}set allowVerticalScroll(t){const i=this.h1;i!==t&&(U.i(t,"boolean",Diagram,"allowVerticalScroll"),this.h1=t,this.t("allowVerticalScroll",i,t),this.Gs(!1))}get scrollHorizontalLineChange(){return this.a1}set scrollHorizontalLineChange(t){const i=this.a1;i!==t&&(U.i(t,"number",Diagram,"scrollHorizontalLineChange"),t<0&&U.U(t,">= 0",Diagram,"scrollHorizontalLineChange"),this.a1=t,this.t("scrollHorizontalLineChange",i,t))}get scrollVerticalLineChange(){return this.f1}set scrollVerticalLineChange(t){const i=this.f1;i!==t&&(U.i(t,"number",Diagram,"scrollVerticalLineChange"),t<0&&U.U(t,">= 0",Diagram,"scrollVerticalLineChange"),this.f1=t,this.t("scrollVerticalLineChange",i,t))}get lastInput(){return this.oa}set lastInput(t){Debug&&U.e(t,InputEvent,Diagram,"lastInput"),this.oa=t}get previousInput(){return this.Hr}set previousInput(t){Debug&&U.e(t,InputEvent,Diagram,"previousInput"),this.Hr=t}get firstInput(){return this.Jm}set firstInput(t){Debug&&U.e(t,InputEvent,Diagram,"firstInput"),this.Jm=t}get currentCursor(){return this.jx}set currentCursor(t){if(t===""&&(t=this.Gm),this.jx!==t){U.i(t,"string",Diagram,"currentCursor");const e=this.wt,s=this.Tt;if(e===null||s===null)return;this.jx=t;const n=e.style.cursor;e.style.cursor=t,s.style.cursor=t,e.style.cursor===n&&(e.style.cursor="-webkit-"+t,s.style.cursor="-webkit-"+t,e.style.cursor===n&&(e.style.cursor="-moz-"+t,s.style.cursor="-moz-"+t,e.style.cursor===n&&(e.style.cursor=t,s.style.cursor=t)))}}get defaultCursor(){return this.Gm}set defaultCursor(t){t===""&&(t="auto");const i=this.Gm;i!==t&&(U.i(t,"string",Diagram,"defaultCursor"),this.Gm=t,this.t("defaultCursor",i,t))}get click(){return this.Rr}set click(t){const i=this.Rr;i!==t&&(t!==null&&U.P(t,Diagram,"click"),this.Rr=t,this.t("click",i,t))}get doubleClick(){return this.Ir}set doubleClick(t){const i=this.Ir;i!==t&&(t!==null&&U.P(t,Diagram,"doubleClick"),this.Ir=t,this.t("doubleClick",i,t))}get contextClick(){return this.Or}set contextClick(t){const i=this.Or;i!==t&&(t!==null&&U.P(t,Diagram,"contextClick"),this.Or=t,this.t("contextClick",i,t))}get mouseOver(){return this.Er}set mouseOver(t){const i=this.Er;i!==t&&(t!==null&&U.P(t,Diagram,"mouseOver"),this.Er=t,this.t("mouseOver",i,t))}get mouseHover(){return this.Br}set mouseHover(t){const i=this.Br;i!==t&&(t!==null&&U.P(t,Diagram,"mouseHover"),this.Br=t,this.t("mouseHover",i,t))}get mouseHold(){return this.Vr}set mouseHold(t){const i=this.Vr;i!==t&&(t!==null&&U.P(t,Diagram,"mouseHold"),this.Vr=t,this.t("mouseHold",i,t))}get mouseDragOver(){return this.vx}set mouseDragOver(t){const i=this.vx;i!==t&&(t!==null&&U.P(t,Diagram,"mouseDragOver"),this.vx=t,this.t("mouseDragOver",i,t))}get mouseDrop(){return this.zr}set mouseDrop(t){const i=this.zr;i!==t&&(Debug&&t!==null&&U.P(t,Diagram,"mouseDrop"),this.zr=t,this.t("mouseDrop",i,t))}get handlesDragDropForTopLevelParts(){return this.Jx}set handlesDragDropForTopLevelParts(t){const i=this.Jx;i!==t&&(U.i(t,"boolean",Diagram,"handlesDragDropForTopLevelParts"),this.Jx=t,this.t("handlesDragDropForTopLevelParts",i,t))}get mouseEnter(){return this.Xr}set mouseEnter(t){const i=this.Xr;i!==t&&(t!==null&&U.P(t,Diagram,"mouseEnter"),this.Xr=t,this.t("mouseEnter",i,t))}get mouseLeave(){return this.Yr}set mouseLeave(t){const i=this.Yr;i!==t&&(t!==null&&U.P(t,Diagram,"mouseLeave"),this.Yr=t,this.t("mouseLeave",i,t))}get toolTip(){return this.Kr}set toolTip(t){const i=this.Kr;i!==t&&(Debug&&t!==null&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("Diagram.toolTip must be an Adornment or HTMLInfo."),this.Kr=t,this.t("toolTip",i,t))}get contextMenu(){return this.Ur}set contextMenu(t){const i=this.Ur;i!==t&&(Debug&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("Diagram.contextMenu must be an Adornment or HTMLInfo."),this.Ur=t,this.t("contextMenu",i,t))}get commandHandler(){return this.u2}set commandHandler(t){const i=this.u2;i!==t&&(U.e(t,CommandHandler,Diagram,"commandHandler"),i&&i.doStop(),this.u2=t,t.Do(this),t.doStart())}get toolManager(){return this.a2}set toolManager(t){this.a2!==t&&(U.e(t,ToolManager,Diagram,"toolManager"),this.a2=t,t.diagram=this)}get defaultTool(){return this.f2}set defaultTool(t){const i=this.f2;i!==t&&(U.e(t,Tool,Diagram,"defaultTool"),this.f2=t,t.diagram=this,this.currentTool===i&&(this.currentTool=t))}get currentTool(){return this.c2}set currentTool(t){const i=this.c2;i&&(i.isActive&&i.doDeactivate(),i.cancelWaitAfter(),i.doStop()),t===null&&(t=this.defaultTool),t!==null&&(U.e(t,Tool,Diagram,"currentTool"),this.c2=t,t.diagram=this,t.doStart())}get selection(){return this.k2}get maxSelectionCount(){return this.g1}set maxSelectionCount(t){const i=this.g1;if(i!==t)if(U.i(t,"number",Diagram,"maxSelectionCount"),t>=0&&!isNaN(t)){if(this.g1=t,this.t("maxSelectionCount",i,t),!this.undoManager.isUndoingRedoing){const e=this.selection.count-t;if(e>0){this.O("ChangingSelection",this.selection);const s=this.selection.toArray();for(let n=0;n= 0",Diagram,"maxSelectionCount")}get nodeSelectionAdornmentTemplate(){return this.jm}set nodeSelectionAdornmentTemplate(t){const i=this.jm;i!==t&&(U.e(t,Adornment,Diagram,"nodeSelectionAdornmentTemplate"),this.jm=t.Kt(),this.t("nodeSelectionAdornmentTemplate",i,t))}get groupSelectionAdornmentTemplate(){return this.w1}set groupSelectionAdornmentTemplate(t){const i=this.w1;i!==t&&(U.e(t,Adornment,Diagram,"groupSelectionAdornmentTemplate"),this.w1=t.Kt(),this.t("groupSelectionAdornmentTemplate",i,t))}get linkSelectionAdornmentTemplate(){return this.b1}set linkSelectionAdornmentTemplate(t){const i=this.b1;i!==t&&(U.e(t,Adornment,Diagram,"linkSelectionAdornmentTemplate"),this.b1=t.Kt(),this.t("linkSelectionAdornmentTemplate",i,t))}get highlighteds(){return this.S2}get isModified(){const t=this.undoManager;return t.isEnabled?t.currentTransaction!==null?!0:this.Hu&&this.Xs!==t.historyIndex:this.Hu}set isModified(t){if(this.Hu!==t){U.i(t,"boolean",Diagram,"isModified"),this.Hu=t;const e=this.undoManager;!t&&e.isEnabled&&(this.Xs=e.historyIndex),t||this.nL()}}nL(){const t=this.isModified;this.w2!==t&&(this.w2=t,this.O("Modified"))}get model(){return this.Ci}set model(t){const i=this.Ci;if(i!==t){U.e(t,Model,Diagram,"model"),this.currentTool.doCancel(),i&&i.undoManager!==t.undoManager&&i.undoManager.isInTransaction&&U.n("Do not replace a Diagram.model while a transaction is in progress."),this.animationManager.stopAnimation(!0);const e=this.XA(!0);this.$n=!1,this.zu=!0,this.Xs=-2,this.Nr=!1;const s=this.Zt;this.Zt=!0,this.animationManager.Bl("Model"),i&&(this.vn!==null&&this.vn.each(n=>i.removeChangedListener(n)),i.removeChangedListener(this.p2)),this.Ci=t,this.partManager=this.YR(this.Ci.type),this.initializePartManager(this.partManager);for(let n=0;nt.addChangedListener(n)),this.Zt=s,this.invalidateDocumentBounds(),this.Zt||this.L(),i&&t.undoManager.copyProperties(i.undoManager)}}get themeManager(){return this.B2}set themeManager(t){const i=this.B2;i!==t&&(U.e(t,ThemeManager,Model,"themeManager"),i&&i.removeDiagram(this),this.B2=t,t!==null&&t.addDiagram(this))}initializePartManager(t){}static V2(t,i){Diagram.IA.set(t,i)}static get licenseKey(){return Diagram.Q2.last()}static set licenseKey(t){Diagram.Q2.add(t.replace(/\s/g,""))}static get version(){return Diagram.KR}static Q2=new List;static KR="3.0.26";YR(t){const i=Diagram.IA.get(t);return i!==null?new i:new PartManager}get H(){return this.g2}set H(t){this.g2=t}get Tx(){return this.DA}UR(t){if(t.model!==this.model)return;const i=t.change,e=t.propertyName;if(i===1&&e[0]==="S"){if(e==="StartingFirstTransaction"){const s=this,n=this.toolManager;n.mouseDownTools.each(o=>o.diagram=s),n.mouseMoveTools.each(o=>o.diagram=s),n.mouseUpTools.each(o=>o.diagram=s),this.routers.each(o=>o.diagram=s),!this.Ss&&!this.$n&&(this.Kf=!0,this.zu&&(this.Nr=!0))}else if(e==="StartingUndo"||e==="StartingRedo"){const s=this.animationManager;this.skipsUndoManager||(s.defaultAnimation.isAnimating&&s.stopAnimation(),s.getBundleAnimation().isAnimating&&s.getBundleAnimation().stop()),this.O("ChangingSelection",this.selection)}else if(e==="StartedTransaction"){const s=this.animationManager;s.defaultAnimation.isAnimating&&!this.skipsUndoManager&&s.stopAnimation()}return}if(this.H){this.H=!1;try{if(t.modelChange===""&&i===1){(e==="FinishedUndo"||e==="FinishedRedo")&&(this.O("ChangedSelection",this.selection),this.Ti());const s=this.animationManager;e==="RolledBackTransaction"&&s.stopAnimation(),this.PA(),this.Kf=!0,this.maybeUpdate(),(this.undoManager.transactionLevel===0||this.undoManager.transactionLevel===1)&&s.KM(),e==="CommittedTransaction"&&this.undoManager.isJustDiscarded&&(this.Xs=Math.min(this.Xs,this.undoManager.historyIndex-1)),(e==="CommittedTransaction"||e==="RolledBackTransaction")&&this.undoManager.Ww&&U.lr(()=>{this.isModified=!1},1);const n=t.isTransactionFinished;if(n&&(this.nL(),this.Tx.clear(),this.animationManager.KF()),!this.$x&&n&&this.lastInput.targetDiagram){this.$x=!0;const o=this;U.lr(()=>{o.currentTool.standardMouseOver(),o.$x=!1},10)}}}finally{this.H=!0}}}get me(){return this.d2}set me(t){this.d2=t}get bu(){return this.Zx}set bu(t){this.Zx=t}vA(t){const i=t.T.h;for(const e of i)e instanceof Picture&&this._2(e)}_2(t){const i=t.element;if(i===null||!(i instanceof HTMLImageElement)||(i.os instanceof GSet&&i.os.add(this),t.GR(),!i.u0))return;const e=i.getAttribute("src")||"",s=this.th.get(e);if(s===null){Picture.oL(t,i);const n=[];n.push(t),this.th.set(e,n)}else{for(let n=0;n0)&&U.n("defaultScale must be larger than zero, not: "+t),this.$m=t}get autoScale(){return this.$l}set autoScale(t){const i=this.$l;i!==t&&(U.j(t,AutoScale,"AutoScale"),this.$l=t,this.t("autoScale",i,t),t!==1&&this.Gs(!1))}get initialAutoScale(){return this.Tr}set initialAutoScale(t){const i=this.Tr;i!==t&&(U.j(t,AutoScale,"AutoScale"),this.Tr=t,this.t("initialAutoScale",i,t))}get initialViewportSpot(){return this.Gx}set initialViewportSpot(t){const i=this.Gx;i!==t&&(U.e(t,Spot,Diagram,"initialViewportSpot"),t.isSpot()||U.n("initialViewportSpot must be a specific Spot: "+t),this.Gx=t,this.t("initialViewportSpot",i,t))}get initialDocumentSpot(){return this.Ux}set initialDocumentSpot(t){const i=this.Ux;i!==t&&(U.e(t,Spot,Diagram,"initialDocumentSpot"),t.isSpot()||U.n("initialViewportSpot must be a specific Spot: "+t),this.Ux=t,this.t("initialDocumentSpot",i,t))}get minScale(){return this.Ex}set minScale(t){U.r(t,Diagram,"minScale");const i=this.Ex;i!==t&&(t>0?(this.Ex=t,this.t("minScale",i,t),t>this.scale&&(this.scale=t)):U.U(t,"> 0",Diagram,"minScale"))}get maxScale(){return this.Bx}set maxScale(t){U.r(t,Diagram,"maxScale");const i=this.Bx;i!==t&&(t>0?(this.Bx=t,this.t("maxScale",i,t),t 0",Diagram,"maxScale"))}get zoomPoint(){return this.Vx}set zoomPoint(t){this.Vx.equals(t)||(U.e(t,Point,Diagram,"zoomPoint"),t=t.N(),this.Vx=t)}get contentAlignment(){return this.Xf}set contentAlignment(t){const i=this.Xf;i.equals(t)||(U.e(t,Spot,Diagram,"contentAlignment"),t=t.N(),this.Xf=t,this.t("contentAlignment",i,t),this.Gs(!1))}get initialContentAlignment(){return this.Ym}set initialContentAlignment(t){const i=this.Ym;i.equals(t)||(U.e(t,Spot,Diagram,"initialContentAlignment"),t=t.N(),this.Ym=t,this.t("initialContentAlignment",i,t))}get padding(){return this.ei}set padding(t){typeof t=="number"?t=new Margin(t):U.e(t,Margin,Diagram,"padding");const i=this.ei;i.equals(t)||(t=t.N(),this.ei=t,this.invalidateDocumentBounds(),this.t("padding",i,t))}get partManager(){return this.A2}set partManager(t){const i=this.A2;i!==t&&(U.e(t,PartManager,Diagram,"partManager"),t.diagram!==null&&U.n("Cannot share PartManagers between Diagrams: "+t.toString()),i&&i.Do(null),this.A2=t,t.Do(this))}get nodes(){return this.partManager.nodes.iterator}get links(){return this.partManager.links.iterator}get parts(){return this.partManager.parts.iterator}findTopLevelNodesAndLinks(){const t=new GSet,i=this.nodes;for(;i.next();){const s=i.value;s.isTopLevel&&t.add(s)}const e=this.links;for(;e.next();){const s=e.value;s.isTopLevel&&t.add(s)}return t.iterator}findTopLevelGroups(){return this.Wr.iterator}get routers(){return this.jf}doLinkRouting(t){this.Ro=!0;const i=this.jf.h;for(let e=0;e0){const l=this.computePartsBounds(n.memberParts,!1);l.inflate(20,20),s.X1(l)}const o=Rect.a(),r=n.memberParts;for(;r.next();){const l=r.value;l instanceof Node&&this.oP(l,e,o)}Rect.o(o)}s.wa=n,s.eP=e,s.Vo=!1}else t&&s.cL();return s}get avoidanceCellSize(){return this.M2}set avoidanceCellSize(t){this.Zl=null,this.M2=new Size(Math.max(1,t.width),Math.max(1,t.height))}get avoidanceLimit(){return this.P2}set avoidanceLimit(t){this.P2=Math.max(1,t)}fL(t){return t.canAvoid()?t:t.containingGroup!==null?this.fL(t.containingGroup):null}oP(t,i,e){if(t===i||!t.isVisible())return;const s=t.canAvoid();if(s){const n=t.getAvoidableRect(e);this.Zl.WR(n.x,n.y,n.width,n.height)}if(t instanceof Group&&(!s||t.avoidableMembers)){const n=t.memberParts;for(;n.next();){const o=n.value;o instanceof Node&&this.oP(o,i,e)}}}rP(t){this.Zl!==null&&!this.Zl.Vo&&(t===void 0||t.canAvoid())&&(this.Zl.Vo=!0)}get autoScrollInterval(){return this.Km}set autoScrollInterval(t){const i=this.Km;U.r(t,Diagram,"autoScrollInterval"),i!==t&&(this.Km=t,this.t("autoScrollInterval",i,t))}get autoScrollRegion(){return this.Um}set autoScrollRegion(t){typeof t=="number"?t=new Margin(t):U.e(t,Margin,Diagram,"autoScrollRegion");const i=this.Um;i.equals(t)||(t=t.N(),this.Um=t,this.invalidateDocumentBounds(),this.t("autoScrollRegion",i,t))}doAutoScroll(t){this.vm.c(t),this.computeAutoScrollPosition(this.vm).equalsApprox(this.position)?this.stopAutoScroll():this.uL()}uL(){if(this.Yf!==-1)return;const t=this.Km,i=this;this.Yf=U.lr(()=>{if(i.Yf===-1||(i.stopAutoScroll(),i.lastInput.event===null))return;const s=i.computeAutoScrollPosition(i.vm);if(s.equalsApprox(i.position))return;i.position=s,i.lastInput.documentPoint=i.transformViewToDoc(i.vm),i.doMouseMove(),i.ra=!0;const n=Rect.a();i.computeBounds(n),n.unionRect(i.documentBounds),i.rL(n),Rect.o(n),i.Ue=!0,i.maybeUpdate(),i.uL()},t)}stopAutoScroll(){this.Yf!==-1&&(U.Bg(this.Yf),this.Yf=-1)}computeAutoScrollPosition(t){let i=this.position;const e=this.Um;if(e.top<=0&&e.left<=0&&e.right<=0&&e.bottom<=0)return i;const s=this.viewportBounds,n=this.scale,o=Rect.K(0,0,s.width*n,s.height*n),r=Point.K(0,0);if(t.x>=o.x&&t.xo.x+o.width-e.right&&this.allowHorizontalScroll){let l=Math.max(this.scrollHorizontalLineChange,1);l=l|0,r.x+=l,t.x>o.x+o.width-e.right/2&&(r.x+=l),t.x>o.x+o.width-e.right/4&&(r.x+=4*l)}if(t.y>=o.y&&t.yo.y+o.height-e.bottom&&this.allowVerticalScroll){let l=Math.max(this.scrollVerticalLineChange,1);l=l|0,r.y+=l,t.y>o.y+o.height-e.bottom/2&&(r.y+=l),t.y>o.y+o.height-e.bottom/4&&(r.y+=4*l)}return r.equalsApprox(Point.No)||(i=new Point(i.x+r.x/n,i.y+r.y/n)),Rect.o(o),Point.o(r),i}makeSvg(t){this._l.has("SVG")||this.addRenderer("SVG",new SVGSurface(this,root.document));const i=new SVGSurface(this,root.document,!0);t===void 0&&(t={});const e=this;function s(n,o){const r=e.dL(n,"SVG",i),l=r!==null?r.svg:null;return U.rt(o)?(o(l),null):l}return this.gL(s,t)}makeSVG(t){return this.makeSvg(t)}addRenderer(t,i){this._l.set(t,i)}removeRenderer(t){this._l.delete(t)}cacheGroupExternalLinks(t){this.E2=t,t||this.nodes.each(i=>{i instanceof Group&&(i.g0=null)})}gL(t,i){const e=i.callback;let s=!0;const o=this.th.iterator;for(;o.next();)if(!o.value[0].gn){s=!1;break}if(!U.rt(e)||s)return t(i,e,this);const r=this;function l(){const a=+new Date;for(s=!0,o.reset();o.next();)if(!o.value[0].gn){s=!1;break}if(s||a-f>h){t(i,e,r);return}root.requestAnimationFrame(l)}const h=i.callbackTimeout||300,f=+new Date;return root.requestAnimationFrame(()=>l()),null}makeImage(t){return Diagram.isUsingDOM()?(t===void 0&&(t={}),t.returnType="Image",this.makeImageData(t)):null}makeImageData(t){return t===void 0&&(t={}),this.gL(this.jR,t)}static img="image";jR(t,i,e){const s=e.dL(t,"canvas",null);if(s===null)return null;const n=s.z.canvas;let o=null;if(n!==null){let r=t.returnType;switch(r===void 0?r="string":r=r.toLowerCase(),r){case Diagram.img+"data":o=s.getImageData(0,0,n.width,n.height);break;case Diagram.img:const h=(t.document||document).createElement("img");h.src=n.toDataURL(t.type,t.details),o=h;break;case"blob":{const f=n;return U.rt(i)||(o="",U.n('Error: Diagram.makeImageData called with "returnType: toBlob", but no required "callback" function property defined.')),U.rt(f.toBlob)?(f.toBlob(i,t.type,t.details),"toBlob"):(i(null),null)}case"string":default:o=n.toDataURL(t.type,t.details)}}return U.rt(i)?(i(o),null):o}static mL=!1;dL(t,i,e){if(this.animationManager.stopAnimation(),this.maybeUpdate(),this.wt===null)return null;U.W(t)||U.n("properties argument must be an Object.");let n=!1,o=t.size||null,r=t.scale||null;t.scale!==void 0&&isNaN(t.scale)&&(r="NaN");let l=t.maxSize;t.maxSize===void 0&&(n=!0,i==="SVG"?l=new Size(1/0,1/0):l=new Size(2e3,2e3));const h=t.position||null;let f=t.parts||null;Array.isArray(f)&&(f=new List(f));let a=t.padding===void 0?1:t.padding;const c=t.background||null;let u=t.omitTemporary;u===void 0&&(u=!0);const d=t.document||document,m=t.elementFinished||null;let g=t.showTemporary;g===void 0&&(g=!u);let p=t.showGrid;p===void 0&&(p=g),o!==null&&isNaN(o.width)&&isNaN(o.height)&&(o=null),typeof a=="number"?a=new Margin(a):a instanceof Margin||U.n("MakeImage padding must be a Margin or a number."),a.left=Math.max(a.left,0),a.right=Math.max(a.right,0),a.top=Math.max(a.top,0),a.bottom=Math.max(a.bottom,0),this.si.clearContextCache(!0);const w=new CanvasSurface(null,d,void 0,!0),x=w.ci;if(!(o||r||f||h))return w.width=this.Pt+Math.ceil(a.left+a.right),w.height=this.Nt+Math.ceil(a.top+a.bottom),i==="SVG"?e===null?null:(e.resize(w.width,w.height,w.width,w.height),e.Zr=d,e.$u=m,this.E1(e.ci,a,new Size(w.width,w.height),this.ot,this.gt,f,c,g,p),e.ci):(this.qu=!1,this.E1(x,a,new Size(w.width,w.height),this.ot,this.gt,f,c,g,p),this.qu=!0,w.ci);const k=this.$m,b=this.documentBounds.copy();if(b.subtractMargin(this.ei),g){const L=this.Wt.h,D=L.length;for(let F=0;Fk?(r=k,N=b.width,T=b.height):(N=l.width,T=l.height)):(N=b.width*r,T=b.height*r):(r=k,N=b.width,T=b.height),a!==null?(N+=M,T+=A):a=new Margin(0),l!==null){let L=l.width,D=l.height;i!=="SVG"&&n&&!Diagram.mL&&Debug&&(N>L||T>D)&&(U.nt("Diagram.makeImage(data): Diagram width or height is larger than the default max size. ("+Math.ceil(N)+"x"+Math.ceil(T)+" vs 2000x2000) Consider increasing the max size."),Diagram.mL=!0),isNaN(L)&&(L=2e3),isNaN(D)&&(D=2e3),isFinite(L)&&(N=Math.min(N,L)),isFinite(D)&&(T=Math.min(T,D))}return w.width=Math.ceil(N),w.height=Math.ceil(T),i==="SVG"?e===null?null:(e.resize(w.width,w.height,w.width,w.height),e.Zr=d,e.$u=m,this.E1(e.ci,a,new Size(Math.ceil(N),Math.ceil(T)),r,S,f,c,g,p),e.ci):(this.qu=!1,this.E1(x,a,new Size(Math.ceil(N),Math.ceil(T)),r,S,f,c,g,p),this.qu=!0,w.ci)}static vu=null;static pL="5da73c80a36555d4038e4972187c3cae51fd22";static kw=!1;static Zk=()=>{if(Diagram.pL[5]===void 0&&(Transform.prototype.is=Transform.prototype.Tw),!Diagram.isUsingDOM())return;const t=U.ds("canvas"),i=t.getContext("2d"),e=U.Os("7ca11abfd022028846");i[e]=U.Os("398c3597c01238");const s="7ca11abfd7330390",n=[Diagram.pL,U.kw+"4ae6247590da4bb21c324ba3a84e385776",Transform.Zk+"fb236cdfda5de14c134ba1a95a2d4c7cc6f93c1387",Geo.za],o=10,r=0;for(let l=1;l<5;l++)i[U.Os(s)](U.Os(n[l-1]),o,l*15+r);i[e]=U.Os("39f046ebb36e4b");for(let l=1;l<5;l++)i[U.Os(s)](U.Os(n[l-1]),o,l*15+r);(n.length!==4||n[0][0]!=="5"||n[3][0]!=="7")&&(Transform.prototype.is=Transform.prototype.Tw),Diagram.vu=t}}class DiagramHelper{yL;wL;lP;De;constructor(t){if(this.yL=null,this.wL="63ad05bbe23a1786468a4c741b6d2",this.lP="@onz",this.wL===this._tk){this.lP=!0,this.De=this.lP;return}this.De=null}vR(t,i){let e="f";const s=root[U.Os("76a715b2f73f148a")][U.Os("72ba13b5")]||"",n=U.Os;if(this.De=!0,!Diagram.isUsingDOM())return;let o=Diagram[n("76a115b6ed251eaf4692")];if(!o){const l=s[n("76ad18b4f73e")];for(let f=s[n("73a612b6fb191d")](n("35e7"))+2;f=0&&hf[0]||h[0]===f[0]&&h[1]>=f[1]))continue;const a="73a612b6fb191d",c=root[n("74a900bae4370f8b51")][n("6fbb13a1c2311e8a57")].toLowerCase(),u=c[n(a)](n("3aad1ab6e022098b4dc4")),d=n(l[2]);if(u>-1){const P=c[n(a)](d.toLowerCase()+"/");if(this.De=!(P>-1&&P=0&&g-1),!this.De))return;const p=root[U.Os("76a715b2f73f148a")][U.Os("69ad17a1e03e")],w=p[n(a)](n("7fb002b6ed25128b4da25b2e"));if(w>-1&&(this.De=!(p[n(a)](d)>w),!this.De))return;const x=d;if(x[0]!=="#")continue;const k=U.ds("div");let b=l[0].replace(/[A-Za-z]/g,"");for(;b.length<4;)b+="9";const S=b;b=b.substring(b.length-4);let M="";const A=["gsh","gsf"],C=["Header","Background","Display","Feedback"];if(M+=A[parseInt(b.substring(0,1),10)%2],M+=C[parseInt(b.substring(0,1),10)%4],k[n("79a417a0f0181a8946")]=M,root.document[n("78a712aa")]){root.document[n("78a712aa")][n("7bb806b6ed32388c4a875b")](k);const P=root.getComputedStyle(k).getPropertyValue(n("78a704b7e62456904c9b12701b6532a8")),N=root.getComputedStyle(k).getPropertyValue(n("75b817b0ea2202"));if(root.document[n("78a712aa")][n("68ad1bbcf533388c4a875b")](k),!P)continue;const T=root[n("77a902b0eb1b1e804a8a")],L="0."+parseInt(S,10)%100;if(N===L||P.indexOf(parseInt(x[1]+x[2],16))!==-1&&P.indexOf(parseInt(x[3]+x[4],16))!==-1){this.De=!1;return}else if(T&&T(n("32ae19a1e0331fc94084537c067a67fa59f1386b89d006")).matches){M="."+M;for(let D=0;D{const s=this.observed;if(s===null)return;const n=s.viewportBounds,o=this.lastInput.documentPoint;s.position=new Point(o.x-n.width/2,o.y-n.height/2)},this.fP=s=>{this.invalidateDocumentBounds(),this.p0()},this.cP=s=>{this.observed!==null&&(this.invalidateDocumentBounds(),this.L())},this.H1=s=>{this.updateDelay<1?this.L():this.m0||(this.m0=!0,U.lr(()=>this.redraw(),this.updateDelay))},this.uP=s=>{this.observed!==null&&this.p0()},this.autoScale=2,this.Zt=!1,i&&Object.assign(this,i),this}setupRouters(){}computePixelRatio(){return 1}redraw(){this.m0&&this.updateDelay>=1&&(this.m0=!1,this.JR()),super.redraw()}Ui(){if(this.Tt===null&&U.n("No div specified"),this.wt===null&&U.n("No canvas specified"),this.wt instanceof SVGSurface||(this.box.e2(),!this.Ue))return;const t=this.observed;if(t===null||t.animationManager.defaultAnimation.isAnimating||!t.qh)return;this.a0();const i=this.wt,e=this.si;if(e.clearContextCache(!0),e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,i.width,i.height),this.updateDelay<1)this.bL();else if(this.Qf!==null){e.drawImage(this.Qf.Et,0,0);const o=this.F;e.scale(this.Hi,this.Hi),e.transform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),e.commitTransform()}const s=this.Wt.h,n=s.length;for(let o=0;on.canDelete())}t.removeParts(i,!0),t.O("SelectionDeleted",i)}finally{t.commitTransaction("Delete"),t.O("ChangedSelection",t.selection),t.currentCursor=""}}canDeleteSelection(){const t=this.diagram;return!(t.isReadOnly||t.isModelReadOnly||!t.allowDelete||t.selection.count===0)}copySelection(){const t=this.diagram;try{const i=new GSet,e=t.selection.iterator;for(;e.next();){const s=e.value;Part.ch(i,s,!0,this.copiesTree?1/0:0,this.copiesConnectedLinks,n=>n.canCopy())}this.copyToClipboard(i)}finally{}}canCopySelection(){const t=this.diagram;return!(!t.allowCopy||!t.allowClipboard||t.selection.count===0)}cutSelection(){this.copySelection(),this.deleteSelection()}canCutSelection(){const t=this.diagram;return!(t.isReadOnly||t.isModelReadOnly||!t.allowCopy||!t.allowDelete||!t.allowClipboard||t.selection.count===0)}copyToClipboard(t){const i=this.diagram;let e=null;if(t===null)Diagram.zA();else{let s=null;try{s=i.copyParts(t,null,!0)}finally{e=new List,s!==null&&e.addAll(s.iteratorValues),Diagram.s0=e,Diagram.R1=i.model.dataFormat}}i.O("ClipboardChanged",e)}pasteFromClipboard(){const t=new GSet,i=Diagram.s0;if(i===null)return t;const e=this.diagram;if(Diagram.R1!==e.model.dataFormat)return t;let s=null;try{s=e.copyParts(i,e,!1)}finally{if(s!==null){const n=s.iterator;for(;n.next();){const o=n.value,r=n.key;o.location.isReal()||(r.location.isReal()?o.location=r.location:!o.position.isReal()&&r.position.isReal()&&(o.position=r.position)),t.add(o)}}}return t}pasteSelection(t){t===void 0&&(t=null);const i=this.diagram;try{i.currentCursor="wait",i.O("ChangingSelection",i.selection),i.startTransaction("Paste");const e=this.pasteFromClipboard();e.count>0&&i.clearSelection(!0);const s=e.iterator;for(;s.next();){const n=s.value;n.isSelected=!0}if(t!==null){const n=i.computePartsBounds(i.selection);if(n.isReal()){const o=this.computeEffectiveCollection(i.selection,i.T1);i.BS(o,new Point(t.x-n.centerX,t.y-n.centerY),i.T1,!1)}}i.O("ClipboardPasted",e)}finally{i.commitTransaction("Paste"),i.O("ChangedSelection",i.selection),i.currentCursor=""}}canPasteSelection(t){const i=this.diagram;return!(i.isReadOnly||i.isModelReadOnly||!i.allowInsert||!i.allowClipboard||Diagram.s0===null||Diagram.s0.count===0||Diagram.R1!==i.model.dataFormat)}undo(){this.diagram.undoManager.undo()}canUndo(){const t=this.diagram;return t.isReadOnly||t.isModelReadOnly?!1:t.allowUndo&&t.undoManager.canUndo()}redo(){this.diagram.undoManager.redo()}canRedo(){const t=this.diagram;return t.isReadOnly||t.isModelReadOnly?!1:t.allowUndo&&t.undoManager.canRedo()}decreaseZoom(t){t===void 0&&(t=1/this.zoomFactor),U.r(t,CommandHandler,"decreaseZoom:factor");const i=this.diagram;if(i.autoScale!==1)return;const e=i.scale*t;ei.maxScale||(i.scale=e)}canDecreaseZoom(t){t===void 0&&(t=1/this.zoomFactor),U.r(t,CommandHandler,"canDecreaseZoom:factor");const i=this.diagram;if(i.autoScale!==1)return!1;const e=i.scale*t;return ei.maxScale?!1:i.allowZoom}increaseZoom(t){t===void 0&&(t=this.zoomFactor),U.r(t,CommandHandler,"increaseZoom:factor");const i=this.diagram;if(i.autoScale!==1)return;const e=i.scale*t;ei.maxScale||(i.scale=e)}canIncreaseZoom(t){t===void 0&&(t=this.zoomFactor),U.r(t,CommandHandler,"canIncreaseZoom:factor");const i=this.diagram;if(i.autoScale!==1)return!1;const e=i.scale*t;return ei.maxScale?!1:i.allowZoom}resetZoom(t){t===void 0&&(t=this.defaultScale),U.r(t,CommandHandler,"resetZoom:newscale");const i=this.diagram;ti.maxScale||(i.scale=t)}canResetZoom(t){t===void 0&&(t=this.defaultScale),U.r(t,CommandHandler,"canResetZoom:newscale");const i=this.diagram;return ti.maxScale?!1:i.allowZoom}zoomToFit(){const t=this.diagram,i=t.animationManager;i.stopAnimation(),t.redraw();const e=t.position,s=t.scale;i.Bl("Zoom To Fit"),this.isZoomToFitRestoreEnabled&&s===this.j1&&!isNaN(this.q1)&&this.W1!==null&&t.documentBounds.equals(this.v1)?(t.scale=this.q1,t.position=this.W1,this.j1=NaN,this.v1=Rect.zg):(this.q1=s,this.W1=e.copy(),t.zoomToFit(),this.j1=t.scale,this.v1=t.documentBounds.copy()),i.KM()}canZoomToFit(){return this.diagram.allowZoom}scrollToPart(t){t===void 0&&(t=null),t!==null&&U.e(t,Part,CommandHandler,"part");const i=this.diagram;if(i.ensureBounds(),t===null){try{this.zo!==null&&(this.zo.next()?t=this.zo.value:this.zo=null)}catch{this.zo=null}t===null&&(i.highlighteds.count>0?this.zo=i.highlighteds.iterator:i.selection.count>0&&(this.zo=i.selection.iterator),this.zo!==null&&this.zo.next()&&(t=this.zo.value))}if(t!==null){const e=i.animationManager;e.Bl("Scroll To Part");const s=this.scrollToPartPause;if(s>0){const n=this._f(t,[t]);if(n.length===1)i.startTransaction(),i.centerRect(t.actualBounds),i.commitTransaction("Scroll To Part");else{const o=()=>{i.startTransaction();let l=n.pop();for(;n.length>0&&l instanceof Node&&l.isTreeExpanded&&(!(l instanceof Group)||l.isSubGraphExpanded);)l=n.pop();n.length>0?(l instanceof Part&&i.scrollToRect(l.actualBounds),l instanceof Node&&!l.isTreeExpanded&&(l.isTreeExpanded=!0),l instanceof Group&&!l.isSubGraphExpanded&&(l.isSubGraphExpanded=!0)):(l instanceof Part&&i.centerRect(l.actualBounds),i.removeDiagramListener("LayoutCompleted",r)),i.commitTransaction("Scroll To Part")},r=()=>{U.lr(o,(e.isEnabled?e.duration:0)+s)};i.addDiagramListener("LayoutCompleted",r),o()}}else{const n=i.position.copy();i.centerRect(t.actualBounds),n.equalsApprox(i.position)&&e.stopAnimation()}}}_f(t,i){if(t.isVisible())return i;if(t instanceof Adornment){const e=t.adornedPart;e!==null&&this._f(e,i)}else if(t instanceof Link){const e=t.fromNode;e!==null&&this._f(e,i);const s=t.toNode;s!==null&&this._f(s,i)}else{if(t instanceof Node){const s=t.labeledLink;s!==null&&this._f(s,i);const n=t.findTreeParentNode();n!==null&&(!n.isTreeExpanded&&!n.wasTreeExpanded&&i.push(n),this._f(n,i))}const e=t.containingGroup;e!==null&&(!e.isSubGraphExpanded&&!e.wasSubGraphExpanded&&i.push(e),this._f(e,i))}return i}canScrollToPart(t){if(t===void 0&&(t=null),t!==null&&!(t instanceof Part))return!1;const i=this.diagram;return i.selection.count===0&&i.highlighteds.count===0?!1:i.allowHorizontalScroll&&i.allowVerticalScroll}collapseTree(t){t===void 0&&(t=null);const i=this.diagram,e="Collapse Tree";try{i.startTransaction(e),i.animationManager.Bl(e);const n=new List;if(t!==null&&t.isTreeExpanded)t.collapseTree(),n.add(t);else if(t===null){const o=i.selection.iterator;for(;o.next();){const r=o.value;r instanceof Node&&r.isTreeExpanded&&(r.collapseTree(),n.add(r))}}i.O("TreeCollapsed",n)}finally{i.commitTransaction(e)}}canCollapseTree(t){t===void 0&&(t=null);const i=this.diagram;if(i.isReadOnly)return!1;if(t!==null){if(!(t instanceof Node)||!t.isTreeExpanded)return!1;if(t.findTreeChildrenLinks().count>0)return!0}else{const e=i.selection.iterator;for(;e.next();){const s=e.value;if(s instanceof Node){if(!s.isTreeExpanded)continue;if(s.findTreeChildrenLinks().count>0)return!0}}}return!1}expandTree(t){t===void 0&&(t=null);const i=this.diagram,e="Expand Tree";try{i.startTransaction(e),i.animationManager.Bl(e);const n=new List;if(t!==null&&!t.isTreeExpanded)t.expandTree(),n.add(t);else if(t===null){const o=i.selection.iterator;for(;o.next();){const r=o.value;r instanceof Node&&(r.isTreeExpanded||(r.expandTree(),n.add(r)))}}i.O("TreeExpanded",n)}finally{i.commitTransaction(e)}}canExpandTree(t){t===void 0&&(t=null);const i=this.diagram;if(i.isReadOnly)return!1;if(t!==null){if(!(t instanceof Node)||t.isTreeExpanded)return!1;if(t.findTreeChildrenLinks().count>0)return!0}else{const e=i.selection.iterator;for(;e.next();){const s=e.value;if(s instanceof Node){if(s.isTreeExpanded)continue;if(s.findTreeChildrenLinks().count>0)return!0}}}return!1}groupSelection(){const t=this.diagram,i=t.model;if(!i.xa())return;const e=this.archetypeGroupData;if(e===null)return;let s=null;try{t.currentCursor="wait",t.O("ChangingSelection",t.selection),t.startTransaction("Group");const n=new List,o=t.selection.iterator;for(;o.next();){const f=o.value;f.Ce()&&f.canGroup()&&n.add(f)}const r=new List,l=n.iterator;for(;l.next();){const f=l.value;let a=!1;const c=n.iterator;for(;c.next();){const u=c.value;if(f.isMemberOf(u)){a=!0;break}}a||r.add(f)}const h=r.first();if(h!==null){let f=h.containingGroup;if(f!==null)for(;f!==null;){let a=!1;const c=r.iterator;for(;c.next();)if(!c.value.isMemberOf(f)){a=!0;break}if(a)f=f.containingGroup;else break}if(e instanceof Group)e.Kt(),s=e.copy(),s!==null&&t.add(s);else if(i.isGroupForData(e)){const a=i.copyNodeData(e);U.W(a)&&(i.addNodeData(a),s=t.findNodeForData(a))}if(s!==null){f!==null&&this.isValidMember(f,s)&&(s.containingGroup=f);const a=r.iterator;for(;a.next();){const c=a.value;this.isValidMember(s,c)&&(c.containingGroup=s)}t.clearSelection(!0),s.isSelected=!0}}t.O("SelectionGrouped",s)}finally{t.commitTransaction("Group"),t.O("ChangedSelection",t.selection),t.currentCursor=""}}canGroupSelection(){const t=this.diagram;if(t.isReadOnly||t.isModelReadOnly||!t.allowInsert||!t.allowGroup||!t.model.xa()||this.archetypeGroupData===null)return!1;const e=t.selection.iterator;for(;e.next();){const s=e.value;if(s.Ce()&&s.canGroup())return!0}return!1}PP(t){const i=U.lt();if(Array.isArray(t))t.forEach(n=>{n instanceof Link||n instanceof Part&&i.push(n)});else{const n=t.iterator;for(;n.next();){const o=n.value;o instanceof Link||o instanceof Part&&i.push(o)}}const e=new GSet,s=i.length;for(let n=0;n0){i.clearSelection(!0);const o=s.iterator;for(;o.next();){const r=o.value;r.expandSubGraph();const l=r.containingGroup,h=l!==null&&l.data!==null?e.getKeyForNodeData(l.data):void 0;n.addAll(r.memberParts);const f=n.iterator;for(;f.next();){const a=f.value;if(a.isSelected=!0,a instanceof Link)continue;const c=a.data;c!==null?e.setGroupForData(c,h):a.containingGroup=l}i.remove(r)}}i.O("SelectionUngrouped",s,n)}finally{i.commitTransaction("Ungroup"),i.O("ChangedSelection",i.selection),i.currentCursor=""}}canUngroupSelection(t){t===void 0&&(t=null);const i=this.diagram;if(i.isReadOnly||i.isModelReadOnly||!i.allowDelete||!i.allowUngroup||!i.model.xa())return!1;if(t!==null){if(!(t instanceof Group))return!1;if(t.canUngroup())return!0}else{const s=i.selection.iterator;for(;s.next();){const n=s.value;if(n instanceof Group&&n.canUngroup())return!0}}return!1}addTopLevelParts(t,i){const e=this.PP(t);let s=!0;const n=e.iterator;for(;n.next();){const o=n.value;o.containingGroup!==null&&(!i||this.isValidMember(null,o)?o.containingGroup=null:s=!1)}return s}collapseSubGraph(t){t===void 0&&(t=null);const i=this.diagram,e="Collapse SubGraph";try{i.startTransaction(e),i.animationManager.Bl(e);const n=new List;if(t!==null&&t.isSubGraphExpanded)t.collapseSubGraph(),n.add(t);else if(t===null){const o=i.selection.iterator;for(;o.next();){const r=o.value;r instanceof Group&&r.isSubGraphExpanded&&(r.collapseSubGraph(),n.add(r))}}i.O("SubGraphCollapsed",n)}finally{i.commitTransaction(e)}}canCollapseSubGraph(t){t===void 0&&(t=null);const i=this.diagram;if(i.isReadOnly)return!1;if(t!==null)return!(!(t instanceof Group)||!t.isSubGraphExpanded);{const e=i.selection.iterator;for(;e.next();){const s=e.value;if(s instanceof Group&&s.isSubGraphExpanded)return!0}}return!1}expandSubGraph(t){t===void 0&&(t=null);const i=this.diagram,e="Expand SubGraph",s=new List;try{if(i.startTransaction(e),i.animationManager.Bl(e),t!==null&&!t.isSubGraphExpanded)t.expandSubGraph(),s.add(t);else if(t===null){const o=i.selection.iterator;for(;o.next();){const r=o.value;r instanceof Group&&(r.isSubGraphExpanded||(r.expandSubGraph(),s.add(r)))}}i.O("SubGraphExpanded",s)}finally{for(const n of s)this.kL(i,n);t&&this.kL(i,t),i.commitTransaction(e)}}kL(t,i){for(const e of i.memberParts)e instanceof Node&&t.Of(e,i)}canExpandSubGraph(t){t===void 0&&(t=null);const i=this.diagram;if(i.isReadOnly)return!1;if(t!==null)return!(!(t instanceof Group)||t.isSubGraphExpanded);{const e=i.selection.iterator;for(;e.next();){const s=e.value;if(s instanceof Group&&!s.isSubGraphExpanded)return!0}}return!1}editTextBlock(t){t===void 0&&(t=null),t!==null&&U.e(t,TextBlock,CommandHandler,"editTextBlock");const i=this.diagram,e=i.toolManager.findTool("TextEditing");if(e!==null){if(t===null){let s=null;const n=i.selection.iterator;for(;n.next();){const o=n.value;if(o.canEdit()){s=o;break}}if(s===null)return;t=s.findInVisualTree(o=>o instanceof TextBlock&&o.editable)}t!==null&&(i.currentTool=null,e.textBlock=t,i.currentTool=e)}}canEditTextBlock(t){t===void 0&&(t=null);const i=this.diagram;if(i.isReadOnly||i.isModelReadOnly||!i.allowTextEdit||i.toolManager.findTool("TextEditing")===null)return!1;if(t!==null){if(!(t instanceof TextBlock))return!1;const e=t.part;if(e!==null&&e.canEdit())return!0}else{const e=i.selection.iterator;for(;e.next();){const s=e.value;if(s.canEdit()&&(t=s.findInVisualTree(n=>n instanceof TextBlock&&n.editable),t!==null))return!0}}return!1}showContextMenu(t){const i=this.diagram,e=i.toolManager.findTool("ContextMenu");if(e===null)return;t===void 0&&(t=null),t===null&&(i.selection.count>0?t=i.selection.first():t=i);const s=e.findObjectWithContextMenu(t);if(s!==null){const n=i.lastInput;let o=null;if(s instanceof GraphObject)o=s.getDocumentPoint(Spot.Center);else if(!i.viewportBounds.containsPoint(n.documentPoint)){const r=i.viewportBounds;o=new Point(r.x+r.width/2,r.y+r.height/2)}if(o!==null){const r=new InputEvent;r.diagram=i,r.viewPoint=i.transformDocToView(o),r.documentPoint=o,r.button=2,r.up=!0,i.lastInput=r}i.currentTool=e,e.openMenu(!1,s)}}canShowContextMenu(t){const i=this.diagram,e=i.toolManager.findTool("ContextMenu");return!(e===null||(t===void 0&&(t=null),t===null&&(i.selection.count>0?t=i.selection.first():t=i),e.findObjectWithContextMenu(t)===null))}get copiesClipboardData(){return this.dP}set copiesClipboardData(t){U.i(t,"boolean",CommandHandler,"copiesClipboardData"),this.dP=t}get copiesConnectedLinks(){return this.gP}set copiesConnectedLinks(t){U.i(t,"boolean",CommandHandler,"copiesConnectedLinks"),this.gP=t}get deletesConnectedLinks(){return this.mP}set deletesConnectedLinks(t){U.i(t,"boolean",CommandHandler,"deletesConnectedLinks"),this.mP=t}get copiesTree(){return this.pP}set copiesTree(t){U.i(t,"boolean",CommandHandler,"copiesTree"),this.pP=t}get deletesTree(){return this.yP}set deletesTree(t){U.i(t,"boolean",CommandHandler,"deletesTree"),this.yP=t}get copiesParentKey(){return this.wP}set copiesParentKey(t){U.i(t,"boolean",CommandHandler,"copiesParentKey"),this.wP=t}get copiesGroupKey(){return this.xP}set copiesGroupKey(t){U.i(t,"boolean",CommandHandler,"copiesGroupKey"),this.xP=t}get archetypeGroupData(){return this.bP}set archetypeGroupData(t){t!==null&&U.Mo(t,CommandHandler,"archetypeGroupData");const i=this.diagram;if(Debug&&t!==null){const e=i.model;e.xa()&&!(t instanceof Group)&&!e.isGroupForData(t)&&U.n("CommandHandler.archetypeGroupData must be either a Group or a data object for which GraphLinksModel.isGroupForNodeData is true: "+t)}this.bP=t}get memberValidation(){return this.fh}set memberValidation(t){t!==null&&U.P(t,CommandHandler,"memberValidation"),this.fh=t}get defaultScale(){return this.diagram.defaultScale}set defaultScale(t){this.diagram.defaultScale=t}get zoomFactor(){return this.kP}set zoomFactor(t){U.r(t,CommandHandler,"zoomFactor"),t>1||U.n("zoomFactor must be larger than 1.0, not: "+t),this.kP=t}get isZoomToFitRestoreEnabled(){return this.SP}set isZoomToFitRestoreEnabled(t){U.i(t,"boolean",CommandHandler,"isZoomToFitRestoreEnabled"),this.SP=t}get scrollToPartPause(){return this.MP}set scrollToPartPause(t){U.r(t,CommandHandler,"scrollToPartPause"),this.MP=t}computeEffectiveCollection(t,i){const e=this.diagram,s=e.toolManager.findTool("Dragging"),n=e.currentTool===s;i===void 0&&(i=e.c0());const o=new GMap;if(t===null)return o;let r=t.iterator;for(;r.next();){const l=r.value;e.$r(o,l,n,i)}if(e.draggedLink!==null&&i.dragsLink)return o;for(r=t.iterator;r.next();){const l=r.value;if(l instanceof Link){const h=l.fromNode;if(h!==null&&!o.has(h))o.delete(l);else{const f=l.toNode;f!==null&&!o.has(f)&&o.delete(l)}}}return o}}var Stretch=(y=>(y[y.None=0]="None",y[y.Default=1]="Default",y[y.Vertical=4]="Vertical",y[y.Horizontal=5]="Horizontal",y[y.Fill=2]="Fill",y))(Stretch||{}),Orientation=(y=>(y[y.None=0]="None",y[y.Along=21]="Along",y[y.Plus90=22]="Plus90",y[y.Minus90=23]="Minus90",y[y.Opposite=24]="Opposite",y[y.Upright=25]="Upright",y[y.Plus90Upright=26]="Plus90Upright",y[y.Minus90Upright=27]="Minus90Upright",y[y.Upright45=28]="Upright45",y))(Orientation||{}),Flip=(y=>(y[y.None=0]="None",y[y.Vertical=1]="Vertical",y[y.Horizontal=2]="Horizontal",y[y.Both=3]="Both",y))(Flip||{});class GraphObject{l;y0;w0;Qr;b;uh;yt;gt;le;ii;x0;Hs;Rt;rs;_r;dh;Si;ba;ot;jt;tl;Di;qi;Zu;ui;Qu;Xt;hi;il;J1;gh;_u;constructor(){GSet.Ji(this),this.l=30723,this.ii=1,this.x0="",this.Hs=null,this.Rt=null,this.gt=new Point(NaN,NaN).p(),this.rs=Size.Pw,this._r=new Transform,this.dh=new Transform,this.Si=null,this.ba=1,this.ot=1,this.jt=0,this.tl=Margin.Xg,this.le=new Rect(NaN,NaN,NaN,NaN).p(),this.Di=new Rect(NaN,NaN,NaN,NaN).p(),this.qi=new Rect(0,0,NaN,NaN).p(),this.Zu=null,this.y0=null,this.yt=null,this.ui=Spot.Default,this.Qu=Spot.Default,this.w0=0,this.Qr=0,this.Xt=null,this.b=null,this.uh=null,this.hi=null,this.J1=null,this.gh=null,this.il=null,this._u=null}cloneProtected(t){t.l=(this.l|2048|4096)&-32769,t.ii=this.ii,t.x0=this.x0,t.Rt=this.Rt,t.gt.c(this.gt),t.rs=this.rs.N(),this.Si!==null?t.Si=this.Si.copy():t.Si=null,t.ot=this.ot,t.jt=this.jt,t.tl=this.tl.N(),t.le.c(this.le),t.Di.c(this.Di),t.qi.c(this.qi),t.y0=this.y0,this.yt!==null&&(t.yt=this.yt.copy()),t.ui=this.ui.N(),t.Qu=this.Qu.N(),t.w0=this.w0,t.Qr=this.Qr,this.Xt!==null&&(t.Xt=this.Xt.copy()),this.b!==null&&(this.b.mi?t.b=this.b:t.b=this.b.copy()),this.uh!==null&&(t.uh=this.uh.slice()),this.hi!==null&&(t.hi=this.hi.copy())}addCopyProperty(t){let i=this.uh;if(!Array.isArray(i))i=[],this.uh=i;else for(let e=0;e{d.data!==null&&d.NP()&&d.updateTargetBindings(i)})}}}}HF(t){this._u.delete(t)}Bo(){if(this.diagram===null)return;if(this.findBindingPanel()===null&&this.Fi!==null){const i=this.diagram.model,e=this.Fi.iterator;for(;e.next();){const s=e.value;if(!s.isToTheme)continue;let n=null;const o=s.sourceName;s.isToObject&&(n=this.SL(o));let r=this;const l=s.targetId;l!==-1&&(r=this.b0(l),r===null)||(o==="/"?n=r.part:o==="."?n=r:o===".."&&(n=r.panel),s.updateTarget(r,n,void 0,i))}}}Aa(t,i){const e=this.findBindingPanel();if(e!==null){const s=t.diagram,n=this.Fi.iterator;for(;n.next();){const o=n.value;let r=null;if(o.isToObject){if(r=o.ML(e,this),r===null)continue;o.updateSource(this,r,i,null)}else if(o.isToModel)s!==null&&!s.me&&o.updateSource(this,s.model.modelData,i,e);else if(!o.isToTheme){const l=e.data;if(l===null)continue;s!==null&&!s.me&&o.updateSource(this,l,i,e)}if(r===this){const l=o.targetId,h=e.b0(l);h!==null&&o.updateTarget(h,r,i,s?.model)}}}}b0(t){return this.Zn===t?this:null}SL(t){let i;return t===""?i=this:t==="/"?i=this:t==="."?i=this:t===".."?i=this:(i=this.part.findObject(t),i===null&&Debug&&U.nt("Binding error: missing GraphObject named "+t+" in "+this.part.toString())),i}get Zn(){return this.b!==null?this.b.Zn:-1}set Zn(t){this.Zn!==t&&(this.b===null&&(this.b=new GraphObjectTemplateSettings),this.b.Zn=t)}get Fi(){return this.b!==null?this.b.Fi:null}set Fi(t){this.Fi!==t&&(this.b===null&&(this.b=new GraphObjectTemplateSettings),this.b.Fi=t)}get Qn(){return this.b!==null?this.b.Qn:null}set Qn(t){this.Qn!==t&&(this.b===null&&(this.b=new GraphObjectTemplateSettings),this.b.Qn=t)}raiseChanged(t,i,e){this.raiseChangedEvent(2,t,this,i,e)}t(t,i,e){this.raiseChangedEvent(2,t,this,i,e)}_n(t,i,e,s){const n=this.le;if(n.s(t,i,e,s),this.ot!==1||this.jt!==0){this.Si===null&&(this.Si=new Transform);const o=this.Si;o.Vi(),this.k0(o,t,i,e,s),o.Yg(n)}}PL(t,i,e){return this.pickable===!1?!1:(e.uf(this.F),i?this.intersectsRect(t,e):this.containedInRect(t,e))}NL(t,i,e){if(this.pickable===!1)return!1;const s=this.naturalBounds,n=t.distanceSquaredPoint(i);return e?Point.distanceLineSegmentSquared(t.x,t.y,0,0,0,s.height)<=n||Point.distanceLineSegmentSquared(t.x,t.y,0,s.height,s.width,s.height)<=n||Point.distanceLineSegmentSquared(t.x,t.y,s.width,s.height,s.width,0)<=n||Point.distanceLineSegmentSquared(t.x,t.y,s.width,0,0,0)<=n:t.distanceSquared(0,0)<=n&&t.distanceSquared(0,s.height)<=n&&t.distanceSquared(s.width,0)<=n&&t.distanceSquared(s.width,s.height)<=n}mn(){return!0}containsPoint(t){Debug&&U.e(t,Point,GraphObject,"containsPoint:p");const i=Point.a();i.c(t),this.F.kt(i);const e=this.actualBounds;if(!e.isReal())return Point.o(i),!1;const s=this.diagram;if(s!==null&&s.Qm){const o=s.getInputOption("extraTouchThreshold"),r=s.getInputOption("extraTouchArea"),l=r/2,h=this.naturalBounds,f=this.getDocumentScale()*s.scale,a=1/f;if(h.width*fe&&(c=t),isFinite(i)&&i>s&&(u=i);break;case 5:isFinite(t)&&t>e&&(c=t),u=0,d&&(i=1/0);break;case 4:isFinite(i)&&i>s&&(u=i),c=0,d&&(t=1/0);break}const g=this.maxSize,p=this.minSize;c>g.width&&p.widthg.height&&p.heightu.height||this.pi>u.width)&&(r=!0)}}}r?this.l|=256:this.l&=-257,this.Di.isReal()||U.n("Non-real actualBounds has been set. Object "+this+", actualBounds: "+this.Di.toString()),this.sd(o,this.Di),this.to(!1),Rect.o(o)}yh(t,i,e,s){}commonArrange(t,i,e,s){if(this.Di.s(t,i,e,s),this.desiredSize.isReal())return;const n=this.le,o=this.tl,r=o.right+o.left,l=o.top+o.bottom,h=n.width+r,f=n.height+l;e+=r,s+=l;let a=this.qs(!0);switch(h===e&&f===s&&(a=0),a){case 0:(h>e||f>s)&&(this.pe(!0),this.dt(h>e?e:h,f>s?s:f,0,0));break;case 2:this.pe(!0),this.dt(e,s,0,0);break;case 5:this.pe(!0),this.dt(e,f,0,0);break;case 4:this.pe(!0),this.dt(h,s,0,0);break}}sd(t,i){const e=this.part;e!==null&&e.diagram!==null&&((e.selectionObject===this||e.resizeObject===this||e.rotateObject===this)&&e.CP(!0),this.L(),!t.equalsApproxClose(i)&&(e.wh(),this.N0(e)))}N0(t){this.portId!==null&&(t.CP(!0),t instanceof Node&&t.CL(this))}get shadowVisible(){return this.b!==null?this.b.C0:null}set shadowVisible(t){const i=this.shadowVisible;i!==t&&(Debug&&t!==null&&U.i(t,"boolean",GraphObject,"shadowVisible"),this.Jt().C0=t,this.He(!0),this.L(),this.t("shadowVisible",i,t))}QR(t,i){const e=this.naturalBounds,s=this.dh,n=s.m11,o=s.m21,r=s.dx,l=s.m12,h=s.m22,f=s.dy;let a=0,c=0,u=a,d=c;a=u*n+d*o+r,c=u*l+d*h+f;let m=a,g=c,p=0,w=0;u=e.width+i,d=0,a=u*n+d*o+r,c=u*l+d*h+f;let x=Math.min(m,a),k=Math.min(g,c);p=Math.max(m+p,a)-x,w=Math.max(g+w,c)-k,m=x,g=k,u=e.width+i,d=e.height+i,a=u*n+d*o+r,c=u*l+d*h+f,x=Math.min(m,a),k=Math.min(g,c),p=Math.max(m+p,a)-x,w=Math.max(g+w,c)-k,m=x,g=k,u=0,d=e.height+i,a=u*n+d*o+r,c=u*l+d*h+f,x=Math.min(m,a),k=Math.min(g,c),p=Math.max(m+p,a)-x,w=Math.max(g+w,c)-k,m=x,g=k;const b=t.viewportBounds,S=b.x,M=b.y,A=b.width,C=b.height;return m>A+S||S>p+m||g>C+M||M>w+g}Ui(t,i){if(this._R(t,i)||!this.visible)return;const e=this.opacity;if(e===0)return;let s=1;e!==1&&(s=t.globalAlpha,t.globalAlpha=s*e);let n="";this.filter!==""&&(n=t.filter,t.filter=this.filter);const o=this.F,r=this.panel;this.S0()===!0&&this.$1();const l=this.part;let h=!1,f=0;if(l&&i.getRenderingHint("drawShadows")&&(h=l.isShadowed,h)){const g=l.shadowOffset;f=Math.max(g.y,g.x)*i.scale*i.Hi}const a=this instanceof Panel&&this.el(),c=this.Di;if(a&&(this.AL(h,t,!1,r),this.tI(t,i),this.LL(h,t,!1,r),this.TL(h,t,!1)),a||!a&&(c.width===0||c.height===0||isNaN(c.x)||isNaN(c.y))){e!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}const u=this.Ws();if(!i.la&&u&&this.QR(i,f)){e!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}let d=(this.l&256)!==0;if(t.clipInsteadOfFill&&(d=!1),this instanceof TextBlock&&(t.font=this.font),d){const g=r.mn()?r.naturalBounds:r.actualBounds;let p=Math.max(c.x,g.x),w=Math.max(c.y,g.y),x=Math.min(c.right,g.right)-p,k=Math.min(c.bottom,g.bottom)-w;const b=this.hi;if(b!==null&&(p=b.x,w=b.y,x=b.width,k=b.height),p>c.width+c.x||c.x>g.width+g.x){e!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}t.save(),t.beginPath(),t.rect(p,w,x,k),t.clip()}if(u){if(!l.isVisible()){e!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}if(h){const g=l.shadowOffset;t.shadowsSet(g.x*i.scale*this.scale*i.Hi,g.y*i.scale*this.scale*i.Hi,l.shadowBlur),t.shadowsOn(),t.shadowColor=l.shadowColor}}const m=this.naturalBounds;if(t.transform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.AL(h,t,u,r),this.Rt!==null&&(t.commitTransform(),this.Z1(t,m,c)),this.LL(h,t,u,r),this.xh(t,i),this.TL(h,t,u),d&&(t.restore(),t.clearContextCache(this instanceof Panel)),!o.$k()){const g=1/(o.m11*o.m22-o.m12*o.m21);t.transform(o.m22*g,-o.m12*g,-o.m21*g,o.m11*g,g*(o.m21*o.dy-o.m22*o.dx),g*(o.m12*o.dx-o.m11*o.dy))}e!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n)}AL(t,i,e,s){t&&this.shadowVisible===!0?i.shadowsOn():t&&this.shadowVisible===!1&&i.shadowsOff(),t&&this.Q1(s)&&this.shadowVisible===null&&i.shadowsOff()}LL(t,i,e,s){t&&(this.Rt!==null||this.Q1(s))?(this._1(!0),this.shadowVisible===null&&i.shadowsOff()):this._1(!1)}TL(t,i,e){t&&this.AP()===!0&&i.shadowsOn(),e&&t&&i.shadowsOff()}iI(t,i,e){const s=this.part;let n=!1;s&&t.getRenderingHint("drawShadows")&&(n=s.isShadowed),i.clipInsteadOfFill&&(n=!1),this.Ws()&&n&&i.shadowsOn(),n&&this.shadowVisible===!0?i.shadowsOn():n&&this.shadowVisible===!1&&i.shadowsOff();const o=this.panel;if(n&&this.Q1(o)&&this.shadowVisible===null&&i.shadowsOff(),i.sl){const r=t.computePixelRatio(),l=`drop-shadow(${i.shadowOffsetX/r}px ${i.shadowOffsetY/r}px ${i.shadowBlur/r/2}px ${i.shadowColor})`;this.background!==null&&e.Rt.setAttributeNS(null,"filter",l)}return n&&(this.Rt!==null||this.Q1(o))?(this._1(!0),this.shadowVisible===null&&i.shadowsOff()):this._1(!1),n}eI(t,i,e,s){if(e.sl){const n=i.computePixelRatio(),o=`drop-shadow(${e.shadowOffsetX/n}px ${e.shadowOffsetY/n}px ${e.shadowBlur/n/2}px ${e.shadowColor})`;this.LP(t,o)}s&&this.AP()===!0&&e.shadowsOn(),this.Ws()&&e.shadowsOff()}Q1(t){return t===null?!1:(t.el()&&(t=t.panel),t.AP()||(t.type===Panel.Auto||t.type===Panel.Spot)&&t.findMainElement()!==this)}LP(t,i){}Z1(t,i,e){const s=this.M0(),n=i.x,o=i.y,r=i.width+s,l=i.height+s;this.un(t,this.Rt,!0,!1,i,e),this.Rt instanceof Brush&&this.Rt.type===3?(t.beginPath(),t.rect(n-s/2,o-s/2,r,l),t.fillContext(this.Rt,!1,null)):t.fillRect(n-s/2,o-s/2,r,l)}DL(t,i){let e=t.sI(this);const s=t.gh!==null?t.gh:t.svg;if(e!==-1)if(e===0)if(s.Rt)s.Rt.after(i);else if(t.type===Panel.Table){const n=s.getElementsByClassName("gojs-ts"),o=n.length!==0?n[0]:null;o!==null&&o.after(i)}else s.prepend(i);else{for(;e!==0&&!t.elt(e-1).isVisibleObject();)e--;if(e===0)s.prepend(i);else{const n=t.elt(e-1).svg;n!==null?n.after(i):s.appendChild(i)}}}_R(t,i){if(!(t instanceof SVGContext))return!1;if(!this.visible||this.opacity===0)return this.svg!==null&&this.svg.parentNode!==null&&this.svg.remove(),!0;const e=this.Di;if(this.Ws()&&(!this.isVisible()||e.width===0||e.height===0||isNaN(e.x)||isNaN(e.y)))return this.svg!==null&&this.svg.parentNode!==null&&this.svg.remove(),!0;const s=this.panel,n=this.nd(t);if(this.nc(t,i,n))return this.FL(this.svg),this.svg.parentElement!==null?(this.Ws()&&(t.lastDrawnPart=this.svg),!0):(this.Ws()?(t.lastDrawnPart!==null?t.lastDrawnPart.after(this.svg):t.diagramGroup.prepend(this.svg),t.lastDrawnPart=this.svg):s&&this.DL(s,this.svg),!0);if(this.He(!1),this.Ws()&&this.isShadowed){const m=this.shadowOffset;t.shadowsSet(m.x*i.scale*this.scale*i.Hi,m.y*i.scale*this.scale*i.Hi,this.shadowBlur),t.shadowsOn(),t.shadowColor=this.shadowColor}this instanceof TextBlock&&(t.font=this.font),t.currentElement=null;const o=this.F,r=this instanceof Panel,l=this instanceof Panel?this.el():!1,h=this.svg;if(this.S0()===!0&&this.$1(),t.setCurrentTransform(1,0,0,1,0,0),t.outerGroup=!1,n)if(t.outerGroup=!0,r&&l)t.newGroup(1,0,0,1,0,0),this.svg=t.lastCreatedElement;else if(r&&this.isClipping){const m=this.findMainElement();let g=0,p=0;m!==null&&(g=m.actualBounds.x,p=m.actualBounds.y),t.newGroup(o.m11,o.m12,o.m21,o.m22,o.dx+g,o.dy+p),this.svg=t.lastCreatedElement,m!==null&&t.createOrUpdateClipGroup(this,m.actualBounds),t.currentElement=t.lastCreatedElement}else r?(t.newGroup(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.svg=t.lastCreatedElement):t.newGroup(1,0,0,1,0,0);const f=this.naturalBounds;r||t.setCurrentTransform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.background!==null&&(r?(l&&t.setCurrentTransform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.Z1(t,f,e),l&&t.setCurrentTransform(1,0,0,1,0,0)):(t.setCurrentTransform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.Z1(t,f,e)),t.currentElement.Rt=t.lastCreatedElement,t.currentElement.prepend(t.lastCreatedElement));const a=this.iI(i,t,t.currentElement);this.xh(t,i),r&&t.endGroup(),t.outerGroup&&t.endGroup();const c=t.surface.$u,u=r?this.svg:t.currentElement;if(h!==null&&h.parentNode!==null&&u!==h&&h.parentNode===this.panel.svg){const m=this.svg.getAttribute("filter");return m!==null&&u.setAttribute("filter",m),this.filter!==""&&u.setAttributeNS(null,"filter",this.filter),h.replaceWith(u),this.svg=u,u!==null&&this.A0(t,s,e,u),!0}if(this.svg=u,c!==null&&u===null&&t.dummyGroup(),u===null)return!0;this.A0(t,s,e,u),this.eI(u,i,t,a);const d=this.Ws()?this.opacity*t.globalAlpha:this.opacity;if(d!==1&&u.setAttributeNS(null,"opacity",d.toString()),this.filter!==""&&u.setAttributeNS(null,"filter",this.filter),this.Ws()){if(h!==null&&u!==h&&h.parentNode===t.diagramGroup){const m=h.getAttribute("filter");m!==null&&u.setAttribute("filter",m),h.replaceWith(u)}else t.lastDrawnPart?t.lastDrawnPart.after(u):t.diagramGroup.prepend(u);t.lastDrawnPart=u}else s!==null&&this.DL(s,u);return c!==null&&c(this,u),this.FL(u),!0}FL(t){const i=this,e=t.dataset;i instanceof GraphObject&&(i.portId!==null&&(e.portId=i.portId),i instanceof Panel&&(isNaN(i.itemIndex)||(e.itemIndex=i.itemIndex.toString()),i instanceof Part&&(e.className=U.Bn(i),i.key!==void 0&&(e.key=i.key.toString()),i.containingGroup!==null&&(e.group=i.containingGroup.key.toString()),i instanceof Link&&(i.fromNode!==null&&i.fromNode.key!==void 0&&(e.fromKey=i.fromNode.key.toString()),i.fromPortId!==""&&(e.fromPortId=i.fromPortId),i.toNode!==null&&i.toNode.key!==void 0&&(e.toKey=i.toNode.key.toString()),i.toPortId!==""&&(e.toPortId=i.toPortId)))))}A0(t,i,e,s){let n=(this.l&256)!==0;if(t.clipInsteadOfFill&&(n=!1),!n){s.removeAttributeNS(null,"clip-path");return}const o=i.mn()?i.naturalBounds:i.actualBounds;let r=Math.max(e.x,o.x),l=Math.max(e.y,o.y),h=Math.min(e.right,o.right)-r,f=Math.min(e.bottom,o.bottom)-l;const a=this.hi;a!==null&&(r=a.x,l=a.y,h=a.width,f=a.height);const c=new Rect(r,l,Math.max(h,0),Math.max(f,0));this instanceof Panel&&this.F.copy().Lw().Yg(c),s.setAttributeNS(null,"clip-path",`path(' M ${c.x},${c.y} L ${c.width+c.x} ${c.y} L ${c.width+c.x} ${c.height+c.y} L ${c.x} ${c.height+c.y} z') view-box`)}nI(){if(this.svg===null)return;const t=this.svg.innerHTML.match(/url\(#((CLIP|GRAD).+?)\)/g),i=this.svg.ownerDocument;if(t!==null)for(const e of t){const s=i.getElementById(e.split("#")[1].slice(0,-1));s!==null&&s.remove()}this.svg.remove()}tI(t,i){const e=this.Di,s=this.qi,n=this.Rt;n!==null&&t.commitTransform(),n!==null&&(this.un(t,n,!0,!1,s,e),n instanceof Brush&&n.type===3?(t.beginPath(),t.rect(e.x,e.y,e.width,e.height),t.fillContext(n,!1,null)):t.fillRect(e.x,e.y,e.width,e.height)),this.xh(t,i)}xh(t,i){}oc(){this.He(!0)}nc(t,i,e){const s=this.svg;if(this.oI()){if(this.oc(),this.He(!1),s===null)return!1;const a=s.getAttribute("clip-path");if(a!==null&&a.includes("url")){const u=t.svg.getElementById(a.split("#")[1].slice(0,-1));u!==null&&u.remove()}return s.getAttribute("filter")&&s.removeAttribute("filter"),!1}if(s===null)return!1;if(!this.visible)return s.remove(),!1;if(s.nodeName!=="g"&&e||s.nodeName==="g"&&!e)return!1;const n=this.F,o="matrix("+n.m11+", "+n.m12+", "+n.m21+", "+n.m22+", "+n.dx+", "+n.dy+")",r=this instanceof Panel,l=r?this.el():!1;if(!(r&&l))if(this instanceof Picture){const a=this.tb;t.setCurrentTransform(n.m11,n.m12,n.m21,n.m22,n.dx,n.dy),a!==null&&t.amendImageTransform(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7]),e?s.lastElementChild.setAttributeNS(null,"transform",t.getCurrentTransform()):s.setAttributeNS(null,"transform",t.getCurrentTransform())}else if(e&&!r)if(this instanceof Shape){const a=s.getElementsByTagName("path");for(let c=0;c=.1;){if(g){for(l=o[d++%h],l-=r;l<0;)l+=o[d++%h],m=!m;g=!1}else l=o[d++%h];l>u&&(l=u);let p=Math.sqrt(l*l/(1+c*c));f<0&&(p=-p),i+=p,e+=c*p,m?t.lineTo(i,e):t.moveTo(i,e),u-=l,m=!m}}un(t,i,e,s,n,o){let r=1,l=1;if(typeof i=="string"){e?t.fillStyle=i:t.strokeStyle=i;return}else if(i.type===1){e?t.fillStyle=i.color:t.strokeStyle=i.color;return}let h;const f=this.M0();r=n.width,l=n.height,s?(r=o.width,l=o.height):e||(r+=f,l+=f);const a=t instanceof CanvasSurfaceContext;if(a&&i.pn&&(i.type===4||i.rc===r&&i.ib===l))h=i.pn;else{let c=0,u=0,d=0,m=0,g=0,p=0,w=0,x=0;if(s?(w=o.x,x=o.y):e||(w-=f/2,x-=f/2),c=i.start.x*r+i.start.offsetX+w,u=i.start.y*l+i.start.offsetY+x,d=i.end.x*r+i.end.offsetX+w,m=i.end.y*l+i.end.offsetY+x,i.type===2)h=t.createLinearGradient(c,u,d,m);else if(i.type===3)p=isNaN(i.endRadius)?Math.max(r,l)/2:i.endRadius,isNaN(i.startRadius)?(g=0,p=Math.max(r,l)/2):g=i.startRadius,h=t.createRadialGradient(c,u,g,d,m,p);else if(i.type===4)try{h=t.createPattern(i.pattern,"repeat")}catch{h=null}else U.Pi(i.type,"Brush type");if(i.type!==4){const k=i.colorStops;if(k!==null){const b=k.iterator;for(;b.next();)h.addColorStop(b.key,b.value)}}if(a&&(i.pn=h,h!==null&&(i.rc=r,i.ib=l),h===null&&i.type===4&&i.rc!==-1)){i.rc=-1;const k=this.diagram;k!==null&&i.rc===-1&&U.lr(()=>{k.redraw()},600)}}e?t.fillStyle=h:t.strokeStyle=h}isContainedBy(t){return t instanceof Panel?this.rI(this,t):!1}rI(t,i){if(t===i||i===null)return!1;let e=t.panel;for(;e!==null;){if(e===i)return!0;e=e.panel}return!1}isVisibleObject(){if(!this.visible)return!1;const t=this.panel;return t!==null?t.isVisibleObject():!0}isEnabledObject(){let t=this instanceof Panel?this:this.panel;for(;t!==null&&t.isEnabled;)t=t.panel;return t===null}get enabledChanged(){return this.b!==null?this.b.L0:null}set enabledChanged(t){const i=this.enabledChanged;i!==t&&(t!==null&&U.P(t,GraphObject,"enabledChanged"),this.Jt().L0=t,this.t("enabledChanged",i,t))}$1(){if(this.eb()===!0){const t=this._r;if(t.Vi(),!this.Di.isReal()||!this.le.isReal()){this.od(!1);return}if(t.Bs(this.Di.x-this.le.x,this.Di.y-this.le.y),this.scale!==1||this.angle!==0){const i=this.naturalBounds;this.k0(t,i.x,i.y,i.width,i.height)}this.od(!1),this.La(!0)}if(this.S0()===!0){const t=this.panel;if(t===null)this.dh.set(this._r),this.ba=this.scale;else if(t.Us!==null){const i=this.dh;i.Vi(),t.mn()?i.uf(t.dh):t.panel!==null&&i.uf(t.panel.dh),i.uf(this._r),this.ba=this.scale*t.ba}this.La(!1)}}k0(t,i,e,s,n){if(this.ot!==1&&t.ot(this.ot),this.jt===0)return;const o=Point.a();o.setSpot(i,e,s,n,Spot.Center),t.ms(this.jt,o.x,o.y),Point.o(o)}u(t){if(this.Eo())return;t===void 0&&(t=!1),this.pe(!0),this.to(!0);const i=this.panel;i!==null&&!t&&i.u()}lc(){this.Eo()||(this.pe(!0),this.to(!0))}hc(t){if(this.ns())return;const i=this.panel;!t&&i!==null&&i.u(),this.to(!0)}sc(){this.eb()===!1&&(this.od(!0),this.La(!0))}TP(){this.La(!0)}L(){const t=this.part;t!==null&&t.L()}qs(t){const i=this.stretch,e=this.panel;if(e===null)return this.Yo(i===1?0:i,t);if(e.type===Panel.Table)return this.T0(e.getRowDefinition(this.row),e.getColumnDefinition(this.column),t);if(e.type===Panel.Auto&&e.findMainElement()===this)return this.Yo(2,t);if(i===1){if(e.type===Panel.Spot&&e.findMainElement()===this)return this.Yo(2,t);const s=e.defaultStretch;return s===1?this.Yo(0,t):this.Yo(s,t)}return this.Yo(i,t)}T0(t,i,e){const s=this.stretch;if(s!==1)return this.Yo(s,e);let n=null,o=null;switch(t.stretch){case 1:case 5:break;case 4:o=!0;break;case 2:o=!0;break}switch(i.stretch){case 1:case 4:break;case 5:n=!0;break;case 2:n=!0;break}const r=this.panel.defaultStretch;return n===null&&(n=r===5||r===2),o===null&&(o=r===4||r===2),n===!0&&o===!0?this.Yo(2,e):n===!0?this.Yo(5,e):o===!0?this.Yo(4,e):this.Yo(0,e)}Yo(t,i){if(i)return t;if(t===0)return 0;const e=this.desiredSize;if(e.isReal())return 0;const s=!isNaN(e.width),n=!isNaN(e.height),o=this.angle;if(s)if(o!==90&&o!==270){if(t===5)return 0;if(t===2)return 4}else{if(t===4)return 0;if(t===2)return 5}if(n)if(o!==90&&o!==270){if(t===4)return 0;if(t===2)return 5}else{if(t===5)return 0;if(t===2)return 4}return t}get segmentOrientation(){return this.Xt!==null?this.Xt.D0:0}set segmentOrientation(t){const i=this.segmentOrientation;i!==t&&(Debug&&U.j(t,Orientation,"Orientation"),this.Xt===null&&(this.Xt=new LinkElementSettings),this.Xt.D0=t,this.u(),this.t("segmentOrientation",i,t),t===0&&(this.angle=0))}lI(){this.segmentOrientation=21}get segmentIndex(){return this.Xt!==null?this.Xt.F0:-1/0}set segmentIndex(t){Debug&&U.i(t,"number",GraphObject,"segmentIndex"),t=Math.round(t);const i=this.segmentIndex;i!==t&&(this.Xt===null&&(this.Xt=new LinkElementSettings),this.Xt.F0=t,this.u(),this.t("segmentIndex",i,t))}get segmentFraction(){return this.Xt!==null?this.Xt.R0:0}set segmentFraction(t){Debug&&U.r(t,GraphObject,"segmentFraction"),t<0?t=0:t>1&&(t=1);const i=this.segmentFraction;i!==t&&(this.Xt===null&&(this.Xt=new LinkElementSettings),this.Xt.R0=t,this.u(),this.t("segmentFraction",i,t))}get segmentOffset(){return this.Xt!==null?this.Xt.I0:Point.No}set segmentOffset(t){const i=this.segmentOffset;i.equals(t)||(Debug&&U.e(t,Point,GraphObject,"segmentOffset"),t=t.N(),this.Xt===null&&(this.Xt=new LinkElementSettings),this.Xt.I0=t,this.u(),this.t("segmentOffset",i,t))}get stretch(){return this.b!==null?this.b.io:1}set stretch(t){const i=this.stretch;i!==t&&(Debug&&U.j(t,Stretch,"Stretch"),this.Jt().io=t,this.u(),this.t("stretch",i,t))}get name(){return this.b!==null?this.b.Lt:""}set name(t){const i=this.name;i!==t&&(Debug&&U.i(t,"string",GraphObject,"name"),this.Jt().Lt=t,this.part!==null&&this.part.O0(),this.t("name",i,t))}get opacity(){return this.ii}set opacity(t){Debug&&U.r(t,GraphObject,"opacity"),t<0?t=0:t>1&&(t=1);const i=this.opacity;if(i!==t){this.ii=t,this.t("opacity",i,t);const e=this.diagram,s=this.part;e!==null&&s!==null&&e.L(s.ta(s.actualBounds))}}get filter(){return this.x0}set filter(t){const i=this.filter;if(i!==t){Debug&&U.i(t,"string",GraphObject,"filter"),this.x0=t,this.He(!0),this.t("filter",i,t);const e=this.diagram,s=this.part;e!==null&&s!==null&&e.L(s.ta(s.actualBounds))}}get visible(){return(this.l&1)!==0}set visible(t){const i=(this.l&1)!==0;if(i!==t){Debug&&U.i(t,"boolean",GraphObject,"visible"),this.l=this.l^1,this.oc(),this.t("visible",i,t);const e=this.panel;e!==null?e.u():this.Ws()&&this.Ki(t),this.L(),this.RL()}}get pickable(){return(this.l&2)!==0}set pickable(t){const i=(this.l&2)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"pickable"),this.l=this.l^2,this.t("pickable",i,t))}get fromLinkableDuplicates(){return(this.l&4)!==0}set fromLinkableDuplicates(t){const i=(this.l&4)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"fromLinkableDuplicates"),this.l=this.l^4,this.t("fromLinkableDuplicates",i,t))}get fromLinkableSelfNode(){return(this.l&8)!==0}set fromLinkableSelfNode(t){const i=(this.l&8)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"fromLinkableSelfNode"),this.l=this.l^8,this.t("fromLinkableSelfNode",i,t))}get toLinkableDuplicates(){return(this.l&16)!==0}set toLinkableDuplicates(t){const i=(this.l&16)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"toLinkableDuplicates"),this.l=this.l^16,this.t("toLinkableDuplicates",i,t))}get toLinkableSelfNode(){return(this.l&32)!==0}set toLinkableSelfNode(t){const i=(this.l&32)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"toLinkableSelfNode"),this.l=this.l^32,this.t("toLinkableSelfNode",i,t))}get isPanelMain(){return(this.l&64)!==0}set isPanelMain(t){const i=(this.l&64)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"isPanelMain"),this.l=this.l^64,this.u(),this.t("isPanelMain",i,t))}get isActionable(){return(this.l&128)!==0}set isActionable(t){const i=(this.l&128)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"isActionable"),this.l=this.l^128,this.t("isActionable",i,t))}get background(){return this.Rt}set background(t){const i=this.background;i!==t&&(t!==null&&Brush.rd(t,"GraphObject.background"),t instanceof Brush&&t.p(),this.Rt=t,this.L(),this.t("background",i,t))}AP(){return(this.l&512)!==0}_1(t){t?this.l|=512:this.l&=-513}ic(){return(this.l&1024)!==0}DP(t){t?this.l|=1024:this.l&=-1025}eb(){return(this.l&2048)!==0}od(t){t?this.l|=2048:this.l&=-2049}S0(){return(this.l&4096)!==0}La(t){t?this.l|=4096:this.l&=-4097}Eo(){return(this.l&8192)!==0}pe(t){t?this.l|=8192:this.l&=-8193}ns(){return(this.l&16384)!==0}to(t){t?this.l|=16384:this.l&=-16385}oI(){return(this.l&32768)!==0}He(t){t?this.l|=32768:this.l&=-32769}get part(){if(this.Ws())return this;if(this.il!==null)return this.il;let t=this;for(t=t.panel;t;){if(t instanceof Part)return this.il=t,t;t=t.panel}return null}get svg(){return this.J1}set svg(t){this.J1=t}Eu(){this.svg=null}get panel(){return this.Hs}Ta(t){this.Hs=t,this.svg!==null&&this.svg.remove()}get layer(){const t=this.part;return t!==null?t.layer:null}get diagram(){const t=this.part;return t!==null?t.diagram:null}get position(){return this.gt}set position(t){Debug&&U.e(t,Point,GraphObject,"position");const i=t.x,e=t.y,s=this.position,n=s.x,o=s.y;n!==i&&(!isNaN(n)||!isNaN(i))||o!==e&&(!isNaN(o)||!isNaN(e))?(t=t.copy(),this.FP(t,n,o)&&this.t("position",new Point(n,o),t.copy())):this.RP()}RP(){}FP(t,i,e){return this.gt=t,this.hc(),!0}Lf(t,i,e){this.gt.x===t&&this.gt.y===i||(this.gt.s(t,i),this.sc())}get actualBounds(){return this.Di}get scale(){return this.ot}set scale(t){const i=this.scale;i!==t&&(Debug&&U.r(t,GraphObject,"scale"),t<=0&&U.n("GraphObject.scale for "+this+" must be greater than zero, not: "+t),this.ot=t,this.u(),this.t("scale",i,t))}get angle(){return this.jt}set angle(t){const i=this.angle;if(i!==t){if(Debug&&U.r(t,GraphObject,"angle"),t=t%360,t<0&&(t+=360),i===t)return;this.jt=t,this.RL(),this.u(),this.t("angle",i,t)}}get desiredSize(){return this.rs}set desiredSize(t){Debug&&U.e(t,Size,GraphObject,"desiredSize");const i=t.width,e=t.height,s=this.desiredSize,n=s.width,o=s.height;if((n!==i&&(!isNaN(n)||!isNaN(i))||o!==e&&(!isNaN(o)||!isNaN(e)))&&(t=t.N(),this.rs=t,this.u(),this instanceof Shape&&this.re(),this.t("desiredSize",s,t),this.ic())){const r=this.part;r!==null&&(this.Aa(r,"width"),this.Aa(r,"height"))}}get width(){return this.rs.width}set width(t){const i=this.rs.width;if(i!==t&&(!isNaN(i)||!isNaN(t))){Debug&&U.i(t,"number",GraphObject,"width");const e=this.rs,s=new Size(t,this.rs.height).p();if(this.rs=s,this.u(),this instanceof Shape&&this.re(),this.t("desiredSize",e,s),this.ic()){const n=this.part;n!==null&&this.Aa(n,"width")}}}get height(){return this.rs.height}set height(t){const i=this.rs.height;if(i!==t&&(!isNaN(i)||!isNaN(t))){Debug&&U.i(t,"number",GraphObject,"height");const e=this.rs,s=new Size(this.rs.width,t).p();if(this.rs=s,this.u(),this instanceof Shape&&this.re(),this.t("desiredSize",e,s),this.ic()){const n=this.part;n!==null&&this.Aa(n,"height")}}}get minSize(){return this.b!==null?this.b.Sr:Size.Gh}set minSize(t){const i=this.minSize;i.equals(t)||(Debug&&U.e(t,Size,GraphObject,"minSize"),t=t.copy(),isNaN(t.width)&&(t.width=0),isNaN(t.height)&&(t.height=0),t.p(),this.Jt().Sr=t,this.u(),this.t("minSize",i,t))}get maxSize(){return this.b!==null?this.b.Mr:Size.Mw}set maxSize(t){const i=this.maxSize;i.equals(t)||(Debug&&U.e(t,Size,GraphObject,"maxSize"),t=t.copy(),isNaN(t.width)&&(t.width=1/0),isNaN(t.height)&&(t.height=1/0),t.p(),this.Jt().Mr=t,this.u(),this.t("maxSize",i,t))}get measuredBounds(){return this.le}get naturalBounds(){return this.qi}M0(){return 0}get margin(){return this.tl}set margin(t){typeof t=="number"?t=new Margin(t):Debug&&U.e(t,Margin,GraphObject,"margin");const i=this.tl;i.equals(t)||(t=t.N(),this.tl=t,this.u(),this.t("margin",i,t))}get F(){return this.eb()===!0&&this.$1(),this._r}get Us(){return this.S0()===!0&&this.$1(),this.dh}trigger(t,i,e){let s=null;return typeof t=="string"?s=new AnimationTrigger(t,i,e):s=t,s.Ne=this,this.Ms===null&&(this.Ms=new GMap),this.Ms.set(s.propertyName,s),this}get Ms(){return this.b!==null?this.b.Ms:null}set Ms(t){this.Ms!==t&&(this.Jt().Ms=t)}get kr(){return this.b!==null?this.b.kr:0}set kr(t){this.kr!==t&&(this.Jt().kr=t)}get alignment(){return this.ui}set alignment(t){const i=this.alignment;i.equals(t)||(Debug&&U.e(t,Spot,GraphObject,"alignment"),t.isNoSpot()&&!t.isDefault()&&U.n("GraphObject.alignment for "+this+" must be a real Spot or Spot.Default, not: "+t),t=t.N(),this.ui=t,this.hc(),this.t("alignment",i,t))}get column(){return this.Qr}set column(t){Debug&&U.r(t,GraphObject,"column"),t=Math.round(t);const i=this.column;i!==t&&(t<0&&U.U(t,">= 0",GraphObject,"column"),this.Qr=t,this.u(),this.t("column",i,t),this.svg!==null&&this.svg.remove())}get columnSpan(){return this.b!==null?this.b.E0:1}set columnSpan(t){Debug&&U.i(t,"number",GraphObject,"columnSpan"),t=Math.round(t);const i=this.columnSpan;i!==t&&(t<1&&U.U(t,">= 1",GraphObject,"columnSpan"),this.Jt().E0=t,this.u(),this.t("columnSpan",i,t))}get row(){return this.w0}set row(t){Debug&&U.r(t,GraphObject,"row"),t=Math.round(t);const i=this.row;i!==t&&(t<0&&U.U(t,">= 0",GraphObject,"row"),this.w0=t,this.u(),this.t("row",i,t),this.svg!==null&&this.svg.remove())}get rowSpan(){return this.b!==null?this.b.B0:1}set rowSpan(t){Debug&&U.i(t,"number",GraphObject,"rowSpan"),t=Math.round(t);const i=this.rowSpan;i!==t&&(t<1&&U.U(t,">= 1",GraphObject,"rowSpan"),this.Jt().B0=t,this.u(),this.t("rowSpan",i,t))}get spanAllocation(){return this.b!==null?this.b.V0:null}set spanAllocation(t){const i=this.spanAllocation;i!==t&&(t!==null&&U.P(t,GraphObject,"spanAllocation"),this.Jt().V0=t,this.u(),this.t("spanAllocation",i,t))}get alignmentFocus(){return this.Qu}set alignmentFocus(t){const i=this.alignmentFocus;i.equals(t)||(Debug&&U.e(t,Spot,GraphObject,"alignmentFocus"),Debug&&t.isNoSpot()&&!t.isDefault()&&!(t.isNone()&&this instanceof Node)&&U.n("GraphObject.alignmentFocus must be a real Spot or Spot.Default, not: "+t),t=t.N(),this.Qu=t,this.u(),this.t("alignmentFocus",i,t))}get portId(){return this.y0}set portId(t){const i=this.portId;if(i!==t){Debug&&t!==null&&U.i(t,"string",GraphObject,"portId");const e=this.part;e!==null&&!(e instanceof Node)&&U.n("Cannot set portID on a Link: "+t);const s=e;i!==null&&s!==null&&s.IP(this),this.y0=t,t!==null&&s!==null&&(s.yn=!0,s.IL(this)),this.t("portId",i,t)}}Da(){const t=this.part;if(t instanceof Node&&(this.portId!==null||this===t.port)){const i=t.diagram;i!==null&&!i.undoManager.isUndoingRedoing&&t.CL(this)}}RL(){const t=this.diagram;t===null||t.undoManager.isUndoingRedoing||(this instanceof Panel?this instanceof Node?this.invalidateConnectedLinks():this.walkVisualTreeFrom(this,i=>{i.Da()}):this.Da())}get toSpot(){return this.yt!==null?this.yt.Sa:Spot.None}set toSpot(t){const i=this.toSpot;i.equals(t)||(Debug&&U.e(t,Spot,GraphObject,"toSpot"),t=t.N(),this.Ge().Sa=t,this.t("toSpot",i,t),this.Da())}get toEndSegmentLength(){return this.yt!==null?this.yt.Pa:10}set toEndSegmentLength(t){const i=this.toEndSegmentLength;i!==t&&(Debug&&U.i(t,"number",GraphObject,"toEndSegmentLength"),t<0&&U.U(t,">= 0",GraphObject,"toEndSegmentLength"),this.Ge().Pa=t,this.t("toEndSegmentLength",i,t),this.Da())}get toShortLength(){return this.yt!==null?this.yt.Ca:0}set toShortLength(t){const i=this.toShortLength;i!==t&&(Debug&&U.i(t,"number",GraphObject,"toShortLength"),this.Ge().Ca=t,this.t("toShortLength",i,t),this.Da())}get toLinkable(){return this.yt!==null?this.yt.z0:null}set toLinkable(t){const i=this.toLinkable;i!==t&&(Debug&&t!==null&&U.i(t,"boolean",GraphObject,"toLinkable"),this.Ge().z0=t,this.t("toLinkable",i,t))}get toMaxLinks(){return this.yt!==null?this.yt.X0:1/0}set toMaxLinks(t){const i=this.toMaxLinks;i!==t&&(Debug&&U.i(t,"number",GraphObject,"toMaxLinks"),t<0&&U.U(t,">= 0",GraphObject,"toMaxLinks"),this.Ge().X0=t,this.t("toMaxLinks",i,t))}get fromSpot(){return this.yt!==null?this.yt.ka:Spot.None}set fromSpot(t){const i=this.fromSpot;i.equals(t)||(Debug&&U.e(t,Spot,GraphObject,"fromSpot"),t=t.N(),this.Ge().ka=t,this.t("fromSpot",i,t),this.Da())}get fromEndSegmentLength(){return this.yt!==null?this.yt.Ma:10}set fromEndSegmentLength(t){const i=this.fromEndSegmentLength;i!==t&&(Debug&&U.i(t,"number",GraphObject,"fromEndSegmentLength"),t<0&&U.U(t,">= 0",GraphObject,"fromEndSegmentLength"),this.Ge().Ma=t,this.t("fromEndSegmentLength",i,t),this.Da())}get fromShortLength(){return this.yt!==null?this.yt.Na:0}set fromShortLength(t){const i=this.fromShortLength;i!==t&&(Debug&&U.i(t,"number",GraphObject,"fromShortLength"),this.Ge().Na=t,this.t("fromShortLength",i,t),this.Da())}get fromLinkable(){return this.yt!==null?this.yt.Y0:null}set fromLinkable(t){const i=this.fromLinkable;i!==t&&(Debug&&t!==null&&U.i(t,"boolean",GraphObject,"fromLinkable"),this.Ge().Y0=t,this.t("fromLinkable",i,t))}get fromMaxLinks(){return this.yt!==null?this.yt.K0:1/0}set fromMaxLinks(t){const i=this.fromMaxLinks;i!==t&&(Debug&&U.i(t,"number",GraphObject,"fromMaxLinks"),t<0&&U.U(t,">= 0",GraphObject,"fromMaxLinks"),this.Ge().K0=t,this.t("fromMaxLinks",i,t))}get cursor(){return this.b!==null?this.b.Ll:""}set cursor(t){const i=this.cursor;i!==t&&(U.i(t,"string",GraphObject,"cursor"),this.Jt().Ll=t,this.t("cursor",i,t))}get click(){return this.b!==null?this.b.Rr:null}set click(t){const i=this.click;i!==t&&(t!==null&&U.P(t,GraphObject,"click"),this.Jt().Rr=t,this.t("click",i,t))}get doubleClick(){return this.b!==null?this.b.Ir:null}set doubleClick(t){const i=this.doubleClick;i!==t&&(t!==null&&U.P(t,GraphObject,"doubleClick"),this.Jt().Ir=t,this.t("doubleClick",i,t))}get contextClick(){return this.b!==null?this.b.Or:null}set contextClick(t){const i=this.contextClick;i!==t&&(t!==null&&U.P(t,GraphObject,"contextClick"),this.Jt().Or=t,this.t("contextClick",i,t))}get mouseEnter(){return this.b!==null?this.b.Xr:null}set mouseEnter(t){const i=this.mouseEnter;i!==t&&(t!==null&&U.P(t,GraphObject,"mouseEnter"),this.Jt().Xr=t,this.t("mouseEnter",i,t))}get mouseLeave(){return this.b!==null?this.b.Yr:null}set mouseLeave(t){const i=this.mouseLeave;i!==t&&(t!==null&&U.P(t,GraphObject,"mouseLeave"),this.Jt().Yr=t,this.t("mouseLeave",i,t))}get mouseOver(){return this.b!==null?this.b.Er:null}set mouseOver(t){const i=this.mouseOver;i!==t&&(t!==null&&U.P(t,GraphObject,"mouseOver"),this.Jt().Er=t,this.t("mouseOver",i,t))}get mouseHover(){return this.b!==null?this.b.Br:null}set mouseHover(t){const i=this.mouseHover;i!==t&&(t!==null&&U.P(t,GraphObject,"mouseHover"),this.Jt().Br=t,this.t("mouseHover",i,t))}get mouseHold(){return this.b!==null?this.b.Vr:null}set mouseHold(t){const i=this.mouseHold;i!==t&&(t!==null&&U.P(t,GraphObject,"mouseHold"),this.Jt().Vr=t,this.t("mouseHold",i,t))}get mouseDragEnter(){return this.b!==null?this.b.U0:null}set mouseDragEnter(t){const i=this.mouseDragEnter;i!==t&&(t!==null&&U.P(t,GraphObject,"mouseDragEnter"),this.Jt().U0=t,this.t("mouseDragEnter",i,t))}get mouseDragLeave(){return this.b!==null?this.b.G0:null}set mouseDragLeave(t){const i=this.mouseDragLeave;i!==t&&(t!==null&&U.P(t,GraphObject,"mouseDragLeave"),this.Jt().G0=t,this.t("mouseDragLeave",i,t))}get mouseDrop(){return this.b!==null?this.b.zr:null}set mouseDrop(t){const i=this.mouseDrop;i!==t&&(t!==null&&U.P(t,GraphObject,"mouseDrop"),this.Jt().zr=t,this.t("mouseDrop",i,t))}get actionDown(){return this.b!==null?this.b.H0:null}set actionDown(t){const i=this.actionDown;i!==t&&(t!==null&&U.P(t,GraphObject,"actionDown"),this.Jt().H0=t,this.t("actionDown",i,t))}get actionMove(){return this.b!==null?this.b.q0:null}set actionMove(t){const i=this.actionMove;i!==t&&(t!==null&&U.P(t,GraphObject,"actionMove"),this.Jt().q0=t,this.t("actionMove",i,t))}get actionUp(){return this.b!==null?this.b.W0:null}set actionUp(t){const i=this.actionUp;i!==t&&(t!==null&&U.P(t,GraphObject,"actionUp"),this.Jt().W0=t,this.t("actionUp",i,t))}get actionCancel(){return this.b!==null?this.b.j0:null}set actionCancel(t){const i=this.actionCancel;i!==t&&(t!==null&&U.P(t,GraphObject,"actionCancel"),this.Jt().j0=t,this.t("actionCancel",i,t))}get toolTip(){return this.b!==null?this.b.Kr:null}set toolTip(t){const i=this.toolTip;i!==t&&(Debug&&t!==null&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("GraphObject.toolTip must be an Adornment or HTMLInfo."),this.Jt().Kr=t,this.t("toolTip",i,t))}get contextMenu(){return this.b!==null?this.b.Ur:null}set contextMenu(t){const i=this.contextMenu;i!==t&&(Debug&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("GraphObject.contextMenu must be an Adornment or HTMLInfo."),this.Jt().Ur=t,this.t("contextMenu",i,t))}findBindingPanel(){let t=this instanceof Panel?this:this.panel;for(;t!==null;){if(t.OP())return t;t=t.panel}return null}bind(t,i,e,s){return this.ac(t,i,e,s),this}bindTwoWay(t,i,e,s){return this.ac(t,i,e,s).makeTwoWay(),this}bindModel(t,i,e,s){return this.ac(t,i,e,s).ofModel(),this}bindObject(t,i,e,s,n){return this.ac(t,i,e,s).ofObject(n),this}theme(t,i,e,s,n){return this.bh(t,i,e,s,n),this}themeData(t,i,e,s,n){return this.bh(t,i,e,s,n).ofData(),this}themeObject(t,i,e,s,n,o){return this.bh(t,i,e,s,n).ofObject(o),this}themeModel(t,i,e,s,n){return this.bh(t,i,e,s,n).ofModel(),this}ac(t,i,e,s){let n=null;return typeof t=="string"?n=new Binding(t,i,e,s):n=t,this.v0(n),n}bh(t,i,e,s,n){let o=null;return typeof t=="string"?o=new ThemeBinding(t,i,e,s,n):o=t,this.v0(o),o}v0(t){t.Ne=this;const i=this.findBindingPanel();i!==null&&i.OL()&&U.n("Cannot add a Binding to a template that has already been copied: "+t),this.Fi===null&&(this.Fi=new List),this.Fi.add(t)}set(t){if(Debug)for(const i in t)(i.startsWith("_")||i.indexOf(".")!==-1)&&U.n("Property with underscore or period passed to GraphObject.set. Did you mean to use GraphObject.attach?");return Object.assign(this,t),this}attach(t){return GraphObject.EP(this,t),this}apply(t){return t(this),this}setProperties(t){return Diagram.f0(this,t),this}static make(t,...i){let e=arguments,s=null,n=null;if(U.rt(t))n=t;else if(typeof t=="string"){const r=GraphObject.sb.get(t);U.rt(r)?(e=Array.prototype.slice.call(e),s=r(e),U.W(s)||U.n('GraphObject.make invoked object builder "'+t+'", but it did not return an Object')):n=root.go[t]}s===null&&((n==null||!n.constructor)&&U.n("GraphObject.make requires a class function or GoJS class name or name of an object builder, not: "+t),s=new n);let o=1;if(s instanceof Diagram&&e.length>1){const r=s,l=e[1];(typeof l=="string"||l instanceof HTMLDivElement)&&(r.X2(l),o++)}for(let r=o;r{const t="#f5f5f5",i="#737373",e="#d4d4d4",s="#737373",n="#a3a3a3",o=2.76142374915397,r=2.761423749153969,l=new Panel(Panel.Auto,{isActionable:!0,enabledChanged:(h,f)=>{if(h instanceof Panel){const a=h.findObject("ButtonBorder");if(a!==null)if(h._buttonFillNormal===void 0&&(h._buttonFillNormal=a.fill),f){let c=null;h.layer!==null&&h.diagram!==null&&h.isVisibleObject()&&(c=h.layer.findObjectAt(h.diagram.lastInput.documentPoint)),c===h||c!==null&&c.isContainedBy(h)?a.fill=h._buttonFillOver:a.fill=h._buttonFillNormal}else a.fill=h._buttonFillDisabled}},cursor:"pointer"}).attach({_buttonFillNormal:void 0,_buttonStrokeNormal:void 0,_buttonFillOver:e,_buttonStrokeOver:s,_buttonFillDisabled:n}).add(new Shape("RoundedRectangle",{name:"ButtonBorder",spot1:new Spot(0,0,o,r),spot2:new Spot(1,1,-o,-r),parameter1:2,fill:t,stroke:i}));return l.mouseEnter=(h,f,a)=>{if(!f.isEnabledObject()||!(f instanceof Panel))return;const c=f.findObject("ButtonBorder");c instanceof Shape&&(f._buttonFillNormal===void 0&&(f._buttonFillNormal=c.fill),c.fill=f._buttonFillOver,f._buttonStrokeNormal===void 0&&(f._buttonStrokeNormal=c.stroke),c.stroke=f._buttonStrokeOver)},l.mouseLeave=(h,f,a)=>{if(!f.isEnabledObject()||!(f instanceof Panel))return;const c=f.findObject("ButtonBorder");c instanceof Shape&&(f._buttonFillNormal!==void 0&&(c.fill=f._buttonFillNormal),f._buttonStrokeNormal!==void 0&&(c.stroke=f._buttonStrokeNormal))},l}),GraphObject.defineBuilder("TreeExpanderButton",y=>{const t=GraphObject.build("Button");return t.attach({_treeExpandedFigure:"MinusLine",_treeCollapsedFigure:"PlusLine",visible:!1}),t.add(new Shape("MinusLine",{name:"ButtonIcon",stroke:"#0a0a0a",strokeWidth:2,desiredSize:Size.fu}).bindObject("figure","isTreeExpanded",(i,e)=>{const s=e.panel;return i?s._treeExpandedFigure:s._treeCollapsedFigure})),t.bindObject("visible","isTreeLeaf",i=>!i),t.click=(i,e)=>{let s=e.part;if(s instanceof Adornment&&(s=s.adornedPart),!(s instanceof Node))return;const n=s.diagram;if(n===null)return;const o=n.commandHandler;if(s.isTreeExpanded){if(!o.canCollapseTree(s))return}else if(!o.canExpandTree(s))return;i.handled=!0,s.isTreeExpanded?o.collapseTree(s):o.expandTree(s)},t}),GraphObject.defineBuilder("SubGraphExpanderButton",y=>{const t=GraphObject.build("Button");return t.attach({_subGraphExpandedFigure:"MinusLine",_subGraphCollapsedFigure:"PlusLine"}),t.add(new Shape("MinusLine",{name:"ButtonIcon",stroke:"#0a0a0a",strokeWidth:2,desiredSize:Size.fu}).bindObject("figure","isSubGraphExpanded",(i,e)=>{const s=e.panel;return i?s._subGraphExpandedFigure:s._subGraphCollapsedFigure})),t.click=(i,e)=>{let s=e.part;if(s instanceof Adornment&&(s=s.adornedPart),!(s instanceof Group))return;const n=s.diagram;if(n===null)return;const o=n.commandHandler;if(s.isSubGraphExpanded){if(!o.canCollapseSubGraph(s))return}else if(!o.canExpandSubGraph(s))return;i.handled=!0,s.isSubGraphExpanded?o.collapseSubGraph(s):o.expandSubGraph(s)},t}),GraphObject.defineBuilder("ToolTip",y=>new Adornment(Panel.Auto,{isShadowed:!0,shadowColor:"rgba(0, 0, 0, .4)",shadowOffset:new Point(0,2)}).add(new Shape("RoundedRectangle",{name:"Border",parameter1:1,fill:"#f5f5f5",strokeWidth:0,spot1:new Spot(0,0,4,6),spot2:new Spot(1,1,-4,-4)}))),GraphObject.defineBuilder("ContextMenu",y=>new Adornment(Panel.Vertical,{background:"#f5f5f5",isShadowed:!0,shadowColor:"rgba(0, 0, 0, .4)",shadowOffset:new Point(0,2)}).bindObject("background","",t=>t.adornedPart!==null&&t.hasPlaceholder()?null:"#f5f5f5")),GraphObject.defineBuilder("ContextMenuButton",y=>{const t=GraphObject.build("Button");t.stretch=5;const i=t.findObject("ButtonBorder");return i instanceof Shape&&(i.figure="Rectangle",i.strokeWidth=0,i.spot1=new Spot(0,0,4,6),i.spot2=new Spot(1,1,-4,-4)),t}),GraphObject.defineBuilder("PanelExpanderButton",y=>{const t=GraphObject.takeBuilderArgument(y,"COLLAPSIBLE"),i=GraphObject.build("Button");i.attach({_buttonExpandedFigure:"M0 0 M0 6 L4 2 8 6 M8 8",_buttonCollapsedFigure:"M0 0 M0 2 L4 6 8 2 M8 8","ButtonBorder.fill":"rgba(0, 0, 0, 0)",_buttonFillNormal:"rgba(0, 0, 0, 0)","ButtonBorder.stroke":null,_buttonStrokeNormal:null,_buttonFillOver:"rgba(0, 0, 0, .2)",_buttonStrokeOver:null}),i.add(new Shape({name:"ButtonIcon",strokeWidth:2}).bindObject("geometryString","visible",s=>s?i._buttonExpandedFigure:i._buttonCollapsedFigure,void 0,t));const e=i.findObject("ButtonBorder");return e instanceof Shape&&(e.stroke=null,e.fill="rgba(0, 0, 0, 0)"),i.click=(s,n)=>{if(!(n instanceof Panel))return;const o=n.diagram;if(o===null||o.isReadOnly)return;let r=n.findBindingPanel();if(r===null&&(r=n.part),r!==null){const l=r.findObject(t);l!==null&&(s.handled=!0,o.startTransaction("Collapse/Expand Panel"),l.visible=!l.visible,o.commitTransaction("Collapse/Expand Panel"))}},i}),GraphObject.defineBuilder("CheckBoxButton",y=>{const t=GraphObject.takeBuilderArgument(y),i=GraphObject.build("Button",{desiredSize:new Size(14,14)});i.attach({"ButtonBorder.spot1":new Spot(0,0,1,1),"ButtonBorder.spot2":new Spot(1,1,-1,-1)});const e=new Shape({name:"ButtonIcon",geometryString:"M0 0 M0 8.85 L4.9 13.75 16.2 2.45 M16.2 16.2",strokeWidth:2,stretch:2,geometryStretch:6,visible:!1});return t!==""&&e.bindTwoWay("visible",t),i.add(e),i.click=(s,n)=>{if(!(n instanceof Panel))return;const o=s.diagram;if(o===null||o.isReadOnly||t!==""&&o.model.isReadOnly)return;s.handled=!0;const r=n.findObject("ButtonIcon");o.startTransaction("checkbox"),r!==null&&(r.visible=!r.visible),U.rt(n._doClick)&&n._doClick(s,n),o.commitTransaction("checkbox")},i}),GraphObject.defineBuilder("CheckBox",y=>{const t=GraphObject.takeBuilderArgument(y),i=GraphObject.build("CheckBoxButton",{name:"Button",isActionable:!1,margin:new Margin(0,1,0,0)},t),e=new Panel("Horizontal",{isActionable:!0,cursor:i.cursor,margin:new Margin(1),mouseEnter:i.mouseEnter,mouseLeave:i.mouseLeave,click:i.click}).attach({_buttonFillNormal:i._buttonFillNormal,_buttonStrokeNormal:i._buttonStrokeNormal,_buttonFillOver:i._buttonFillOver,_buttonStrokeOver:i._buttonStrokeOver,_buttonFillDisabled:i._buttonFillDisabled,_buttonClick:i.click});return e.add(i),i.mouseEnter=null,i.mouseLeave=null,i.click=null,e});class GraphObjectTemplateSettings{mi;Lt;Zn;Fi;Qn;js;Ll;Rr;Ir;Or;Xr;Yr;Er;Br;Vr;U0;G0;zr;H0;q0;W0;j0;Kr;Ur;L0;V0;Ms;Sr;Mr;io;B0;E0;kr;C0;J0;$0;constructor(){this.mi=!1,this.Lt="",this.Zn=-1,this.Fi=null,this.Qn=null,this.js=null,this.Ll="",this.Rr=null,this.Ir=null,this.Or=null,this.Xr=null,this.Yr=null,this.Er=null,this.Br=null,this.Vr=null,this.U0=null,this.G0=null,this.zr=null,this.H0=null,this.q0=null,this.W0=null,this.j0=null,this.Kr=null,this.Ur=null,this.L0=null,this.V0=null,this.Ms=null,this.Sr=Size.Gh,this.Mr=Size.Mw,this.io=1,this.B0=1,this.E0=1,this.kr=0,this.C0=null,this.J0=null,this.$0="category"}copy(){const t=new GraphObjectTemplateSettings;return t.Lt=this.Lt,t.Zn=this.Zn,t.Fi=this.Fi,t.js=this.js,t.Ll=this.Ll,t.Rr=this.Rr,t.Ir=this.Ir,t.Or=this.Or,t.Xr=this.Xr,t.Yr=this.Yr,t.Er=this.Er,t.Br=this.Br,t.Vr=this.Vr,t.U0=this.U0,t.G0=this.G0,t.zr=this.zr,t.H0=this.H0,t.q0=this.q0,t.W0=this.W0,t.j0=this.j0,t.Kr=this.Kr,t.Ur=this.Ur,t.L0=this.L0,t.V0=this.V0,t.Ms=this.Ms,t.Sr=this.Sr.N(),t.Mr=this.Mr.N(),t.io=this.io,t.B0=this.B0,t.E0=this.E0,t.kr=this.kr,t.C0=this.C0,t.J0=this.J0,t.$0=this.$0,t}}class STransform{m;constructor(){this.m=[1,0,0,1,0,0]}copy(){const t=new STransform;return t.m[0]=this.m[0],t.m[1]=this.m[1],t.m[2]=this.m[2],t.m[3]=this.m[3],t.m[4]=this.m[4],t.m[5]=this.m[5],t}translate(t,i){this.m[4]+=this.m[0]*t+this.m[2]*i,this.m[5]+=this.m[1]*t+this.m[3]*i}scale(t,i){this.m[0]*=t,this.m[1]*=t,this.m[2]*=i,this.m[3]*=i}rotate(t,i,e){if(t>=360?t-=360:t<0&&(t+=360),t===0)return;this.translate(i,e);let s=0,n=0;if(t===90)s=0,n=1;else if(t===180)s=-1,n=0;else if(t===270)s=0,n=-1;else{const f=t*Math.PI/180;s=Math.cos(f),n=Math.sin(f)}const o=this.m[0]*s+this.m[2]*n,r=this.m[1]*s+this.m[3]*n,l=this.m[0]*-n+this.m[2]*s,h=this.m[1]*-n+this.m[3]*s;this.m[0]=o,this.m[1]=r,this.m[2]=l,this.m[3]=h,this.translate(-i,-e)}}class SGradient{type;x1;y1;r1;x2;y2;r2;colors;pattern;constructor(t){this.type=t,this.x1=0,this.y1=0,this.r1=0,this.x2=0,this.y2=0,this.r2=0,this.colors=[],this.pattern=null}addColorStop(t,i){this.colors.push({offset:t,color:i})}}class SVGSurface{Et;ci;Zr;$u;BP;constructor(t,i,e){const s=i===void 0?root.document:i;this.Zr=s,this.BP="http://www.w3.org/2000/svg";const n="http://www.w3.org/2000/xmlns/";s!==void 0&&(this.Et=this.makeElement("svg",{width:"1px",height:"1px",viewBox:"0 0 1 1"}),this.style.display="block",this.style.letterSpacing="normal",this.style.wordSpacing="normal",e||(this.style.position="absolute"),this.Et.setAttributeNS(n,"xmlns",this.BP),this.Et.setAttributeNS(n,"xmlns:xlink","http://www.w3.org/1999/xlink")),this.$u=null,this.ci=new SVGContext(this,e)}resize(t,i,e,s){return this.width!==t||this.height!==i?(this.width=t,this.height=i,this.style.width=e+"px",this.style.height=s+"px",this.Et.setAttributeNS(null,"width",e+"px"),this.Et.setAttributeNS(null,"height",s+"px"),this.Et.setAttributeNS(null,"viewBox","0 0 "+e+" "+s),this.ci.VP.firstElementChild.setAttributeNS(null,"width",e+"px"),this.ci.VP.firstElementChild.setAttributeNS(null,"height",s+"px"),!0):!1}makeElement(t,i,e){const s=this.Zr.createElementNS(this.BP,t);if(U.W(i))for(const n in i)s.setAttributeNS(n==="href"?"http://www.w3.org/1999/xlink":"",n,i[n]);return e!==void 0&&(s.textContent=e),s}getBoundingClientRect(){return this.Et.getBoundingClientRect()}focus(){this.Et.focus()}get width(){return this.Et.width.baseVal.value}set width(t){this.Et.setAttribute("width",t+"px")}get height(){return this.Et.height.baseVal.value}set height(t){this.Et.setAttribute("height",t+"px")}dispose(){this.Zr=null}get style(){return this.Et.style}}class SVGContext{fc;cc;wn;Ri;qe;fillStyle;font;globalAlpha;lineCap;lineDashOffset;lineJoin;lineWidth;miterLimit;shadowBlur;shadowColor;shadowOffsetX;shadowOffsetY;strokeStyle;textAlign;imageSmoothingEnabled;clipInsteadOfFill;lastCreatedElement;uc;dc;surface;svg;VP;EL;ob;Ko;kh;Fa;currentElement;clipPathGroup;diagramGroup;lastDrawnPart;currentPath;outerGroup;pathAttributes;sl;Ar;filter;partClipRect;constructor(t,i){if(this.surface=t,this.svg=t.Et,this.uc=[],this.dc=[],this.fillStyle="#000000",this.font="10px sans-serif",this.globalAlpha=1,this.lineCap="butt",this.lineDashOffset=0,this.lineJoin="miter",this.lineWidth=1,this.miterLimit=10,this.shadowBlur=0,this.shadowColor="rgba(0, 0, 0, 0)",this.shadowOffsetX=0,this.shadowOffsetY=0,this.sl=!1,this.strokeStyle="#000000",this.textAlign="start",this.clipInsteadOfFill=!1,this.fc=0,this.cc=0,this.wn=0,this.lastCreatedElement=null,this.currentElement=null,this.Ri=[],this.pathAttributes={},this.ob=!1,this.Ko=null,this.kh=0,this.qe=new STransform,t.Zr===null||t.Zr===void 0)return;this.clipPathGroup=this.newGroup2(),this.diagramGroup=this.newGroup2("gojs-diagram"),this.lastDrawnPart=null,this.currentPath=null;const e=GSet.Sw++,s=this.makeElement("clipPath",{id:"mainClip"+e}),n={x:0,y:0,width:t.width,height:t.height};s.appendChild(this.makeElement("rect",n)),this.VP=s,this.svg.appendChild(this.clipPathGroup),this.clipPathGroup.appendChild(this.diagramGroup),this.svg.appendChild(s),this.clipPathGroup.setAttributeNS(null,"clip-path","url(#mainClip"+e+")"),this.EL={},this.Ar=!!i,this.filter="",this.partClipRect=null}setDiagramPosScale(t,i,e,s,n,o){this.diagramGroup===void 0?this.newGroup(t,i,e,s,n,o):this.diagramGroup.setAttribute("transform","matrix("+t+", "+i+", "+e+", "+s+", "+n+", "+o+")")}resetInnerSVG(){this.diagramGroup!==null&&(this.diagramGroup.innerHTML="")}arc(t,i,e,s,n,o,r,l){const h=2*Math.PI,f=1e-6,a=h-f,c=e*Math.cos(s),u=e*Math.sin(s),d=t+c,m=i+u,g=o?0:1;let p=o?s-n:n-s;(Math.abs(r-d)>f||Math.abs(l-m)>f)&&this.Ri.push(["L",d,+m]),p<0&&(p=p%h+h),p>a?(this.Ri.push(["A",e,e,0,1,g,t-c,i-u]),this.Ri.push(["A",e,e,0,1,g,d,m])):p>f&&this.Ri.push(["A",e,e,0,+(p>=Math.PI),g,t+e*Math.cos(n),i+e*Math.sin(n)])}beginPath(){this.Ri=[],this.pathAttributes={stroke:"none",fill:"none"}}endPath(t){this.cI(this.Ri,this.qe,t||0)}bezierCurveTo(t,i,e,s,n,o){this.Ri.push(["C",t,i,e,s,n,o])}clearRect(t,i,e,s){}clip(){this.pathAttributes.clipPath=!0}closePath(){this.Ri.push(["z"])}createLinearGradient(t,i,e,s){const n=new SGradient("linear");return n.x1=t,n.y1=i,n.x2=e,n.y2=s,n}createPattern(t,i){let e="";t instanceof HTMLCanvasElement&&(e=t.toDataURL()),t instanceof HTMLImageElement&&(e=t.getAttribute("src"));const s=this.EL;if(s[e])return"url(#"+s[e]+")";const n="PATTERN"+GSet.Sw++,o={width:t.width,height:t.height,id:n,patternUnits:"userSpaceOnUse"},r={x:0,y:0,width:t.width,height:t.height,href:e},l=this.makeElement("pattern",o);return l.appendChild(this.makeElement(Diagram.img,r)),this.svg.appendChild(l),s[e]=n,"url(#"+n+")"}createRadialGradient(t,i,e,s,n,o){const r=new SGradient("radial");return r.x1=t,r.y1=i,r.r1=e,r.x2=s,r.y2=n,r.r2=o,r}amendImageTransform(t,i,e,s,n,o,r,l){const h=r/e,f=l/s;(n!==0||o!==0)&&this.qe.translate(n,o),(h!==1||f!==1)&&this.qe.scale(h,f),(t!==0||i!==0)&&this.qe.translate(-t,-i)}drawImage(t,i,e,s,n,o,r,l,h){let f="";t instanceof HTMLCanvasElement&&(f=t.toDataURL()),t instanceof HTMLImageElement&&(f=t.getAttribute("src"));const a=t instanceof HTMLImageElement?t.naturalWidth:t.width,c=t instanceof HTMLImageElement?t.naturalHeight:t.height;s===void 0&&(o=i,r=e,l=s=a,h=n=c),s=s||0,n=n||0,o=o||0,r=r||0,l=l||0,h=h||0,this.amendImageTransform(i,e,s,n,o,r,l,h);const u={x:0,y:0,width:a||s,height:c||n,href:f};!Geo.G(s,l)||!Geo.G(n,h)?u.preserveAspectRatio="none":f.toLowerCase().indexOf(".svg")===-1&&f.toLowerCase().indexOf("data:image/svg")===-1&&(u.preserveAspectRatio="xMidYMid slice"),(i!==0||e!==0||s!==a||n!==c)&&(s+=i,n+=e,u["clip-path"]=`path('M ${i},${e} L ${s} ${e} L ${s} ${n} L ${i} ${n} z')`),this.processCommon(Diagram.img,u,this.qe),this.ld(Diagram.img,u)}fill(t,i){t&&(this.pathAttributes["fill-rule"]="evenodd"),this.setFill(this.pathAttributes)}fillContext(t,i,e){this.clipInsteadOfFill?this.clip():this.fill(i,e)}createOrUpdateClipGroup(t,i){const e=this.newGroup(1,0,0,1,-i.x,-i.y);e.setAttributeNS(null,"class","spotClip"),t.gh=e}fillRect(t,i,e,s){this.addRect("fill",[t,i,e,s],this.qe)}fillBackground(t,i,e,s){const n={x:t,y:i,width:e,height:s};this.processCommon("fill",n,this.qe),this.setFill(n),this.svg.prepend(this.makeElement("rect",n))}fillText(t,i,e){this.addText("fill",[t,i,e],this.qe)}lineTo(t,i){this.Ri.push(["L",t,i])}moveTo(t,i){this.Ri.push(["M",t,i])}quadraticCurveTo(t,i,e,s){this.Ri.push(["Q",t,i,e,s])}rect(t,i,e,s){this.Ri.push(["M",t,i],["L",t+e,i],["L",t+e,i+s],["L",t,i+s],["z"])}restore(){this.qe=this.uc.pop(),this.Ri=this.uc.pop();const t=this.uc.pop();this.fillStyle=t.fillStyle,this.font=t.font,this.globalAlpha=t.globalAlpha,this.lineCap=t.lineCap,this.lineDashOffset=t.lineDashOffset,this.lineJoin=t.lineJoin,this.lineWidth=t.lineWidth,this.miterLimit=t.miterLimit,this.shadowBlur=t.shadowBlur,this.shadowColor=t.shadowColor,this.shadowOffsetX=t.shadowOffsetX,this.shadowOffsetY=t.shadowOffsetY,this.strokeStyle=t.strokeStyle,this.textAlign=t.textAlign,this.partClipRect=t.partClipRect}save(){const t={fillStyle:this.fillStyle,font:this.font,globalAlpha:this.globalAlpha,lineCap:this.lineCap,lineDashOffset:this.lineDashOffset,lineJoin:this.lineJoin,lineWidth:this.lineWidth,miterLimit:this.miterLimit,shadowBlur:this.shadowBlur,shadowColor:this.shadowColor,shadowOffsetX:this.shadowOffsetX,shadowOffsetY:this.shadowOffsetY,strokeStyle:this.strokeStyle,textAlign:this.textAlign,partClipRect:this.partClipRect};this.uc.push(t);const i=[];for(let e=0;eh.offset>f.offset?1:-1);for(let h=0;h1&&this.dc[this.dc.length-2].setAttributeNS(null,"clip-path",'path("'+s+'") view-box');return}if(n.d=s,this.processCommon("",n,i),this.currentPath!==null){const r=this.currentPath;if(r.nodeName!=="g")for(const l in n)l!=="transform"&&r.setAttributeNS(null,l,n[l]);else{const l=r.getElementsByTagName("path");for(const h in n)h!=="transform"&&l[e].setAttributeNS(null,h,n[h])}}else this.ld("path",n)}uI(t){const i=[];for(let e=0;es?(this.scale(s/n,1),this.translate((n-s)/2,0)):s>n&&(this.scale(1,n/s),this.translate(0,(s-n)/2)),this.fillOrClip(i,e),n>s?(this.translate(-(n-s)/2,0),this.scale(1/(s/n),1)):s>n&&(this.translate(0,-(s-n)/2),this.scale(1,1/(n/s))),!0}strokeContext(){this.clipInsteadOfFill||this.stroke()}fillOrClip(t,i){this.clipInsteadOfFill?this.clip(i):this.fill(t,i)}shadowsSet(t,i,e){this.fc=t,this.cc=i,this.wn=e}shadowsOff(){this.sl=!1,this.shadowOffsetX=0,this.shadowOffsetY=0,this.shadowBlur=0}shadowsOn(){this.sl=!0,this.shadowOffsetX=this.fc,this.shadowOffsetY=this.cc,this.shadowBlur=this.wn}enableDash(t,i){const e=this.z;e.setLineDash!==void 0&&(e.setLineDash(t),e.lineDashOffset=i)}disableDash(){const t=this.z;t.setLineDash!==void 0&&(t.setLineDash(CanvasSurfaceContext.EmptyArray),t.lineDashOffset=0)}clearContextCache(t){t&&(this.rb=""),this.lb="",this.hb=""}removePartFromView(t){}static EmptyArray=Object.freeze([])}var BrushType=(y=>(y[y.Solid=1]="Solid",y[y.Linear=2]="Linear",y[y.Radial=3]="Radial",y[y.Pattern=4]="Pattern",y))(BrushType||{}),ColorSpace=(y=>(y[y.Lab=1]="Lab",y[y.HSL=2]="HSL",y[y.Oklch=3]="Oklch",y))(ColorSpace||{});class ColorNumbers{n0;n1;n2;n3;constructor(){this.n0=0,this.n1=0,this.n2=0,this.n3=0}}class Brush{f;$;Ra;li;xs;Z0;Q0;Uo;_0;pn;rc;ib;constructor(t,i){if(GSet.Ji(this),this.f=!1,t===void 0)this.$=1,this.Ra="black";else if(typeof t=="string"){const s=U.Uh(BrushType,t);s!==null?(this.$=s,this.Ra="black"):(this.$=1,Debug&&!Brush.isValidColor(t)&&U.n('Color "'+t+'" is not a valid color string for Brush constructor'),this.Ra=t)}else Object.keys(BrushType).hasOwnProperty(t)?(Debug&&U.j(t,BrushType,"BrushType"),this.$=t,this.Ra="black"):typeof t=="object"&&(this.$=1,i=t);const e=this.$;if(e===2?(this.li=Spot.TopCenter,this.xs=Spot.BottomCenter):e===3?(this.li=Spot.Center,this.xs=Spot.Center):(this.li=Spot.None,this.xs=Spot.None),this.Z0=0,this.Q0=NaN,this.Uo=null,this._0=null,this.pn=null,this.rc=0,this.ib=0,i){const s={};for(const n in i)isFinite(parseFloat(n))?this.addColorStop(parseFloat(n),i[n]):s[n]=i[n];Object.assign(this,s)}}copy(){const t=new Brush;return t.$=this.$,t.Ra=this.Ra,t.li=this.li.N(),t.xs=this.xs.N(),t.Z0=this.Z0,t.Q0=this.Q0,this.Uo!==null&&(t.Uo=this.Uo.copy()),t._0=this._0,t}p(){return this.f=!0,this.Uo!==null&&this.Uo.p(),this}ai(t){t in BrushType?this.type=t:U.hr(this,t)}toString(){let t="Brush(";if(this.type===1)t+=this.color;else if(this.type===2?t+="Linear ":this.type===3?t+="Radial ":this.type===4?t+="Pattern ":t+="(unknown) ",t+=this.start+" "+this.end,this.colorStops!==null){const i=this.colorStops.iterator;for(;i.next();){const e=i.key,s=i.value;t+=" "+e+":"+s}}return t+=")",t}addColorStop(t,i){return this.f&&U.D(this),(typeof t!="number"||!isFinite(t)||t>1||t<0)&&U.U(t,"0 <= loc <= 1",Brush,"addColorStop:loc"),U.i(i,"string",Brush,"addColorStop:color"),Debug&&!Brush.isValidColor(i)&&U.n('Color "'+i+'" is not a valid color string for Brush.addColorStop'),this.Uo===null&&(this.Uo=new GMap),this.Uo.set(t,i),this.$===1&&(this.type=2),this.pn=null,this}get type(){return this.$}set type(t){this.f&&U.D(this,t),Debug&&U.j(t,BrushType,"BrushType"),this.$=t,this.start.isNoSpot()&&(t===2?this.start=Spot.TopCenter:t===3&&(this.start=Spot.Center)),this.end.isNoSpot()&&(t===2?this.end=Spot.BottomCenter:t===3&&(this.end=Spot.Center)),this.pn=null}get color(){return this.Ra}set color(t){this.f&&U.D(this,t),Debug&&!Brush.isValidColor(t)&&U.n('Color "'+t+'" is not a valid color string for Brush.color'),this.Ra=t,this.pn=null}get start(){return this.li}set start(t){this.f&&U.D(this,t),Debug&&U.e(t,Spot,Brush,"start"),this.li=t.N(),this.pn=null}get end(){return this.xs}set end(t){this.f&&U.D(this,t),Debug&&U.e(t,Spot,Brush,"end"),this.xs=t.N(),this.pn=null}get startRadius(){return this.Z0}set startRadius(t){this.f&&U.D(this,t),Debug&&U.r(t,Brush,"startRadius"),t<0&&U.U(t,">= zero",Brush,"startRadius"),this.Z0=t,this.pn=null}get endRadius(){return this.Q0}set endRadius(t){this.f&&U.D(this,t),Debug&&U.r(t,Brush,"endRadius"),t<0&&U.U(t,">= zero",Brush,"endRadius"),this.Q0=t,this.pn=null}get colorStops(){return this.Uo}set colorStops(t){this.f&&U.D(this,t),Debug&&U.e(t,GMap,Brush,"colorStops"),this.Uo=t,this.pn=null}get pattern(){return this._0}set pattern(t){this.f&&U.D(this,t),this._0=t,this.pn=null}static randomColor(t,i){t===void 0&&(t=128),Debug&&(U.r(t,Brush,"randomColor:min"),(t<0||t>255)&&U.U(t,"0 <= min <= 255",Brush,"randomColor:min")),i===void 0&&(i=Math.max(t,255)),Debug&&(U.r(i,Brush,"randomColor:max"),(i255)&&U.U(i,"min <= max <= 255",Brush,"randomColor:max"));const e=Math.abs(i-t);let s=Math.floor(t+Math.random()*e).toString(16),n=Math.floor(t+Math.random()*e).toString(16),o=Math.floor(t+Math.random()*e).toString(16);return s.length<2&&(s="0"+s),n.length<2&&(n="0"+n),o.length<2&&(o="0"+o),"#"+s+n+o}static isValidColor(t){return root.CSS?root.CSS.supports("color",t):!0}static lighten(t){return Brush.lightenBy(t)}lightenBy(t,i){this.f&&U.D(this);const e=t===void 0||typeof t!="number"?.2:t,s=i===void 0?3:i;if(this.type===1)Brush.Fo(this.color),this.color=Brush.hd(e,s);else if((this.type===2||this.type===3)&&this.colorStops!==null){const n=this.colorStops.iterator;for(;n.next();)Brush.Fo(n.value),this.addColorStop(n.key,Brush.hd(e,s))}return this}static lightenBy(t,i,e){const s=i===void 0||typeof i!="number"?.2:i,n=e===void 0?3:e;return Brush.Fo(t),Brush.hd(s,n)}static darken(t){return Brush.darkenBy(t)}darkenBy(t,i){this.f&&U.D(this);const e=t===void 0||typeof t!="number"?.2:t,s=i===void 0?3:i;if(this.type===1)Brush.Fo(this.color),this.color=Brush.hd(-e,s);else if((this.type===2||this.type===3)&&this.colorStops!==null){const n=this.colorStops.iterator;for(;n.next();)Brush.Fo(n.value),this.addColorStop(n.key,Brush.hd(-e,s))}return this}static darkenBy(t,i,e){const s=i===void 0||typeof i!="number"?.2:i,n=e===void 0?3:e;return Brush.Fo(t),Brush.hd(-s,n)}static mix(t,i,e){Brush.Fo(t);const s=Brush.q.n0,n=Brush.q.n1,o=Brush.q.n2,r=Brush.q.n3;Brush.Fo(i),e===void 0&&(e=.5);const l=Math.round((Brush.q.n0-s)*e+s),h=Math.round((Brush.q.n1-n)*e+n),f=Math.round((Brush.q.n2-o)*e+o),a=Math.round((Brush.q.n3-r)*e+r);return`rgba(${l}, ${h}, ${f}, ${a})`}isDark(){if(this.type===1)return Brush.isDark(this.color);if((this.type===2||this.type===3)&&this.colorStops!==null){const t=this.colorStops;if(this.type===3)return Brush.isDark(t.first().value);if(t.get(.5)!==null)return Brush.isDark(t.get(.5));if(t.count===2){const l=t.toArray();return Brush.isDark(Brush.mix(l[0].value,l[1].value))}const i=t.iterator;let e=-1,s=-1,n=1,o=1;for(;i.next();){const l=i.key,h=Math.abs(.5-i.key);n>o&&h=n&&hs){let l=e;e=s,s=l,l=n,n=o,o=l}const r=s-e;return Brush.isDark(Brush.mix(t.get(e),t.get(s),1-o/r))}return!1}static isDark(t){return t?t instanceof Brush?t.isDark():(Brush.Fo(t),(299*Brush.q.n0+587*Brush.q.n1+114*Brush.q.n2)/1e3<128):!1}static hd(t,i){switch(i){case 1:return Brush.dI(),Brush.eo.n0=Math.min(100,Math.max(0,Brush.eo.n0+100*t)),Brush.gI(),"rgba("+Brush.q.n0+", "+Brush.q.n1+", "+Brush.q.n2+", "+Brush.q.n3+")";case 2:return Brush.QM(),Brush.Yi.n2=Math.min(100,Math.max(0,Brush.Yi.n2+100*t)),"hsla("+Brush.Yi.n0+", "+Brush.Yi.n1+"%, "+Brush.Yi.n2+"%, "+Brush.Yi.n3+")";case 3:return Brush.mI(),Brush.so.n0=Math.min(100,Math.max(0,Brush.so.n0+100*t)),Brush.pI(),"rgba("+Brush.q.n0+", "+Brush.q.n1+", "+Brush.q.n2+", "+Brush.q.n3+")";default:U.n("Unknown color space: "+i)}}static Fo(t){Brush.tp===!1&&(Brush.tp=!0,Brush.no=Diagram.isUsingDOM()?new CanvasSurface(null,void 0,{willReadFrequently:!0}).ci:null);const i=Brush.no;if(i===null)return;i.clearRect(0,0,1,1),i.fillStyle="#000000";const e=i.fillStyle;if(i.fillStyle=t,i.fillStyle!==e){i.fillRect(0,0,1,1);const s=i.getImageData(0,0,1,1).data;Brush.q.n0=s[0],Brush.q.n1=s[1],Brush.q.n2=s[2],Brush.q.n3=s[3]/255}else{i.fillStyle="#FFFFFF";const s=i.fillStyle;i.fillStyle=t,i.fillStyle===s&&Debug&&U.n('Color "'+t+'" is not a valid color string for RGBA color conversion'),Brush.q.n0=0,Brush.q.n1=0,Brush.q.n2=0,Brush.q.n3=1}}static QM(){const t=Brush.q.n0/255,i=Brush.q.n1/255,e=Brush.q.n2/255,s=Math.max(t,i,e),n=Math.min(t,i,e),o=s-n;let r,l;const h=(s+n)/2;if(o===0)r=l=0;else{switch(s){case t:r=(i-e)/o%6;break;case i:r=(e-t)/o+2;break;case e:r=(t-i)/o+4;break}r*=60,r<0&&(r+=360),l=o/(1-Math.abs(2*h-1))}Brush.Yi.n0=Math.round(r),Brush.Yi.n1=Math.round(l*100),Brush.Yi.n2=Math.round(h*100),Brush.Yi.n3=Brush.q.n3}static RE(){const t=Brush.Yi.n0,i=Brush.Yi.n1/100,e=Brush.Yi.n2/100;let s,n,o;const r=(1-Math.abs(2*e-1))*i,l=t/60,h=r*(1-Math.abs(l%2-1));l>=0&&l<1?(s=r,n=h,o=0):l>=1&&l<2?(s=h,n=r,o=0):l>=2&&l<3?(s=0,n=r,o=h):l>=3&&l<4?(s=0,n=h,o=r):l>=4&&l<5?(s=h,n=0,o=r):l>=5&&l<6&&(s=r,n=0,o=h);const f=e-.5*r;s+=f,n+=f,o+=f,Brush.q.n0=Math.round(s*255),Brush.q.n1=Math.round(n*255),Brush.q.n2=Math.round(o*255),Brush.q.n3=Brush.Yi.n3}static dI(){Brush.BL(),Brush.yI()}static gI(){Brush.wI(),Brush.VL()}static zP(t){return t/=255,t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}static XP(t){return t<=.0031308?t*12.92:1.055*Math.pow(t,1/2.4)-.055}static BL(){const t=Brush.zP(Brush.q.n0),i=Brush.zP(Brush.q.n1),e=Brush.zP(Brush.q.n2);Brush.Bt.n0=.4124564*t+.3575761*i+.1804375*e,Brush.Bt.n1=.2126729*t+.7151522*i+.072175*e,Brush.Bt.n2=.0193339*t+.119192*i+.9503041*e,Brush.Bt.n3=Brush.q.n3}static VL(){const t=3.2404542*Brush.Bt.n0+-1.5371385*Brush.Bt.n1+-.4985314*Brush.Bt.n2,i=-.969266*Brush.Bt.n0+1.8760108*Brush.Bt.n1+.041556*Brush.Bt.n2,e=.0556434*Brush.Bt.n0+-.2040259*Brush.Bt.n1+1.0572252*Brush.Bt.n2;Brush.q.n0=Brush.XP(t)*255,Brush.q.n1=Brush.XP(i)*255,Brush.q.n2=Brush.XP(e)*255,Brush.q.n3=Brush.Bt.n3,Brush.q.n0=Math.round(Brush.q.n0),Brush.q.n0>255?Brush.q.n0=255:Brush.q.n0<0&&(Brush.q.n0=0),Brush.q.n1=Math.round(Brush.q.n1),Brush.q.n1>255?Brush.q.n1=255:Brush.q.n1<0&&(Brush.q.n1=0),Brush.q.n2=Math.round(Brush.q.n2),Brush.q.n2>255?Brush.q.n2=255:Brush.q.n2<0&&(Brush.q.n2=0)}static YP=216/24389;static ab=24389/27;static ad=[95.047,100,108.883];static KP(t){return t>Brush.YP?Math.pow(t,1/3):(Brush.ab*t+16)/116}static yI(){const t=Brush.KP(Brush.Bt.n0*100/Brush.ad[0]),i=Brush.KP(Brush.Bt.n1*100/Brush.ad[1]),e=Brush.KP(Brush.Bt.n2*100/Brush.ad[2]);Brush.eo.n0=116*i-16,Brush.eo.n1=500*(t-i),Brush.eo.n2=200*(i-e),Brush.eo.n3=Brush.Bt.n3}static zL(t){const i=t*t*t;return i>Brush.YP?i:(116*t-16)/Brush.ab}static wI(){const t=(Brush.eo.n0+16)/116,i=Brush.eo.n1/500+t,e=t-Brush.eo.n2/200;Brush.Bt.n0=Brush.ad[0]/100*Brush.zL(i),Brush.Bt.n1=Brush.ad[1]/100*(Brush.eo.n0>Brush.ab*Brush.YP?Math.pow(t,3):Brush.eo.n0/Brush.ab),Brush.Bt.n2=Brush.ad[2]/100*Brush.zL(e),Brush.Bt.n3=Brush.eo.n3}static xI(){let t=.8190224*Brush.Bt.n0+.3619062*Brush.Bt.n1+-.1288737*Brush.Bt.n2,i=.03298366*Brush.Bt.n0+.9292868*Brush.Bt.n1+.03614466*Brush.Bt.n2,e=.04817719*Brush.Bt.n0+.2642395*Brush.Bt.n1+.6335478*Brush.Bt.n2;t=Math.cbrt(t),i=Math.cbrt(i),e=Math.cbrt(e),Brush.di.n0=.2104542*t+.7936177*i+-.004072046*e,Brush.di.n1=1.977998*t+-2.428592*i+.4505937*e,Brush.di.n2=.02590403*t+.7827717*i+-.8086757*e,Brush.di.n3=Brush.Bt.n3,Brush.di.n0*=100}static bI(){Brush.di.n0/=100;let t=.9999999*Brush.di.n0+.3963377*Brush.di.n1+.2158037*Brush.di.n2,i=1.000000009*Brush.di.n0+-.1055613*Brush.di.n1+-.06385417*Brush.di.n2,e=1.00000005*Brush.di.n0+-.08948418*Brush.di.n1+-1.291485*Brush.di.n2;t=t**3,i=i**3,e=e**3,Brush.Bt.n0=1.2268798*t+-.5578149*i+.281391*e,Brush.Bt.n1=-.04057576*t+1.112286*i+-.07171106*e,Brush.Bt.n2=-.07637294*t+-.4214933*i+1.586924*e,Brush.Bt.n3=Brush.di.n3}static kI(){const t=Math.atan2(Brush.di.n2,Brush.di.n1)*180/Math.PI;Brush.so.n0=Brush.di.n0,Brush.so.n1=Math.sqrt(Brush.di.n1**2+Brush.di.n2**2),Brush.so.n2=t>=0?t:t+360,Brush.so.n3=Brush.di.n3}static SI(){Brush.di.n0=Brush.so.n0,Brush.di.n1=Brush.so.n1*Math.cos(Brush.so.n2*Math.PI/180),Brush.di.n2=Brush.so.n1*Math.sin(Brush.so.n2*Math.PI/180),Brush.di.n3=Brush.so.n3}static mI(){Brush.BL(),Brush.xI(),Brush.kI()}static pI(){Brush.SI(),Brush.bI(),Brush.VL()}static rd(t,i){typeof t=="string"?Debug&&!Brush.isValidColor(t)&&U.n('Color "'+t+'" is not a valid color string for '+i):t instanceof Brush||U.n("Value for "+i+" must be a color string or a Brush, not "+t)}static Solid=1;static Linear=2;static Radial=3;static Pattern=4;static Lab=1;static HSL=2;static no=null;static tp=!1;static q=new ColorNumbers;static Yi=new ColorNumbers;static Bt=new ColorNumbers;static eo=new ColorNumbers;static di=new ColorNumbers;static so=new ColorNumbers}class PanelLayout{Lt="Base";static ls=new GMap;static xn(t,i){i.name=t,PanelLayout.ls.set(t,i)}get name(){return this.Lt}set name(t){this.Lt=t}constructor(){}get classType(){return Panel}measure(t,i,e,s,n,o,r){}measureElement(t,i,e,s,n){t.dt(i,e,s,n)}arrange(t,i,e){}arrangeElement(t,i,e,s,n,o){t.Gt(i,e,s,n,o)}remeasureObject(t){t.lc()}Ui(t,i,e){}}class PanelLayoutPosition extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){const l=s.length,h=t.Go();for(let f=0;f0&&(P=Math.max(Math.abs(k.x*o+k.offsetX-(M.x*o+M.offsetX))-g,0)),r>0&&(N=Math.max(Math.abs(k.y*r+k.offsetY-(M.y*r+M.offsetY))-g,0));const T=Size.a();T.s(0,0);const L=t.Go();for(let R=0;R1,rt=et.columnSpan>1;(ct||rt)&&!(Gw&&(P=Math.max(w-mt,0)),b.Ii=b.Ii+P,b.actual=b.st+P,w=Math.max(w-(P+(pt?mt:0)),0)}if(et.columnSpan===1&&(N===0||N===4)){b=t.getColumnDefinition(q);const mt=b.computeEffectiveSpacing(),pt=b.st===0;P=Math.max(dt-b.actual,0),P+(pt?mt:0)>p&&(P=Math.max(p-mt,0)),b.Ii=b.Ii+P,b.actual=b.st+P,p=Math.max(p-(P+(pt?mt:0)),0)}(ct||rt)&&et.lc()}}}U.tt(c);let L=0,D=0;l=t.columnCount;for(let G=0;G=t.rowCount);Q++)b=t.getRowDefinition(E.row+Q),P=0,N===2||N===4?P=Math.max(b.minimum,z[E.row+Q]===0?b.maximum:Math.min(z[E.row+Q],b.maximum)):P=Math.max(b.minimum,isNaN(b.ye)?b.maximum:Math.min(b.ye,b.maximum)),B.height+=P,tt+=b.minimum;for(let Q=1;Q=t.columnCount);Q++)b=t.getColumnDefinition(E.column+Q),P=0,N===2||N===5?P=Math.max(b.minimum,V[E.column+Q]===0?b.maximum:Math.min(V[E.column+Q],b.maximum)):P=Math.max(b.minimum,isNaN(b.ye)?b.maximum:Math.min(b.ye,b.maximum)),B.width+=P,st+=b.minimum;K.width+=B.width,K.height+=B.height;const it=E.margin,et=it.right+it.left,ct=it.top+it.bottom;E.dt(K.width,K.height,st,tt);const rt=E.measuredBounds,ht=Math.max(rt.width+et,0),nt=Math.max(rt.height+ct,0);let ot=0;for(let Q=0;Q=t.rowCount);Q++)b=t.getRowDefinition(E.row+Q),ot+=b.total||0;if(ot=t.rowCount);ft++){b=t.getRowDefinition(E.row+ft);const dt=b.st||0,gt=lt(E,b,ut);Debug&&typeof gt!="number"&&U.n(E+" spanAllocation does not return a number: "+gt),b.actual=Math.min(b.maximum,dt+gt),b.st!==dt&&(Q-=b.st-dt)}}for(;Q>0;){const lt=b.st||0;if(isNaN(b.height)&&b.maximum>lt&&(b.actual=Math.min(b.maximum,lt+Q),b.st!==lt&&(Q-=b.st-lt)),b.index===0)break;b=t.getRowDefinition(b.index-1)}}let at=0;for(let Q=0;Q=t.columnCount);Q++)b=t.getColumnDefinition(E.column+Q),at+=b.total||0;if(at=t.columnCount);ft++){b=t.getColumnDefinition(E.column+ft);const dt=b.st||0,gt=lt(E,b,ut);Debug&&typeof gt!="number"&&U.n(E+" spanAllocation does not return a number: "+gt),b.actual=Math.min(b.maximum,dt+gt),b.st!==dt&&(Q-=b.st-dt)}}for(;Q>0;){const lt=b.st||0;if(isNaN(b.width)&&b.maximum>lt&&(b.actual=Math.min(b.maximum,lt+Q),b.st!==lt&&(Q-=b.st-lt)),b.index===0)break;b=t.getColumnDefinition(b.index-1)}}}U.tt(u),Size.o(B),Size.o(K),z!==void 0&&U.tt(z),V!==void 0&&U.tt(V);let H=0,W=0;const j=t.desiredSize,$=t.maxSize;N=t.qs(!0),L=0,D=0;let X=0,J=0;l=t.columnCount;for(let G=0;G0){for(;p!==a&&(u[p]===void 0||u[p].st===0);)p++;p=Math.max(Math.min(p,a-1),0),m=-u[p].position}let w=Math.min(t.leftIndex,c-1);if(d.length>0){for(;w!==c&&(d[w]===void 0||d[w].st===0);)w++;w=Math.max(Math.min(w,c-1),0),g=-d[w].position}let x=0,k=0;for(;x!==a&&u[x]===void 0;)x++;for(;k!==a&&d[k]===void 0;)k++;const b=t.part;let S=t.getRowDefinition(x),M=t.getColumnDefinition(k);for(let C=0;C=t.rowCount);nt++){const ot=t.getRowDefinition(C+nt);ot.st!==0&&(A.height+=ot.total)}for(let nt=1;nt=t.columnCount);nt++){const ot=t.getColumnDefinition(N+nt);ot.st!==0&&(A.width+=ot.total)}const O=T.st+A.width,Y=P.st+A.height;let K=h,B=f;const z=O,V=Y,H=h,W=f;let j=O,$=Y;h+O>e.width&&(j=Math.max(e.width-h,0)),f+Y>e.height&&($=Math.max(e.height-f,0));let X=I.alignment,J=0,v=0,_=0,G=0;if(X.isDefault()){X=t.defaultAlignment,X.isSpot()||(X=Spot.Center),J=X.x,v=X.y,_=X.offsetX,G=X.offsetY;const nt=T.alignment,ot=P.alignment;nt.isSpot()&&(J=nt.x,_=nt.offsetX),ot.isSpot()&&(v=ot.y,G=ot.offsetY)}else J=X.x,v=X.y,_=X.offsetX,G=X.offsetY;(isNaN(J)||isNaN(v))&&(J=.5,v=.5,_=0,G=0);let E=R.width,q=R.height;const Z=I.margin,st=Z.left+Z.right,tt=Z.top+Z.bottom,it=I.T0(P,T,!1);isNaN(I.desiredSize.width)&&(it===2||it===5)&&(E=Math.max(O-st,0)),isNaN(I.desiredSize.height)&&(it===2||it===4)&&(q=Math.max(Y-tt,0));const et=I.maxSize,ct=I.minSize;E=Math.min(et.width,E),q=Math.min(et.height,q),E=Math.max(ct.width,E),q=Math.max(ct.height,q);const rt=E+st,ht=q+tt;K+=z*J-rt*J+_+Z.left,B+=V*v-ht*v+G+Z.top,I.visible&&(Rect.contains(H,W,j,$,K,B,R.width,R.height)?I.Gt(K,B,E,q):I.Gt(K,B,E,q,new Rect(H,W,j,$)))}}}Size.o(A);for(let C=0;C0&&(b.figure==="LineV"||b.figure==="LineH")){if(i.lineWidth=b.strokeWidth,t.un(i,b.stroke,!1,!1,l,h),i.beginPath(),b.figure==="LineV"){const D=Math.floor((m-o)/o);for(let F=D;F<=D+c;F++){const I=F*o+m;0<=I&&I<=f&&this.cb(F,S,A,N)&&(i.moveTo(I,0),i.lineTo(I,a))}}else if(b.figure==="LineH"){const D=Math.floor((g-r)/r);for(let F=D;F<=D+u;F++){const I=F*r+g;0<=I&&I<=a&&this.cb(F,S,A,N)&&(i.moveTo(0,I),i.lineTo(f,I))}}i.stroke(),i.endPath()}else if(b.fill!==null){if(t.un(i,b.fill,!0,!1,l,h),b.figure==="BarV"){let D=b.width;isNaN(D)&&(D=o);const F=Math.floor((m-o)/o);for(let I=F;I<=F+c;I++){const R=I*o+m;0<=R+D&&R<=f&&this.cb(I,S,A,N)&&i.fillRect(R,0,D,a)}}else if(b.figure==="BarH"){let D=b.height;isNaN(D)&&(D=r);const F=Math.floor((g-r)/r);for(let I=F;I<=F+u;I++){const R=I*r+g;0<=R+D&&R<=a&&this.cb(I,S,A,N)&&i.fillRect(0,R,f,D)}}}T&&i.disableDash(),C!==1&&(i.globalAlpha=P)}}cb(t,i,e,s){if(i<0)return t%i===e;if(t%i!==e)return!1;const n=s.length;for(let o=0;ol&&r.push(d)}}t.ki.ip=i}qP(t){return t==="LineV"||t==="BarV"}MI(t){let i=1,e=1;const s=t.T.h,n=s.length;for(let l=0;l=g){const X=Point.a();a.YL(X),O=a.midAngle,L!==0&&(R=a.computeAngle(A,L,O),A.jt=R,A.pe(!0),A.to(!0)),F=X.x-u.x,I=X.y-u.y,Point.o(X)}else{let X,J,v=0;if(P>=0?(X=m.elt(P),J=P0?m.elt(v-1):X),O=0,X.equalsApprox(J)){let _,G;P>=0?(_=P>0?m.elt(P-1):X,G=P1?m.elt(v-2):J);const E=_.distanceSquaredPoint(X),q=J.distanceSquaredPoint(G);E>q+10?O=P>=0?_.directionPoint(X):X.directionPoint(_):q>E+10?O=P>=0?J.directionPoint(G):G.directionPoint(J):O=P>=0?_.directionPoint(G):G.directionPoint(_)}else O=P>=0?X.directionPoint(J):J.directionPoint(X);L!==0&&(R=a.computeAngle(A,L,O),A.jt=R,A.pe(!0),A.to(!0)),F=X.x+(J.x-X.x)*N-u.x,I=X.y+(J.y-X.y)*N-u.y}A.dt(1/0,1/0,0,0),C=A.measuredBounds;const Y=A.naturalBounds;let K=0;A instanceof Shape&&(K=A.strokeWidth);const B=Y.width+K,z=Y.height+K;k.Vi(),k.Bs(-C.x,-C.y),k.ot(A.scale,A.scale),k.ms(L===0?A.angle:O,B/2,z/2),(L===22||L===26)&&k.ms(90,B/2,z/2),(L===23||L===27)&&k.ms(-90,B/2,z/2),L===28&&(O>45&&O<135||O>225&&O<315)&&k.ms(-O,B/2,z/2);const V=new Rect(0,0,B,z);b.setRectSpot(V,T),k.kt(b);const H=-b.x+K/2*A.scale,W=-b.y+K/2*A.scale;S.c(D);const j=isNaN(D.x),$=isNaN(D.y);if(j||$){const X=B/2+3,J=z/2+3,v=O>=45&&O<=135,_=O>=225&&O<=315;L===0&&(v||_)?(S.x=$?X:D.y,S.y=j?J:D.x,v?P>=0||isNaN(P)&&N<.5||j&&(S.y=-J):_&&((P>=0||isNaN(P)&&N<.5)&&j&&(S.y=-J),$&&(S.x=-X))):(j&&(P>=0||isNaN(P)&&N<.5?S.x=X:S.x=-X),$&&(S.y=-J),S.rotate(O))}else S.rotate(O);F+=S.x,I+=S.y,V.s(F+H,I+W,C.width,C.height),x.push(V),d.unionRect(V)}if(h!==null){const M=h.labelNodes;for(;M.next();)M.value.dt(1/0,1/0)}t.Ho=d,t.position.s(u.x+d.x,u.y+d.y),n.Vn(d.width||0,d.height||0),Transform.o(k),Point.o(b),Point.o(S)}arrange(t,i,e){const s=i.length;if(!(t instanceof Adornment||t instanceof Link))return;let n=t,o=null;t instanceof Adornment&&(o=t,n=o.adornedPart);const r=t,l=t instanceof Adornment?null:n.path,h=t.gc;if(h.length!==0){let u=0;if(l!==null&&u=2&&r instanceof Link){const u=r.labelNodes;for(;u.next();){const d=u.value;r.AI(d,a,f)}}o!==null?o.fd(!1):n.fd(!1);const c=t.KL(Point.a());t.location.s(t.position.x+c.x,t.position.y+c.y),Point.o(c)}measureLinkPath(t,i,e,s){if(s.Eo()===!1)return;let n=s.strokeWidth;if(n===0&&t instanceof Adornment&&t.type===Panel.Link&&t.adornedObject instanceof Shape&&(n=t.adornedObject.strokeWidth),n=n*s.ot,t instanceof Link&&t.ft!==null){const o=t.geometry.bounds;s._n(o.x-n/2,o.y-n/2,o.width+n,o.height+n)}else if(t instanceof Adornment&&t.adornedPart.ft!==null){const o=t.adornedPart.ft.bounds;s._n(o.x-n/2,o.y-n/2,o.width+n,o.height+n)}else s._n(-(n/2),-(n/2),i+n,e+n);s.LI(),s.pe(!1)}}PanelLayout.xn("Link",new PanelLayoutLink);class PanelLayoutGraduated extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){const l=t.findMainElement();t.ve=[];const h=l.margin,f=h.right+h.left,a=h.top+h.bottom;l.dt(i,e,o,r);const c=l.measuredBounds,u=c.width,d=c.height,m=Math.max(u+f,0),g=Math.max(d+a,0),p=new Rect(-h.left,-h.top,m,g);t.ve.push(p),n.c(p),this.determineGraduatedMarks(t,l);const w=t.Ps;if(w===null)return;const x=s.length;for(let k=0;k45&&c<135||c>225&&c<315)&&S.ms(-c,k/2,b/2);const M=Rect.K(0,0,k,b),A=Point.a();A.setRectSpot(M,o),S.kt(A);const C=-A.x,P=-A.y,N=Point.a();N.c(l),isNaN(N.x)&&(N.x=k/2+3),isNaN(N.y)&&(N.y=-(b/2+3)),N.rotate(c),f+=N.x+C,a+=N.y+P;const T=new Rect(f,a,w.width,w.height),L=new Rect(w.x,w.y,w.width,w.height),D=new Rect(x.x,x.y,x.width,x.height);p.labelAngle=u,p.lineCount=n.lineCount,p.lines=n.getMetrics(),p.actualBounds=T,p.measuredBounds=L,p.naturalBounds=D,g===0?h.c(T):h.unionRect(T),Point.o(N),Point.o(A),Rect.o(M),Transform.o(S)}t.ve!==null&&t.ve.push(h),s.unionNoCheck(h.x,h.y,h.width,h.height)}determineGraduatedMarks(t,i){const e=i.geometry,s=i.strokeWidth,n=e.flattenedSegments,o=e.flattenedLengths,r=e.flattenedTotalLength,l=n.length;let h=0,f=0;const a=U.lt();for(let x=0;xt.graduatedMin+P){const F=Math.floor((N-t.graduatedMin)/P);N-=F*P}const T=c[x],L=N,D=t.graduatedMax*1e-6;for(let F=1;N<=t.graduatedMax+D;F++){if(this.DI(t,N-t.graduatedTickBase,T)&&(N>t.graduatedMax&&(N=t.graduatedMax),(k.graduatedSkip===null||k instanceof TextBlock&&!k.graduatedSkip(N,k)||k instanceof Shape&&!k.graduatedSkip(N,k))&&(m=(N-t.graduatedMin)*r/t.graduatedRange,m>r&&(m=r),g<=m&&m<=p))){let I=a[A][C],R=o[A][C];for(;AM&&C.4995)return t;let o=t;if(i<.5?n>0?o=s[n-1]:Geo.G(e[0],e[e.length-2])&&Geo.G(e[1],e[e.length-1])&&(o=s[s.length-1]):i>.5&&(n+1180&&(t.9995)return(t+o)/2%360;if(r<10){const l=1-Math.abs(.5-i);return(t*l+o*(1-l))%360}}return t}TI(t){if(t.hs===null){const i=[],e=t.T.h,s=e.length;for(let n=0;nl&&r.push(a)}}t.hs=i}return t.hs}DI(t,i,e){const s=e.length;for(let n=0;n-l)return!1}return!0}Ui(t,i,e){const s=e.la;e.la=!0;const n=t.naturalBounds,o=n.width,r=n.height,l=i instanceof SVGContext;i.save(),i.beginPath(),i.rect(-1,-1,o+1,r+1),i.clip(),i.endPath();const h=t.findMainElement();h.Ui(i,e);let f=t.getDocumentScale()*e.scale;f<=0&&(f=1);const a=h.actualBounds,c=t.T.h,u=t.Ps,d=c.length;for(let m=0;m(y[y.Uniform=6]="Uniform",y[y.UniformToFill=7]="UniformToFill",y))(ViewboxStretch||{});class Panel extends GraphObject{$;T;ei;cd;Gn;nl;oo;Ho;jP;E;ud;ht;ki;ni;dd;Mh;vs;constructor(t,i){if(super(),this.$=null,t===void 0)this.$=Panel.Position;else if(typeof t=="string"){const e=PanelLayout.ls.get(t);e!==null&&(this.$=e)}else t instanceof PanelLayout?this.$=t:t&&(this.$=Panel.Position,i=t);this.$===null&&U.n("Panel type not specified or PanelLayout not loaded: "+t),this.l|=4194304|(this.$===Panel.Grid?1048576:0),this.T=new List,this.ei=Margin.Xg,this.cd=Spot.Default,this.Gn=1,this.nl=null,this.oo="",this.Ho=new Rect(NaN,NaN,NaN,NaN),this.jP=null,this.E=null,this.ud=6,this.ki=null,this.ht=null,this.ni=null,this.dd=NaN,this.Mh=null,this.vs=null,i&&Object.assign(this,i)}cloneProtected(t){super.cloneProtected(t),t.$=this.$,t.ei=this.ei.N(),t.cd=this.cd.N(),t.Gn=this.Gn,t.oo=this.oo,t.Ho.c(this.Ho),this.E!==null&&(t.E=this.E.copy(t)),t.ud=this.ud,this.ht!==null&&(t.ht=this.ht.copy()),this.ki!==null&&(t.ki=this.ki.copy()),t.ni=this.ni,t.dd=this.dd,t.Mh=this.Mh}Xo(t){super.Xo(t),t.T=this.T;const i=t.T.h,e=i.length;for(let s=0;s= 0",Panel,"padding"),t=new Margin(t)):(U.e(t,Margin,Panel,"padding"),t.left<0&&U.U(t.left,">= 0",Panel,"padding:value.left"),t.right<0&&U.U(t.right,">= 0",Panel,"padding:value.right"),t.top<0&&U.U(t.top,">= 0",Panel,"padding:value.top"),t.bottom<0&&U.U(t.bottom,">= 0",Panel,"padding:value.bottom"));const i=this.ei;i.equals(t)||(t=t.N(),this.ei=t,this.u(),this.t("padding",i,t))}get defaultAlignment(){return this.cd}set defaultAlignment(t){const i=this.cd;i.equals(t)||(Debug&&U.e(t,Spot,Panel,"defaultAlignment"),t=t.N(),this.cd=t,this.u(),this.t("defaultAlignment",i,t))}get defaultStretch(){return this.Gn}set defaultStretch(t){const i=this.Gn;i!==t&&(Debug&&U.j(t,Stretch,"Stretch"),this.Gn=t,this.u(),this.t("defaultStretch",i,t))}get defaultSeparatorPadding(){return this.E!==null?this.E.ep:Margin.Xg}set defaultSeparatorPadding(t){typeof t=="number"?t=new Margin(t):Debug&&U.e(t,Margin,Panel,"defaultSeparatorPadding");const i=this.defaultSeparatorPadding;i.equals(t)||(t=t.N(),this.E===null&&(this.E=new TablePanelSettings),this.E.ep=t,this.u(),this.t("defaultSeparatorPadding",i,t))}get defaultRowSeparatorStroke(){return this.E!==null?this.E.sp:null}set defaultRowSeparatorStroke(t){const i=this.defaultRowSeparatorStroke;i!==t&&(t===null||typeof t=="string"||t instanceof Brush)&&(t instanceof Brush&&t.p(),this.E===null&&(this.E=new TablePanelSettings),this.E.sp=t,this.L(),this.t("defaultRowSeparatorStroke",i,t))}get defaultRowSeparatorStrokeWidth(){return this.E!==null?this.E.np:1}set defaultRowSeparatorStrokeWidth(t){const i=this.defaultRowSeparatorStrokeWidth;i!==t&&isFinite(t)&&t>=0&&(this.E===null&&(this.E=new TablePanelSettings),this.E.np=t,this.u(),this.t("defaultRowSeparatorStrokeWidth",i,t))}get defaultRowSeparatorDashArray(){return this.E!==null?this.E.op:null}set defaultRowSeparatorDashArray(t){const i=this.defaultRowSeparatorDashArray;if(i!==t){if(t!==null&&!Array.isArray(t)&&U.Pi(t,"Array",Panel,"defaultRowSeparatorDashArray:value"),t!==null){const e=t.length;let s=0;for(let n=0;n=0)||!isFinite(o))&&U.n("defaultRowSeparatorDashArray value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(i===null)return;t=null}}this.E===null&&(this.E=new TablePanelSettings),this.E.op=t,this.L(),this.t("defaultRowSeparatorDashArray",i,t)}}get defaultColumnSeparatorStroke(){return this.E!==null?this.E.rp:null}set defaultColumnSeparatorStroke(t){const i=this.defaultColumnSeparatorStroke;i!==t&&(t===null||typeof t=="string"||t instanceof Brush)&&(t instanceof Brush&&t.p(),this.E===null&&(this.E=new TablePanelSettings),this.E.rp=t,this.L(),this.t("defaultColumnSeparatorStroke",i,t))}get defaultColumnSeparatorStrokeWidth(){return this.E!==null?this.E.lp:1}set defaultColumnSeparatorStrokeWidth(t){const i=this.defaultColumnSeparatorStrokeWidth;i!==t&&isFinite(t)&&t>=0&&(this.E===null&&(this.E=new TablePanelSettings),this.E.lp=t,this.u(),this.t("defaultColumnSeparatorStrokeWidth",i,t))}get defaultColumnSeparatorDashArray(){return this.E!==null?this.E.hp:null}set defaultColumnSeparatorDashArray(t){const i=this.defaultColumnSeparatorDashArray;if(i!==t){if(t!==null&&!Array.isArray(t)&&U.Pi(t,"Array",Panel,"defaultColumnSeparatorDashArray:value"),t!==null){const e=t.length;let s=0;for(let n=0;n=0)||!isFinite(o))&&U.n("defaultColumnSeparatorDashArray value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(i===null)return;t=null}}this.E===null&&(this.E=new TablePanelSettings),this.E.hp=t,this.L(),this.t("defaultColumnSeparatorDashArray",i,t)}}get Sh(){return this.E!==null?this.E.Sh:null}set Sh(t){this.E===null&&(this.E=new TablePanelSettings),this.E.Sh=t}get viewboxStretch(){return this.ud}set viewboxStretch(t){const i=this.ud;i!==t&&(Debug&&U.j(t,ViewboxStretch,"ViewboxStretch"),this.ud=t,this.u(),this.t("viewboxStretch",i,t))}get gridCellSize(){return this.ki!==null?this.ki.gd:Size.MC}set gridCellSize(t){this.ki===null&&(this.ki=new GridPanelSettings);const i=this.ki.gd;if(!i.equals(t)){(!t.isReal()||t.width===0||t.height===0)&&U.n("Invalid Panel.gridCellSize: "+t),this.ki.gd=t.N();const e=this.diagram;e!==null&&this===e.grid&&e.lh(),this.L(),this.t("gridCellSize",i,t)}}get gridOrigin(){return this.ki!==null?this.ki.md:Point.No}set gridOrigin(t){this.ki===null&&(this.ki=new GridPanelSettings);const i=this.ki.md;if(!i.equals(t)){t.isReal()||U.n("Invalid Panel.gridOrigin: "+t),this.ki.md=t.N();const e=this.diagram;e!==null&&this===e.grid&&e.lh(),this.L(),this.t("gridOrigin",i,t)}}get graduatedMin(){return this.ht!==null?this.ht.ap:0}set graduatedMin(t){const i=this.graduatedMin;if(i!==t&&(Debug&&U.r(t,Panel,"graduatedMin"),this.ht===null&&(this.ht=new GradPanelSettings),this.ht.ap=t,this.u(),this.t("graduatedMin",i,t),this.ic())){const e=this.part;e!==null&&this.Aa(e,"graduatedRange")}}get graduatedMax(){return this.ht!==null?this.ht.fp:100}set graduatedMax(t){const i=this.graduatedMax;if(i!==t&&(Debug&&U.r(t,Panel,"graduatedMax"),this.ht===null&&(this.ht=new GradPanelSettings),this.ht.fp=t,this.u(),this.t("graduatedMax",i,t),this.ic())){const e=this.part;e!==null&&this.Aa(e,"graduatedRange")}}get graduatedRange(){return this.graduatedMax-this.graduatedMin}get graduatedTickUnit(){return this.ht!==null?this.ht.cp:10}set graduatedTickUnit(t){const i=this.graduatedTickUnit;i!==t&&t>0&&(Debug&&U.r(t,Panel,"graduatedTickUnit"),this.ht===null&&(this.ht=new GradPanelSettings),this.ht.cp=t,this.u(),this.t("graduatedTickUnit",i,t))}get graduatedTickBase(){return this.ht!==null?this.ht.dp:0}set graduatedTickBase(t){const i=this.graduatedTickBase;i!==t&&(Debug&&U.r(t,Panel,"graduatedTickBase"),this.ht===null&&(this.ht=new GradPanelSettings),this.ht.dp=t,this.u(),this.t("graduatedTickBase",i,t))}get Ps(){return this.ht!==null?this.ht.Ps:null}set Ps(t){this.ht!==null?this.ht.Ps=t:t!==null&&(this.ht=new GradPanelSettings,this.ht.Ps=t)}get ve(){return this.ht!==null?this.ht.ve:null}set ve(t){this.ht!==null?this.ht.ve=t:t!==null&&(this.ht=new GradPanelSettings,this.ht.ve=t)}get hs(){return this.ht!==null?this.ht.hs:null}set hs(t){this.ht!==null?this.ht.hs=t:t!==null&&(this.ht=new GradPanelSettings,this.ht.hs=t)}get Ae(){return this.ht!==null?this.ht.Ae:null}set Ae(t){this.ht!==null?this.ht.Ae=t:t!==null&&(this.ht=new GradPanelSettings,this.ht.Ae=t)}N0(t){super.N0(t);const i=this.T.h,e=i.length;for(let s=0;s0?this.We:null,s=this.columnCount>0?this.je:null;e!==null&&this.ub(t,i,!0,e,!0),s!==null&&this.ub(t,i,!1,s,!0),e!==null&&this.GL(t,!0,e),s!==null&&this.GL(t,!1,s),e!==null&&this.ub(t,i,!0,e,!1),s!==null&&this.ub(t,i,!1,s,!1)}GL(t,i,e){const s=e.length,n=this.actualBounds,o=this.naturalBounds;let r=!0;for(let l=0;lo.height)continue}else if(h.position>o.width)continue;let f=h.separatorStrokeWidth;isNaN(f)&&(f=i?this.defaultRowSeparatorStrokeWidth:this.defaultColumnSeparatorStrokeWidth);let a=h.separatorStroke;if(a===null&&(a=i?this.defaultRowSeparatorStroke:this.defaultColumnSeparatorStroke),f===0||a===null)continue;this.un(t,a,!1,!1,o,n);let c=!1,u=h.separatorDashArray;u===null&&(u=i?this.defaultRowSeparatorDashArray:this.defaultColumnSeparatorDashArray),u!==null&&(c=!0,t.enableDash(u,0)),t.beginPath();const d=h.position+f;i?d>o.height&&(f-=d-o.height):d>o.width&&(f-=d-o.width);let m=h.position+f/2;t.lineWidth=f;const g=this.ei;if(i){m+=g.top;const p=g.left,w=o.width-g.right;t.moveTo(p,m),t.lineTo(w,m)}else{m+=g.left;const p=g.top,w=o.height-g.bottom;t.moveTo(m,p),t.lineTo(m,w)}t.stroke(),t.endPath(),c&&t.disableDash()}}ub(t,i,e,s,n){const o=s.length,r=this.actualBounds,l=this.naturalBounds,h=this.HL(!0),f=this.HL(!1);for(let a=0;au)continue;let d=c.computeEffectiveSpacing(),m=c.separatorStrokeWidth;isNaN(m)&&(m=e?this.defaultRowSeparatorStrokeWidth:this.defaultColumnSeparatorStrokeWidth);let g=c.separatorStroke;g===null&&(g=e?this.defaultRowSeparatorStroke:this.defaultColumnSeparatorStroke),(g===null||c.index===(e?h:f))&&(m=0),d-=m;const p=c.position+m;let w=d+c.actual;if(p+w>u&&(w=u-p),w<=0)continue;const x=this.ei;this.un(t,c.background,!0,!1,l,r),e?t.fillRect(x.left,p+x.top,r.width-(x.left+x.right),w):t.fillRect(p+x.left,x.top,w,r.height-(x.top+x.bottom))}}HL(t){const i=t?this.rowCount:this.columnCount;for(let e=0;ex&&n.set(P),Point.o(P)),Point.o(M),o&&n.F(r),k}}Eu(){const t=this.T.h,i=t.length;for(let e=0;ee||h>s)&&(this.u(),this.dt(l>e?e:l,h>s?s:h,0,0));break;case 2:this.u(!0),this.dt(e+a,s+c,0,0);break;case 5:this.u(!0),this.dt(e+a,h+c,0,0);break;case 4:this.u(!0),this.dt(l+a,s+c,0,0);break}}this.$.arrange(this,n,this.Ho)}ph(t){const i=this.naturalBounds,e=this.Go();if(Rect.contains(0,0,i.width,i.height,t.x,t.y)){const s=this.T.h,n=s.length,o=Point.K(0,0);for(let r=n;r--;){const l=s[r];if(!(!l.visible&&l!==e)&&(o.set(t).Xe(l.F),l.containsPoint(o)))return Point.o(o),!0}return Point.o(o),this.Rt!==null}return!1}b0(t){if(this.Zn===t)return this;const i=this.T.h,e=i.length;for(let s=0;sd.width||u.y>d.height||u.x+u.width<0||u.y+u.height<0)continue;let m=c;const g=c instanceof Panel?c:null,p=Transform.a();p.set(r),(g!==null?g.Em(t,i,e,s,n,p):m.PL(t,s,p))&&(i!==null&&(m=i(m)),m!==null&&(e===null||e(m))&&n.add(m)),Transform.o(p)}}return o===void 0&&Transform.o(r),s}return o===void 0&&Transform.o(r),!1}JP(t,i,e){const s=this.T.h,n=s.length;for(let o=n;o--;){const r=s[o];if(!r.visible)continue;const l=r.actualBounds,h=this.naturalBounds;if(l.x>h.width||l.y>h.height||l.x+l.width<0||l.y+l.height<0)continue;r instanceof Panel&&r.JP(t,i,e);let f=r;t!==null&&(f=t(f)),f!==null&&(i===null||i(f))&&e.add(f)}}AA(t,i,e,s,n,o){if(this.pickable===!1)return!1;e===void 0&&(e=null),s===void 0&&(s=null);const r=this.naturalBounds,l=this.mn(),h=l?t:Point.K(t.x,t.y).Xe(this.F),f=l?i:Point.K(i.x,i.y).Xe(this.F),a=h.distanceSquaredPoint(f),c=h.x>0&&h.x0&&h.yS.width||b.y>S.height||b.x+b.width<0||b.y+b.height<0))continue;if(k.mn()){const C=k.F;d.set(t).Xe(C),m.set(i).Xe(C)}else d.set(t),m.set(i);let M=k;const A=k instanceof Panel?k:null;(A!==null?A.AA(d,m,e,s,n,o):M.NL(d,m,n))&&(e!==null&&(M=e(M)),M!==null&&(s===null||s(M))&&o.add(M))}Point.o(d),Point.o(m)}return n?c:u}return!1}GP(t){let i=null;if(t instanceof Shape){i=t.spot1,i===Spot.Default&&(i=null);const e=t.geometry;e!==null&&i===null&&(i=e.spot1)}return i===null&&(i=Spot.TopLeft),i}HP(t){let i=null;if(t instanceof Shape){i=t.spot2,i===Spot.Default&&(i=null);const e=t.geometry;e!==null&&i===null&&(i=e.spot2)}return i===null&&(i=Spot.BottomRight),i}add(...t){for(let i=0;i=s.count&&t>=s.count)return;s.removeAt(r),n=r}else U.n("element "+i.toString()+" has panel "+e.toString()+" but is not contained by it.")}(t<0||t>s.count)&&(t=s.count),s.insertAt(t,i),(t===0||i.isPanelMain)&&(this.nl=null),this.Eo()||this.u(),i.u(!1),i.portId!==null?this.yn=!0:i instanceof Panel&&i.yn===!0&&(this.yn=!0),this.hs=null,this.isEnabledObject()||this.db(i,!1);const o=this.part;if(o!==null){o.O0(),o.pc(),this.yn&&o instanceof Node&&(o.yn=!0),o.yn&&o instanceof Node&&(o.he=null);const r=this.diagram;if(r!==null&&r.undoManager.isUndoingRedoing)return;n!==-1&&o.raiseChangedEvent(4,"elements",this,i,null,n,null),o.raiseChangedEvent(3,"elements",this,null,i,null,t)}}get yn(){return(this.l&8388608)!==0}set yn(t){(this.l&8388608)!==0!==t&&(this.l=this.l^8388608)}NP(){return(this.l&16777216)!==0}$P(t){t?this.l|=16777216:this.l&=-16777217}BI(t){t.Ta(this),t.il=null;const i=this.T,e=i.count;i.insertAt(e,t);const s=this.part;if(s!==null){s.O0(),t.portId!==null&&s instanceof Node&&(s.yn=!0);const n=this.diagram;if(n!==null&&n.undoManager.isUndoingRedoing)return;s.raiseChangedEvent(3,"elements",this,null,t,null,e)}}sI(t){const i=this.T.h,e=i.length;let s=-1;for(let n=0;n=0&&this.ne(t,!0)}ne(t,i){const e=this.T,s=e.elt(t);if(s.il=null,s.Ta(null),this.vs!==null){const o=s.data;U.W(o)&&this.vs.delete(o)}e.removeAt(t),this.pe(!1),this.u(),this.nl===s&&(this.nl=null),this.hs=null;const n=this.part;if(n!==null){n.O0(),n.pc(),n.invalidateAdornments(),n instanceof Node&&(s instanceof Panel?s.walkVisualTreeFrom(s,(r,l)=>n.IP(l,i)):n.IP(s,i));const o=this.diagram;if(o!==null&&o.undoManager.isUndoingRedoing)return;n.raiseChangedEvent(4,"elements",this,s,null,t,null)}}get We(){return this.E===null&&(this.E=new TablePanelSettings),this.E.We}get rowCount(){return this.E===null?0:this.We.length}getRowDefinition(t){Debug&&U.r(t,Panel,"getRowDefinition:idx"),t<0&&U.U(t,">= 0",Panel,"getRowDefinition:idx"),t=Math.round(t);const i=this.We;if(i[t]===void 0){const e=new RowColumnDefinition;e.Ta(this),e.isRow=!0,e.index=t,i[t]=e,this.raiseChangedEvent(3,"rowdefs",this,null,e,null,t)}return i[t]}removeRowDefinition(t){if(Debug&&U.r(t,Panel,"removeRowDefinition:idx"),t<0&&U.U(t,">= 0",Panel,"removeRowDefinition:idx"),this.rowCount===0)return;t=Math.round(t);const i=this.We,e=i[t];if(e){i[t]=void 0;let s=i.length-1;for(;s>=0&&i[s--]===void 0;)i.length--;this.raiseChangedEvent(4,"rowdefs",this,e,null,t,null),this.u()}}iL(t,i){const e=this.We;if(!(t<0)){if(e[t]=i instanceof RowColumnDefinition?i:void 0,!i){let s=e.length-1;for(;s>=0&&e[s--]===void 0;)e.length--}this.u()}}get je(){return this.E===null&&(this.E=new TablePanelSettings),this.E.je}get columnCount(){return this.E===null?0:this.je.length}getColumnDefinition(t){Debug&&U.r(t,Panel,"getColumnDefinition:idx"),t<0&&U.U(t,">= 0",Panel,"getColumnDefinition:idx"),t=Math.round(t);const i=this.je;if(i[t]===void 0){const e=new RowColumnDefinition;e.Ta(this),e.isRow=!1,e.index=t,i[t]=e,this.raiseChangedEvent(3,"coldefs",this,null,e,null,t)}return i[t]}removeColumnDefinition(t){if(Debug&&U.r(t,Panel,"removeColumnDefinition:idx"),t<0&&U.U(t,">= 0",Panel,"removeColumnDefinition:idx"),this.columnCount===0)return;t=Math.round(t);const i=this.je,e=i[t];if(e){i[t]=void 0;let s=i.length-1;for(;s>=0&&i[s--]===void 0;)i.length--;this.raiseChangedEvent(4,"coldefs",this,e,null,t,null),this.u()}}eL(t,i){const e=this.je;if(!(t<0)){if(e[t]=i instanceof RowColumnDefinition?i:void 0,!i){let s=e.length-1;for(;s>=0&&e[s--]===void 0;)e.length--}this.u()}}addRowColumnDefinition(t){let i=null;return t.isRow?i=this.getRowDefinition(t.index):t.isRow||(i=this.getColumnDefinition(t.index)),i&&i.nb(t),this}addRowDefinition(t,i){const e=this.getRowDefinition(t);return e&&e.nb(new RowColumnDefinition(i)),this}addColumnDefinition(t,i){const e=this.getColumnDefinition(t);return e&&e.nb(new RowColumnDefinition(i)),this}get rowSizing(){return this.E!==null?this.E.mp:3}set rowSizing(t){const i=this.rowSizing;i!==t&&(Debug&&t!==3&&t!==2&&U.n("Panel.rowSizing must be ProportionalExtra or None, not: "+t),this.E===null&&(this.E=new TablePanelSettings),this.E.mp=t,this.u(),this.t("rowSizing",i,t))}get columnSizing(){return this.E!==null?this.E.pp:3}set columnSizing(t){const i=this.columnSizing;i!==t&&(Debug&&t!==3&&t!==2&&U.n("Panel.columnSizing must be ProportionalExtra or None, not: "+t),this.E===null&&(this.E=new TablePanelSettings),this.E.pp=t,this.u(),this.t("columnSizing",i,t))}get topIndex(){return this.E!==null?this.E.yp:0}set topIndex(t){const i=this.topIndex;i!==t&&((!isFinite(t)||t<0)&&U.n("Panel.topIndex must be greater than zero and a real number, not: "+t),this.E===null&&(this.E=new TablePanelSettings),this.E.yp=t,this.u(),this.t("topIndex",i,t))}get leftIndex(){return this.E!==null?this.E.wp:0}set leftIndex(t){const i=this.leftIndex;i!==t&&((!isFinite(t)||t<0)&&U.n("Panel.leftIndex must be greater than zero and a real number, not: "+t),this.E===null&&(this.E=new TablePanelSettings),this.E.wp=t,this.u(),this.t("leftIndex",i,t))}findRowForLocalY(t){if(t<0||this.type!==Panel.Table||this.rowCount===0)return-1;let i=0;const e=this.We,s=e.length;let n=this.topIndex;for(;n{o.mh();const r=o.Fi;if(r!==null){o.DP(!1);const l=r.iterator;for(;l.next();){const h=l.value;h.mode===2&&o.DP(!0);const f=h.sourceName;if(h.isToObject){f==="/"&&n.$P(!0);const a=h.ML(n,o);a!==null&&(i.add(a),a.Qn===null&&(a.Qn=new List),a.Qn.add(h))}t.add(h)}}if(o instanceof Panel&&o.type===Panel.Table){if(o.rowCount>0){const l=o.We,h=l.length;for(let f=0;f0){const l=o.je,h=l.length;for(let f=0;f0&&o instanceof Panel){const h=r.substring(0,l),f=r.substring(l+1),a=o.findObject(h);a!==null?(o=a,n.targetProperty=f):(U.nt('Warning: unable to find GraphObject named "'+h+'" for Binding: '+n.toString()),o=null)}if(o instanceof RowColumnDefinition){const h=GSet.gs(o.panel);n.targetId=h===void 0?-1:h,o.panel.Zn=n.targetId}else if(o instanceof GraphObject){const h=GSet.gs(o);n.targetId=h===void 0?-1:h,o.Zn=n.targetId}else U.n("Unknown type of binding target: "+o);n.check(o)}}return t.p(),this instanceof Part&&(this.Ce()&&this.ensureBounds(),Debug&&!Panel.JL&&this.walkVisualTreeFrom(this,(n,o)=>{if(o instanceof Panel&&(o.type===Panel.Auto||o.type===Panel.Spot||o.type===Panel.Graduated)&&o.elements.count<=1&&!(o instanceof Part)){let r=!1;if(o.elements.count===1&&(r=o.itemArray!==null,!r)){for(s=t.iterator;s.next();)if(s.value.targetProperty==="itemArray"){r=!0;break}}r||(U.nt("Auto, Spot, or Graduated Panel should not have zero or one elements: "+o.toString()+" in "+n.toString()),Panel.JL=!0)}})),this}static JL=!1;copyTemplate(t){t===void 0&&(t=!1);const i=this.copy();return i.VI(e=>{e instanceof Panel&&(e.js=null,e.ni=null);const s=e.Fi;s!==null&&(e.Fi=null,s.each(o=>e.bind(o.copy())));const n=e.Ms;n!==null&&(e.Ms=null,n.each(o=>e.trigger(o.value.copy())))}),t&&i.Kt(),i}updateTargetBindings(t){const i=this.js;if(i===null)return;t===void 0&&(t="");const e=this.diagram?.model,s=i.iterator;for(;s.next();){const n=s.value,o=this.$L(n,t);if(o===null)continue;const{data:r,elt:l}=o;n.isToTheme&&this.diagram===null||l!==void 0&&n.updateTarget(l,r,void 0,e)}}Bo(){if(this.diagram!==null)if(this.OP()){const t=this.diagram.model,i=this.js.iterator;for(;i.next();){const e=i.value;if(!e.isToTheme)continue;const s=this.$L(e);if(s===null)continue;const{data:n,elt:o}=s;o!==void 0&&e.updateTarget(o,n,void 0,t)}}else{const t=this.T.h,i=t.length;for(let e=0;e0;let r=0;for(;n0){const i=this.T.elt(0);if(i.isPanelMain&&i instanceof Panel&&i.el())return 1}return 0}rebuildItemElements(){const t=this.gp();for(;this.T.length>t;)this.ne(this.T.length-1,!1);this.ZL(null,this.itemArray)}ZL(t,i){const e=this.gp(),s=i;if(s===null||s.length===0){for(;this.T.length>e;)this.ne(this.T.length-1,!1);return}if(this.T.length<=e){const n=s.length;for(let o=0;o(y[y.Default=1]="Default",y[y.None=2]="None",y[y.ProportionalExtra=3]="ProportionalExtra",y))(Sizing||{});class RowColumnDefinition{Hs;xp;Ot;Ia;Oa;ui;gt;yd;io;ol;wd;xd;Ea;Rt;bd;Ns;st;Ii;ye;constructor(t){GSet.Ji(this),this.Hs=null,this.xp=!0,this.Ot=0,this.ye=NaN,this.Ia=0,this.Oa=1/0,this.ui=Spot.Default,this.st=0,this.Ii=0,this.gt=0,this.Ns=null,this.yd=1,this.io=1,this.ol=null,this.wd=null,this.xd=NaN,this.Ea=null,this.Rt=null,this.bd=!1,t&&(Object.assign(this,t),t.column!==void 0?(this.isRow=!1,this.index=t.column):t.row!==void 0&&(this.isRow=!0,this.index=t.row))}copy(){const t=new RowColumnDefinition;return t.xp=this.xp,t.Ot=this.Ot,t.ye=this.ye,t.Ia=this.Ia,t.Oa=this.Oa,t.ui=this.ui,t.st=this.st,t.Ii=this.Ii,t.gt=this.gt,t.io=this.io,t.yd=this.yd,this.ol===null?t.ol=null:t.ol=this.ol.N(),t.wd=this.wd,t.xd=this.xd,t.Ea=null,this.Ea!==null&&(t.separatorDashArray=this.Ea.slice()),t.Rt=this.Rt,t.bd=this.bd,t.Ns=this.Ns,t}nb(t){t.isRow?t.height!==void 0&&(this.height=t.height):t.width!==void 0&&(this.width=t.width),t.minimum!==void 0&&(this.minimum=t.minimum),t.maximum!==void 0&&(this.maximum=t.maximum),t.alignment!==void 0&&(this.alignment=t.alignment),t.stretch!==void 0&&(this.stretch=t.stretch),t.sizing!==void 0&&(this.sizing=t.sizing),t.separatorPadding!==void 0&&(this.separatorPadding=t.separatorPadding),t.separatorStroke!==void 0&&(this.separatorStroke=t.separatorStroke),t.separatorStrokeWidth!==void 0&&(this.separatorStrokeWidth=t.separatorStrokeWidth),t.separatorDashArray!==void 0&&(this.Ea=t.separatorDashArray),t.background!==void 0&&(this.background=t.background),t.coversSeparators!==void 0&&(this.coversSeparators=t.coversSeparators),t.Ns!==void 0&&(this.Ns=t.Ns)}ai(t){t in Sizing?this.sizing=t:U.hr(this,t)}toString(){return"RowColumnDefinition "+(this.isRow?"(Row ":"(Column ")+this.index+") #"+GSet.gs(this)}static Default=1;static None=2;static ProportionalExtra=3;Ta(t){this.Hs=t}computeEffectiveSpacingTop(t){let i=0;const e=this.Hs;if(this.index!==t){let n=this.separatorStroke;n===null&&e!==null&&(n=this.isRow?e.defaultRowSeparatorStroke:e.defaultColumnSeparatorStroke),n!==null&&(i=this.separatorStrokeWidth,isNaN(i)&&(e!==null?i=this.isRow?e.defaultRowSeparatorStrokeWidth:e.defaultColumnSeparatorStrokeWidth:i=0))}let s=this.ol;if(s===null)if(e!==null)s=e.defaultSeparatorPadding;else return i;return i+(this.isRow?s.top:s.left)}computeEffectiveSpacing(){let t=0;const i=this.Hs;let e=0;const s=this.isRow;if(i!==null&&i.type===Panel.Table){const o=s?i.We.length:i.je.length;for(let r=0;r= 0",RowColumnDefinition,"height"),this.ye=t,this.actual=this.st,this.panel!==null&&this.panel.u(),this.t("height",i,t))}get width(){return this.ye}set width(t){const i=this.ye;i!==t&&(Debug&&U.i(t,"number",RowColumnDefinition,"width"),t<0&&U.U(t,">= 0",RowColumnDefinition,"width"),this.ye=t,this.actual=this.st,this.panel!==null&&this.panel.u(),this.t("width",i,t))}get minimum(){return this.Ia}set minimum(t){const i=this.Ia;i!==t&&(Debug&&U.i(t,"number",RowColumnDefinition,"minimum"),(t<0||!isFinite(t))&&U.U(t,">= 0",RowColumnDefinition,"minimum"),this.Ia=t,this.actual=this.st,this.panel!==null&&this.panel.u(),this.t("minimum",i,t))}get maximum(){return this.Oa}set maximum(t){const i=this.Oa;i!==t&&(Debug&&U.i(t,"number",RowColumnDefinition,"maximum"),t<0&&U.U(t,">= 0",RowColumnDefinition,"maximum"),this.Oa=t,this.actual=this.st,this.panel!==null&&this.panel.u(),this.t("maximum",i,t))}get alignment(){return this.ui}set alignment(t){const i=this.ui;i.equals(t)||(Debug&&U.e(t,Spot,RowColumnDefinition,"alignment"),this.ui=t.N(),this.panel!==null&&this.panel.u(),this.t("alignment",i,t))}get stretch(){return this.io}set stretch(t){const i=this.io;i!==t&&(this.io=t,this.panel!==null&&this.panel.u(),this.t("stretch",i,t))}get separatorPadding(){return this.ol}set separatorPadding(t){typeof t=="number"?t=new Margin(t):t!==null&&Debug&&U.e(t,Margin,RowColumnDefinition,"separatorPadding");const i=this.ol;(t===null||i===null||!i.equals(t))&&(t!==null&&(t=t.N()),this.ol=t,this.panel!==null&&this.panel.u(),this.t("separatorPadding",i,t))}get separatorStroke(){return this.wd}set separatorStroke(t){const i=this.wd;i!==t&&(t!==null&&Brush.rd(t,"RowColumnDefinition.separatorStroke"),t instanceof Brush&&t.p(),this.wd=t,this.panel!==null&&this.panel.u(),this.t("separatorStroke",i,t))}get separatorStrokeWidth(){return this.xd}set separatorStrokeWidth(t){const i=this.xd;i!==t&&(this.xd=t,this.panel!==null&&this.panel.u(),this.t("separatorStrokeWidth",i,t))}get separatorDashArray(){return this.Ea}set separatorDashArray(t){const i=this.Ea;if(i!==t){if(t!==null&&!Array.isArray(t)&&U.Pi(t,"Array",RowColumnDefinition,"separatorDashArray:value"),t!==null){const e=t.length;let s=0;for(let n=0;n=0)||!isFinite(o))&&U.n("separatorDashArray value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(i===null)return;t=null}}this.Ea=t,this.panel!==null&&this.panel.L(),this.t("separatorDashArray",i,t)}}get background(){return this.Rt}set background(t){const i=this.Rt;i!==t&&(t!==null&&Brush.rd(t,"RowColumnDefinition.background"),t instanceof Brush&&t.p(),this.Rt=t,this.panel!==null&&this.panel.L(),this.t("background",i,t))}get coversSeparators(){return this.bd}set coversSeparators(t){const i=this.bd;i!==t&&(U.i(t,"boolean",RowColumnDefinition,"coversSeparators"),this.bd=t,this.panel!==null&&this.panel.L(),this.t("coversSeparators",i,t))}get sizing(){return this.yd}set sizing(t){const i=this.yd;i!==t&&(Debug&&U.j(t,Sizing,"Sizing"),this.yd=t,this.panel!==null&&this.panel.u(),this.t("sizing",i,t))}fb(){if(this.sizing===1){const t=this.Hs;return this.isRow?t.rowSizing:t.columnSizing}return this.sizing}get actual(){return this.st}set actual(t){isNaN(this.ye)?this.st=Math.max(Math.min(this.Oa,t),this.Ia):this.st=Math.max(Math.min(this.Oa,this.ye),this.Ia)}get measured(){return this.Ii}set measured(t){this.Ii=t}get total(){return this.st+this.computeEffectiveSpacing()}get position(){return this.gt}set position(t){this.gt=t}bind(t,i,e,s){return this.ac(t,i,e,s),this}bindTwoWay(t,i,e,s){const n=this.ac(t,i,e,s);return s===void 0&&n.makeTwoWay(),this}theme(t,i,e,s,n){return this.bh(t,i,e,s,n),this}themeData(t,i,e,s,n){return this.bh(t,i,e,s,n).ofData(),this}themeObject(t,i,e,s,n,o){return this.bh(t,i,e,s,n).ofObject(o),this}themeModel(t,i,e,s,n){return this.bh(t,i,e,s,n).ofModel(),this}ac(t,i,e,s){let n;return typeof t=="string"?n=new Binding(t,i,e,s):n=t,this.v0(n),n}bh(t,i,e,s,n){let o;return typeof t=="string"?o=new ThemeBinding(t,i,e,s,n):o=t,this.v0(o),o}v0(t){t.Ne=this;const i=this.panel;if(i!==null){const e=i.findBindingPanel();e!==null&&e.OL()&&U.n("Cannot add a Binding to a RowColumnDefinition that is already frozen: "+t+" on "+i)}this.Ns===null&&(this.Ns=new List),this.Ns.add(t)}}class Shape extends GraphObject{ft;Cs;kd;Ba;$i;qo;Ko;$t;Sd;Md;v;constructor(t,i){super(),this.ft=null,this.Cs=null,this.kd="None",this.Ba="black",this.$i="black",this.qo=1,this.Ko=null,this.$t=null,this.Sd=NaN,this.Md=NaN,this.v=null,typeof t=="string"?this.figure=t:t&&Object.assign(this,t),i&&Object.assign(this,i)}cloneProtected(t){super.cloneProtected(t),t.ft=this.ft,t.Cs=this.Cs,t.kd=this.kd,t.Ba=this.Ba,t.$i=this.$i,t.qo=this.qo,this.Ko!==null&&(t.Ko=this.Ko.slice()),this.$t!==null&&(this.$t.mi?t.$t=this.$t:t.$t=this.$t.copy()),t.Sd=this.Sd,t.Md=this.Md,this.v!==null&&(t.v=this.v.copy())}Va(){return this.$t===null?this.$t=new ShapeTemplateSettings:this.$t.mi&&(this.$t=this.$t.copy()),this.$t}mh(){super.mh(),this.$t!==null&&(this.$t.mi=!0)}ai(t){t in GeometryStretch?this.geometryStretch=t:super.ai(t)}toString(){return"Shape("+(this.figure!=="None"?this.figure:this.toArrow!=="None"?this.toArrow:this.fromArrow)+")#"+GSet.gs(this)}HI(t,i){const e=this.pathPattern;e.dt(1/0,1/0);const s=e.measuredBounds;e.Gt(0,0,s.width,s.height);const n=this.geometry;t.save(),t.beginPath();const o=U.lt();if(n.type===1)o.push(n.startX),o.push(n.startY),o.push(n.endX),o.push(n.endY),this.Pd(t,i,o,e);else if(n.type===4){const r=n.figures.iterator;for(;r.next();){const l=r.value;o.length=0,o.push(l.startX),o.push(l.startY);let h=l.startX,f=l.startY,a=h,c=f;const u=l.segments.h,d=u.length;for(let m=0;m=.1;){if(P===0&&(M?(b=k,b-=S,w-=S,M=!1):b=k,b===0&&(b=1)),b>w){b=w,U.tt(x);return}b>p?(P=b-p,b=p):P=0;let N=Math.sqrt(b*b/(1+m*m));if(u<0&&(N=-N),h+=N,f+=m*N,t.translate(h,f),t.rotate(g),t.translate(-(r/2),-(l/2)),P===0&&s.xh(t,i),t.translate(r/2,l/2),t.rotate(-g),t.translate(-h,-f),w-=b,p-=b,P!==0){if(A++,A===x.length){U.tt(x);return}C=x[A],u=C[0],g=C[1],m=C[2],p=C[3],b=P}}U.tt(x)}xh(t,i){const e=t instanceof SVGContext;let s=this.$i;const n=this.Ba;if(s===null&&n===null)return;const o=this.ft;if(o===null)return;t.commitTransform();const r=this.actualBounds,l=this.naturalBounds;n!==null&&this.un(t,n,!0,!1,l,r);const h=this.part;let f=this.qo;s!==null&&f===0&&h!==null&&(this.isPanelMain||h.findMainElement()===this)&&(f=h.WI()),f===0&&(s=null),s!==null&&f!==0&&(this.un(t,s,!1,!1,l,r),t.lineWidth=f,t.lineJoin=this.strokeJoin,t.lineCap=this.strokeCap,t.miterLimit=this.strokeMiterLimit);let a=!1;h&&i.getRenderingHint("drawShadows")&&(a=h.isShadowed),t.sl===!1&&(a=!1);let c=!0;s!==null&&(n===null||n==="transparent")&&(c=!1);let u=!1;const d=this.strokeDashArray;if(d!==null&&(u=!0,t.enableDash(d,this.strokeDashOffset)),o.type===1)t.beginPath(),t.moveTo(o.startX,o.startY),t.lineTo(o.endX,o.endY),s!==null&&t.strokeContext(),t.endPath();else if(o.type===2){const m=o.startX,g=o.startY,p=o.endX,w=o.endY,x=Math.min(m,p),k=Math.min(g,w),b=Math.abs(p-m),S=Math.abs(w-g);t.beginPath(),t.rect(x,k,b,S),n!==null&&t.fillContext(n,!1,null),s!==null&&(c&&a&&t.shadowsOff(),t.strokeContext(),c&&a&&t.shadowsOn()),t.endPath()}else if(o.type===3){const m=o.startX,g=o.startY,p=o.endX,w=o.endY,x=Math.abs(p-m)/2,k=Math.abs(w-g)/2,b=Math.min(m,p)+x,S=Math.min(g,w)+k;t.beginPath(),t.moveTo(b,S-k),t.bezierCurveTo(b+Geo.zn*x,S-k,b+x,S-Geo.zn*k,b+x,S),t.bezierCurveTo(b+x,S+Geo.zn*k,b+Geo.zn*x,S+k,b,S+k),t.bezierCurveTo(b-Geo.zn*x,S+k,b-x,S+Geo.zn*k,b-x,S),t.bezierCurveTo(b-x,S-Geo.zn*k,b-Geo.zn*x,S-k,b,S-k),t.closePath(),n!==null&&t.fillContext(n,!1,null),s!==null&&(c&&a&&t.shadowsOff(),t.strokeContext(),c&&a&&t.shadowsOn()),t.endPath()}else if(o.type===4){const m=o.figures,g=m.length;for(let p=0;p1||this.pathPattern!==null?!0:super.nd(t)}LP(t,i){if(t.nodeName!=="g")t.setAttributeNS(null,"filter",i);else{const e=t.getElementsByTagName("path");for(let s=0;s1,i);U.n("Unknown Geometry type: "+e.type)}}ed(t,i,e,s){const n=this.desiredSize,o=this.qo;t=Math.max(t,0),i=Math.max(i,0);let r;if(this.Cs!==null)r=this.geometry.bounds;else{const g=this.figure;let p=Shape.tN[g];if(p===void 0){let w=Geo.rn[g];typeof w=="string"&&(w=Geo.rn[w]),U.rt(w)?(p=w(null,100,100),Shape.tN[g]=p):U.n("Unsupported Figure: "+g)}r=p.bounds}let l=r.width,h=r.height,f=r.width,a=r.height;switch(this.qs(!0)){case 0:e=0,s=0;break;case 2:f=Math.max(t-o,0),a=Math.max(i-o,0);break;case 5:f=Math.max(t-o,0),s=0;break;case 4:e=0,a=Math.max(i-o,0);break}isFinite(n.width)&&(f=n.width),isFinite(n.height)&&(a=n.height);const u=this.maxSize,d=this.minSize;e=Math.max(e-o,d.width),s=Math.max(s-o,d.height),f=Math.min(u.width,f),a=Math.min(u.height,a),f=isFinite(f)?Math.max(e,f):Math.max(l,e),a=isFinite(a)?Math.max(s,a):Math.max(h,s);const m=this.pM();switch(m){case 0:break;case 2:l=f,h=a;break;case 6:{let g=Math.min(f/l,a/h);isFinite(g)||(g=1),l=l*g,h=h*g;break}default:U.n(m+" is not a valid geometryStretch.")}if(this.Cs!==null){l===0&&(l=.001),h===0&&(h=.001);const p=(this.Cs!==null?this.Cs:this.ft).yF(l,h);Debug&&p.p(),this.ft=p}else(this.ft===null||!Geo.G(this.ft.gf,t-o)||!Geo.G(this.ft.mf,i-o))&&(this.ft=Shape.jI(this,l,h));r=this.ft.bounds,t===1/0||i===1/0?this._n(r.x-o/2,r.y-o/2,t===0&&l===0?0:r.width+o,i===0&&h===0?0:r.height+o):this._n(-(o/2),-(o/2),f+o,a+o),n.isReal()?(f=n.width,a=n.height,f=Math.min(u.width,f),a=Math.min(u.height,a),f=Math.max(d.width,f),a=Math.max(d.height,a),this.qi.s(0,0,f,a)):this.qi.c(r)}pM(){const t=this.geometryStretch;return this.Cs!==null?t===1?2:t:t===1?Shape.tN[this.figure].defaultStretch:t}yh(t,i,e,s){this.commonArrange(t,i,e,s)}getNearestIntersectionPoint(t,i,e){return this.ec(t.x,t.y,i.x,i.y,e)}ec(t,i,e,s,n){const o=this.F,r=1/(o.m11*o.m22-o.m12*o.m21),l=o.m22*r,h=-o.m12*r,f=-o.m21*r,a=o.m11*r,c=r*(o.m21*o.dy-o.m22*o.dx),u=r*(o.m12*o.dx-o.m11*o.dy),d=t*l+i*f+c,m=t*h+i*a+u,g=e*l+s*f+c,p=e*h+s*a+u,w=this.qo/2;let x=this.ft;x===null&&(this.dt(1/0,1/0),x=this.ft);const k=x.bounds;let b=!1;if(x.type===1)if(this.strokeWidth<=1.5)b=Geo.Yn(x.startX,x.startY,x.endX,x.endY,d,m,g,p,n);else{let S=0,M=0;if(x.startX===x.endX)S=w,M=0;else{const T=(x.endY-x.startY)/(x.endX-x.startX);M=w/Math.sqrt(1+T*T),S=M*T}const A=U.lt();let C=new Point;Geo.Yn(x.startX+S,x.startY+M,x.endX+S,x.endY+M,d,m,g,p,C)&&A.push(C),C=new Point,Geo.Yn(x.startX-S,x.startY-M,x.endX-S,x.endY-M,d,m,g,p,C)&&A.push(C),C=new Point,Geo.Yn(x.startX+S,x.startY+M,x.startX-S,x.startY-M,d,m,g,p,C)&&A.push(C),C=new Point,Geo.Yn(x.endX+S,x.endY+M,x.endX-S,x.endY-M,d,m,g,p,C)&&A.push(C);const P=A.length;if(P===0)return U.tt(A),!1;b=!0;let N=1/0;for(let T=0;T0&&k.contains(D,F)&&(P.x=D,P.y=F,this.containsPoint(P)))for(N!==0&&Math.abs(N)<.5?(T*=.5/N,N=.5):T!==0&&Math.abs(T)<.5&&(N*=.5/T,T=.5),D-=N,F-=T;k.contains(D,F);)D-=N,F-=T;const I=.6;n.x=g,n.y=p;for(let K=0;Ke?t-e:e-t)<(i>s?i-s:s-i)){const c=ic||Geo.G(h.y,c))&&(h.yc||Geo.G(h.x,c))&&(h.x=f&&h<=a}else{let f=0,a=0;return s=f&&l<=a}}$I(t,i){if(this.containedInRect(t,i)||i===void 0&&(i=this.F,t.containsRect(this.actualBounds)))return!0;const e=t.left,s=t.right,n=t.top,o=t.bottom,r=Point.a(),l=Point.a(),h=Point.a(),f=Transform.a();f.set(i),f.DC(this.F),f.Lw(),l.x=s,l.y=n,l.F(f),r.x=e,r.y=n,r.F(f);let a=!1;return this.za(r,l,h)?a=!0:(r.x=s,r.y=o,r.F(f),this.za(r,l,h)?a=!0:(l.x=e,l.y=o,l.F(f),this.za(r,l,h)?a=!0:(r.x=e,r.y=n,r.F(f),this.za(r,l,h)&&(a=!0)))),Transform.o(f),Point.o(r),Point.o(l),Point.o(h),a}NL(t,i,e){if(e&&this.fill!==null&&this.ph(t,!0))return!0;let s=t.distanceSquaredPoint(i);const n=s;this.strokeWidth>1.5&&(s=this.strokeWidth/2+Math.sqrt(s),s*=s);let o=this.ft;if(o===null&&(this.dt(1/0,1/0),o=this.ft,o===null))return!1;if(!e){const c=o.bounds,u=c.x,d=c.y,m=c.x+c.width,g=c.y+c.height;if(Point.distanceSquared(t.x,t.y,u,d)<=s&&Point.distanceSquared(t.x,t.y,m,d)<=s&&Point.distanceSquared(t.x,t.y,u,g)<=s&&Point.distanceSquared(t.x,t.y,m,g)<=s)return!0}function r(c,u){const d=c.length;for(let m=0;ms)return!0;return!1}const l=o.startX,h=o.startY,f=o.endX,a=o.endY;if(o.type===1){const c=Point.distanceLineSegmentSquared(t.x,t.y,l,h,f,a),u=(f-l)*(t.x-l)+(a-h)*(t.y-h),d=(l-f)*(t.x-f)+(h-a)*(t.y-a),m=u>=0&&d>=0?s:n;return c<=m}else if(o.type===2){let c=!1;return e&&(c=Point.distanceLineSegmentSquared(t.x,t.y,l,h,l,a)<=s||Point.distanceLineSegmentSquared(t.x,t.y,l,h,f,h)<=s||Point.distanceLineSegmentSquared(t.x,t.y,f,h,f,a)<=s||Point.distanceLineSegmentSquared(t.x,t.y,l,a,f,a)<=s),c}else if(o.type===3){const c=(l+f)/2,u=(h+a)/2,d=t.x-c,m=t.y-u,g=Math.abs(f-l)/2,p=Math.abs(a-h)/2;if(g===0||p===0)return Point.distanceLineSegmentSquared(t.x,t.y,l,h,f,a)<=s;if(e){const w=Geo.hF(g,p,d,m);return w*w<=s}else return!(Point.distanceSquared(d,m,-g,0)>=s||Point.distanceSquared(d,m,0,-p)>=s||Point.distanceSquared(d,m,0,p)>=s||Point.distanceSquared(d,m,g,0)>=s)}else if(o.type===4){const c=o.bounds,u=c.x,d=c.y,m=c.x+c.width,g=c.y+c.height;if(t.x>m&&t.xg&&t.ys&&Point.distanceLineSegmentSquared(t.x,t.y,u,d,m,d)>s&&Point.distanceLineSegmentSquared(t.x,t.y,m,g,u,g)>s&&Point.distanceLineSegmentSquared(t.x,t.y,m,g,m,d)>s)return!1;const p=Math.sqrt(s);if(e){if(this.fill===null?o.KC(t.x,t.y,p):o.iS(t,p,!0,!1))return!0}else{const w=o.figures;for(let x=0;xs)return!1;const M=k.segments.h,A=M.length;for(let C=0;Cs)return!1;break;case 3:{const N=U.lt();Geo.Xn(b,S,P.point1X,P.point1Y,P.point2X,P.point2Y,P.endX,P.endY,.8,N);const T=r(N,t);if(U.tt(N),T||(b=P.endX,S=P.endY,t.distanceSquared(b,S)>s))return!1;break}case 4:{const N=U.lt();Geo.Kg(b,S,P.point1X,P.point1Y,P.endX,P.endY,.8,N);const T=r(N,t);if(U.tt(N),T||(b=P.endX,S=P.endY,t.distanceSquared(b,S)>s))return!1;break}case 5:case 6:{const N=P.type===5?P.Co(k):P.Hh(k,b,S),T=N.length;if(T===0){if(b=P.type===5?P.centerX:P.endX,S=P.type===5?P.centerY:P.endY,t.distanceSquared(b,S)>s)return!1;break}let L=null;const D=U.lt();for(let F=0;F=0){this.qo=t,this.u();const e=this.part;e!==null&&e.pc(),this.t("strokeWidth",i,t)}else U.U(t,"value >= 0",Shape,"strokeWidth:value")}M0(){return this.qo}get strokeCap(){return this.$t!==null?this.$t.bp:"butt"}set strokeCap(t){const i=this.strokeCap;i!==t&&(typeof t=="string"&&(t==="butt"||t==="round"||t==="square")?(this.Va().bp=t,this.L(),this.t("strokeCap",i,t)):U.U(t,'"butt", "round", or "square"',Shape,"strokeCap"))}get strokeJoin(){return this.$t!==null?this.$t.kp:"miter"}set strokeJoin(t){const i=this.strokeJoin;i!==t&&(typeof t=="string"&&(t==="miter"||t==="bevel"||t==="round")?(this.Va().kp=t,this.L(),this.t("strokeJoin",i,t)):U.U(t,'"miter", "bevel", or "round"',Shape,"strokeJoin"))}get strokeMiterLimit(){return this.$t!==null?this.$t.Sp:10}set strokeMiterLimit(t){const i=this.strokeMiterLimit;if(i!==t)if(Debug&&U.r(t,Shape,"strokeMiterLimit"),t>=1){this.Va().Sp=t,this.L();const e=this.part;e!==null&&e.pc(),this.t("strokeMiterLimit",i,t)}else Debug&&U.U(t,"value >= 1",Shape,"strokeWidth:value")}get strokeDashArray(){return this.Ko}set strokeDashArray(t){const i=this.Ko;if(i!==t){if(t!==null&&!Array.isArray(t)&&U.Pi(t,"Array",Shape,"strokeDashArray:value"),t!==null){const e=t.length;let s=0;for(let n=0;n=0)||!isFinite(o))&&U.n("strokeDashArray:value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(i===null)return;t=null}}this.Ko=t,this.L(),this.t("strokeDashArray",i,t)}}get strokeDashOffset(){return this.$t!==null?this.$t.kh:0}set strokeDashOffset(t){const i=this.strokeDashOffset;i!==t&&(Debug&&U.r(t,Shape,"strokeDashOffset"),t>=0&&(this.Va().kh=t,this.L(),this.t("strokeDashOffset",i,t)))}get figure(){return this.kd}set figure(t){const i=this.kd;if(i!==t){Debug&&U.i(t,"string",Shape,"figure");let e=Geo.rn[t];if(U.rt(e)?e=t:(e=Geo.rn[t.toLowerCase()],e||U.n("Unknown Shape.figure: "+t)),i!==e){const s=this.part;s!==null&&s.pc(),this.kd=e,this.Cs=null,this.re(),this.u(),this.t("figure",i,e)}}}get toArrow(){return this.Xt!==null?this.Xt.Mp:"None"}set toArrow(t){const i=this.toArrow;if(t===!0?t="Standard":t===!1&&(t=""),i!==t){Debug&&U.i(t,"string",Shape,"toArrow");const e=Shape.tT(t);e===null?U.n("Unknown Shape.toArrow: "+t):i!==e&&(this.Xt===null&&(this.Xt=new LinkElementSettings),this.Xt.Mp=e,this.Cs=null,this.re(),this.u(),this.iT(e),this.t("toArrow",i,e))}}get fromArrow(){return this.Xt!==null?this.Xt.Pp:"None"}set fromArrow(t){const i=this.fromArrow;if(t===!0?t="Standard":t===!1&&(t=""),i!==t){Debug&&U.i(t,"string",Shape,"fromArrow");const e=Shape.tT(t);e===null?U.n("Unknown Shape.fromArrow: "+t):i!==e&&(this.Xt===null&&(this.Xt=new LinkElementSettings),this.Xt.Pp=e,this.Cs=null,this.re(),this.u(),this.iT(e),this.t("fromArrow",i,e))}}iT(t){const i=this.diagram;if(i!==null&&i.undoManager.isUndoingRedoing)return;this.lI();const e=Spot.MiddleRight;this.toArrow!=="None"?(this.segmentIndex=-1,this.alignmentFocus=e):this.fromArrow!=="None"&&(this.segmentIndex=0,this.alignmentFocus=new Spot(1-e.x,e.y))}get spot1(){return this.$t!==null?this.$t.Kn:Spot.Default}set spot1(t){const i=this.spot1;i.equals(t)||(Debug&&U.e(t,Spot,Shape,"spot1"),t=t.N(),this.Va().Kn=t,this.u(),this.t("spot1",i,t))}get spot2(){return this.$t!==null?this.$t.Un:Spot.Default}set spot2(t){const i=this.spot2;i.equals(t)||(Debug&&U.e(t,Spot,Shape,"spot2"),t=t.N(),this.Va().Un=t,this.u(),this.t("spot2",i,t))}get parameter1(){return this.Sd}set parameter1(t){const i=this.Sd;i!==t&&(this.Sd=t,this.re(),this.u(),this.t("parameter1",i,t))}get parameter2(){return this.Md}set parameter2(t){const i=this.Md;i!==t&&(this.Md=t,this.re(),this.u(),this.t("parameter2",i,t))}get naturalBounds(){return this.qi}LI(){const t=this.desiredSize;if(!t.isReal()&&this.ft!==null){const i=this.ft.bounds;this.qi.c(i)}else this.qi.s(0,0,t.width,t.height)}get pathPattern(){return this.$t!==null?this.$t.Np:null}set pathPattern(t){const i=this.pathPattern;i!==t&&(Debug&&t!==null&&U.e(t,GraphObject,Shape,"pathPattern"),this.Va().Np=t,this.L(),this.t("pathPattern",i,t))}get geometryStretch(){return this.$t!==null?this.$t.Cp:1}set geometryStretch(t){const i=this.geometryStretch;i!==t&&(U.j(t,GeometryStretch,"GeometryStretch"),this.Va().Cp=t,this.u(),this.t("geometryStretch",i,t))}get interval(){return this.v!==null?this.v.wc:1}set interval(t){const i=this.interval;if(Debug&&U.r(t,Shape,"interval"),t=Math.round(t),i!==t&&t!==0&&isFinite(t)){this.v===null&&(this.v=new GradElementSettings),this.v.wc=t;const e=this.diagram;e!==null&&this.panel===e.grid&&e.lh(),this.u();const s=this.panel;s!==null&&(s.hs=null),this.t("interval",i,t)}}get graduatedStart(){return this.v!==null?this.v.xc:0}set graduatedStart(t){const i=this.graduatedStart;Debug&&U.r(t,Shape,"graduatedStart"),i!==t&&(t<0?t=0:t>1&&(t=1),this.v===null&&(this.v=new GradElementSettings),this.v.xc=t,this.u(),this.t("graduatedStart",i,t))}get graduatedEnd(){return this.v!==null?this.v.bc:1}set graduatedEnd(t){const i=this.graduatedEnd;Debug&&U.r(t,Shape,"graduatedEnd"),i!==t&&(t<0?t=0:t>1&&(t=1),this.v===null&&(this.v=new GradElementSettings),this.v.bc=t,this.u(),this.t("graduatedEnd",i,t))}get graduatedSkip(){return this.v!==null?this.v.kc:null}set graduatedSkip(t){const i=this.graduatedSkip;i!==t&&(t!==null&&U.P(t,Shape,"graduatedSkip"),this.v===null&&(this.v=new GradElementSettings),this.v.kc=t,this.u(),this.t("graduatedSkip",i,t))}static jI(t,i,e){let n=null;if(t.toArrow!=="None")n=Shape.bn[t.toArrow];else if(t.fromArrow!=="None")n=Shape.bn[t.fromArrow];else{let o=Geo.rn[t.figure];typeof o=="string"&&(o=Geo.rn[o]),o===void 0&&U.n("Unknown Shape.figure: "+t.figure),n=o(t,i,e),n.gf=i,n.mf=e}if(n===null){const o=Geo.rn.Rectangle;U.rt(o)&&(n=o(t,i,e))}return Debug&&(n.bounds.width>i+1e-5||n.bounds.height>e+1e-5)&&U.n('Geometry made with figure "'+t.figure+'" has bounds '+n.bounds.toString()+" that are too large for the given size ("+i+","+e+"). See documentation for Shape.defineFigureGenerator."),n}static getFigureGenerators(){const t=new GMap;for(const i in Geo.rn){if(i===i.toLowerCase())continue;const e=Geo.rn[i];t.set(i,e)}return t.p(),t}static defineFigureGenerator(t,i){U.i(t,"string",Shape,"defineFigureGenerator:name"),typeof i=="string"?Debug&&(i===""||!Geo.rn[i])&&U.n("Shape.defineFigureGenerator synonym must not be empty or None or not a defined figure name: "+i):U.P(i,Shape,"defineFigureGenerator:func");const e=t.toLowerCase();Debug&&(t===""||t===e)&&U.n("Shape.defineFigureGenerator name must not be empty or all-lower-case: "+t);const s=Geo.rn;s[t]=i,s[e]=t}static isFigureDefined(t){return Geo.rn.has(t)}static getArrowheadGeometries(){const t=new GMap;for(const i in Geo.qg)if(Shape.bn[i]===void 0){const e=Geometry.parse(Geo.qg[i],!1);Shape.bn[i]=e;const s=i.toLowerCase();s!==i&&(Shape.bn[s]=i)}for(const i in Shape.bn){if(i===i.toLowerCase())continue;const e=Shape.bn[i];e instanceof Geometry&&t.set(i,e)}return t.p(),t}static defineArrowheadGeometry(t,i){U.i(t,"string",Shape,"defineArrowheadGeometry:name");let e=null;typeof i=="string"?(U.i(i,"string",Shape,"defineArrowheadGeometry:pathstr"),e=Geometry.parse(i,!1)):(U.e(i,Geometry,Shape,"defineArrowheadGeometry:pathstr"),e=i);const s=t.toLowerCase();(Debug&&t===""||s==="none"||t===s)&&U.n("Shape.defineArrowheadGeometry name must not be empty or None or all-lower-case: "+t);const n=Shape.bn;n[t]=e,n[s]=t}static isArrowheadDefined(t){return Shape.bn.has(t)}static bn=new PropertyCollection;static tN=new PropertyCollection;static tT(t){let i=Shape.bn[t];if(i===void 0){const e=t.toLowerCase();if(e==="none")return"None";if(i=Shape.bn[e],i===void 0){let s=null;for(const n in Geo.qg)if(n.toLowerCase()===e){s=n;break}if(s!==null){const n=Geometry.parse(Geo.qg[s],!1);return Shape.bn[s]=n,e!==s&&(Shape.bn[e]=s),s}}}return typeof i=="string"?i:i instanceof Geometry?t:null}}class ShapeTemplateSettings{mi;bp;kp;Sp;kh;Np;Cp;Kn;Un;constructor(){this.mi=!1,this.bp="butt",this.kp="miter",this.Sp=10,this.kh=0,this.Np=null,this.Cp=1,this.Kn=Spot.Default,this.Un=Spot.Default}copy(){const t=new ShapeTemplateSettings;return t.bp=this.bp,t.kp=this.kp,t.Sp=this.Sp,t.kh=this.kh,t.Np=this.Np,t.Cp=this.Cp,t.Kn=this.Kn.N(),t.Un=this.Un.N(),t}}var Wrap=(y=>(y[y.None=0]="None",y[y.Fit=1]="Fit",y[y.DesiredSize=2]="DesiredSize",y[y.BreakAll=3]="BreakAll",y))(Wrap||{}),TextOverflow=(y=>(y[y.Clip=0]="Clip",y[y.Ellipsis=1]="Ellipsis",y))(TextOverflow||{}),TextFormat=(y=>(y[y.Trim=0]="Trim",y[y.None=1]="None",y))(TextFormat||{});class TextBlock extends GraphObject{fi;$i;kn;we;pi;P0;Nd;v;ct;El;ro;Sn;Fe;Oi;Mn;constructor(t,i){return super(),TextBlock.tp===!1&&(TextBlock.tp=!0,TextBlock.no=Diagram.isUsingDOM()?new CanvasSurface(null).ci:null),this.l|=2097152,this.fi="",this.$i="black",this.kn="13px sans-serif",this.we=0,this.pi=0,this.P0=0,this.Nd=null,this.v=null,this.ct=null,this.El=0,this.ro=null,this.Sn=0,this.Fe=null,this.Oi=null,this.Mn=null,typeof t=="string"?this.text=t:t&&Object.assign(this,t),i&&Object.assign(this,i),this}cloneProtected(t){super.cloneProtected(t),t.fi=this.fi,t.$i=this.$i,t.kn=this.kn,t.we=this.we,t.pi=this.pi,t.P0=this.P0,t.Nd=this.Nd,this.v!==null&&(t.v=this.v.copy()),this.ct!==null&&(this.ct.mi?t.ct=this.ct:t.ct=this.ct.copy()),t.El=this.El,t.ro=this.ro,t.Sn=this.Sn,t.Fe=this.Fe,t.Oi=this.Oi,t.Mn=this.Mn}Pn(){return this.ct===null?this.ct=new TextBlockTemplateSettings:this.ct.mi&&(this.ct=this.ct.copy()),this.ct}mh(){super.mh(),this.ct!==null&&(this.ct.mi=!0)}EI(t){this.l=t.l|2048|4096,this.ii=t.opacity,this.Rt=t.background,this.rs=t.desiredSize.N(),this.minSize=t.minSize.N(),this.maxSize=t.maxSize.N(),t.Si!==null?this.Si=t.Si.copy():this.Si=null,this.ot=t.scale,this.jt=t.angle,this.stretch=t.stretch,this.tl=t.margin.N(),this.ui=t.alignment.N(),this.Qu=t.alignmentFocus.N(),this.segmentFraction=t.segmentFraction,this.segmentOffset=t.segmentOffset.N(),this.segmentOrientation=t.segmentOrientation,t.hi!==null&&(this.hi=t.hi.copy()),this.shadowVisible=t.shadowVisible,this.fi=t.fi,this.$i=t.$i,this.kn=t.kn,this.v!==null&&(this.v=t.v.copy()),t.ct!==null&&(t.ct.mi?this.ct=t.ct:this.ct=t.ct.copy()),this.El=t.El}II(t){if(this.fi=t.text||"",this.jt=t.labelAngle||0,this.we=t.lineCount||0,this.ZI(t.lines),t.naturalBounds&&(this.qi=t.naturalBounds),t.actualBounds){const i=t.actualBounds;this.Gt(i.x,i.y,i.width,i.height)}}ai(t){t in Wrap?this.wrap=t:super.ai(t)}toString(){return this.fi.length>22?'TextBlock("'+this.fi.substring(0,20)+'"...)':'TextBlock("'+this.fi+'")'}static getEllipsis(){return TextBlock.Ap}static setEllipsis(t){TextBlock.Ap=t,TextBlock.wb=new PropertyCollection,TextBlock.iN=0}static getBaseline(){return TextBlock.xb}static setBaseline(t){TextBlock.xb=t}static xb=null;static getUnderline(){return TextBlock.bb}static setUnderline(t){TextBlock.bb=t}static bb=null;static None=0;static WrapFit=1;static WrapDesiredSize=2;static WrapBreakAll=3;static OverflowClip=0;static OverflowEllipsis=1;static FormatTrim=0;static FormatNone=1;u(){super.u(),this.He(!0)}get font(){return this.kn}set font(t){const i=this.kn;i!==t&&(Debug&&(U.i(t,"string",TextBlock,"font"),TextBlock.isValidFont(t)||U.n('Not a valid font: "'+t+'"')),this.kn=t,this.ro=null,this.u(),this.t("font",i,t))}static isValidFont(t){return root.CSS?root.CSS.supports("font",t):!0}get text(){return this.fi}set text(t){const i=this.fi;t!=null?t=t.toString():t="",i!==t&&(this.fi=t,this.u(),this.t("text",i,t))}get textAlign(){return this.ct!==null?this.ct.Lp:"start"}set textAlign(t){const i=this.textAlign;i!==t&&(Debug&&U.i(t,"string",TextBlock,"textAlign"),t==="start"||t==="end"||t==="left"||t==="right"||t==="center"?(this.Pn().Lp=t,this.L(),this.t("textAlign",i,t)):Debug&&U.U(t,'"start", "end", "left", "right", or "center"',TextBlock,"textAlign"))}get flip(){return this.ct!==null?this.ct.lo:0}set flip(t){const i=this.flip;i!==t&&(U.j(t,Flip,"Flip"),this.Pn().lo=t,this.L(),this.t("flip",i,t))}get verticalAlignment(){return this.ct!==null?this.ct.rl:Spot.Top}set verticalAlignment(t){const i=this.verticalAlignment;i.equals(t)||(Debug&&(U.e(t,Spot,TextBlock,"verticalAlignment"),t.isNoSpot()&&U.n("TextBlock.verticalAlignment for "+this+" must be a real Spot, not:"+t)),t=t.N(),this.Pn().rl=t,this.hc(),this.t("verticalAlignment",i,t))}get naturalBounds(){if(!this.qi.isReal()){const t=Size.a();this.eN(this.fi,999999,t);let i=t.width;Size.o(t);let e=this.eT(i);const s=this.desiredSize;isNaN(s.width)||(i=s.width),isNaN(s.height)||(e=s.height),this.qi.Vn(i,e)}return this.qi}get isMultiline(){return(this.l&2097152)!==0}set isMultiline(t){const i=(this.l&2097152)!==0;i!==t&&(Debug&&U.i(t,"boolean",TextBlock,"isMultiline"),this.l=this.l^2097152,this.u(),this.t("isMultiline",i,t))}get isUnderline(){return(this.l&4194304)!==0}set isUnderline(t){const i=(this.l&4194304)!==0;i!==t&&(Debug&&U.i(t,"boolean",TextBlock,"isUnderline"),this.l=this.l^4194304,this.He(!0),this.L(),this.t("isUnderline",i,t))}get isStrikethrough(){return(this.l&8388608)!==0}set isStrikethrough(t){const i=(this.l&8388608)!==0;i!==t&&(Debug&&U.i(t,"boolean",TextBlock,"isStrikethrough"),this.l=this.l^8388608,this.He(!0),this.L(),this.t("isStrikethrough",i,t))}get wrap(){return this.ct!==null?this.ct.Tp:2}set wrap(t){const i=this.wrap;i!==t&&(Debug&&U.j(t,Wrap,"Wrap"),this.Pn().Tp=t,this.u(),this.t("wrap",i,t))}get overflow(){return this.ct!==null?this.ct.Dp:0}set overflow(t){const i=this.overflow;i!==t&&(Debug&&U.j(t,TextOverflow,"Overflow"),this.Pn().Dp=t,this.u(),this.t("overflow",i,t))}get isOverflowed(){return(this.l&16777216)!==0}sN(t){t?this.l|=16777216:this.l&=-16777217}get stroke(){return this.$i}set stroke(t){const i=this.$i;i!==t&&(t!==null&&Brush.rd(t,"TextBlock.stroke"),t instanceof Brush&&t.p(),this.$i=t,typeof t!="string"&&this.oc(),this.L(),this.t("stroke",i,t))}get lineCount(){return this.we}get lineHeight(){return this.Fp()}get editable(){return(this.l&1048576)!==0}set editable(t){const i=(this.l&1048576)!==0;i!==t&&(Debug&&U.i(t,"boolean",TextBlock,"editable"),this.l=this.l^1048576,this.t("editable",i,t))}get WP(){return(this.l&33554432)!==0}set WP(t){this.l=this.l^33554432}get textEditor(){return this.ct!==null?this.ct.Rp:null}set textEditor(t){const i=this.textEditor;i!==t&&(Debug&&!(t instanceof HTMLInfo)&&U.n("TextBlock.textEditor must be an HTMLInfo."),this.Pn().Rp=t,this.t("textEditor",i,t))}get errorFunction(){return this.ct!==null?this.ct.as:null}set errorFunction(t){const i=this.errorFunction;i!==t&&(t!==null&&U.P(t,TextBlock,"errorFunction"),this.Pn().as=t,this.t("errorFunction",i,t))}get interval(){return this.v!==null?this.v.wc:1}set interval(t){const i=this.interval;if(Debug&&U.r(t,TextBlock,"interval"),t=Math.round(t),i!==t&&t!==0&&isFinite(t)){this.v===null&&(this.v=new GradElementSettings),this.v.wc=t,this.u();const e=this.panel;e!==null&&(e.hs=null),this.t("interval",i,t)}}get graduatedStart(){return this.v!==null?this.v.xc:0}set graduatedStart(t){const i=this.graduatedStart;Debug&&U.r(t,TextBlock,"graduatedStart"),i!==t&&(t<0?t=0:t>1&&(t=1),this.v===null&&(this.v=new GradElementSettings),this.v.xc=t,this.u(),this.t("graduatedStart",i,t))}get graduatedEnd(){return this.v!==null?this.v.bc:1}set graduatedEnd(t){const i=this.graduatedEnd;Debug&&U.r(t,TextBlock,"graduatedEnd"),i!==t&&(t<0?t=0:t>1&&(t=1),this.v===null&&(this.v=new GradElementSettings),this.v.bc=t,this.u(),this.t("graduatedEnd",i,t))}get graduatedFunction(){return this.v!==null?this.v.Ip:null}set graduatedFunction(t){const i=this.graduatedFunction;i!==t&&(t!==null&&U.P(t,TextBlock,"graduatedFunction"),this.v===null&&(this.v=new GradElementSettings),this.v.Ip=t,this.u(),this.t("graduatedFunction",i,t))}get graduatedSkip(){return this.v!==null?this.v.kc:null}set graduatedSkip(t){const i=this.graduatedSkip;i!==t&&(t!==null&&U.P(t,TextBlock,"graduatedSkip"),this.v===null&&(this.v=new GradElementSettings),this.v.kc=t,this.u(),this.t("graduatedSkip",i,t))}xh(t,i){if(this.$i===null||this.fi.length===0||this.kn===null)return;const e=this.naturalBounds,s=this.actualBounds,n=e.width,o=e.height,r=this.Fp();let l=t.textAlign=this.textAlign;const h=i.ju;l==="start"?l=h?"right":"left":l==="end"&&(l=h?"left":"right");const f=this.isUnderline,a=this.isStrikethrough;this.un(t,this.$i,!0,!1,e,s),(f||a)&&this.un(t,this.$i,!1,!1,e,s);const c=0;let u=0;const d=n;let m=!1;i.si===t&&!(i.si instanceof SVGContext)&&!this.WP&&i.getRenderingHint("textGreeking")===!0&&r*this.ba*i.scale<3&&(m=!0);const g=this.spacingAbove,p=this.spacingBelow;switch(this.flip){case 0:break;case 2:t.translate(n,0),t.scale(-1,1);break;case 1:t.translate(0,o),t.scale(1,-1);break;case 3:t.translate(n,o),t.scale(-1,-1);break}t.commitTransform();const w=this.we,k=(g+r+p)*w;if(o>k){const b=this.verticalAlignment;u=b.y*o-b.y*k+b.offsetY}if(w===1&&this.Mn!==null){let b=this.pi;b>d&&(b=d),u+=g,this.sT(this.Mn,t,c,u,d,r,b,m,l,f,a)}else if(this.Fe!==null&&this.Oi!==null)for(let b=0;bd&&(S=d),u+=g,this.sT(this.Oi[b],t,c,u,d,r,S,m,l,f,a),u+=r+p}switch(this.flip){case 0:break;case 2:t.scale(-1,1),t.translate(-n,0);break;case 1:t.scale(1,-1),t.translate(0,-o);break;case 3:t.scale(-1,-1),t.translate(-n,-o);break}}sT(t,i,e,s,n,o,r,l,h,f,a){let c=0;if(l){h==="left"?c=0:h==="right"?c=n-r:h==="center"&&(c=(n-r)/2);const m=i.globalAlpha;i.globalAlpha=m/2,i.fillRect(e+c,s+o/4,r,o/2),i.globalAlpha=m;return}h==="left"?c=0:h==="right"?c=n:h==="center"&&(c=n/2);const u=TextBlock.xb!==null?TextBlock.xb(this,o):o*.75;i.fillText(t,e+c,s+u);let d=o/20|0;if(d===0&&(d=1),h==="right"?c-=r:h==="center"&&(c-=r/2),f){const m=TextBlock.bb!==null?TextBlock.bb(this,o):o*.8;this.nT(e+c,s+m,e+c+r,s+m,d,i),i instanceof SVGContext&&i.lastCreatedElement.classList.add("gojs-td")}if(a){let m=s+o-o/2.2|0;d%2!==0&&(m+=.5),this.nT(e+c,m,e+c+r,m,d,i),i instanceof SVGContext&&i.lastCreatedElement.classList.add("gojs-td")}}nT(t,i,e,s,n,o){o.beginPath(),o.lineWidth=n,o.moveTo(t,i),o.lineTo(e,s),o.stroke(),o.endPath()}nc(t,i,e){if(!super.nc(t,i,e))return!1;if(this.un(t,this.$i,!0,!1,this.naturalBounds,this.actualBounds),e){if(this.svg.getElementsByTagName("text").length===0)return!0;const n=this.svg.getElementsByClassName("gojs-td");for(let o=0;o1||this.isUnderline||this.isStrikethrough?!0:super.nd(t)}LP(t,i){if(t.nodeName!=="g")t.setAttributeNS(null,"filter",i);else{const e=t.getElementsByTagName("text");for(let s=0;sthis.maxLines&&(this.l|=16777216))}eN(t,i,e){const s=this.formatting===0;s&&(t=t.trim());let n=0,o=0,r=0;const l=this.kn,h=this.spacingAbove+this.spacingBelow,f=Math.max(0,this.Fp()+h),a=this.overflow===1?this.rT(l):0;if(this.we>=this.maxLines){e!==null&&e.s(0,f);return}let c=t;if(this.wrap===0){if(this.Sn=1,o=this.getStringWidth(t),a===0||o<=i){this.pi=Math.max(this.pi,o),this.Nn(t,this.pi),e!==null&&e.s(o,f);return}let d=this.Cd(c);c=c.substring(d.length);let m=this.Cd(c);for(o=this.getStringWidth(d+m),r=0;m.length>0&&o<=i;){d+=m,c=c.substring(m.length),m=this.Cd(c),r=o;let g=d+m;s&&(g=g.trim()),o=this.getStringWidth(g)}for(s&&(m=m.trim()),d+=m,i=Math.max(1,i-a);this.getStringWidth(d)>i&&d.length>1;)d=d.substring(0,d.length-1);this.sN(!0),d+=TextBlock.Ap,r=this.getStringWidth(d),this.pi=r,this.Nn(d,r),e!==null&&e.s(r,f);return}let u=0;for(c.length===0&&(u=1,this.Nn(c,0));c.length>0;){let d=this.Cd(c);for(c=c.substring(d.length);this.getStringWidth(d)>i;){let p=1;for(o=this.getStringWidth(d.substring(0,p)),r=0;o<=i;)p++,r=o,o=this.getStringWidth(d.substring(0,p));let w=0;p===1?(w=o,n=Math.max(n,o)):(w=r,n=Math.max(n,r)),p--,p<1&&(p=1);const x=d.substring(0,p);if(this.Nn(x,w),u++,d=d.substring(p),this.we+u>this.maxLines)break}let m=this.Cd(c);for(o=this.getStringWidth(d+m),r=0;m.length>0&&o<=i;){d+=m,c=c.substring(m.length),m=this.Cd(c),r=o;let p=d+m;s&&(p=p.trim()),o=this.getStringWidth(p)}if(s&&(d=d.trim()),d==="")continue;d[d.length-1]==="\xAD"&&(d=d.substring(0,d.length-1)+"\u2010");let g=0;if(m.length===0?(g=o,n=Math.max(n,o)):(r=this.getStringWidth(d),g=r,n=Math.max(n,r)),this.Nn(d,g),u++,this.we+u>this.maxLines)break}this.Sn=Math.min(this.maxLines-this.we,u),this.pi=Math.max(this.pi,n),e!==null&&e.s(this.pi,f*this.Sn)}iO(t,i){if(this.pi===0||this.Fe===null||this.Oi===null||this.overflow!==1)return;const e=this.kn,s=this.overflow===1?this.rT(e):0,n=this.spacingAbove+this.spacingBelow,o=Math.max(0,this.Fp()+n),r=Math.min(this.maxLines-1,Math.max(Math.floor(i/o+.01)-1,0));if(r+1>=this.Oi.length)return;this.sN(!0);let l=this.Oi[r];const h=Math.max(1,t-s);for(;this.getStringWidth(l)>h&&l.length>1;)l=l.substring(0,l.length-1);l+=TextBlock.Ap;const f=this.getStringWidth(l);this.Oi[r]=l,this.Oi=this.Oi.slice(0,r+1),this.Fe[r]=f,this.Fe=this.Fe.slice(0,r+1),this.Sn=this.Oi.length,this.pi=Math.max(this.pi,f),this.we=this.Sn,this.we===1&&(this.Mn=this.Oi[0])}Cd(t){if(this.wrap===3)return t.substring(0,1);let i=t.length,e=0;const s=TextBlock.eO;for(;e=t.length?t:t.substring(0,e)}getStringWidth(t){return TextBlock.no===null?t.length*8:TextBlock.no.measureText(t).width}Fp(){if(this.ro!==null)return this.ro;const t=this.kn;let i=0;return TextBlock.no===null?(i=16,this.ro=i,i):(TextBlock.nN[t]!==void 0&&TextBlock.lT<5e3?i=TextBlock.nN[t]:(i=TextBlock.no.measureText("M").width*1.3,TextBlock.nN[t]=i,TextBlock.lT++),this.ro=i,i)}rT(t){if(TextBlock.no===null)return 6;let i=0;return TextBlock.wb[t]!==void 0&&TextBlock.iN<5e3?i=TextBlock.wb[t]:(i=TextBlock.no.measureText(TextBlock.Ap).width,TextBlock.wb[t]=i,TextBlock.iN++),i}kb(t,i){return t.indexOf(`
`,i)}eT(t){let i=this.fi.replace(/\r\n/g,`
`).replace(/\r/g,`
`);const e=this.spacingAbove+this.spacingBelow,s=Math.max(0,this.Fp()+e);if(i.length===0)return this.pi=0,this.we=1,s;if(!this.isMultiline){const h=this.kb(i,0);h>=0&&(i=i.substring(0,h))}let n=0;this.we=0;let o=0,r=-1,l=!1;for(;!l;){if(r=this.kb(i,o),r===-1&&(r=i.length,l=!0),o<=r){const h=i.substring(o,r);if(this.wrap!==0){this.Sn=0;const f=Size.a();this.eN(h,t,f),n+=f.height,Size.o(f),this.we+=this.Sn}else this.eN(h,t,null),n+=s,this.we++;this.we===this.maxLines&&(l=!0)}o=r+1}return this.P0=n,n}tO(){let t=this.fi.replace(/\r\n/g,`
`).replace(/\r/g,`
`);if(t.length===0)return 8;if(this.isMultiline){let i=0,e=0,s=!1;for(;!s;){let n=this.kb(t,e);n===-1&&(n=t.length,s=!0);let o=t.substring(e,n);this.formatting===0&&(o=o.trim()),i=Math.max(i,this.getStringWidth(o)),e=n+1}return i}else{const i=this.kb(t,0);return i>=0&&(t=t.substring(0,i)),this.getStringWidth(t)}}get textValidation(){return this.ct!==null?this.ct.Ol:null}set textValidation(t){const i=this.textValidation;i!==t&&(t!==null&&U.P(t,TextBlock,"textValidation"),this.Pn().Ol=t,this.t("textValidation",i,t))}get textEdited(){return this.ct!==null?this.ct.Op:null}set textEdited(t){const i=this.textEdited;i!==t&&(t!==null&&U.P(t,TextBlock,"textEdited"),this.Pn().Op=t,this.t("textEdited",i,t))}get spacingAbove(){return this.ct!==null?this.ct.Ep:0}set spacingAbove(t){const i=this.spacingAbove;i!==t&&(Debug&&U.i(t,"number",TextBlock,"spacingAbove"),this.Pn().Ep=t,this.u(),this.t("spacingAbove",i,t))}get spacingBelow(){return this.ct!==null?this.ct.Bp:0}set spacingBelow(t){const i=this.spacingBelow;i!==t&&(Debug&&U.i(t,"number",TextBlock,"spacingBelow"),this.Pn().Bp=t,this.u(),this.t("spacingBelow",i,t))}get formatting(){return this.ct!==null?this.ct.Vp:0}set formatting(t){const i=this.formatting;i!==t&&(U.j(t,TextFormat,"formatting"),this.Pn().Vp=t,this.u(),this.t("formatting",i,t))}get maxLines(){return this.ct!==null?this.ct.zp:1/0}set maxLines(t){const i=this.maxLines;i!==t&&(Debug&&U.i(t,"number",TextBlock,"maxLines"),t=Math.floor(t),t<=0&&U.U(t,"> 0",TextBlock,"maxLines"),this.Pn().zp=t,this.u(),this.t("maxLines",i,t))}getMetrics(){return[this.pi,this.El,this.ro,this.Sn,this.Fe,this.Oi,this.Mn]}ZI(t){t!==void 0&&(this.pi=t[0],this.El=t[1],this.ro=t[2],this.Sn=t[3],this.Fe=t[4],this.Oi=t[5],this.Mn=t[6])}get metrics(){return{arrSize:this.Fe!==null?this.Fe:[this.pi],arrText:this.Oi!==null?this.Oi:[this.Mn],maxLineWidth:this.pi,fontHeight:this.ro}}get choices(){return this.Nd}set choices(t){const i=this.Nd;i!==t&&(Debug&&t!==null&&!Array.isArray(t)&&U.Pi(t,"Array",TextBlock,"choices:value"),this.Nd=t,this.t("choices",i,t))}static eO=new RegExp("[ \u200B\xAD]");static nN=new PropertyCollection;static lT=0;static wb=new PropertyCollection;static iN=0;static Ap="...";static oT="";static no=null;static tp=!1}class TextBlockTemplateSettings{mi;as;lo;Vp;zp;Dp;Ep;Bp;Lp;Op;Rp;Ol;rl;Tp;constructor(){this.mi=!1,this.as=null,this.lo=0,this.Vp=0,this.zp=1/0,this.Dp=0,this.Ep=0,this.Bp=0,this.Lp="start",this.Op=null,this.Rp=null,this.Ol=null,this.rl=Spot.Top,this.Tp=2}copy(){const t=new TextBlockTemplateSettings;return t.as=this.as,t.lo=this.lo,t.Vp=this.Vp,t.zp=this.zp,t.Dp=this.Dp,t.Ep=this.Ep,t.Bp=this.Bp,t.Lp=this.Lp,t.Op=this.Op,t.Rp=this.Rp,t.Ol=this.Ol,t.rl=this.rl,t.Tp=this.Tp,t}}class GradElementSettings{wc;xc;bc;Ip;kc;constructor(){this.wc=1,this.xc=0,this.bc=1,this.Ip=null,this.kc=null}copy(){const t=new GradElementSettings;return t.wc=this.wc,t.xc=this.xc,t.bc=this.bc,t.Ip=this.Ip,t.kc=this.kc,t}}var ImageStretch=(y=>(y[y.None=0]="None",y[y.Fill=2]="Fill",y[y.Uniform=6]="Uniform",y[y.UniformToFill=7]="UniformToFill",y))(ImageStretch||{});class Picture extends GraphObject{ll;bt;hl;Sc;as;al;Mc;lo;Pc;Nc;tb;constructor(t,i){super(),this.l|=2097152,this.ll=null,this.bt="",this.hl=Rect.sF,this.Sc=2,this.as=null,this.al=null,this.Mc=Spot.Center,this.lo=0,this.Pc=null,this.Nc=null,this.tb=null,typeof t=="string"?this.source=t:t&&Object.assign(this,t),i&&Object.assign(this,i)}cloneProtected(t){super.cloneProtected(t),t.bt=this.bt,t.element=this.ll,t.hl=this.hl.N(),t.Sc=this.Sc,t.lo=this.lo,t.as=this.as,t.al=this.al,t.Mc=this.Mc.N(),t.Nc=this.Nc}ai(t){t in ImageStretch?this.imageStretch=t:super.ai(t)}toString(){return"Picture("+this.source+")#"+GSet.gs(this)}get Cc(){return(this.l&1048576)!==0}set Cc(t){this.Cc!==t&&(this.l=this.l^1048576)}get Xa(){return(this.l&2097152)!==0}set Xa(t){this.Xa!==t&&(this.l=this.l^2097152)}get gn(){return(this.l&4194304)!==0}set gn(t){this.gn!==t&&(this.l=this.l^4194304)}static clearCache(t){t===void 0&&(t=""),U.i(t,"string",Picture,"clearCache:url"),t!==""?Picture.Xp[t]&&(delete Picture.Xp[t],Picture.Sb--):(Picture.Xp=new PropertyCollection,Picture.Sb=0)}static oL(t,i){i.hT||(i.Mb=e=>{Picture.sO(i,e),t.desiredSize.isReal()||(t.pe(!1),t.u())},i.Pb=e=>Picture.nO(i,e),i.addEventListener("load",i.Mb),i.addEventListener("error",i.Pb),i.hT=!0)}static qR(t){t.Mb&&t.removeEventListener("load",t.Mb),t.Pb&&t.removeEventListener("error",t.Pb),delete t.Mb,delete t.Pb,delete t.hT}get element(){return this.ll}set element(t){const i=this.ll;if(this.He(!0),i!==t){this.Cc=t instanceof HTMLCanvasElement;const e=t instanceof HTMLImageElement;t!==null&&!(e||t instanceof HTMLVideoElement||this.Cc)&&U.n("Picture.element must be an instance of Image, Canvas, or Video, not: "+t);const s=this.diagram;s!==null&&s.tP(this),this.ll=t,t!==null&&e&&t.os===void 0&&(t.os=new GSet),s!==null&&e&&s._2(this),this.t("element",i,t),this.L()}}GR(){const t=this.ll;if(t===null)return;const i=this.desiredSize.isReal();(this.Cc||t.complete===!0)&&(t.u0&&(t.Yp instanceof Event&&this.as!==null?this.as(this,t.Yp):t.gn===!0&&!t.Yp&&this.al!==null&&t.oN&&this.al(this,t.oN)),t.gn=!0),t.gn&&i&&this.diagram!==null&&this.diagram.Wu.add(this)}oO(){if(this.ll===null){this.Pc=!1;return}const t=new CanvasSurface(null).ci;try{t.drawImage(this.ll,0,0)}catch(i){Debug&&this.Xa&&U.nt(i.toString()),this.Xa=!1}try{t.getImageData(0,0,1,1).data[3]&&(this.Pc=!1),this.Pc=!1}catch{this.Pc=!0}}get source(){return this.bt}set source(t){const i=this.bt;if(i!==t){this.He(!0),U.i(t,"string",Picture,"source"),this.bt=t;let e=Picture.Xp;if(!Diagram.isUsingDOM()){this.t("source",i,t);return}let s=null;if(e[t]!==void 0)s=e[t];else if(t!==""){Picture.Sb>30&&(Picture.clearCache(),e=Picture.Xp),s=U.ds("img"),s.u0=!0,Picture.oL(this,s);const n=this.Nc;n!==null&&(s.crossOrigin=n(this)),s.src=t,e[t]=s,Picture.Sb++}this.element=s,s!==null&&s.__goCache===void 0&&(s.__goCache=new PictureCacheArray),this.u(),this.L(),this.t("source",i,t)}}static sO(t,i){t.gn=!0,t.Yp=!1;let e;const s=t.os.copy();if(s==null)return;const n=s.iterator;for(;n.next();){const o=n.value;o.L();const r=t.getAttribute("src")||"",l=o.th.get(r);if(l===null)continue;const h=l.length;for(let f=0;f=o.width&&(r=r+p.offsetX+(d*p.x-o.width*p.x)),m>=o.height&&(l=l+p.offsetY+(m*p.y-o.height*p.y)),f=Math.min(o.width,d),a=Math.min(o.height,m);break;case 2:d=o.width,m=o.height;break;case 6:case 7:let L=0;g===6?(L=Math.min(o.height/m,o.width/d),d*=L,m*=L):g===7&&(L=Math.max(o.height/m,o.width/d),d*=L,m*=L,d>=o.width&&(r=(r+p.offsetX+(d*p.x-o.width*p.x)/d)*f),m>=o.height&&(l=(l+p.offsetY+(m*p.y-o.height*p.y)/m)*a),f*=1/(d/o.width),a*=1/(m/o.height),d=o.width,m=o.height);break}const w=f*a,x=this.getDocumentScale()*i.scale,k=d*x,b=m*x,S=k*b,M=w/S,A=e.__goCache;let C=null;const P=Picture.rO;if(!n){if(e.gn&&A!==void 0&&c<8e3&&u<8e3&&S>4&&M>P*P){A.Ht===null&&(A.aT(4,c,u,e),A.aT(16,c,u,e));const L=A.Ht,D=L.length;for(let F=0;F0){const a=this.Ht[this.Ht.length-1];h=a.bt,f=a.Ad}o.setTransform(r*f,0,0,r*f,0,0),o.commitTransform(),o.drawImage(h,0,0),this.Ht.push(l)}}class PictureCacheInstance{bt;Ad;constructor(t,i){this.bt=t,this.Ad=i}}class GeoStream{Ni;$g;constructor(){this.$g=new Geometry,this.Ni=null}Vi(t){t!==null?(this.$g=t,t.figures.clear()):this.$g=new Geometry,this.Ni=null}gu(t,i,e,s,n,o){if(s!==void 0&&s===!0){const r=new PathSegment(1);r.endX=t,r.endY=i,this.Ni.segments.add(r)}else this.Ni=new PathFigure,this.Ni.startX=t,this.Ni.startY=i,this.Ni.isFilled=e,this.Ni.isEvenOdd=o||!1,this.$g.figures.add(this.Ni);n!==void 0&&(this.Ni.isShadowed=n)}dF(){const t=this.Ni.segments.length;t>0&&this.Ni.segments.elt(t-1).close()}gF(){this.Ni.segments.length>0&&(this.Ni.isFilled=!0)}mF(t){this.Ni.isShadowed=t}IE(t){this.Ni.isEvenOdd=t}fF(t,i,e){e===void 0&&(e=!1);const s=new PathSegment(1);s.endX=t,s.endY=i,e&&s.close(),this.Ni.segments.add(s)}dr(t,i,e){e===void 0&&(e=!1);const s=new PathSegment(2);s.endX=t,s.endY=i,e&&s.close(),this.Ni.segments.add(s)}gr(t,i,e,s,n,o,r){r===void 0&&(r=!1);const l=new PathSegment(3);l.point1X=t,l.point1Y=i,l.point2X=e,l.point2Y=s,l.endX=n,l.endY=o,r&&l.close(),this.Ni.segments.add(l)}Ow(t,i,e,s,n){n===void 0&&(n=!1);const o=new PathSegment(4);o.point1X=t,o.point1Y=i,o.endX=e,o.endY=s,n&&o.close(),this.Ni.segments.add(o)}cF(t,i,e,s,n,o,r){o===void 0&&(o=0),r===void 0&&(r=!1);const l=new PathSegment(5);l.startAngle=t,l.sweepAngle=i,l.centerX=e,l.centerY=s,l.radiusX=n,o!==0?l.radiusY=o:l.radiusY=n,r&&l.close(),this.Ni.segments.add(l)}uF(t,i,e,s,n,o,r,l){l===void 0&&(l=!1);const h=new PathSegment(6,o,r,t,i,e,s,n);l&&h.close(),this.Ni.segments.add(h)}static rN=null;static VC(t){const i=GeoStream.rN;if(i!==null)return GeoStream.rN=null,i.Vi(t),i;{const e=new GeoStream;return e.Vi(t),e}}static zC(t){GeoStream.rN=t}}{const y=function(n,o){const r=n.toLowerCase(),l=Geo.rn;l[n]=o,l[r]=n};y("Rectangle",(n,o,r)=>{const l="r"+o+","+r;let h=Geo.cr[l];return h!==void 0||(h=new Geometry(2),h.endX=o,h.endY=r,Geo.ur{const l="s"+o+","+r;let h=Geo.cr[l];return h!==void 0||(h=new Geometry(2),h.endX=o,h.endY=r,h.defaultStretch=6,Geo.ur{(isNaN(l)||l<0)&&(l=5),isNaN(h)&&(h=15);const f="rr"+o+","+r+","+l+","+h;let a=Geo.cr[f];if(a!==void 0)return a;let c=l;(h&1)===1?(c=Math.min(c,(h&2)===2?o/3:o),c=Math.min(c,(h&8)===8?r/3:r)):c=0;const u=new PathFigure(c,0,!0);a=new Geometry().add(u);const d=Spot.TopLeft.copy(),m=Spot.BottomRight.copy();if((h&2)===2){let g=l;g=Math.min(g,(h&1)===1?o/3:o),g=Math.min(g,(h&4)===4?r/3:r);const p=g*Geo.zn;u.add(new PathSegment(2,o-g,0)).add(new PathSegment(3,o,g,o-p,0,o,p)),d.offsetY=p,m.offsetX=-p}else u.add(new PathSegment(2,o,0));if((h&4)===4){let g=l;g=Math.min(g,(h&8)===8?o/3:o),g=Math.min(g,(h&2)===2?r/3:r);const p=g*Geo.zn;u.add(new PathSegment(2,o,r-g)).add(new PathSegment(3,o-g,r,o,r-p,o-p,r)),m.offsetX=-p,m.offsetY=-p}else u.add(new PathSegment(2,o,r));if((h&8)===8){let g=l;g=Math.min(g,(h&4)===4?o/3:o),g=Math.min(g,(h&1)===1?r/3:r);const p=g*Geo.zn;u.add(new PathSegment(2,g,r)).add(new PathSegment(3,0,r-g,p,r,0,r-p)),d.offsetX=p,m.offsetY=-p}else u.add(new PathSegment(2,0,r));if((h&1)===1){const g=c*Geo.zn;u.add(new PathSegment(2,0,c)).add(new PathSegment(3,c,0,0,g,g,0).close()),d.offsetX=g,d.offsetY=g}else u.add(new PathSegment(2,0,0).close());return a.spot1=d,a.spot2=m,Geo.ur{const l=n?n.parameter1:NaN,h=n?n.parameter2:NaN;return t(n,o,r,l,h)}),y("Border","RoundedRectangle"),y("RoundedTopRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,3)}),y("RoundedBottomRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,12)}),y("RoundedLeftRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,9)}),y("RoundedRightRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,6)}),y("Ellipse",(n,o,r)=>{const l="e"+o+","+r;let h=Geo.cr[l];return h!==void 0||(h=new Geometry(3),h.endX=o,h.endY=r,h.spot1=Spot.vk,h.spot2=Spot.Jk,Geo.ur{const l="c"+o+","+r;let h=Geo.cr[l];return h!==void 0||(h=new Geometry(3),h.endX=o,h.endY=r,h.spot1=Spot.vk,h.spot2=Spot.Jk,h.defaultStretch=6,Geo.urnew Geometry().add(new PathFigure(0,0).add(new PathSegment(2,o,.5*r)).add(new PathSegment(2,0,r).close())).setSpots(0,.25,.5,.75)),y("TriangleDown",(n,o,r)=>new Geometry().add(new PathFigure(0,0).add(new PathSegment(2,o,0)).add(new PathSegment(2,.5*o,r).close())).setSpots(.25,0,.75,.5)),y("TriangleLeft",(n,o,r)=>new Geometry().add(new PathFigure(o,r).add(new PathSegment(2,0,.5*r)).add(new PathSegment(2,o,0).close())).setSpots(.5,.25,1,.75)),y("TriangleUp",(n,o,r)=>new Geometry().add(new PathFigure(o,r).add(new PathSegment(2,0,r)).add(new PathSegment(2,.5*o,0).close())).setSpots(.25,.5,.75,1)),y("Triangle","TriangleUp"),y("Diamond",(n,o,r)=>new Geometry().add(new PathFigure(.5*o,0).add(new PathSegment(2,0,.5*r)).add(new PathSegment(2,.5*o,r)).add(new PathSegment(2,o,.5*r).close())).setSpots(.25,.25,.75,.75)),y("LineH",(n,o,r)=>{const l=new Geometry(1);return l.startX=0,l.startY=r/2,l.endX=o,l.endY=r/2,l}),y("LineV",(n,o,r)=>{const l=new Geometry(1);return l.startX=o/2,l.startY=0,l.endX=o/2,l.endY=r,l}),y("None","Rectangle"),y("BarH","Rectangle"),y("BarV","Rectangle"),y("MinusLine","LineH"),y("PlusLine",(n,o,r)=>new Geometry().add(new PathFigure(0,r/2,!1).add(new PathSegment(2,o,r/2)).add(new PathSegment(1,o/2,0)).add(new PathSegment(2,o/2,r)))),y("XLine",(n,o,r)=>new Geometry().add(new PathFigure(0,r,!1).add(new PathSegment(2,o,0)).add(new PathSegment(1,0,0)).add(new PathSegment(2,o,r)))),y("LineRight",(n,o,r)=>new Geometry().add(new PathFigure(.25*o,0,!1).add(new PathSegment(2,.75*o,.5*r)).add(new PathSegment(2,.25*o,r)))),y("LineDown",(n,o,r)=>new Geometry().add(new PathFigure(0,.25*r,!1).add(new PathSegment(2,.5*o,.75*r)).add(new PathSegment(2,o,.25*r)))),y("LineLeft",(n,o,r)=>new Geometry().add(new PathFigure(.75*o,0,!1).add(new PathSegment(2,.25*o,.5*r)).add(new PathSegment(2,.75*o,r)))),y("LineUp",(n,o,r)=>new Geometry().add(new PathFigure(0,.75*r,!1).add(new PathSegment(2,.5*o,.25*r)).add(new PathSegment(2,o,.75*r)))),y("Capsule",(n,o,r)=>{const l=new Geometry;if(or){const h=r/2,f=new PathFigure(h,0,!0);l.add(f),f.add(new PathSegment(2,o-h,0)),f.add(new PathSegment(5,270,180,o-h,h,h,h)),f.add(new PathSegment(2,h,r)),f.add(new PathSegment(5,90,180,h,h,h,h));const a=isFinite(n.parameter1)?n.parameter1:r*.156;return l.spot1=new Spot(0,0,a,0),l.spot2=new Spot(1,1,-a,0),l}else return l.type=3,l.endX=o,l.endY=r,l.spot1=Spot.vk,l.spot2=Spot.Jk,l});const i=(n,o)=>new PathFigure(n,o,!1,!1),e=(n,o,r)=>n.add(new PathSegment(2,o,r)),s=(n,o,r)=>n.add(new PathSegment(1,o,r));y("Borders",(n,o,r)=>{let l=n?n.parameter1:NaN;isNaN(l)?l=10:l=l&15;const h=new Geometry;let f;return l===10?(f=i(o,0),e(f,o,r),s(f,0,r),e(f,0,0)):l===5?(f=i(0,0),e(f,o,0),s(f,o,r),e(f,0,r)):l===1?(f=i(0,0),e(f,o,0),s(f,o,r)):l===2?(f=i(o,0),e(f,o,r)):l===4?(f=i(o,r),e(f,0,r)):l===8?(f=i(0,r),e(f,0,0),s(f,o,r)):l===3?(f=i(0,0),e(f,o,0),e(f,o,r)):l===6?(f=i(o,0),e(f,o,r),e(f,0,r)):l===12?(f=i(o,r),e(f,0,r),e(f,0,0)):l===9?(f=i(0,r),e(f,0,0),e(f,o,0)):l===7?(f=i(0,0),e(f,o,0),e(f,o,r),e(f,0,r)):l===14?(f=i(o,0),e(f,o,r),e(f,0,r),e(f,0,0)):l===13?(f=i(o,r),e(f,0,r),e(f,0,0),e(f,o,0)):l===11?(f=i(0,r),e(f,0,0),e(f,o,0),e(f,o,r)):l===15?(f=i(0,0),e(f,o,0),e(f,o,r),e(f,0,r),f.add(new PathSegment(2,0,0).close())):(f=i(0,0),s(f,o,r)),h.add(f),h})}Geo.qg={"":"",Standard:"F1 m 0,0 l 8,4 -8,4 2,-4 z",Backward:"F1 m 8,0 l -2,4 2,4 -8,-4 z",Triangle:"F1 m 0,0 l 8,4.62 -8,4.62 z",BackwardTriangle:"F1 m 8,4 l 0,4 -8,-4 8,-4 0,4 z",Boomerang:"F1 m 0,0 l 8,4 -8,4 4,-4 -4,-4 z",BackwardBoomerang:"F1 m 8,0 l -8,4 8,4 -4,-4 4,-4 z",SidewaysV:"m 0,0 l 8,4 -8,4 0,-1 6,-3 -6,-3 0,-1 z",BackwardV:"m 8,0 l -8,4 8,4 0,-1 -6,-3 6,-3 0,-1 z",OpenTriangle:"m 0,0 l 8,4 -8,4",BackwardOpenTriangle:"m 8,0 l -8,4 8,4",OpenTriangleLine:"m 0,0 l 8,4 -8,4 m 8.5,0 l 0,-8",BackwardOpenTriangleLine:"m 8,0 l -8,4 8,4 m -8.5,0 l 0,-8",OpenTriangleTop:"m 0,0 l 8,4 m 0,4",BackwardOpenTriangleTop:"m 8,0 l -8,4 m 0,4",OpenTriangleBottom:"m 0,8 l 8,-4",BackwardOpenTriangleBottom:"m 0,4 l 8,4",HalfTriangleTop:"F1 m 0,0 l 0,4 8,0 z m 0,8",BackwardHalfTriangleTop:"F1 m 8,0 l 0,4 -8,0 z m 0,8",HalfTriangleBottom:"F1 m 0,4 l 0,4 8,-4 z",BackwardHalfTriangleBottom:"F1 m 8,4 l 0,4 -8,-4 z",ForwardSemiCircle:"m 4,0 b 270 180 0 4 4",BackwardSemiCircle:"m 4,8 b 90 180 0 -4 4",Feather:"m 0,0 l 3,4 -3,4",BackwardFeather:"m 3,0 l -3,4 3,4",DoubleFeathers:"m 0,0 l 3,4 -3,4 m 3,-8 l 3,4 -3,4",BackwardDoubleFeathers:"m 3,0 l -3,4 3,4 m 3,-8 l -3,4 3,4",TripleFeathers:"m 0,0 l 3,4 -3,4 m 3,-8 l 3,4 -3,4 m 3,-8 l 3,4 -3,4",BackwardTripleFeathers:"m 3,0 l -3,4 3,4 m 3,-8 l -3,4 3,4 m 3,-8 l -3,4 3,4",ForwardSlash:"m 0,8 l 5,-8",BackSlash:"m 0,0 l 5,8",DoubleForwardSlash:"m 0,8 l 4,-8 m -2,8 l 4,-8",DoubleBackSlash:"m 0,0 l 4,8 m -2,-8 l 4,8",TripleForwardSlash:"m 0,8 l 4,-8 m -2,8 l 4,-8 m -2,8 l 4,-8",TripleBackSlash:"m 0,0 l 4,8 m -2,-8 l 4,8 m -2,-8 l 4,8",Fork:"m 0,4 l 8,0 m -8,0 l 8,-4 m -8,4 l 8,4",BackwardFork:"m 8,4 l -8,0 m 8,0 l -8,-4 m 8,4 l -8,4",LineFork:"m 0,0 l 0,8 m 0,-4 l 8,0 m -8,0 l 8,-4 m -8,4 l 8,4",BackwardLineFork:"m 8,4 l -8,0 m 8,0 l -8,-4 m 8,4 l -8,4 m 8,-8 l 0,8",CircleFork:"F1 m 6,4 b 0 360 -3 0 3 z m 0,0 l 6,0 m -6,0 l 6,-4 m -6,4 l 6,4",BackwardCircleFork:"F1 m 0,4 l 6,0 m -6,-4 l 6,4 m -6,4 l 6,-4 m 6,0 b 0 360 -3 0 3",CircleLineFork:"F1 m 6,4 b 0 360 -3 0 3 z m 1,-4 l 0,8 m 0,-4 l 6,0 m -6,0 l 6,-4 m -6,4 l 6,4",BackwardCircleLineFork:"F1 m 0,4 l 6,0 m -6,-4 l 6,4 m -6,4 l 6,-4 m 0,-4 l 0,8 m 7,-4 b 0 360 -3 0 3",Circle:"F1 m 8,4 b 0 360 -4 0 4 z",Block:"F1 m 0,0 l 0,8 8,0 0,-8 z",StretchedDiamond:"F1 m 0,3 l 5,-3 5,3 -5,3 -5,-3 z",Diamond:"F1 m 0,4 l 4,-4 4,4 -4,4 -4,-4 z",Chevron:"F1 m 0,0 l 5,0 3,4 -3,4 -5,0 3,-4 -3,-4 z",StretchedChevron:"F1 m 0,0 l 8,0 3,4 -3,4 -8,0 3,-4 -3,-4 z",NormalArrow:"F1 m 0,2 l 4,0 0,-2 4,4 -4,4 0,-2 -4,0 z",X:"m 0,0 l 8,8 m 0,-8 l -8,8",TailedNormalArrow:"F1 m 0,0 l 2,0 1,2 3,0 0,-2 2,4 -2,4 0,-2 -3,0 -1,2 -2,0 1,-4 -1,-4 z",DoubleTriangle:"F1 m 0,0 l 4,4 -4,4 0,-8 z m 4,0 l 4,4 -4,4 0,-8 z",BigEndArrow:"F1 m 0,0 l 5,2 0,-2 3,4 -3,4 0,-2 -5,2 0,-8 z",ConcaveTailArrow:"F1 m 0,2 h 4 v -2 l 4,4 -4,4 v -2 h -4 l 2,-2 -2,-2 z",RoundedTriangle:"F1 m 0,1 a 1,1 0 0 1 1,-1 l 7,3 a 0.5,1 0 0 1 0,2 l -7,3 a 1,1 0 0 1 -1,-1 l 0,-6 z",SimpleArrow:"F1 m 1,2 l -1,-2 2,0 1,2 -1,2 -2,0 1,-2 5,0 0,-2 2,2 -2,2 0,-2 z",AccelerationArrow:"F1 m 0,0 l 0,8 0.2,0 0,-8 -0.2,0 z m 2,0 l 0,8 1,0 0,-8 -1,0 z m 3,0 l 2,0 2,4 -2,4 -2,0 0,-8 z",BoxArrow:"F1 m 0,0 l 4,0 0,2 2,0 0,-2 2,4 -2,4 0,-2 -2,0 0,2 -4,0 0,-8 z",TriangleLine:"F1 m 8,4 l -8,-4 0,8 8,-4 z m 0.5,4 l 0,-8",CircleEndedArrow:"F1 m 10,4 l -2,-3 0,2 -2,0 0,2 2,0 0,2 2,-3 z m -4,0 b 0 360 -3 0 3 z",DynamicWidthArrow:"F1 m 0,3 l 2,0 2,-1 2,-2 2,4 -2,4 -2,-2 -2,-1 -2,0 0,-2 z",EquilibriumArrow:"m 0,3 l 8,0 -3,-3 m 3,5 l -8,0 3,3",FastForward:"F1 m 0,0 l 3.5,4 0,-4 3.5,4 0,-4 1,0 0,8 -1,0 0,-4 -3.5,4 0,-4 -3.5,4 0,-8 z",Kite:"F1 m 0,4 l 2,-4 6,4 -6,4 -2,-4 z",HalfArrowTop:"F1 m 0,0 l 4,4 4,0 -8,-4 z m 0,8",HalfArrowBottom:"F1 m 0,8 l 4,-4 4,0 -8,4 z",OpposingDirectionDoubleArrow:"F1 m 0,4 l 2,-4 0,2 4,0 0,-2 2,4 -2,4 0,-2 -4,0 0,2 -2,-4 z",PartialDoubleTriangle:"F1 m 0,0 4,3 0,-3 4,4 -4,4 0,-3 -4,3 0,-8 z",LineCircle:"F1 m 0,0 l 0,8 m 7 -4 b 0 360 -3 0 3 z",DoubleLineCircle:"F1 m 0,0 l 0,8 m 2,-8 l 0,8 m 7 -4 b 0 360 -3 0 3 z",TripleLineCircle:"F1 m 0,0 l 0,8 m 2,-8 l 0,8 m 2,-8 l 0,8 m 7 -4 b 0 360 -3 0 3 z",CircleLine:"F1 m 6 4 b 0 360 -3 0 3 z m 1,-4 l 0,8",DiamondCircle:"F1 m 8,4 l -4,4 -4,-4 4,-4 4,4 m 8,0 b 0 360 -4 0 4 z",PlusCircle:"F1 m 8,4 b 0 360 -4 0 4 l -8 0 z m -4 -4 l 0 8",OpenRightTriangleTop:"m 8,0 l 0,4 -8,0 m 0,4",OpenRightTriangleBottom:"m 8,8 l 0,-4 -8,0",Line:"m 0,0 l 0,8",DoubleLine:"m 0,0 l 0,8 m 2,0 l 0,-8",TripleLine:"m 0,0 l 0,8 m 2,0 l 0,-8 m 2,0 l 0,8",PentagonArrow:"F1 m 8,4 l -4,-4 -4,0 0,8 4,0 4,-4 z"};var LayoutConditions=(y=>(y[y.None=0]="None",y[y.Added=1]="Added",y[y.Removed=2]="Removed",y[y.Shown=4]="Shown",y[y.Hidden=8]="Hidden",y[y.NodeSized=16]="NodeSized",y[y.GroupLayout=32]="GroupLayout",y[y.NodeReplaced=64]="NodeReplaced",y[y.Standard=127]="Standard",y[y.All=16777215]="All",y))(LayoutConditions||{});class Part extends Panel{k;Wo;J;fl;cl;jo;fi;vo;Ph;Js;Jo;Ld;i2;fT;Kp;Up;constructor(t,i){let e;t===void 0||t instanceof PanelLayout||typeof t=="string"?e=t:t&&(i=t),super(e),this.k=2408959,this.Wo="",this.J=null,this.fl="",this.cl=null,this.jo=null,this.fi="",this.vo=null,this.Ph=null,this.Js=new Point(NaN,NaN).p(),this.Jo=null,this.Ld=NaN,this.i2=-1,this.fT=new Rect,this.Kp=null,this.Up=NaN,i&&Object.assign(this,i)}cloneProtected(t){super.cloneProtected(t),t.k=this.k&-4097|16384|32768,t.Wo=this.Wo,this.J!==null&&(this.J.mi?t.J=this.J:t.J=this.J.copy()),t.fl=this.fl,t.jo=null,t.fi=this.fi,t.Js.c(this.Js),t.Ld=this.Ld}Xo(t){super.Xo(t),t.wh(),t.cl=null,t.Jo=null,t.Kp=null}toString(){let t=U.Bn(this.constructor)+"#"+GSet.gs(this);return this.data!==null&&(t+="("+U.toString(this.data)+")"),t}static LayoutNone=0;static LayoutAdded=1;static LayoutRemoved=2;static LayoutShown=4;static LayoutHidden=8;static LayoutNodeSized=16;static LayoutGroupLayout=32;static LayoutNodeReplaced=64;static LayoutStandard=127;static LayoutAll=16777215;Zi(){return this.J===null?this.J=new PartTemplateSettings:this.J.mi&&(this.J=this.J.copy()),this.J}mh(){super.mh(),this.J!==null&&(this.J.mi=!0)}tc(t,i,e,s,n,o,r){const l=this.diagram;l!==null&&(t===3&&i==="elements"?n instanceof Panel?n.Jr(h=>{l.partManager.W2(h,l)}):n instanceof Picture&&l._2(n):t===4&&i==="elements"&&(n instanceof Panel?n.Jr(h=>l.partManager.j2(h,l)):n instanceof Picture&&l.tP(n)),l.raiseChangedEvent(t,i,e,s,n,o,r))}updateTargetBindings(t){if(super.updateTargetBindings(t),this.data===null)return;const i=this.T.h,e=i.length;for(let n=0;n{r.data!==null&&r.updateTargetBindings()})}const s=this.adornments;for(;s.next();)s.value.updateTargetBindings(t)}Bo(){if(super.Bo(),this.OP()){const i=this.T.h,e=i.length;for(let s=0;so.Bo())}}const t=this.adornments;for(;t.next();)t.value.Bo()}updateRelationshipsFromData(){this.data!==null&&this.diagram?.partManager.updateRelationshipsFromData(this)}get key(){const t=this.diagram;if(t!==null)return t.model.getKeyForNodeData(this.data)}get adornments(){return this.jo===null?EmptyIterator.instance:this.jo.iteratorValues}findAdornment(t){Debug&&U.i(t,"string",Part,"findAdornment:category");const i=this.jo;return i===null?null:i.get(t)}addAdornment(t,i){if(i===null)return;Debug&&(U.i(t,"string",Part,"addAdornment:category"),U.e(i,Adornment,Part,"addAdornment:ad"));let e=null,s=this.jo;if(s!==null&&(e=s.get(t)),e!==i){if(e!==null){const o=e.diagram;o!==null&&o.remove(e)}s===null&&(s=new GMap,this.jo=s),i.Wo!==t&&(i.category=t),s.set(t,i);const n=this.diagram;if(n!==null){n.add(i);const o=i.adornedObject;if(o!==null){const r=o.findBindingPanel();r!==null&&(i.data=r.data)}}}}removeAdornment(t){Debug&&U.i(t,"string",Part,"removeAdornment:category");const i=this.jo;if(i===null)return;const e=i.get(t);if(e!==null){const s=e.diagram;s!==null&&(s.remove(e),e.data=null)}i.delete(t),i.count===0&&(this.jo=null)}clearAdornments(){const t=this.jo;if(t===null)return;const i=U.lt(),e=t.iterator;for(;e.next();){const n=e.key;i.push(n)}const s=i.length;for(let n=0;n{e.isEnabled&&e.updateAdornments(i)}),t.toolManager.updateAdornments(i)}_M(t){this.vo=t,t===null&&this.nI()}get layer(){return this.vo}get diagram(){const t=this.vo;return t==null?null:t.diagram}get layerName(){return this.fl}set layerName(t){const i=this.fl;if(i===t)return;Debug&&U.i(t,"string",Part,"layerName");let e=this.diagram;if(e!==null&&(e.findLayer(t)===null||e.partManager.addsToTemporaryLayer))return;this.fl=t,e!==null&&e.invalidateDocumentBounds(),this.t("layerName",i,t);const s=this.layer;if(s===null||s.name===t||(e=s.diagram,e===null))return;const n=e.findLayer(t);if(n===null||n===s)return;let o=s.ne(-1,this,!0);o>=0&&e.raiseChangedEvent(4,"parts",s,this,null,o,!0),o=n.ia(99999999,this,!0),s.visible!==n.visible&&this.Ki(n.visible),o>=0&&e.raiseChangedEvent(3,"parts",n,null,this,!0,o);const r=this.layerChanged;if(r===null)return;const l=e.H;e.H=!0,r(this,s,n),e.H=l}get layerChanged(){return this.J!==null?this.J.Gp:null}set layerChanged(t){const i=this.layerChanged;i!==t&&(t!==null&&U.P(t,Part,"layerChanged"),this.Zi().Gp=t,this.t("layerChanged",i,t))}get zOrder(){return this.Ld}set zOrder(t){const i=this.Ld;if(i===t)return;Debug&&U.i(t,"number",Part,"zOrder"),this.Ld=t;const e=this.layer;e!==null&&e.Fx(-1,this),this.t("zOrder",i,t);const s=this.diagram;s!==null&&s.L()}aO(){const t=this.layer;t!==null&&t.Fx(-1,this)}Nb(){if(this.hh()!==!1)return;this.lN(!0),this.sc();const t=this.diagram;t!==null&&(t.l0(this),t.requestUpdate())}dT(){if(this.k|=2097152,this.hh()===!1)return;const t=this.position,i=this.location;(!i.isReal()||!t.isReal())&&this.gT(t,i);const e=this.Di,s=Rect.a().c(e);e.At(),e.x=t.x,e.y=t.y,e.p(),this.sd(s,e),Rect.o(s),this.lN(!1),this.sc()}_n(t,i,e,s){const n=this.le;n.s(t,i,e,s),this.Si===null&&(this.Si=new Transform);const o=this.Si;o.Vi(),this.k0(o,t,i,e,s),this.Si=o,o.$k()||o.Yg(n)}k0(t,i,e,s,n){if(this.ot!==1&&t.ot(this.ot),this.jt===0)return;let o=Spot.Center;this.locationSpot.isSpot()&&(o=this.locationSpot);const r=Point.a();if(this.locationObject!==this){const l=this.locationObject,h=l.naturalBounds;r.setSpot(h.x,h.y,h.width,h.height,o),l.Si!==null&&l.Si.kt(r),r.offset(-l.measuredBounds.x,-l.measuredBounds.y);let f=l.panel;for(;f!==null&&f!==this;)f.Si!==null&&f.Si.kt(r),r.offset(-f.measuredBounds.x,-f.measuredBounds.y),f=f.panel}else r.setSpot(i,e,s,n,o);t.ms(this.jt,r.x,r.y),Point.o(r)}get locationObject(){if(this.Jo===null)if(this instanceof Adornment&&this.type!==Panel.Link&&this.hasPlaceholder())this.Jo=this.placeholder;else{const t=this.locationObjectName;if(t!==""){const i=this.findObject(t);i!==null?this.Jo=i:this.Jo=this}else this.Jo=this}return this.Jo?.visible?this.Jo:this}get minLocation(){return this.J!==null?this.J.Hp:Point.xC}set minLocation(t){const i=this.minLocation;i.equals(t)||(Debug&&U.e(t,Point,Part,"minLocation"),t=t.N(),this.Zi().Hp=t,this.t("minLocation",i,t))}get maxLocation(){return this.J!==null?this.J.qp:Point.bC}set maxLocation(t){const i=this.maxLocation;i.equals(t)||(Debug&&U.e(t,Point,Part,"maxLocation"),t=t.N(),this.Zi().qp=t,this.t("maxLocation",i,t))}get locationObjectName(){return this.J!==null?this.J.Wp:""}set locationObjectName(t){const i=this.locationObjectName;i!==t&&(Debug&&U.i(t,"string",Part,"locationObjectName"),this.Zi().Wp=t,this.Jo=null,this.u(),this.t("locationObjectName",i,t))}get locationSpot(){return this.J!==null?this.J.jp:Spot.TopLeft}set locationSpot(t){const i=this.locationSpot;i.equals(t)||(Debug&&(U.e(t,Spot,Part,"locationSpot"),t.isSpot()||U.n("Part.locationSpot must be a specific Spot value, not: "+t)),t=t.N(),this.Zi().jp=t,this.u(),this.t("locationSpot",i,t))}move(t,i){i===!0?this.location=t:this.position=t}moveTo(t,i,e){const s=Point.K(t,i);this.move(s,e),Point.o(s)}isVisible(){if(!this.visible)return!1;const t=this.layer;if(t!==null){if(!t.visible)return!1;const e=t.diagram;if(e!==null&&e.animationManager.xx(this))return!0}const i=this.containingGroup;return!(i!==null&&(!i.isSubGraphExpanded||!i.isVisible()))}Ki(t){const i=this.diagram;t?(this.invalidateLayout(4),this.invalidateAdornments(),i!==null&&i.l0(this)):(this.invalidateLayout(8),this.clearAdornments()),this.wh(),i!==null&&(i.invalidateDocumentBounds(),i.L())}findObject(t){if(this.name===t)return this;let i=this.Kp;if(i===null&&(this.Kp=i=new GMap),i.get(t)!==null)return i.get(t);const e=super.findObject(t);return e!==null?(i.set(t,e),e):(i.set(t,null),null)}O0(){this.Kp=null}getRelativePoint(t,i,e){e===void 0&&(e=new Point);const s=i.isNoSpot()?Spot.Center:i,n=t.naturalBounds;if(e.s(n.width*s.x+s.offsetX,n.height*s.y+s.offsetY),t===null||t===this)return e;t.F.kt(e);let o=t.panel;for(;o!==null&&o!==this;)o.F.kt(e),o=o.panel;return this.Si!==null&&this.Si.kt(e),e.offset(-this.le.x,-this.le.y),e}getDocumentBounds(t){return t===void 0&&(t=new Rect),t.c(this.actualBounds)}ensureBounds(){this.dt(1/0,1/0),this.Gt()}KL(t){const i=this.locationSpot,e=this.locationObject;let s=e.naturalBounds;s.isReal()||(s=Rect.zg);const n=e instanceof Shape?e.strokeWidth:0;if(t.setSpot(0,0,s.width+n,s.height+n,i),e!==this){t.offset(-n/2,-n/2),e.F.kt(t);let o=e.panel;for(;o!==null&&o!==this;)o.F.kt(t),o=o.panel}return this.Si!==null&&this.Si.kt(t),t.offset(-this.le.x,-this.le.y),t}ta(t,i){const e=i===void 0?this.fT:i,s=this.fO(),n=s*2;if(!this.isShadowed)return e.s(t.x-1-s,t.y-1-s,t.width+2+n,t.height+2+n),e;let o=t.x,r=t.y,l=t.width,h=t.height;const f=this.shadowBlur,a=this.shadowOffset;return l+=f,h+=f,o-=f/2,r-=f/2,a.x>0?l+=a.x:(o+=a.x,l-=a.x),a.y>0?h+=a.y:(r+=a.y,h-=a.y),e.s(o-1,r-1,l+2,h+2),e}WI(){return this.type===Panel.Link&&this instanceof Adornment&&this.category==="Selection"&&this.adornedObject instanceof Shape&&this.adornedPart.findMainElement()===this.adornedObject?this.adornedObject.strokeWidth:0}fO(){return isNaN(this.Up)&&(this.Up=this.vL()),this.Up}pc(){this.Up=NaN}Gt(){if(this.ns()===!1){this.dT();return}this.to(!1);const t=this.Di,i=Rect.a();i.c(t);const e=this.Dl();this.yh(0,0,this.le.width,this.le.height);const s=this.position;this.gT(s,this.location),t.At(),t.x=s.x,t.y=s.y,t.p(),this.sd(i,t),i.equals(t)?this.ks(e):this.Ce()&&(!Geo.g(i.width,t.width)||!Geo.g(i.height,t.height))&&this.i2>=0&&this.invalidateLayout(16),Rect.o(i),this.lN(!1)}sd(t,i){const e=this.diagram;if(e===null)return;let s=!1;if(e.ra===!1&&t.isReal()){const n=Rect.a();n.c(e.documentBounds),n.subtractMargin(e.padding),t.x>n.x&&t.y>n.y&&t.rightn.x&&i.y>n.y&&i.right=o)return}}this.k=this.k^4096;let s=!1;if(e!==null){s=e.skipsUndoManager,e.skipsUndoManager=!0;const o=e.selection;o.At(),t?o.add(this):o.delete(this),o.p()}this.t("isSelected",i,t),this.invalidateAdornments();const n=this.selectionChanged;n!==null&&n(this),e!==null&&(e.requestUpdate(),e.skipsUndoManager=s)}}get isHighlighted(){return(this.k&524288)!==0}set isHighlighted(t){const i=(this.k&524288)!==0;if(i!==t){Debug&&U.i(t,"boolean",Part,"isHighlighted"),this.k=this.k^524288;const e=this.diagram;if(e!==null){const n=e.highlighteds;n.At(),t?n.add(this):n.delete(this),n.p()}this.t("isHighlighted",i,t),this.L();const s=this.highlightedChanged;s!==null&&s(this)}}get isShadowed(){return(this.k&8192)!==0}set isShadowed(t){const i=(this.k&8192)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"isShadowed"),this.k=this.k^8192,this.He(!0),this.t("isShadowed",i,t),this.L())}cT(){return(this.k&16384)!==0}uT(t){t?this.k|=16384:this.k&=-16385}hh(){return(this.k&32768)!==0}lN(t){t?this.k|=32768:this.k&=-32769}cO(){return(this.k&65536)!==0}CP(t){t?this.k|=65536:this.k&=-65537}Dl(){return(this.k&131072)!==0}ks(t){t?this.k|=131072:this.k&=-131073}xT(){return(this.k&1048576)!==0}Cb(t){t?this.k|=1048576:this.k&=-1048577}get isAnimated(){return(this.k&262144)!==0}set isAnimated(t){const i=(this.k&262144)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"isAnimated"),this.k=this.k^262144,this.t("isAnimated",i,t))}get highlightedChanged(){return this.J!==null?this.J.vp:null}set highlightedChanged(t){const i=this.highlightedChanged;i!==t&&(t!==null&&U.P(t,Part,"highlightedChanged"),this.Zi().vp=t,this.t("highlightedChanged",i,t))}get selectionObjectName(){return this.J!==null?this.J.Jp:""}set selectionObjectName(t){const i=this.selectionObjectName;i!==t&&(Debug&&U.i(t,"string",Part,"selectionObjectName"),this.Zi().Jp=t,this.cl=null,this.t("selectionObjectName",i,t))}get selectionAdornmentTemplate(){return this.J!==null?this.J.$p:null}set selectionAdornmentTemplate(t){const i=this.selectionAdornmentTemplate;i!==t&&(t!==null&&(U.e(t,Adornment,Part,"selectionAdornmentTemplate"),t.Kt()),this.Zi().$p=t,this.t("selectionAdornmentTemplate",i,t))}get selectionObject(){if(this.cl===null){const t=this.selectionObjectName;if(t!==null&&t!==""){const i=this.findObject(t);i!==null?this.cl=i:this.cl=this}else if(this instanceof Link){const i=this.path;i!==null?this.cl=i:this.cl=this}else this.cl=this}return this.cl}get selectionChanged(){return this.J!==null?this.J.Zp:null}set selectionChanged(t){const i=this.selectionChanged;i!==t&&(t!==null&&U.P(t,Part,"selectionChanged"),this.Zi().Zp=t,this.t("selectionChanged",i,t))}get resizeAdornmentTemplate(){return this.J!==null?this.J.Qp:null}set resizeAdornmentTemplate(t){const i=this.resizeAdornmentTemplate;i!==t&&(Debug&&U.e(t,Adornment,Part,"resizeAdornmentTemplate"),this.Zi().Qp=t!==null?t.Kt():null,this.t("resizeAdornmentTemplate",i,t))}get resizeObjectName(){return this.J!==null?this.J._p:""}set resizeObjectName(t){const i=this.resizeObjectName;i!==t&&(Debug&&U.i(t,"string",Part,"resizeObjectName"),this.Zi()._p=t,this.t("resizeObjectName",i,t))}get resizeObject(){const t=this.resizeObjectName;if(t!==""){const i=this.findObject(t);if(i!==null)return i}return this}get resizeCellSize(){return this.J!==null?this.J.ty:Size.Pw}set resizeCellSize(t){const i=this.resizeCellSize;i.equals(t)||(Debug&&U.e(t,Size,Part,"resizeCellSize"),t=t.N(),this.Zi().ty=t,this.t("resizeCellSize",i,t))}get rotateAdornmentTemplate(){return this.J!==null?this.J.iy:null}set rotateAdornmentTemplate(t){const i=this.rotateAdornmentTemplate;i!==t&&(Debug&&U.e(t,Adornment,Part,"rotateAdornmentTemplate"),this.Zi().iy=t!==null?t.Kt():null,this.t("rotateAdornmentTemplate",i,t))}get rotateObjectName(){return this.J!==null?this.J.ey:""}set rotateObjectName(t){const i=this.rotateObjectName;i!==t&&(Debug&&U.i(t,"string",Part,"rotateObjectName"),this.Zi().ey=t,this.t("rotateObjectName",i,t))}get rotateObject(){const t=this.rotateObjectName;if(t!==""){const i=this.findObject(t);if(i!==null)return i}return this}get rotationSpot(){return this.J!==null?this.J.ny:Spot.Default}set rotationSpot(t){const i=this.rotationSpot;i.equals(t)||(Debug&&(U.e(t,Spot,Part,"rotationSpot"),t!==Spot.Default&&!t.isSpot()&&U.n("Part.rotationSpot must be a specific Spot value or Spot.Default, not: "+t)),t=t.N(),this.Zi().ny=t,this.t("rotationSpot",i,t))}get text(){return this.fi}set text(t){const i=this.fi;i!==t&&(Debug&&U.i(t,"string",Part,"text"),this.fi=t,this.t("text",i,t))}get containingGroup(){return this.Ph}set containingGroup(t){if(this.Ce()){const i=this.Ph;if(i!==t){Debug&&t!==null&&U.e(t,Group,Part,"containingGroup"),t!==null&&(this===t||t.isMemberOf(this))&&(this===t&&U.n("Cannot make a Group a member of itself: "+this.toString()),U.n("Cannot make a Group indirectly contain itself: "+this.toString()+" already contains "+t.toString())),this.invalidateLayout(2);const e=this.diagram;if(i!==null?i.aN(this):this instanceof Group&&e!==null&&e.Wr.delete(this),this.Ph=t,t!==null?t.fN(this):this instanceof Group&&e!==null&&e.Wr.add(this),this.invalidateLayout(1),e!==null&&e.H){const n=this.data,o=e.model;if(n!==null&&o.xa()){const r=t!==null?t.data:null;o.setGroupForData(n,o.getKeyForNodeData(r))}}const s=this.containingGroupChanged;if(s!==null){let n=!0;e!==null&&(n=e.H,e.H=!0),s(this,i,t),e!==null&&(e.H=n)}if(this instanceof Group){const n=new GSet;Part.ch(n,this,!0,0,!0);const o=n.iterator;for(;o.next();){const r=o.value;if(r instanceof Node){const l=r.linksConnected;for(;l.next();)l.value.Td()}}}if(this instanceof Node){const n=this.linksConnected;for(;n.next();)n.value.Td();const o=this.labeledLink;o!==null&&o.Td()}this.t("containingGroup",i,t),t!==null&&t.aO()}}else U.n("cannot set the Part.containingGroup of a Link or Adornment")}wh(){const t=this.containingGroup;t!==null&&(t.hasPlaceholder()&&t.placeholder?.u(),t.u(),t.invalidateConnectedLinks())}L(){const t=this.diagram;t!==null&&!this.ns()&&!this.hh()&&this.isVisible()&&this.Di.isReal()&&t.L(this.ta(this.Di))}u(){if(this.Eo())return;super.u();const t=this.diagram;t!==null&&(t.l0(this),this instanceof Node&&this.labeledLink!==null&&this.labeledLink.hc(),t.requestUpdate(!0))}hc(t){if(this.ns())return;const i=this.diagram;i!==null&&(i.l0(this),this instanceof Node&&this.invalidateConnectedLinks(),i.requestUpdate()),this.to(!0)}zm(t){if(!t){const i=this.Ph;i!==null&&i.fN(this)}}Xm(t){if(!t){const i=this.Ph;i!==null&&i.aN(this)}}Jf(){const t=this.data;if(t!==null){const i=this.diagram;if(i!==null){const e=i.model;e!==null&&e.removeNodeData(t)}}}get containingGroupChanged(){return this.J!==null?this.J.ly:null}set containingGroupChanged(t){const i=this.containingGroupChanged;i!==t&&(t!==null&&U.P(t,Part,"containingGroupChanged"),this.Zi().ly=t,this.t("containingGroupChanged",i,t))}findSubGraphLevel(){return this.cN(this)}cN(t){const i=t.containingGroup;if(i!==null)return 1+this.cN(i);if(t instanceof Node){const e=t.labeledLink;if(e!==null)return this.cN(e)}return 0}findTopLevelPart(){return this.uN(this)}uN(t){const i=t.containingGroup;if(i!==null)return this.uN(i);if(t instanceof Node){const e=t.labeledLink;if(e!==null)return this.uN(e)}return t}get isTopLevel(){return!(this.containingGroup!==null||this instanceof Node&&this.labeledLink!==null)}isMemberOf(t){return t instanceof Group?this.dN(this,t):!1}dN(t,i){if(t===i||i===null)return!1;const e=t.containingGroup;if(e!==null&&(e===i||this.dN(e,i)))return!0;if(t instanceof Node){const s=t.labeledLink;if(s!==null)return this.dN(s,i)}return!1}findCommonContainingGroup(t){if(t===null)return null;if(Debug&&U.e(t,Part,Part,"findCommonContainingGroup:other"),this===t)return this.containingGroup;let i=this;for(;i!==null;){if(i instanceof Group&&i.Cb(!0),i instanceof Node){const s=i.labeledLink;s!==null&&(i=s)}i=i.containingGroup}let e=null;for(i=t;i!==null;){if(i.xT()){e=i;break}if(i instanceof Node){const s=i.labeledLink;s!==null&&(i=s)}i=i.containingGroup}for(i=this;i!==null;){if(i instanceof Group&&i.Cb(!1),i instanceof Node){const s=i.labeledLink;s!==null&&(i=s)}i=i.containingGroup}return e}get layoutConditions(){return this.J!==null?this.J.hy:127}set layoutConditions(t){const i=this.layoutConditions;i!==t&&(Debug&&U.i(t,"number",Part,"layoutConditions"),this.Zi().hy=t,this.t("layoutConditions",i,t))}canLayout(){if(!this.isLayoutPositioned||!this.isVisible())return!1;const t=this.layer;return!(t!==null&&t.isTemporary||this instanceof Node&&this.isLinkLabel)}dO(t){if(!this.isLayoutPositioned||!(t&this.layoutConditions))return!1;const i=this.layer;if(i!==null&&i.isTemporary||this instanceof Node&&this.isLinkLabel)return!1;const e=this.diagram;return!(e!==null&&e.undoManager.isUndoingRedoing)}invalidateLayout(t){if(t===void 0&&(t=16777215),!this.dO(t))return;const i=this.Ph;if(i!==null){const e=i.layout;e!==null?e.invalidateLayout():i.invalidateLayout(t)}else{const e=this.diagram;if(e!==null){const s=e.layout;s!==null&&s.invalidateLayout()}}}$A(){if(!this.isVisible())return!1;const t=this.layer;return!(t!==null&&t.isTemporary)}static ch(t,i,e,s,n,o){if(o===void 0&&(o=null),!t.has(i)&&!(o!==null&&!o(i))&&!(i instanceof Adornment)){if(t.add(i),i instanceof Node){if(e&&i instanceof Group){const r=i.memberParts;for(;r.next();){const l=r.value;Part.ch(t,l,e,s,n,o)}}if(n!==!1){const r=i.linksConnected;for(;r.next();){const l=r.value;if(t.has(l))continue;const h=l.fromNode,f=l.toNode,a=h===null||t.has(h),c=f===null||t.has(f);(n?a&&c:a||c)&&Part.ch(t,l,e,s,n,o)}}if(s>1){const r=i.findTreeChildrenNodes();for(;r.next();){const l=r.value;Part.ch(t,l,e,s-1,n,o)}}}else if(i instanceof Link){const r=i.labelNodes;for(;r.next();){const l=r.value;Part.ch(t,l,e,s,n,o)}}}}get dragComputation(){return this.J!==null?this.J.ay:null}set dragComputation(t){const i=this.dragComputation;i!==t&&(t!==null&&U.P(t,Part,"dragComputation"),this.Zi().ay=t,this.t("dragComputation",i,t))}get shadowOffset(){return this.J!==null?this.J.fy:Point.kC}set shadowOffset(t){const i=this.shadowOffset;i.equals(t)||(Debug&&U.e(t,Point,Part,"shadowOffset"),t=t.N(),this.Zi().fy=t,this.L(),this.t("shadowOffset",i,t))}get shadowColor(){return this.J!==null?this.J.cy:"gray"}set shadowColor(t){const i=this.shadowColor;i!==t&&(Debug&&U.i(t,"string",Part,"shadowColor"),this.Zi().cy=t,this.L(),this.t("shadowColor",i,t))}get shadowBlur(){return this.J!==null?this.J.wn:4}set shadowBlur(t){const i=this.shadowBlur;i!==t&&(Debug&&U.i(t,"number",Part,"shadowBlur"),this.Zi().wn=t,this.L(),this.t("shadowBlur",i,t))}}class PartTemplateSettings{mi;Gp;ly;$p;Jp;Zp;vp;Qp;_p;ty;iy;ey;ny;Wp;jp;Hp;qp;ay;hy;fy;cy;wn;constructor(){this.mi=!1,this.Gp=null,this.ly=null,this.$p=null,this.Jp="",this.Zp=null,this.vp=null,this.Qp=null,this._p="",this.ty=Size.Pw,this.iy=null,this.ey="",this.ny=Spot.Default,this.Wp="",this.jp=Spot.TopLeft,this.Hp=Point.xC,this.qp=Point.bC,this.ay=null,this.hy=127,this.fy=Point.kC,this.cy="gray",this.wn=4}copy(){const t=new PartTemplateSettings;return t.Gp=this.Gp,t.ly=this.ly,t.$p=this.$p,t.Jp=this.Jp,t.Zp=this.Zp,t.vp=this.vp,t.Qp=this.Qp,t._p=this._p,t.ty=this.ty.N(),t.iy=this.iy,t.ey=this.ey,t.ny=this.ny.N(),t.Wp=this.Wp,t.jp=this.jp.N(),t.Hp=this.Hp.N(),t.qp=this.qp.N(),t.ay=this.ay,t.hy=this.hy,t.fy=this.fy.N(),t.cy=this.cy,t.wn=this.wn,t}}class Adornment extends Part{ys;It;cM;uM;gc;constructor(t,i){let e;t===void 0||t instanceof PanelLayout||typeof t=="string"?e=t:t&&(i=t),super(e),this.k&=-257,this.fl="Adornment",this.ys=null,this.cM=0,this.uM=!1,this.It=null,this.gc=null,i&&Object.assign(this,i)}toString(){const t=this.adornedPart;return"Adornment("+this.category+")"+(t!==null?t.toString():"")}updateRelationshipsFromData(){}fd(t){const i=this.adornedObject;if(!(i instanceof Shape))return;const e=i.part;if(!(e instanceof Link))return;const s=e.path;let n=s.geometry;e.fd(t),n=s.geometry;const o=this.T.h,r=o.length;for(let l=0;lh instanceof Placeholder);l instanceof Placeholder&&(this.It===null?this.It=l:Debug&&this.It!==l&&U.n("Cannot insert a second Placeholder into the visual tree of an Adornment."))}}else t===4&&i==="elements"&&this.It!==null&&(s===this.It?this.It=null:s instanceof Panel&&this.It.isContainedBy(s)&&(this.It=null));super.tc(t,i,e,s,n,o,r)}updateAdornments(){}Jf(){}}var PortSpreading=(y=>(y[y.None=0]="None",y[y.Evenly=1]="Evenly",y[y.Packed=2]="Packed",y))(PortSpreading||{});class Node extends Part{B;Vt;Ac;ul;Nh;he;oi;constructor(t,i){let e;t===void 0||t instanceof PanelLayout||typeof t=="string"?e=t:t&&(i=t),super(e),this.B=13,this.Vt=null,this.oi=new List,this.Ac=null,this.ul=null,this.he=null,this.Nh=!1,i&&Object.assign(this,i)}cloneProtected(t){super.cloneProtected(t),t.B=this.B,this.Vt!==null&&(this.Vt.mi?t.Vt=this.Vt:t.Vt=this.Vt.copy())}Xo(t){super.Xo(t),t.invalidateConnectedLinks(),t.ul=this.ul,t.he=null}static SpreadingNone=0;static SpreadingEvenly=1;static SpreadingPacked=2;dl(){return this.Vt===null?this.Vt=new NodeTemplateSettings:this.Vt.mi&&(this.Vt=this.Vt.copy()),this.Vt}mh(){super.mh(),this.Vt!==null&&(this.Vt.mi=!0)}bT(t){t!==null&&(this.ul===null&&(this.ul=new GSet),this.ul.add(t))}kT(t){t!==null&&this.ul!==null&&this.ul.delete(t)}ST(t,i,e){if(t===null||this.ul===null)return null;const s=this.ul.iterator;for(;s.next();){const n=s.value;if(n.uy===this&&n.Ab===t&&n.gN===i&&n.mN===e||n.uy===t&&n.Ab===this&&n.gN===e&&n.mN===i)return n}return null}invalidateLinkBundle(t,i,e){i==null&&(i=""),e==null&&(e="");const s=this.ST(t,i,e);s!==null&&s.Dd()}tc(t,i,e,s,n,o,r){t===3&&i==="elements"?this.he=null:t===4&&i==="elements"&&(this.he=null),super.tc(t,i,e,s,n,o,r)}invalidateConnectedLinks(t){const i=this.linksConnected;for(;i.next();){const e=i.value;t!==void 0&&t.has(e)||(this.Qi(e.fromPort),this.Qi(e.toPort),e.invalidateRoute())}}CL(t){const i=this.linksConnected;for(;i.next();){const e=i.value;e.fromPort!==t&&e.toPort!==t||(this.Qi(e.fromPort),this.Qi(e.toPort),e.invalidateRoute())}}Qi(t){if(t===null)return;const i=t.Zu;i!==null&&i.Dd();const e=t.part,s=e.containingGroup;s!==null&&!e.isVisible()&&s.Qi(s.port)}vr(){return!0}get portSpreading(){return this.Vt!==null?this.Vt.gy:1}set portSpreading(t){const i=this.portSpreading;if(i!==t){Debug&&t!==0&&t!==1&&t!==2&&U.n("Node.portSpreading can only be set to PortSpreading.None, PortSpreading.Evenly, or PortSpreading.Packed, not: "+t),this.dl().gy=t,this.t("portSpreading",i,t);const e=this.diagram;if(e!==null&&e.undoManager.isUndoingRedoing)return;this.invalidateConnectedLinks()}}get avoidable(){return(this.B&8)!==0}set avoidable(t){const i=(this.B&8)!==0;if(i!==t){Debug&&U.i(t,"boolean",Node,"avoidable"),this.B=this.B^8;const e=this.diagram;e!==null&&e.rP(this),this.t("avoidable",i,t)}}get avoidableMargin(){return this.Vt!==null?this.Vt.my:Margin.AC}set avoidableMargin(t){typeof t=="number"?t=new Margin(t):U.e(t,Margin,Node,"avoidableMargin");const i=this.avoidableMargin;if(!i.equals(t)){t=t.N(),this.dl().my=t;const e=this.diagram;e!==null&&e.rP(this),this.t("avoidableMargin",i,t)}}canAvoid(){return this.avoidable&&!this.isLinkLabel}getAvoidableRect(t){return t.set(this.actualBounds),t.addMargin(this.avoidableMargin),t}findVisibleNode(){let t=this;for(;t!==null&&!t.isVisible();)t=t.containingGroup;return t}isVisible(){if(!super.isVisible())return!1;let t=!0,i=1;const e=this.diagram;if(e!==null){if(e.animationManager.xx(this))return!0;t=e.isTreePathToChildren,i=e.treeCollapsePolicy}if(i===1){const n=this.findTreeParentNode();if(n!==null&&!n.isTreeExpanded)return!1}else if(i===2){const n=t?this.findLinksInto():this.findLinksOutOf();let o=!1,r=!1;for(;n.next();){const l=n.value;if(l.isTreeLink){o=!0;const h=t?l.fromNode:l.toNode;if(h&&h.isTreeExpanded){r=!0;break}}}if(o&&!r)return!1}else if(i===3){const n=t?this.findLinksInto():this.findLinksOutOf();let o=!1,r=!1;for(;n.next();){const l=n.value;if(l.isTreeLink){o=!0;const h=t?l.fromNode:l.toNode;if(h&&!h.isTreeExpanded){r=!0;break}}}if(o&&r)return!1}const s=this.labeledLink;return s!==null?s.isVisible():!0}Ki(t){super.Ki(t);const i=this.linksConnected;for(;i.next();){const e=i.value;if(t&&this.containingGroup!==null){const s=e.getOtherNode(this);s!==null&&!s.isMemberOf(this.containingGroup)&&e.invalidateRoute()}e.Ki(t)}}get linksConnected(){return this.oi.iterator}findExternalTreeLinksConnected(){const t=new GSet,i=new GSet;return this.MT(this,t,i),i.iterator}MT(t,i,e){if(t===null||i.has(t))return;i.add(t);let s=!0;const n=this.diagram;n!==null&&(s=n.isTreePathToChildren),t.linksConnected.each(o=>{o.isTreeLink?(s?o.fromNode===t:o.toNode===t)&&this.MT(s?o.toNode:o.fromNode,i,e):e.add(o)})}findLinksConnected(t){if(t===void 0&&(t=null),t===null)return this.oi.iterator;Debug&&U.i(t,"string",Node,"findLinksConnected:pid");const i=new ListIterator(this.oi),e=this;return i.predicate=s=>s.fromNode===e&&s.fromPortId===t||s.toNode===e&&s.toPortId===t,i}findLinksOutOf(t){t===void 0&&(t=null),Debug&&t!==null&&U.i(t,"string",Node,"findLinksOutOf:pid");const i=new ListIterator(this.oi),e=this;return i.predicate=s=>s.fromNode!==e?!1:t===null?!0:s.fromPortId===t,i}findLinksInto(t){t===void 0&&(t=null),Debug&&t!==null&&U.i(t,"string",Node,"findLinksInto:pid");const i=new ListIterator(this.oi),e=this;return i.predicate=s=>s.toNode!==e?!1:t===null?!0:s.toPortId===t,i}findNodesConnected(t){t===void 0&&(t=null),Debug&&t!==null&&U.i(t,"string",Node,"findNodesConnected:pid");let i=null,e=null;const s=this.oi.iterator;for(;s.next();){const n=s.value;if(n.fromNode===this){if(t===null||n.fromPortId===t){const o=n.toNode;i!==null?i.add(o):e!==null&&e!==o?(i=new GSet,i.add(e),i.add(o)):e=o}}else if(n.toNode===this&&(t===null||n.toPortId===t)){const o=n.fromNode;i!==null?i.add(o):e!==null&&e!==o?(i=new GSet,i.add(e),i.add(o)):e=o}}return i!==null?i.iterator:e!==null?new SingletonIterator(e):EmptyIterator.instance}findNodesOutOf(t){t===void 0&&(t=null),Debug&&t!==null&&U.i(t,"string",Node,"findNodesOutOf:pid");let i=null,e=null;const s=this.oi.iterator;for(;s.next();){const n=s.value;if(n.fromNode===this&&(t===null||n.fromPortId===t)){const o=n.toNode;i!==null?i.add(o):e!==null&&e!==o?(i=new GSet,i.add(e),i.add(o)):e=o}}return i!==null?i.iterator:e!==null?new SingletonIterator(e):EmptyIterator.instance}findNodesInto(t){t===void 0&&(t=null),Debug&&t!==null&&U.i(t,"string",Node,"findNodesInto:pid");let i=null,e=null;const s=this.oi.iterator;for(;s.next();){const n=s.value;if(n.toNode===this&&(t===null||n.toPortId===t)){const o=n.fromNode;i!==null?i.add(o):e!==null&&e!==o?(i=new GSet,i.add(e),i.add(o)):e=o}}return i!==null?i.iterator:e!==null?new SingletonIterator(e):EmptyIterator.instance}findLinksBetween(t,i,e){i===void 0&&(i=null),e===void 0&&(e=null),Debug&&(U.e(t,Node,Node,"findLinksBetween:othernode"),i!==null&&U.i(i,"string",Node,"findLinksBetween:pid"),e!==null&&U.i(e,"string",Node,"findLinksBetween:otherpid"));const s=new ListIterator(this.oi),n=this;return s.predicate=o=>o.fromNode===n&&o.toNode===t&&(i===null||o.fromPortId===i)&&(e===null||o.toPortId===e)||o.fromNode===t&&o.toNode===n&&(e===null||o.fromPortId===e)&&(i===null||o.toPortId===i),s}findLinksTo(t,i,e){i===void 0&&(i=null),e===void 0&&(e=null),Debug&&(U.e(t,Node,Node,"findLinksTo:othernode"),i!==null&&U.i(i,"string",Node,"findLinksTo:pid"),e!==null&&U.i(e,"string",Node,"findLinksTo:otherpid"));const s=new ListIterator(this.oi),n=this;return s.predicate=o=>!(o.fromNode!==n||o.toNode!==t||i!==null&&o.fromPortId!==i||e!==null&&o.toPortId!==e),s}get linkConnected(){return this.Vt!==null?this.Vt.yy:null}set linkConnected(t){const i=this.linkConnected;i!==t&&(t!==null&&U.P(t,Node,"linkConnected"),this.dl().yy=t,this.t("linkConnected",i,t))}get linkDisconnected(){return this.Vt!==null?this.Vt.wy:null}set linkDisconnected(t){const i=this.linkDisconnected;i!==t&&(t!==null&&U.P(t,Node,"linkDisconnected"),this.dl().wy=t,this.t("linkDisconnected",i,t))}get linkValidation(){return this.Vt!==null?this.Vt.Tl:null}set linkValidation(t){const i=this.linkValidation;i!==t&&(t!==null&&U.P(t,Node,"linkValidation"),this.dl().Tl=t,this.t("linkValidation",i,t))}Lb(t,i){this.Qi(i);const e=this.oi.has(t);if(e||this.oi.add(t),!e||t.fromNode===t.toNode){const s=this.linkConnected;if(s!==null){let n=!0;const o=this.diagram;o!==null&&(n=o.H,o.H=!0),s(this,t,i),o!==null&&(o.H=n)}}if(!e){if(!t.isTreeLink)return;const s=t.fromNode,n=t.toNode;if(s!==null&&n!==null&&s!==n){let o=!0;const r=this.diagram;r!==null&&(o=r.isTreePathToChildren);const l=o?n:s,h=o?s:n;if(l.Nh||(l.Nh=h),h.isTreeLeaf){if(r!==null&&r.undoManager.isUndoingRedoing)return;o?s===h&&(h.isTreeLeaf=!1):n===h&&(h.isTreeLeaf=!1)}}}}Tb(t,i){this.Qi(i);const e=this.oi.delete(t);let s=null;if(e||t.toNode===t.fromNode){const n=this.linkDisconnected;if(s=this.diagram,n!==null){let o=!0;s!==null&&(o=s.H,s.H=!0),n(this,t,i),s!==null&&(s.H=o)}}if(e){if(!t.isTreeLink)return;let n=!0;s!==null&&(n=s.isTreePathToChildren);const o=n?t.toNode:t.fromNode,r=n?t.fromNode:t.toNode;if(o!==null&&(o.Nh=!1),r!==null&&!r.isTreeLeaf)if(r.oi.count===0){if(r.Nh=null,s!==null&&s.undoManager.isUndoingRedoing)return;r.isTreeLeaf=!0}else r.d0()}}d0(){if(this.Nh=!1,this.oi.count===0)return;let t=!0;const i=this.diagram;if(i!==null&&i.undoManager.isUndoingRedoing)return;i!==null&&(t=i.isTreePathToChildren);const e=this.oi.iterator;for(;e.next();){const s=e.value;if(s.isTreeLink){if(t){if(s.fromNode===this){this.isTreeLeaf=!1;return}}else if(s.toNode===this){this.isTreeLeaf=!1;return}}}this.isTreeLeaf=!0}updateRelationshipsFromData(){const t=this.diagram;t!==null&&t.partManager.updateRelationshipsFromData(this)}zm(t){if(super.zm(t),!t){this.d0();const i=this.Ac;i!==null&&i.PT(this)}}Xm(t){if(super.Xm(t),!t){const i=this.Ac;i!==null&&i.NT(this)}}Jf(){if(this.oi.count>0){const t=this.diagram;if(t!==null){const i=t.commandHandler!==null?t.commandHandler.deletesConnectedLinks:!0,s=this.oi.copy().iterator;for(;s.next();){const n=s.value;i?t.remove(n):(n.fromNode===this&&(n.fromNode=null),n.toNode===this&&(n.toNode=null))}}}this.labeledLink=null,super.Jf()}get isLinkLabel(){return this.Ac!==null}get labeledLink(){return this.Ac}set labeledLink(t){const i=this.Ac;if(i!==t){Debug&&t!==null&&U.e(t,Link,Node,"labeledLink");const e=this.diagram,s=this.data;if(i!==null){if(i.NT(this),e!==null&&s!==null&&!e.undoManager.isUndoingRedoing){const n=i.data,o=e.model;if(n!==null&&o.Ya()){const r=o.getKeyForNodeData(s);r!==void 0&&o.removeLabelKeyForLinkData(n,r)}}this.containingGroup=null}if(this.Ac=t,t!==null){if(t.PT(this),e!==null&&s!==null&&!e.undoManager.isUndoingRedoing){const n=t.data,o=e.model;if(n!==null&&o.Ya()){const r=o.getKeyForNodeData(s);r!==void 0&&o.addLabelKeyForLinkData(n,r)}}this.containingGroup=t.containingGroup}this.hc(),this.t("labeledLink",i,t)}}findVisiblePort(t){let i=t;for(;i!==null&&(!i.actualBounds.isReal()||!i.isVisibleObject());)i=i.panel;return i===null?this.port:i}findPort(t){if(Debug&&U.i(t,"string",Node,"findPort:pid"),this.he===null){if(t===""&&this.yn===!1)return this;this.CT()}let i=this.he.get(t);return i!==null||t!==""&&(i=this.he.get(""),i!==null)?i:this}get port(){return this.findPort("")}get ports(){return this.he===null&&this.CT(),this.he.iteratorValues}CT(){this.he===null?this.he=new GMap:this.he.clear(),this.walkVisualTreeFrom(this,(t,i)=>t.IL(i)),this.he.count===0&&this.he.set("",this)}IL(t){const i=t.portId;i!==null&&this.he!==null&&this.he.set(i,t)}IP(t,i){const e=t.portId;if(e!==null){this.he!==null&&this.he.delete(e);const s=this.diagram;if(s!==null&&i){let n=null;const o=this.findLinksConnected(e);for(;o.next();){const r=o.value;n===null&&(n=U.lt()),n.push(r)}if(n!==null){for(let r=0;r!(!n.isTreeLink||n.fromNode!==s):e.predicate=n=>!(!n.isTreeLink||n.toNode!==s),e}findTreeChildrenNodes(){let t=!0;const i=this.diagram;i!==null&&(t=i.isTreePathToChildren);let e=null,s=null;const n=this.oi.iterator;if(t)for(;n.next();){const o=n.value;if(o.isTreeLink&&o.fromNode===this){const r=o.toNode;e!==null?e.add(r):s!==null&&s!==r?(e=new List,e.add(s),e.add(r)):s=r}}else for(;n.next();){const o=n.value;if(o.isTreeLink&&o.toNode===this){const r=o.fromNode;e!==null?e.add(r):s!==null&&s!==r?(e=new List,e.add(s),e.add(r)):s=r}}return e!==null?e.iterator:s!==null?new SingletonIterator(s):EmptyIterator.instance}findTreeParts(t){t===void 0&&(t=1/0),U.i(t,"number",Node,"findTreeParts:level");const i=new GSet;return Part.ch(i,this,!1,t,!0),i}collapseTree(t){t===void 0&&(t=1),U.r(t,Node,"collapseTree:level"),t<1&&(t=1);const i=this.diagram;if(i===null||i.isCollapsingExpanding)return;i.isCollapsingExpanding=!0;const e=new GSet;e.add(this),this.AT(e,i.isTreePathToChildren,t,i,this,i.treeCollapsePolicy===1),i.isCollapsingExpanding=!1}AT(t,i,e,s,n,o){if(e>1){const r=i?this.findLinksOutOf():this.findLinksInto();for(;r.next();){const l=r.value;if(!l.isTreeLink)continue;const h=l.getOtherNode(this);h!==null&&h!==this&&!t.has(h)&&(t.add(h),h.AT(t,i,e-1,s,n,o))}}else this.LT(t,i,s,n,o)}LT(t,i,e,s,n){const o=s===this?!0:this.isTreeExpanded,r=i?this.findLinksOutOf():this.findLinksInto();for(;r.next();){const l=r.value;if(!l.isTreeLink)continue;const h=l.getOtherNode(this);if(h!==null&&h!==this){const f=t.has(h);if(f||t.add(h),o){const a=i?h.findNodesInto():h.findNodesOutOf(),c=this;a.all(u=>u===c||!u.isTreeExpanded)&&e.Ef(h,s),h.wh(),h.Ki(!1)}h.isTreeExpanded&&(h.wasTreeExpanded=h.isTreeExpanded,f||h.LT(t,i,e,s,n))}}this.isTreeExpanded=!1}expandTree(t){t===void 0&&(t=2),U.r(t,Node,"expandTree:level"),t<2&&(t=2);const i=this.diagram;if(i===null||i.isCollapsingExpanding)return;i.isCollapsingExpanding=!0;const e=new GSet;e.add(this),this.TT(e,i.isTreePathToChildren,t,i,this,i.treeCollapsePolicy===1),i.isCollapsingExpanding=!1}TT(t,i,e,s,n,o){const r=n===this?!1:this.isTreeExpanded,l=i?this.findLinksOutOf():this.findLinksInto();for(;l.next();){const h=l.value;if(!h.isTreeLink)continue;r||h.Le||h.invalidateRoute();const f=h.getOtherNode(this);if(f!==null&&f!==this&&!t.has(f)){if(t.add(f),!r){f.Ki(!0),f.wh();const a=i?f.findNodesInto():f.findNodesOutOf(),c=this;a.all(u=>u===c||!u.isTreeExpanded)&&s.Of(f,n)}(e>2||f.wasTreeExpanded)&&(f.wasTreeExpanded=!1,f.TT(t,i,e-1,s,n,o))}}this.isTreeExpanded=!0}get isTreeExpanded(){return(this.B&1)!==0}set isTreeExpanded(t){const i=(this.B&1)!==0;if(i!==t){Debug&&U.i(t,"boolean",Node,"isTreeExpanded"),this.B=this.B^1;const e=this.diagram;this.t("isTreeExpanded",i,t);const s=this.treeExpandedChanged;if(s!==null){let n=!0;e!==null&&(n=e.H,e.H=!0),s(this),e!==null&&(e.H=n)}if(e!==null&&e.undoManager.isUndoingRedoing){this.Ki(t);return}t?this.expandTree():this.collapseTree()}}get wasTreeExpanded(){return(this.B&2)!==0}set wasTreeExpanded(t){const i=(this.B&2)!==0;i!==t&&(Debug&&U.i(t,"boolean",Node,"wasTreeExpanded"),this.B=this.B^2,this.t("wasTreeExpanded",i,t))}get treeExpandedChanged(){return this.Vt!==null?this.Vt.xy:null}set treeExpandedChanged(t){const i=this.treeExpandedChanged;i!==t&&(t!==null&&U.P(t,Node,"treeExpandedChanged"),this.dl().xy=t,this.t("treeExpandedChanged",i,t))}get isTreeLeaf(){return(this.B&4)!==0}set isTreeLeaf(t){const i=(this.B&4)!==0;i!==t&&(Debug&&U.i(t,"boolean",Node,"isTreeLeaf"),this.B=this.B^4,this.t("isTreeLeaf",i,t))}get isTreeRoot(){return this.findTreeParentLink()===null}}class NodeTemplateSettings{mi;yy;wy;Tl;xy;my;gy;by;ky;fh;Sy;constructor(){this.mi=!1,this.yy=null,this.wy=null,this.Tl=null,this.xy=null,this.my=Margin.AC,this.gy=1,this.by=null,this.ky=null,this.fh=null,this.Sy=null}copy(){const t=new NodeTemplateSettings;return t.yy=this.yy,t.wy=this.wy,t.Tl=this.Tl,t.xy=this.xy,t.my=this.my.N(),t.gy=this.gy,t.by=this.by,t.ky=this.ky,t.fh=this.fh,t.Sy=this.Sy,t}}var LinkAdjusting=(y=>(y[y.None=0]="None",y[y.End=17]="End",y[y.Scale=18]="Scale",y[y.Stretch=19]="Stretch",y))(LinkAdjusting||{}),Routing=(y=>(y[y.Normal=1]="Normal",y[y.Orthogonal=2]="Orthogonal",y[y.AvoidsNodes=6]="AvoidsNodes",y[y.AvoidsNodesStraight=7]="AvoidsNodesStraight",y))(Routing||{}),Curve=(y=>(y[y.None=0]="None",y[y.Bezier=9]="Bezier",y[y.JumpGap=10]="JumpGap",y[y.JumpOver=11]="JumpOver",y))(Curve||{});class Link extends Part{Dt;ho;ao;Fd;fo;co;Rd;Lc;Id;Od;Ed;Ka;Bd;$s;Mi;Re;Cr;Tc;$o;pN;yN;Db;wN;xN;Ua;Fb;ft;Zo;static Ga=null;static Ha=null;gc;bN;kN;constructor(t){super(Panel.Link),this.Dt=8,this.ho=null,this.ao="",this.Fd=null,this.fo=null,this.co="",this.Rd=null,this.Lc=0,this.Id=0,this.Od=0,this.Ed=NaN,this.Ka=1,this.Bd=.5,this.$s=null,this.Mi=new List().p(),this.Re=null,this.Cr=null,this.Tc=new Rect,this.ft=new Geometry,this.$o=null,this.Zo=null,this.pN=null,this.yN=null,this.bN=0,this.kN=0,this.Db=new Point,this.wN=null,this.xN=null,this.Ua=null,this.Fb=NaN,this.yt=null,this.gc=[],t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Dt=this.Dt&-113,t.ao=this.ao,t.Fd=this.Fd,t.co=this.co,t.Rd=this.Rd,t.Lc=this.Lc,t.Id=this.Id,t.Od=this.Od,t.Ed=this.Ed,t.Ka=this.Ka,t.Bd=this.Bd,this.yt!==null&&(t.yt=this.yt.copy())}Xo(t){super.Xo(t),this.ao=t.ao,this.co=t.co,t.Re=null,t.invalidateRoute(),t.Zo=this.Zo;const i=t.fromPort;i!==null&&t.fromNode.Qi(i);const e=t.toPort;e!==null&&t.toNode.Qi(e)}ai(t){t in Routing||t in Curve||t in LinkAdjusting?Link.SN(t)?this.routing=t:t===9||t===10||t===11?this.curve=t:t===17||t===18||t===19?this.adjusting=t:t===1||t===0||U.n("Unknown Link enum value for a Link property: "+t):super.ai(t)}static Normal=1;static Orthogonal=2;static AvoidsNodes=6;static AvoidsNodesStraight=7;static None=0;static Bezier=9;static JumpGap=10;static JumpOver=11;static End=17;static Scale=18;static Stretch=19;static OrientAlong=21;static OrientPlus90=22;static OrientMinus90=23;static OrientOpposite=24;static OrientUpright=25;static OrientPlus90Upright=26;static OrientMinus90Upright=27;static OrientUpright45=28;static mO=8;static pO=16;static yO=14;static qa=8;Ge(){return this.yt===null&&(this.yt=new LinkSettings),this.yt}AI(t,i,e){const s=t.segmentIndex,n=t.segmentFraction;let o=t.alignmentFocus;const r=t.segmentOrientation,l=t.segmentOffset;let h=0,f=0,a=0,c=0;if(isNaN(s)){const C=this.ft,P=U.lt();C.getPointAndAngleAlongPath(n,P);const N=Point.K(P[0],P[1]);if(N.add(this.getPoint(0)),C.type===1)N.offset(-C.startX,-C.startY);else{const T=C.figures.first();N.offset(-T.startX,-T.startY)}c=P[2],r!==0&&(a=this.computeAngle(t,r,c),t.angle=a),h=N.x,f=N.y,Point.o(N),U.tt(P)}else if(s<-i||s>=i){const C=Point.a();this.YL(C),c=this.midAngle,r!==0&&(a=this.computeAngle(t,r,c),t.angle=a),h=C.x,f=C.y,Point.o(C)}else{let C,P,N=0;if(s>=0?(C=e.h[s],P=s0?e.h[N-1]:C),C.equalsApprox(P)){let T,L;s>=0?(T=s>0?e.h[s-1]:C,L=s1?e.h[N-2]:P);const D=T.distanceSquaredPoint(C),F=P.distanceSquaredPoint(L);D>F+10?c=s>=0?T.directionPoint(C):C.directionPoint(T):F>D+10?c=s>=0?P.directionPoint(L):L.directionPoint(P):c=s>=0?T.directionPoint(L):L.directionPoint(T)}else c=s>=0?C.directionPoint(P):P.directionPoint(C);r!==0&&(a=this.computeAngle(t,r,c),t.angle=a),h=C.x+(P.x-C.x)*n,f=C.y+(P.y-C.y)*n}if(o.isNone()){t.location=new Point(h,f);return}else o.isNoSpot()&&(o=Spot.Center);const u=Transform.a();u.Vi(),u.ot(t.scale,t.scale),u.ms(t.angle,0,0);const d=t.naturalBounds,m=Rect.K(0,0,d.width,d.height),g=Point.a();g.setRectSpot(m,o),u.kt(g);let p=-g.x,w=-g.y;const x=d.width,k=d.height,b=Point.a();b.c(l);const S=isNaN(l.x),M=isNaN(l.y);if(S||M){const C=x/2+3,P=k/2+3,N=c>=45&&c<=135,T=c>=225&&c<=315;r===0&&(N||T)?(b.x=M?C:l.y,b.y=S?P:l.x,N?s>=0||isNaN(s)&&n<.5||S&&(b.y=-P):T&&((s>=0||isNaN(s)&&n<.5)&&S&&(b.y=-P),M&&(b.x=-C))):(S&&(s>=0||isNaN(s)&&n<.5?b.x=C:b.x=-C),M&&(b.y=-P),b.rotate(c))}else b.rotate(c);h+=b.x,f+=b.y,u.Yg(m),p+=m.x,w+=m.y;const A=Point.K(h+p,f+w);t.move(A),Point.o(A),Point.o(b),Point.o(g),Rect.o(m),Transform.o(u)}vr(){let t=this.fromNode;if(t!==null){const e=t.findVisibleNode();if(e!==null&&(t=e),t.ns()||t.hh())return!1}let i=this.toNode;if(i!==null){const e=i.findVisibleNode();if(e!==null&&(i=e),i.ns()||i.hh())return!1}return!0}FP(t,i,e){return!1}RP(){}Ce(){return!1}computeAngle(t,i,e){return Link.computeAngle(i,e)}static computeAngle(t,i){let e=0;switch(t){default:case 0:e=0;break;case 21:e=i;break;case 22:e=i+90;break;case 23:e=i-90;break;case 24:e=i+180;break;case 25:e=Geo.Hg(i),e>90&&e<270&&(e-=180);break;case 26:e=Geo.Hg(i+90),e>90&&e<270&&(e-=180);break;case 27:e=Geo.Hg(i-90),e>90&&e<270&&(e-=180);break;case 28:if(e=Geo.Hg(i),e>45&&e<135||e>225&&e<315)return 0;e>90&&e<270&&(e-=180);break}return Geo.Hg(e)}get fromNode(){return this.ho}set fromNode(t){const i=this.ho;if(i!==t){Debug&&t!==null&&U.e(t,Node,Link,"fromNode");const e=this.fromPort;i!==null&&(this.fo!==i&&i.Tb(this,e),this.My(),this.invalidateLayout(2)),this.ho=t,t!==null&&this.Ki(t.isVisible()),this.$o=null,this.invalidateRoute();const s=this.diagram;s!==null&&s.H&&s.partManager.setFromNodeForLink(this,t,i);const n=this.fromPort,o=this.fromPortChanged;if(o!==null){let r=!0;s!==null&&(r=s.H,s.H=!0),o(this,e,n),s!==null&&(s.H=r)}t!==null&&(this.fo!==t&&t.Lb(this,n),this.Py(),this.invalidateLayout(1)),this.t("fromNode",i,t),this.Td()}}get fromPortId(){return this.ao}set fromPortId(t){const i=this.ao;if(i!==t){Debug&&U.i(t,"string",Link,"fromPortId");const e=this.fromPort;e!==null&&this.fromNode?.Qi(e),this.My(),this.ao=t;const s=this.fromPort;s!==null&&this.fromNode?.Qi(s);const n=this.diagram;if(n!==null){const o=this.data,r=n.model;o!==null&&r.Ya()&&r.setFromPortIdForLinkData(o,t)}if(e!==s){this.$o=null,this.invalidateRoute();const o=this.fromPortChanged;if(o!==null){let r=!0;n!==null&&(r=n.H,n.H=!0),o(this,e,s),n!==null&&(n.H=r)}}this.Py(),this.t("fromPortId",i,t)}}get fromPort(){const t=this.ho;if(t===null)return null;const i=this.ao;return t.findPort(i)}get fromPortChanged(){return this.Fd}set fromPortChanged(t){const i=this.Fd;i!==t&&(t!==null&&U.P(t,Link,"fromPortChanged"),this.Fd=t,this.t("fromPortChanged",i,t))}get toNode(){return this.fo}set toNode(t){const i=this.fo;if(i!==t){Debug&&t!==null&&U.e(t,Node,Link,"toNode");const e=this.toPort;i!==null&&(this.ho!==i&&i.Tb(this,e),this.My(),this.invalidateLayout(2)),this.fo=t,t!==null&&this.Ki(t.isVisible()),this.$o=null,this.invalidateRoute();const s=this.diagram;s!==null&&s.H&&s.partManager.setToNodeForLink(this,t,i);const n=this.toPort,o=this.toPortChanged;if(o!==null){let r=!0;s!==null&&(r=s.H,s.H=!0),o(this,e,n),s!==null&&(s.H=r)}t!==null&&(this.ho!==t&&t.Lb(this,n),this.Py(),this.invalidateLayout(1)),this.t("toNode",i,t),this.Td()}}get toPortId(){return this.co}set toPortId(t){const i=this.co;if(i!==t){Debug&&U.i(t,"string",Link,"toPortId");const e=this.toPort;e!==null&&this.toNode?.Qi(e),this.My(),this.co=t;const s=this.toPort;s!==null&&this.toNode?.Qi(s);const n=this.diagram;if(n!==null){const o=this.data,r=n.model;o!==null&&r.Ya()&&r.setToPortIdForLinkData(o,t)}if(e!==s){this.$o=null,this.invalidateRoute();const o=this.toPortChanged;if(o!==null){let r=!0;n!==null&&(r=n.H,n.H=!0),o(this,e,s),n!==null&&(n.H=r)}}this.Py(),this.t("toPortId",i,t)}}get toPort(){const t=this.fo;if(t===null)return null;const i=this.co;return t.findPort(i)}get toPortChanged(){return this.Rd}set toPortChanged(t){const i=this.Rd;i!==t&&(t!==null&&U.P(t,Link,"toPortChanged"),this.Rd=t,this.t("toPortChanged",i,t))}get fromSpot(){return this.yt!==null?this.yt.ka:Spot.Default}set fromSpot(t){const i=this.fromSpot;if(!i.equals(t)){if(Debug&&U.e(t,Spot,Link,"fromSpot"),t=t.N(),this.Ge().ka=t,this.t("fromSpot",i,t),i.isSide()||t.isSide()){const e=this.fromNode;e!==null&&e.Qi(this.fromPort)}this.invalidateRoute()}}get fromEndSegmentLength(){return this.yt!==null?this.yt.Ma:NaN}set fromEndSegmentLength(t){const i=this.fromEndSegmentLength;if(i!==t){if(Debug&&U.i(t,"number",Link,"fromEndSegmentLength"),t<0&&U.U(t,">= 0",Link,"fromEndSegmentLength"),this.Ge().Ma=t,this.t("fromEndSegmentLength",i,t),this.computeSpot(!0,this.fromPort).isSide()){const e=this.fromNode;e!==null&&e.Qi(this.fromPort)}this.invalidateRoute()}}get fromShortLength(){return this.yt!==null?this.yt.Na:NaN}set fromShortLength(t){const i=this.fromShortLength;i!==t&&(Debug&&U.i(t,"number",Link,"fromShortLength"),this.Ge().Na=t,this.re(),this.t("fromShortLength",i,t))}get toSpot(){return this.yt!==null?this.yt.Sa:Spot.Default}set toSpot(t){const i=this.toSpot;if(!i.equals(t)){if(Debug&&U.e(t,Spot,Link,"toSpot"),t=t.N(),this.Ge().Sa=t,this.t("toSpot",i,t),i.isSide()||t.isSide()){const e=this.toNode;e!==null&&e.Qi(this.toPort)}this.invalidateRoute()}}get toEndSegmentLength(){return this.yt!==null?this.yt.Pa:NaN}set toEndSegmentLength(t){const i=this.toEndSegmentLength;if(i!==t){if(Debug&&U.i(t,"number",Link,"toEndSegmentLength"),t<0&&U.U(t,">= 0",Link,"toEndSegmentLength"),this.Ge().Pa=t,this.t("toEndSegmentLength",i,t),this.computeSpot(!1,this.toPort).isSide()){const e=this.toNode;e!==null&&e.Qi(this.toPort)}this.invalidateRoute()}}get toShortLength(){return this.yt!==null?this.yt.Ca:NaN}set toShortLength(t){const i=this.toShortLength;i!==t&&(Debug&&U.i(t,"number",Link,"toShortLength"),this.Ge().Ca=t,this.re(),this.t("toShortLength",i,t))}Td(){const t=this.fromNode,i=this.toNode;let e=null;if(t!==null?i!==null?e=t.findCommonContainingGroup(i):e=t.containingGroup:i!==null?e=i.containingGroup:e=null,this.wO(e),this.isLabeledLink){const s=this.labelNodes;for(;s.next();){const n=s.value;n.containingGroup=e}}}wO(t){const i=this.Ph;if(i!==t){i!==null&&i.aN(this),this.Ph=t,t!==null&&t.fN(this);const e=this.containingGroupChanged;if(e!==null){let s=!0;const n=this.diagram;n!==null&&(s=n.H,n.H=!0),e(this,i,t),n!==null&&(n.H=s)}this.Le&&(this.wN===i||this.xN===i)&&this.invalidateRoute()}}wh(){const t=this.containingGroup;t!==null&&this.fromNode!==t&&this.toNode!==t&&t.computesBoundsIncludingLinks&&super.wh()}getOtherNode(t){Debug&&U.e(t,Node,Link,"getOtherNode:node");const i=this.fromNode;return t===i?this.toNode:i}getOtherPort(t){Debug&&U.e(t,GraphObject,Link,"getOtherPort:port");const i=this.fromPort;return t===i?this.toPort:i}get isLabeledLink(){return this.$s===null?!1:this.$s.count>0}get labelNodes(){return this.$s===null?EmptyIterator.instance:this.$s.iterator}PT(t){this.$s===null&&(this.$s=new GSet),this.$s.add(t),this.u()}NT(t){this.$s!==null&&(this.$s.delete(t),this.u())}zm(t){if(super.zm(t),this.Wa()&&this.invalidateOtherJumpOvers(this.actualBounds),!t){const i=this.ho;let e=null;i!==null&&(e=this.fromPort,i.Lb(this,e));const s=this.fo;let n=null;s!==null&&(n=this.toPort,(s!==i||n!==e)&&s.Lb(this,n)),this.Py()}}Xm(t){if(super.Xm(t),this.Wa()&&this.invalidateOtherJumpOvers(this.actualBounds),!t){const i=this.ho;let e=null;i!==null&&(e=this.fromPort,i.Tb(this,e));const s=this.fo;let n=null;s!==null&&(n=this.toPort,(s!==i||n!==e)&&s.Tb(this,n)),this.My()}}Jf(){if(this.Le=!0,this.$s!==null){const i=this.diagram;if(i!==null){const s=this.$s.copy().iterator;for(;s.next();){const n=s.value;i.remove(n)}}}if(this.data!==null){const i=this.diagram;i!==null&&i.partManager.MN(this)}}updateRelationshipsFromData(){if(this.data===null)return;const i=this.diagram;i!==null&&i.partManager.updateRelationshipsFromData(this)}move(t,i){const e=i?this.location:this.position;let s=e.x;isNaN(s)&&(s=0);let n=e.y;isNaN(n)&&(n=0);const o=t.x-s,r=t.y-n;if(i===!0)super.move(t,!1);else{const h=Point.K(e.x+o,e.y+r);super.move(h,!1),Point.o(h)}this.wr(o,r);const l=this.labelNodes;for(;l.next();){const h=l.value,f=h.position;h.moveTo(f.x+o,f.y+r)}}get relinkableFrom(){return(this.Dt&1)!==0}set relinkableFrom(t){const i=(this.Dt&1)!==0;i!==t&&(Debug&&U.i(t,"boolean",Link,"relinkableFrom"),this.Dt=this.Dt^1,this.t("relinkableFrom",i,t),this.invalidateAdornments())}get relinkableTo(){return(this.Dt&2)!==0}set relinkableTo(t){const i=(this.Dt&2)!==0;i!==t&&(Debug&&U.i(t,"boolean",Link,"relinkableTo"),this.Dt=this.Dt^2,this.t("relinkableTo",i,t),this.invalidateAdornments())}canRelinkFrom(){if(!this.relinkableFrom)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowRelink)return!1;const i=t.diagram;return!(i!==null&&!i.allowRelink)}canRelinkTo(){if(!this.relinkableTo)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowRelink)return!1;const i=t.diagram;return!(i!==null&&!i.allowRelink)}get resegmentable(){return(this.Dt&4)!==0}set resegmentable(t){const i=(this.Dt&4)!==0;i!==t&&(Debug&&U.i(t,"boolean",Link,"resegmentable"),this.Dt=this.Dt^4,this.t("resegmentable",i,t),this.invalidateAdornments())}get isTreeLink(){return(this.Dt&8)!==0}set isTreeLink(t){const i=(this.Dt&8)!==0;i!==t&&(Debug&&U.i(t,"boolean",Link,"isTreeLink"),this.Dt=this.Dt^8,this.t("isTreeLink",i,t),this.fromNode!==null&&this.fromNode.d0(),this.toNode!==null&&this.toNode.d0())}get path(){const t=this.findMainElement();return t instanceof Shape?t:null}get routeBounds(){return this.updateRoute(),this.xO(this.Tc)}xO(t){let i=1/0,e=1/0;const s=this.pointsCount;if(s===0)return t.s(NaN,NaN,0,0),t;if(s===1){const n=this.getPoint(0);i=Math.min(n.x,i),e=Math.min(n.y,e),t.s(n.x,n.y,0,0)}else if(s===2){const n=this.getPoint(0),o=this.getPoint(1);i=Math.min(n.x,o.x),e=Math.min(n.y,o.y),t.s(n.x,n.y,0,0),t.unionPoint(o)}else if(this.computeCurve()===9&&s>=3&&!this.isOrthogonal){let n=this.getPoint(0);if(i=n.x,e=n.y,t.s(i,e,0,0),s===3){const o=this.getPoint(1);i=Math.min(o.x,i),e=Math.min(o.y,e);const r=this.getPoint(2);i=Math.min(r.x,i),e=Math.min(r.y,e),Geo.cu(n.x,n.y,o.x,o.y,o.x,o.y,r.x,r.y,.5,t)}else for(let o=3;o=s&&(o=s-1);const l=this.getPoint(o-1),h=this.getPoint(o);Geo.cu(n.x,n.y,r.x,r.y,l.x,l.y,h.x,h.y,.5,t),i=Math.min(h.x,i),e=Math.min(h.y,e),n=h}}else{const n=this.getPoint(0),o=this.getPoint(1);i=Math.min(n.x,o.x),e=Math.min(n.y,o.y),t.s(n.x,n.y,0,0),t.unionPoint(o);for(let r=2;r=15||this.computeCurve()===9)){this.ft.getPointAlongPath(.5,t),t.add(this.getPoint(0));const f=this.ft.figures.first();return t.offset(-f.startX,-f.startY),t}if(this.computeCurve()===9){if(i===3){const c=this.getPoint(0),u=this.getPoint(1),d=this.getPoint(2);return Geo.IC(c.x,c.y,u.x,u.y,u.x,u.y,d.x,d.y,t),t}const f=(i-1)/3|0,a=(f/2|0)*3;if(f%2===1){const c=this.getPoint(a),u=this.getPoint(a+1),d=this.getPoint(a+2),m=this.getPoint(a+3);return Geo.IC(c.x,c.y,u.x,u.y,d.x,d.y,m.x,m.y,t),t}else return t.c(this.getPoint(a)),t}const e=this.flattenedLengths,s=this.flattenedTotalLength;let n=0,o=0,r=0;for(;ns/2));)n+=r,o++;const l=this.getPoint(o),h=this.getPoint(o+1);if(Math.abs(l.x-h.x)<1)l.y>h.y?t.s(l.x,l.y-(s/2-n)):t.s(l.x,l.y+(s/2-n));else if(Math.abs(l.y-h.y)<1)l.x>h.x?t.s(l.x-(s/2-n),l.y):t.s(l.x+(s/2-n),l.y);else{const f=(s/2-n)/r,a=f*(h.x-l.x),c=f*(h.y-l.y);t.s(l.x+a,l.y+c)}return t}get midAngle(){return this.updateRoute(),this.computeMidAngle()}computeMidAngle(){const t=this.pointsCount;if(t<2)return NaN;if(t===2){const h=this.getPoint(0),f=this.getPoint(1);return h.directionPoint(f)}if(this.isOrthogonal&&(this.computeCorner()>=15||this.computeCurve()===9))return this.ft.getAngleAlongPath(.5);if(this.computeCurve()===9&&t>=4){const h=(t-1)/3|0;let f=(h/2|0)*3;if(h%2===1){f=Math.floor(f);const a=this.getPoint(f),c=this.getPoint(f+1),u=this.getPoint(f+2),d=this.getPoint(f+3);return Geo.rF(a.x,a.y,c.x,c.y,u.x,u.y,d.x,d.y)}else if(f>0&&f+1e/2));)s+=o,n++;const r=this.getPoint(n),l=this.getPoint(n+1);if(Math.abs(r.x-l.x)<1&&Math.abs(r.y-l.y)<1){if(n>0&&n+2l.y?270:90;if(Math.abs(r.y-l.y)<1)return r.x>l.x?180:0}return r.directionPoint(l)}get flattenedLengths(){return this.Ua!==null?this.Ua:(this.Le||this.Rb(),this.bO())}get flattenedTotalLength(){let t=this.Fb;if(isNaN(t)){const i=this.flattenedLengths,e=i.length;t=0;for(let s=0;s=3){let g=this.getLinkPoint(i,e,r,!0,!1,s,n),p=this.getLinkPoint(s,n,l,!1,!1,i,e);m=this.adjustPoints(0,g,o-1,p),m&&(g=this.getLinkPoint(i,e,r,!0,!1,s,n),p=this.getLinkPoint(s,n,l,!1,!1,i,e),this.adjustPoints(0,g,o-1,p))}m||(this.clearPoints(),u?this.kO(i,e,r,s,n,l):this.SO(i,e,r,s,n,l))}else{const m=this.isAvoiding;d&&(c&&m||a)&&this.clearPoints();const g=a?this.computeCurviness():0,p=this.getLinkPoint(i,e,r,!0,c,s,n);let w=0,x=0,k=0;if(c||!h||a){let N=this.computeEndSegmentLength(i,e,r,!0);if(k=this.getLinkDirection(i,e,p,r,!0,c,s,n),a&&(h||r.equals(l)||!c&&r.x+l.x===1&&r.y+l.y===1)&&(k-=c?90:30,g<0&&(k-=180)),k<0?k+=360:k>=360&&(k-=360),a&&(N+=Math.abs(g)*(c?1:2)),k===0?w=N:k===90?x=N:k===180?w=-N:k===270?x=-N:(w=N*Math.cos(k*Math.PI/180),x=N*Math.sin(k*Math.PI/180)),r.isNoSpot()&&a){const T=e.getDocumentPoint(Spot.Center,Point.a()),L=Point.K(T.x+w*1e3,T.y+x*1e3);this.getLinkPointFromPoint(i,e,T,L,!0,p),Point.o(T),Point.o(L)}}const b=this.getLinkPoint(s,n,l,!1,c,i,e);let S=0,M=0,A=0;if(c||!f||a){let N=this.computeEndSegmentLength(s,n,l,!1);if(A=this.getLinkDirection(s,n,b,l,!1,c,i,e),a&&(f||r.equals(l)||!c&&r.x+l.x===1&&r.y+l.y===1)&&(A+=c?0:30,g<0&&(A+=180)),A<0?A+=360:A>=360&&(A-=360),a&&(N+=Math.abs(g)*(c?1:2)),A===0?S=N:A===90?M=N:A===180?S=-N:A===270?M=-N:(S=N*Math.cos(A*Math.PI/180),M=N*Math.sin(A*Math.PI/180)),l.isNoSpot()&&a){const T=n.getDocumentPoint(Spot.Center,Point.a()),L=Point.K(T.x+S*1e3,T.y+M*1e3);this.getLinkPointFromPoint(s,n,T,L,!1,b),Point.o(T),Point.o(L)}}let C=p;(c||!h||a)&&(C=new Point(p.x+w,p.y+x));let P=b;(c||!f||a)&&(P=new Point(b.x+S,b.y+M)),!d&&!c&&h&&o>3&&this.adjustPoints(0,p,o-2,P)?this.setPoint(o-1,b):!d&&!c&&f&&o>3&&this.adjustPoints(1,C,o-1,b)?this.setPoint(0,p):!d&&(c?o>=6:o>4)&&this.adjustPoints(1,C,o-2,P)?(this.setPoint(0,p),this.setPoint(o-1,b)):(this.clearPoints(),this.addPoint(p),(c||!h||a)&&this.addPoint(C),c&&this.addOrthoPoints(C,k,P,A,i,s),(c||!f||a)&&this.addPoint(P),this.addPoint(b))}return t.addInvalidRoute(this),!0}NN(t,i){return Math.abs(i.x-t.x)>Math.abs(i.y-t.y)?(i.x>=t.x?i.x=t.x+9e9:i.x=t.x-9e9,i.y=t.y):(i.y>=t.y?i.y=t.y+9e9:i.y=t.y-9e9,i.x=t.x),i}getLinkPointFromPoint(t,i,e,s,n,o){if(o===void 0&&(o=new Point),t===null||i===null)return o.c(e),o;if(!t.isVisible()){const u=t.findVisibleNode();u!==null&&u!==t&&(t=u,i=t.port)}let r=0,l=0,h=0,f=0,a=null,c=i.panel;if(c!==null&&!c.mn()&&(c=c.panel),c===null)r=s.x,l=s.y,h=e.x,f=e.y;else{a=c.Us;const u=1/(a.m11*a.m22-a.m12*a.m21),d=a.m22*u,m=-a.m12*u,g=-a.m21*u,p=a.m11*u,w=u*(a.m21*a.dy-a.m22*a.dx),x=u*(a.m12*a.dx-a.m11*a.dy);r=s.x*d+s.y*g+w,l=s.x*m+s.y*p+x,h=e.x*d+e.y*g+w,f=e.x*m+e.y*p+x}return i.ec(r,l,h,f,o),a!==null&&o.F(a),o}MO(t,i){const e=t.Zu;return e!==null?e.DT(i):null}Ob(t){if(t===null)return null;let i=t.Zu;return i===null&&(i=new Knot(t.part,t),t.Zu=i),i.DT(this)}getLinkPoint(t,i,e,s,n,o,r,l){if(l===void 0&&(l=new Point),e.isSpot()&&!this.Vd(e))return i.getDocumentPoint(e,l),l;if(e.isSide()){const a=this.Ob(i);if(a!==null){const c=a.zd;if(l.c(c),n&&this.routing===7){const u=this.Ob(r);if(u!==null&&a.Dc=g.y&&w.y<=g.y+g.height?l.y=w.y:(e.includesSide(Spot.TopSide)||e.includesSide(Spot.BottomSide))&&w.x>=g.x&&w.x<=g.x+g.width&&(l.x=w.x),Point.o(d),Point.o(m)}}return l}}const h=i.getDocumentPoint(this.Eb(e,s),Point.a());let f=null;if(this.pointsCount>(n?6:2))f=s?this.getPoint(1):this.getPoint(this.pointsCount-2),n&&(f=this.NN(h,f.copy()));else{const a=this.computeSpot(!s,r),c=Point.a();f=r.getDocumentPoint(this.Eb(a,!s),c),n&&(f=this.NN(h,f)),Point.o(c)}return this.getLinkPointFromPoint(t,i,h,f,s,l),Point.o(h),l}getLinkDirection(t,i,e,s,n,o,r,l){let h=this.PO(t,i,e,s,n,o,r,l);if(r&&s.isNoSpot()&&r.isMemberOf(t)&&(h+=180,h>=360&&(h-=360)),this.Vd(s)||i===null)return h;const f=i.getDocumentAngle();return f===0||(45<=f&&f<135?h+=90:135<=f&&f<225?h+=180:225<=f&&f<315&&(h+=270),h>=360&&(h-=360)),h}PO(t,i,e,s,n,o,r,l){if(s.isSpot())return s.x>s.y?s.x>1-s.y?0:s.x<1-s.y?270:315:s.x1-s.y?90:s.x<1-s.y?180:135:s.x<.5?225:s.x>.5?45:0;if(s.isSide()){const c=this.Ob(i);if(c!==null)switch(c.xe){case 1:return 270;case 2:return 180;default:case 4:return 0;case 8:return 90}else return s.includesSide(Spot.TopSide)?270:s.includesSide(Spot.BottomSide)?90:s.includesSide(Spot.LeftSide)?180:0}if(i===null||l===null)return 0;const h=i.getDocumentPoint(Spot.Center,Point.a());let f=null;if(this.pointsCount>(o?6:2))f=n?this.getPoint(1):this.getPoint(this.pointsCount-2),o?f=this.NN(h,f.copy()):f=e;else{const c=Point.a();f=l.getDocumentPoint(Spot.Center,c),Point.o(c)}let a=0;return Math.abs(f.x-h.x)>Math.abs(f.y-h.y)?f.x>=h.x?a=0:a=180:f.y>=h.y?a=90:a=270,Point.o(h),a}computeEndSegmentLength(t,i,e,s){if(i!==null&&e.isSide()){const o=this.Ob(i);if(o!==null)return o.Bb}let n=NaN;return s?n=this.fromEndSegmentLength:n=this.toEndSegmentLength,i!==null&&isNaN(n)&&(s?n=i.fromEndSegmentLength:n=i.toEndSegmentLength),isNaN(n)&&(n=10),n}computeSpot(t,i){return i===void 0&&(i=null),t?this.NO(i||this.fromPort):this.CO(i||this.toPort)}NO(t){if(t===null)return Spot.Center;let i=this.fromSpot;return i.isDefault()&&(i=t.fromSpot),i===Spot.Default?Spot.None:i}CO(t){if(t===null)return Spot.Center;let i=this.toSpot;return i.isDefault()&&(i=t.toSpot),i===Spot.Default?Spot.None:i}Vd(t){return t===Spot.None||t.x===.5&&t.y===.5}Eb(t,i){return t.x===.5&&t.y===.5?t:Spot.Center}computeOtherPoint(t,i){if(this.computeAdjusting()!==0&&this.pointsCount>4)return this.computeMidPoint(new Point);{const e=this.MO(i,this);return e!==null?e.zd:i.getDocumentPoint(Spot.Center)}}computeShortLength(t){if(t){let i=this.fromShortLength;if(isNaN(i)){const e=this.fromPort;e!==null&&(i=e.fromShortLength)}return isNaN(i)?0:i}else{let i=this.toShortLength;if(isNaN(i)){const e=this.toPort;e!==null&&(i=e.toShortLength)}return isNaN(i)?0:i}}Em(t,i,e,s,n,o){if(this.pickable===!1)return!1;i===void 0&&(i=null),e===void 0&&(e=null);let r;if(o===void 0?(r=Transform.a(),r.Vi()):r=o,r.uf(this.F),this.containedInRect(t,r))return this.JP(i,e,n),o===void 0&&Transform.o(r),!0;if(this.intersectsRect(t,r)){let l=!1;if(!this.mc){const h=this.T.h,f=h.length;for(let a=f;a--;){const c=h[a];if(!c.visible&&c!==this.locationObject)continue;const u=c.actualBounds,d=this.naturalBounds;if(u.x>d.width||u.y>d.height||u.x+u.width<0||u.y+u.height<0)continue;const m=c,g=Transform.a();if(g.set(r),m instanceof Panel?l=m.Em(t,i,e,s,n,g):this.path===m?m instanceof Shape&&(l=m.JI(t,s,g)):l=m.PL(t,s,g),l){let p=m;i!==null&&(p=i(m)),p&&(e===null||e(p))&&n.add(p)}Transform.o(g)}}return o===void 0&&Transform.o(r),l||this.background!==null}return o===void 0&&Transform.o(r),!1}get isOrthogonal(){return(this.Ka&2)===2}static SN(t){return(t&2)===2}get isAvoiding(){return(this.Ka&4)===4}computeCurve(){if(this.$o===null){const t=this.fromPort,i=t!==null&&t===this.toPort,e=this.isOrthogonal;this.$o=i&&!e}return this.$o?9:this.curve}computeCorner(){if(this.curve===9)return 0;let t=this.corner;return(isNaN(t)||t<0)&&(t=10),t}findMidLabel(){const t=this.path,i=this.T.h,e=i.length;for(let n=0;n0?g-=c:g+=c;else{const p=-h/f;let w=Math.sqrt(c*c/(p*p+1));a<0&&(w=-w),m=(f<0?-1:1)*w+u,g=p*(m-u)+d}this.addPoint(r),this.addPointAt(m,g),this.addPoint(l)}else{this.addPoint(r),this.addPoint(l);const h=Rect.a();i.getDocumentBounds(h);const f=h.containsPoint(l);n.getDocumentBounds(h);const a=h.containsPoint(r);if(f||a){const c=i.getDocumentPoint(this.Eb(e,!0),new Point);this.setPoint(0,this.getLinkPointFromPoint(t,i,c,l,!0,c));const u=n.getDocumentPoint(this.Eb(o,!1),new Point);this.setPoint(1,this.getLinkPointFromPoint(s,n,u,r,!1,u))}Rect.o(h)}}kO(t,i,e,s,n,o){const r=this.getLinkPoint(t,i,e,!0,!1,s,n),l=this.getLinkPoint(s,n,o,!1,!1,t,i),h=l.x-r.x,f=l.y-r.y,a=this.computeCurviness();let c=0,u=0,d=r.x+h/3,m=r.y+f/3,g=d,p=m;Geo.g(f,0)?h>0?p-=a:p+=a:(c=-h/f,u=Math.sqrt(a*a/(c*c+1)),a<0&&(u=-u),g=(f<0?-1:1)*u+d,p=c*(g-d)+m),d=r.x+2*h/3,m=r.y+2*f/3;let w=d,x=m;Geo.g(f,0)?h>0?x-=a:x+=a:(w=(f<0?-1:1)*u+d,x=c*(w-d)+m),this.clearPoints(),this.addPoint(r),this.addPointAt(g,p),this.addPointAt(w,x),this.addPoint(l),this.setPoint(0,this.getLinkPoint(t,i,e,!0,!1,s,n)),this.setPoint(3,this.getLinkPoint(s,n,o,!1,!1,t,i))}adjustPoints(t,i,e,s){let n=this.computeAdjusting();if(this.isOrthogonal){if(n===18)return!1;n===19&&(n=17)}switch(n){case 18:return this.AO(t,i,e,s);case 19:return this.LO(t,i,e,s);case 17:return this.TO(t,i,e,s);default:return!1}}AO(t,i,e,s){const n=this.getPoint(t),o=this.getPoint(e);if(n.equalsApprox(i)&&o.equalsApprox(s))return!0;const r=n.x,l=n.y,h=o.x,f=o.y;let a=h-r,c=f-l;const u=Math.sqrt(a*a+c*c);if(Geo.G(u,0))return!0;let d=0;Geo.G(a,0)?c<0?d=-Math.PI/2:d=Math.PI/2:(d=Math.atan(c/Math.abs(a)),a<0&&(d=Math.PI-d));const m=i.x,g=i.y,p=s.x,w=s.y,x=p-m,k=w-g,b=Math.sqrt(x*x+k*k);let S=0;Geo.G(x,0)?k<0?S=-Math.PI/2:S=Math.PI/2:(S=Math.atan(k/Math.abs(x)),x<0&&(S=Math.PI-S));const M=b/u,A=S-d;this.setPoint(t,i);for(let C=t+1;C0&&(C=-C);const P=c+S*(d-c),N=u+S*(m-u);if(g!==0){const T=P+C/p,L=N-(T-P)/g;this.setPointAt(w,T,L)}else this.setPointAt(w,P,N+C)}return this.setPoint(e,s),!0}TO(t,i,e,s){if(this.isOrthogonal){let n=this.getPoint(t),o=this.getPoint(t+1),r=this.getPoint(t+2),l=o.x,h=o.y;const f=l,a=h;Geo.g(n.y,o.y)?Geo.g(o.x,r.x)?h=i.y:Geo.g(o.y,r.y)&&(l=i.x):Geo.g(n.x,o.x)&&(Geo.g(o.y,r.y)?l=i.x:Geo.g(o.x,r.x)&&(h=i.y)),this.setPointAt(t+1,l,h),n=this.getPoint(e),o=this.getPoint(e-1),r=this.getPoint(e-2);let c=o.x,u=o.y;const d=c,m=u;if(Geo.g(n.y,o.y)?Geo.g(o.x,r.x)?u=s.y:Geo.g(o.y,r.y)&&(c=s.x):Geo.g(n.x,o.x)&&(Geo.g(o.y,r.y)?c=s.x:Geo.g(o.x,r.x)&&(u=s.y)),this.setPointAt(e-1,c,u),this._A())return this.setPointAt(t+1,f,a),this.setPointAt(e-1,d,m),!1}return this.setPoint(t,i),this.setPoint(e,s),!0}addOrthoPoints(t,i,e,s,n,o){i<0?i+=360:i>=360&&(i-=360),s<0?s+=360:s>=360&&(s-=360);const a=s;i>=315||i<45?i=0:45<=i&&i<135?i=90:135<=i&&i<225?i=180:i=270,s>=315||s<45?s=0:45<=s&&s<135?s=90:135<=s&&s<225?s=180:s=270;const c=t,u=e,d=n.actualBounds.copy(),m=o.actualBounds.copy();if(!d.isReal()||!m.isReal())return;d.inflate(Link.qa,Link.qa),m.inflate(Link.qa,Link.qa),d.unionPoint(t),m.unionPoint(e);const g=Point.a(),p=Point.a();i===0?u.x>c.x||s===270&&u.yc.x||s===90&&u.y>c.y&&m.right>c.x?(g.s(u.x,c.y),p.s(u.x,(c.y+u.y)/2),s===180?(g.x=this.computeMidOrthoPosition(c.x,c.y,u.x,u.y,!1),p.x=g.x,p.y=u.y):s===270&&u.yc.y?(c.xm.bottom)?g.x=this.computeMidOrthoPosition(c.x,c.y,u.x,u.y,!1):g.x=m.right,p.x=g.x,p.y=u.y):s===0&&c.xm.top&&c.yd.bottom)&&(s===180&&(m.containsPoint(c)||d.containsPoint(u))?g.y=this.computeMidOrthoPosition(c.x,c.y,u.x,u.y,!0):u.yc.y&&(s===180||s===270)&&(g.y=this.computeMidOrthoPosition(c.x,d.bottom,u.x,Math.min(u.y,m.top),!0)),p.x=u.x,p.y=g.y),g.y>d.top&&g.y=d.left&&u.x<=c.x||c.x<=m.right&&c.x>=u.x?(s===90||s===270)&&(g.s(Math.max((c.x+u.x)/2,c.x),c.y),p.s(g.x,u.y)):(s===270||(s===0||s===180)&&u.yc.y&&m.leftc.y?(c.x>m.right?g.x=this.computeMidOrthoPosition(c.x,c.y,m.right,u.y,!1):c.x>m.left&&(s===270&&c.ym.bottom)?g.x=this.computeMidOrthoPosition(c.x,c.y,u.x,u.y,!1):g.x=m.left,p.x=g.x,p.y=u.y):s===180&&c.x>m.right&&c.y>m.top&&c.yd.bottom)&&(s===0&&(m.containsPoint(c)||d.containsPoint(u))?g.y=this.computeMidOrthoPosition(c.x,c.y,u.x,u.y,!0):u.yc.y&&(s===0||s===270)&&(g.y=this.computeMidOrthoPosition(c.x,d.bottom,u.x,Math.min(u.y,m.top),!0)),p.x=u.x,p.y=g.y),g.y>d.top&&g.y=c.x||c.x>=m.left&&c.x<=u.x?(s===90||s===270)&&(g.s(Math.min((c.x+u.x)/2,c.x),c.y),p.s(g.x,u.y)):(s===270||(s===0||s===180)&&u.yc.y||s===180&&u.xc.y||s===0&&u.x>c.x&&m.bottom>c.y?(g.s(c.x,u.y),p.s((c.x+u.x)/2,u.y),s===270?(g.y=this.computeMidOrthoPosition(c.x,c.y,u.x,u.y,!0),p.x=u.x,p.y=g.y):s===180&&u.xc.x?(c.ym.right)?g.y=this.computeMidOrthoPosition(c.x,c.y,u.x,u.y,!0):g.y=m.bottom,p.x=u.x,p.y=g.y):s===90&&c.y