@linkurious/ogma-annotations 2.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,16 +1,14 @@
1
- (function(w,q){typeof exports=="object"&&typeof module<"u"?q(exports,require("@linkurious/ogma")):typeof define=="function"&&define.amd?define(["exports","@linkurious/ogma"],q):(w=typeof globalThis<"u"?globalThis:w||self,q(w["@linkurious/ogma-annotations"]={},w.Ogma))})(this,(function(w,q){"use strict";var jr=Object.defineProperty;var Gr=(w,q,wt)=>q in w?jr(w,q,{enumerable:!0,configurable:!0,writable:!0,value:wt}):w[q]=wt;var y=(w,q,wt)=>Gr(w,typeof q!="symbol"?q+"":q,wt);function wt(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var te={exports:{}},Ye;function Qn(){return Ye||(Ye=1,(function(i){var e=Object.prototype.hasOwnProperty,t="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(t=!1));function s(c,h,l){this.fn=c,this.context=h,this.once=l||!1}function r(c,h,l,d,u){if(typeof l!="function")throw new TypeError("The listener must be a function");var g=new s(l,d||c,u),f=t?t+h:h;return c._events[f]?c._events[f].fn?c._events[f]=[c._events[f],g]:c._events[f].push(g):(c._events[f]=g,c._eventsCount++),c}function o(c,h){--c._eventsCount===0?c._events=new n:delete c._events[h]}function a(){this._events=new n,this._eventsCount=0}a.prototype.eventNames=function(){var h=[],l,d;if(this._eventsCount===0)return h;for(d in l=this._events)e.call(l,d)&&h.push(t?d.slice(1):d);return Object.getOwnPropertySymbols?h.concat(Object.getOwnPropertySymbols(l)):h},a.prototype.listeners=function(h){var l=t?t+h:h,d=this._events[l];if(!d)return[];if(d.fn)return[d.fn];for(var u=0,g=d.length,f=new Array(g);u<g;u++)f[u]=d[u].fn;return f},a.prototype.listenerCount=function(h){var l=t?t+h:h,d=this._events[l];return d?d.fn?1:d.length:0},a.prototype.emit=function(h,l,d,u,g,f){var p=t?t+h:h;if(!this._events[p])return!1;var m=this._events[p],x=arguments.length,v,S;if(m.fn){switch(m.once&&this.removeListener(h,m.fn,void 0,!0),x){case 1:return m.fn.call(m.context),!0;case 2:return m.fn.call(m.context,l),!0;case 3:return m.fn.call(m.context,l,d),!0;case 4:return m.fn.call(m.context,l,d,u),!0;case 5:return m.fn.call(m.context,l,d,u,g),!0;case 6:return m.fn.call(m.context,l,d,u,g,f),!0}for(S=1,v=new Array(x-1);S<x;S++)v[S-1]=arguments[S];m.fn.apply(m.context,v)}else{var E=m.length,b;for(S=0;S<E;S++)switch(m[S].once&&this.removeListener(h,m[S].fn,void 0,!0),x){case 1:m[S].fn.call(m[S].context);break;case 2:m[S].fn.call(m[S].context,l);break;case 3:m[S].fn.call(m[S].context,l,d);break;case 4:m[S].fn.call(m[S].context,l,d,u);break;default:if(!v)for(b=1,v=new Array(x-1);b<x;b++)v[b-1]=arguments[b];m[S].fn.apply(m[S].context,v)}}return!0},a.prototype.on=function(h,l,d){return r(this,h,l,d,!1)},a.prototype.once=function(h,l,d){return r(this,h,l,d,!0)},a.prototype.removeListener=function(h,l,d,u){var g=t?t+h:h;if(!this._events[g])return this;if(!l)return o(this,g),this;var f=this._events[g];if(f.fn)f.fn===l&&(!u||f.once)&&(!d||f.context===d)&&o(this,g);else{for(var p=0,m=[],x=f.length;p<x;p++)(f[p].fn!==l||u&&!f[p].once||d&&f[p].context!==d)&&m.push(f[p]);m.length?this._events[g]=m.length===1?m[0]:m:o(this,g)}return this},a.prototype.removeAllListeners=function(h){var l;return h?(l=t?t+h:h,this._events[l]&&o(this,l)):(this._events=new n,this._eventsCount=0),this},a.prototype.off=a.prototype.removeListener,a.prototype.addListener=a.prototype.on,a.prefixed=t,a.EventEmitter=a,i.exports=a})(te)),te.exports}var ts=Qn();const es=wt(ts),ns=-1,Tt="dragging",xt="dragstart",kt="dragend",Ot="click",Xe="select",Ue="unselect",ss="hover",is="unhover",qe="remove",Yt="add",We="cancelDrawing",ee="completeDrawing",je="update",Ge="link",Ve="history",rs="data-annotation",ne=5,Ze=3,Xt={SHAPES:1,EDITOR:2,HANDLES:3},O="start",rt="end",H={default:"default",move:"move",pointer:"pointer",crosshair:"crosshair",grab:"grab",grabbing:"grabbing",ewResize:"ew-resize",nsResize:"ns-resize",neswResize:"nesw-resize",nwseResize:"nwse-resize",nwResize:"nw-resize",neResize:"ne-resize",swResize:"sw-resize",seResize:"se-resize",nResize:"n-resize",eResize:"e-resize",sResize:"s-resize",wResize:"w-resize"},ot="collapsed",Mt="expanded",Pt=1.2,se=.2,P={TEXT:"text",NODE:"node",BOX:"box",COMMENT:"comment",POLYGON:"polygon",ANNOTATION:"annotation",EDGE:"edge"},ie=`<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1
+ (function(S,U){typeof exports=="object"&&typeof module<"u"?U(exports,require("@linkurious/ogma")):typeof define=="function"&&define.amd?define(["exports","@linkurious/ogma"],U):(S=typeof globalThis<"u"?globalThis:S||self,U(S["@linkurious/ogma-annotations"]={},S.Ogma))})(this,(function(S,U){"use strict";var Zo=Object.defineProperty;var Jo=(S,U,St)=>U in S?Zo(S,U,{enumerable:!0,configurable:!0,writable:!0,value:St}):S[U]=St;var m=(S,U,St)=>Jo(S,typeof U!="symbol"?U+"":U,St);function St(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var re={exports:{}},Ve;function as(){return Ve||(Ve=1,(function(s){var e=Object.prototype.hasOwnProperty,t="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(t=!1));function i(d,c,l){this.fn=d,this.context=c,this.once=l||!1}function r(d,c,l,u,h){if(typeof l!="function")throw new TypeError("The listener must be a function");var x=new i(l,u||d,h),g=t?t+c:c;return d._events[g]?d._events[g].fn?d._events[g]=[d._events[g],x]:d._events[g].push(x):(d._events[g]=x,d._eventsCount++),d}function o(d,c){--d._eventsCount===0?d._events=new n:delete d._events[c]}function a(){this._events=new n,this._eventsCount=0}a.prototype.eventNames=function(){var c=[],l,u;if(this._eventsCount===0)return c;for(u in l=this._events)e.call(l,u)&&c.push(t?u.slice(1):u);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(l)):c},a.prototype.listeners=function(c){var l=t?t+c:c,u=this._events[l];if(!u)return[];if(u.fn)return[u.fn];for(var h=0,x=u.length,g=new Array(x);h<x;h++)g[h]=u[h].fn;return g},a.prototype.listenerCount=function(c){var l=t?t+c:c,u=this._events[l];return u?u.fn?1:u.length:0},a.prototype.emit=function(c,l,u,h,x,g){var f=t?t+c:c;if(!this._events[f])return!1;var p=this._events[f],y=arguments.length,A,E;if(p.fn){switch(p.once&&this.removeListener(c,p.fn,void 0,!0),y){case 1:return p.fn.call(p.context),!0;case 2:return p.fn.call(p.context,l),!0;case 3:return p.fn.call(p.context,l,u),!0;case 4:return p.fn.call(p.context,l,u,h),!0;case 5:return p.fn.call(p.context,l,u,h,x),!0;case 6:return p.fn.call(p.context,l,u,h,x,g),!0}for(E=1,A=new Array(y-1);E<y;E++)A[E-1]=arguments[E];p.fn.apply(p.context,A)}else{var w=p.length,N;for(E=0;E<w;E++)switch(p[E].once&&this.removeListener(c,p[E].fn,void 0,!0),y){case 1:p[E].fn.call(p[E].context);break;case 2:p[E].fn.call(p[E].context,l);break;case 3:p[E].fn.call(p[E].context,l,u);break;case 4:p[E].fn.call(p[E].context,l,u,h);break;default:if(!A)for(N=1,A=new Array(y-1);N<y;N++)A[N-1]=arguments[N];p[E].fn.apply(p[E].context,A)}}return!0},a.prototype.on=function(c,l,u){return r(this,c,l,u,!1)},a.prototype.once=function(c,l,u){return r(this,c,l,u,!0)},a.prototype.removeListener=function(c,l,u,h){var x=t?t+c:c;if(!this._events[x])return this;if(!l)return o(this,x),this;var g=this._events[x];if(g.fn)g.fn===l&&(!h||g.once)&&(!u||g.context===u)&&o(this,x);else{for(var f=0,p=[],y=g.length;f<y;f++)(g[f].fn!==l||h&&!g[f].once||u&&g[f].context!==u)&&p.push(g[f]);p.length?this._events[x]=p.length===1?p[0]:p:o(this,x)}return this},a.prototype.removeAllListeners=function(c){var l;return c?(l=t?t+c:c,this._events[l]&&o(this,l)):(this._events=new n,this._eventsCount=0),this},a.prototype.off=a.prototype.removeListener,a.prototype.addListener=a.prototype.on,a.prefixed=t,a.EventEmitter=a,s.exports=a})(re)),re.exports}var cs=as();const ls=St(cs),ds=-1,Dt="dragging",Ft="dragstart",vt="dragend",Wt="click",Ke="select",Ze="unselect",us="hover",hs="unhover",Je="remove",$t="add",Qe="cancelDrawing",oe="completeDrawing",tn="update",en="link",nn="history",xs="data-annotation",ae=5,sn=3,Yt={SHAPES:1,EDITOR:2,HANDLES:3},$="start",it="end",z={default:"default",move:"move",pointer:"pointer",crosshair:"crosshair",grab:"grab",grabbing:"grabbing",ewResize:"ew-resize",nsResize:"ns-resize",neswResize:"nesw-resize",nwseResize:"nwse-resize",nwResize:"nw-resize",neResize:"ne-resize",swResize:"sw-resize",seResize:"se-resize",nResize:"n-resize",eResize:"e-resize",sResize:"s-resize",wResize:"w-resize"},rt="collapsed",Bt="expanded",Xt=1.2,ce=.2,P={TEXT:"text",NODE:"node",BOX:"box",COMMENT:"comment",POLYGON:"polygon",ANNOTATION:"annotation",EDGE:"edge"},le=`<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
2
  <path d="M22 2L11 13M22 2L15 22L11 13M22 2L2 9L11 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
- </svg>`,re=`<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
3
+ </svg>`,de=`<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
4
4
  <path d="M12 6.00015H7.33333C6.97971 6.00015 6.64057 6.14063 6.39052 6.39068C6.14048 6.64072 6 6.97986 6 7.33348V16.6668C6 17.0204 6.14048 17.3596 6.39052 17.6096C6.64057 17.8597 6.97971 18.0002 7.33333 18.0002H16.6667C17.0203 18.0002 17.3594 17.8597 17.6095 17.6096C17.8595 17.3596 18 17.0204 18 16.6668V12.0002M16.25 5.75015C16.5152 5.48493 16.8749 5.33594 17.25 5.33594C17.6251 5.33594 17.9848 5.48493 18.25 5.75015C18.5152 6.01537 18.6642 6.37508 18.6642 6.75015C18.6642 7.12522 18.5152 7.48493 18.25 7.75015L12.2413 13.7595C12.083 13.9176 11.8875 14.0334 11.6727 14.0962L9.75733 14.6562C9.69997 14.6729 9.63916 14.6739 9.58127 14.6591C9.52339 14.6442 9.47055 14.6141 9.4283 14.5719C9.38604 14.5296 9.35593 14.4768 9.3411 14.4189C9.32627 14.361 9.32727 14.3002 9.344 14.2428L9.904 12.3275C9.96702 12.1129 10.083 11.9175 10.2413 11.7595L16.25 5.75015Z" stroke="#1A70E5" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
5
5
  </svg>
6
- `;let ut=(i=21)=>crypto.getRandomValues(new Uint8Array(i)).reduce((e,t)=>(t&=63,t<36?e+=t.toString(36):t<62?e+=(t-26).toString(36).toUpperCase():t>62?e+="-":e+="_",e),"");function os(i,e){const t=i[0]-e[0],n=i[1]-e[1];return t*t+n*n}function as(i,e,t){let n=e[0],s=e[1],r=t[0]-n,o=t[1]-s;if(r!==0||o!==0){const a=((i[0]-n)*r+(i[1]-s)*o)/(r*r+o*o);a>1?(n=t[0],s=t[1]):a>0&&(n+=r*a,s+=o*a)}return r=i[0]-n,o=i[1]-s,r*r+o*o}function ls(i,e){let t=i[0];const n=[t];let s;for(let r=1,o=i.length;r<o;r++)s=i[r],os(s,t)>e&&(n.push(s),t=s);return t!==s&&n.push(s),n}function oe(i,e,t,n,s){let r=n,o=0;for(let a=e+1;a<t;a++){const c=as(i[a],i[e],i[t]);c>r&&(o=a,r=c)}r>n&&(o-e>1&&oe(i,e,o,n,s),s.push(i[o]),t-o>1&&oe(i,o,t,n,s))}function cs(i,e){const t=i.length-1,n=[i[0]];return oe(i,0,t,e,n),n.push(i[t]),n}function ae(i,e,t){if(i.length<=2)return i;const n=e!==void 0?e*e:1;return i=t?i:ls(i,n),i=cs(i,n),i}function le(i){if(i.geometry.bbox)return i.geometry.bbox;const e=i.geometry.coordinates[0];let t=1/0,n=1/0,s=-1/0,r=-1/0;for(const[o,a]of e)o<t&&(t=o),o>s&&(s=o),a<n&&(n=a),a>r&&(r=a);return[t,n,s,r]}function ce(i){const e=i.geometry.coordinates[0];let t=0,n=0;const s=e.length-1;for(let r=0;r<s;r++)t+=e[r][0],n+=e[r][1];return{x:t/s,y:n/s}}function hs(i,e,t){const n=i.geometry.coordinates.map(o=>o.map(([a,c])=>[a+e,c+t])),s=i.geometry.bbox,r=s?[s[0]+e,s[1]+t,s[2]+e,s[3]+t]:void 0;return{...i,geometry:{...i.geometry,coordinates:n,bbox:r}}}function he(i){const e=i.geometry.coordinates[0];let t=1/0,n=1/0,s=-1/0,r=-1/0;for(const[o,a]of e)o<t&&(t=o),o>s&&(s=o),a<n&&(n=a),a>r&&(r=a);i.geometry.bbox=[t,n,s,r]}function ds(i,e,t,n){const s=i.geometry.coordinates.map(o=>o.map(([a,c])=>{const h=a-t,l=c-n;return[t+h*e,n+l*e]})),r={...i,geometry:{...i.geometry,coordinates:s}};return he(r),r}const us="http://www.w3.org/2000/svg";function k(i){return document.createElementNS(us,i)}function st(i){return i.geometry.bbox||ft(i),i.geometry.bbox}function Y(i){if("width"in i.properties&&"height"in i.properties)return{width:i.properties.width,height:i.properties.height};const e=st(i);return{width:e[2]-e[0],height:e[3]-e[1]}}function gt(i,e=!1,t=1){if(i.geometry.type==="Point"&&"width"in i.properties&&"height"in i.properties){const[s,r]=i.geometry.coordinates;let o=i.properties.width,a=i.properties.height;return e&&(o/=t,a/=t),{x:s-o/2,y:r-a/2}}const n=st(i);return{x:n[0],y:n[1]}}function J(i){if(i.geometry.type==="Point")return{x:i.geometry.coordinates[0],y:i.geometry.coordinates[1]};const e=st(i);return{x:(e[0]+e[2])/2,y:(e[1]+e[3])/2}}function ft(i){if(tt(i)){const[e,t]=i.geometry.coordinates[0],[n,s]=i.geometry.coordinates[1];i.geometry.bbox=[Math.min(e,n),Math.min(t,s),Math.max(e,n),Math.max(t,s)]}else if(i.geometry.type==="Point"&&"width"in i.properties&&"height"in i.properties){const[e,t]=i.geometry.coordinates,n=i.properties.width/2,s=i.properties.height/2;i.geometry.bbox=[e-n,t-s,e+n,t+s]}else if(i.geometry.type==="Polygon"){const e=i.geometry.coordinates[0];let t=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY,r=Number.NEGATIVE_INFINITY;for(const o of e){const a=o[0],c=o[1];a<t&&(t=a),c<n&&(n=c),a>s&&(s=a),c>r&&(r=c)}i.geometry.bbox=[t,n,s,r]}}function Ke(i,e,t,n,s){i.geometry.coordinates=[e+n/2,t+s/2],i.geometry.bbox=[e,t,e+n,t+s],i.properties.width=n,i.properties.height=s}function de(i){const[e,t]=i.geometry.coordinates[0];return{x:e,y:t}}function Dt(i,e){const[t,n]=i.geometry.coordinates[e===O?0:1];return{x:t,y:n}}function ue(i){const[e,t]=i.geometry.coordinates[1];return{x:e,y:t}}function Je(i,e,t){i.geometry.coordinates[0]=[e,t]}function Qe(i,e,t){i.geometry.coordinates[1]=[e,t]}function Ut(i){return{start:de(i),end:ue(i)}}function tn(i,e,t,n){e===O?Je(i,t,n):Qe(i,t,n)}const gs=i=>parseInt(i.getAttribute("data-handle-id")||"-1");function fs(i){return Ft(i).reduce((e,t)=>(e[0]=Math.min(t[0],e[0]),e[1]=Math.min(t[1],e[1]),e[2]=Math.max(t[0],e[2]),e[3]=Math.max(t[1],e[3]),e),[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY])}function ps(i){return Array.isArray(i)&&i.length===2&&i.every(isFinite)}function ms(i,e,t,n){for(let s=0;s<i.coordinates.length;s++){const r=i.coordinates[s];if(ps(r))r[0]=t+(r[0]-t)*e,r[1]=n+(r[1]-n)*e;else for(let o=0;o<r.length;o++){const a=r[o];a[0]=t+(a[0]-t)*e,a[1]=n+(a[1]-n)*e}}return i}function Ft(i){let e=[];if(i.type=="Point")i.bbox?e=[[i.bbox[0],i.bbox[1]],[i.bbox[2],i.bbox[3]]]:e=[i.coordinates];else if(i.type=="LineString"||i.type=="MultiPoint")e=i.coordinates;else if(i.type=="Polygon"||i.type=="MultiLineString")e=i.coordinates.reduce(function(t,n){return t.concat(n)},[]);else if(i.type=="MultiPolygon")e=i.coordinates.reduce((t,n)=>t.concat(n.reduce((s,r)=>s.concat(r),[])),[]);else if(i.type=="Feature")if(L(i)||W(i)){const t=st(i);e=[[t[0],t[1]],[t[2],t[3]]]}else e=Ft(i.geometry);else i.type=="GeometryCollection"?e=i.geometries.reduce((t,n)=>t.concat(Ft(n)),[]):i.type=="FeatureCollection"&&(e=i.features.reduce((t,n)=>t.concat(Ft(n)),[]));return e}function ys(i,e,t){const n=Math.atan2(i.y-e.y,i.x-e.x);return{x:e.x+t*Math.cos(n),y:e.y+t*Math.sin(n)}}function Lt(i,e){if(!e)return{x:i.clientX,y:i.clientY};const t=e.getBoundingClientRect();return{x:i.clientX-t.left-e.clientLeft,y:i.clientY-t.top-e.clientTop}}function ws(i,e){return i.startsWith("#")?en(i,e):i.startsWith("rgb")?nn(i,e):i}function xs(i){if(i.startsWith("#")){const e=qt(i),t=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),s=parseInt(e.slice(5,7),16);return{r:t,g:n,b:s,a:1}}else{const e=i.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([0-9.]+))?\)/);if(!e)throw new Error(`Invalid RGB color: ${i}`);return{r:parseInt(e[1]),g:parseInt(e[2]),b:parseInt(e[3]),a:e[4]!==void 0?parseFloat(e[4]):1}}}function qt(i){return i.length===4?i.split("").map(e=>e+e).join(""):i}function en(i,e){const[t,n,s]=qt(i).match(/\w\w/g).map(r=>parseInt(r,16));return`rgba(${t}, ${n}, ${s}, ${e})`}function nn(i,e){const[t,n,s]=i.match(/\d+/g).map(r=>parseInt(r,10));return`rgba(${t}, ${n}, ${s}, ${e})`}function ge(){return typeof window<"u"?window:void 0}const fe=(i,e=16,t=!1)=>{let n=!1,s=null;const r=Math.max(1,Math.round(e*60/1e3)),o=a=>{requestAnimationFrame(()=>{if(a>1)o(a-1);else if(n=!1,t&&s!==null){const c=s;s=null,i(...c),n=!0,o(r)}})};return(...a)=>{if(n){t&&(s=a);return}i(...a),n=!0,o(r)}},bs=(i,e)=>{let t;return(...s)=>{clearTimeout(t),t=setTimeout(()=>i(...s),e)}};function vs(i,e){let t;return function(...n){clearTimeout(t),t=setTimeout(()=>{i.apply(this,n)},e)}}function sn(i){if((W(i)||L(i))&&i.geometry.type==="Polygon"){const e=i.geometry.coordinates[0],t=e[0][0],n=e[0][1],s=e[2][0],r=e[2][1],o=s-t,a=r-n,c=t+o/2,h=n+a/2;return{...i,geometry:{type:"Point",coordinates:[c,h],bbox:[t,n,s,r]},properties:{...i.properties,width:o,height:a}}}return i}function pe(i,e){let t,n,s,r=1;const o=i.trim();if(o.startsWith("#")){const d=(o.length===4?qt(o):o).match(/#?(\w{2})(\w{2})(\w{2})/);if(!d)return i;t=parseInt(d[1],16),n=parseInt(d[2],16),s=parseInt(d[3],16)}else{const l=o.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([0-9.]+))?\)/);if(!l)return i;t=parseInt(l[1]),n=parseInt(l[2]),s=parseInt(l[3]),r=l[4]!==void 0?parseFloat(l[4]):1}const a=e*100,h=.299*t+.587*n+.114*s>186?-a/2:a;return t=Math.max(0,Math.min(255,t+Math.round(2.55*h))),n=Math.max(0,Math.min(255,n+Math.round(2.55*h))),s=Math.max(0,Math.min(255,s+Math.round(2.55*h))),`rgba(${t},${n},${s},${r})`}const bt=i=>pe(i,se),Ss=i=>pe(i,-se),X=(i,e)=>({x:i.x-e.x,y:i.y-e.y}),Q=i=>Math.sqrt(i.x*i.x+i.y*i.y),Es=i=>({x:-i.x,y:-i.y}),Wt=i=>{const e=Q(i);return e===0?{x:0,y:0}:{x:i.x/e,y:i.y/e}},pt=(i,e)=>({x:i.x+e.x,y:i.y+e.y}),ct=(i,e)=>({x:i.x*e,y:i.y*e}),rn=(i,e)=>{const t=Math.sin(e),n=Math.cos(e);return{x:i.x*n-i.y*t,y:i.x*t+i.y*n}},vt=(i,e)=>i.x*e.x+i.y*e.y,As=(i,e)=>i.x*e.y-i.y*e.x,tt=i=>i.properties.type==="arrow";function me(i,e,t){const{start:n,end:s}=Ut(i),r=X(e,n),o=i.properties.style.strokeWidth,a=X(s,n),c=Q(a),h=vt(r,Wt(a));return h>0&&h<c&&Math.abs(As(r,Wt(a)))<o/2+t}const mt={strokeType:"plain",strokeColor:"#202020",strokeWidth:1,head:"none",tail:"none"},Cs={id:void 0,type:"Feature",properties:{type:"arrow",style:{...mt}},geometry:{type:"LineString",coordinates:[[0,0],[100,100]]}},_t=(i=0,e=0,t=0,n=0,s={...mt})=>({id:ut(),type:"Feature",properties:{type:"arrow",style:{...mt,...s}},geometry:{type:"LineString",coordinates:[[i,e],[t,n]]}}),W=i=>i.properties.type==="box";function on(i,e,t=0,n=1,s=0){const r=gt(i),{width:o,height:a}=Y(i),c=e.x-r.x,h=e.y-r.y,l=c*n-h*t,d=c*t+h*n;return l>-s&&l<o+s&&d>-s&&d<a+s}const St={background:"#f5f5f5",strokeWidth:0,borderRadius:8,boxShadow:"",padding:16,strokeType:"plain"},Ts={id:void 0,type:"Feature",properties:{type:"box",width:100,height:50,style:{...St}},geometry:{type:"Point",coordinates:[50,25],bbox:[0,0,100,50]}},ye=(i=0,e=0,t=100,n=50,s={...St})=>({id:ut(),type:"Feature",properties:{type:"box",width:t,height:n,style:{...St,...s}},geometry:{type:"Point",coordinates:[i+t/2,e+n/2]}}),L=i=>i.properties.type==="text",V={font:"sans-serif",fontSize:18,color:"#505050",background:"#f5f5f5",strokeWidth:0,borderRadius:8,padding:16,strokeType:"plain",fixedSize:!1},ks={id:ut(),type:"Feature",properties:{type:"text",content:"",width:100,height:50,style:{...V}},geometry:{type:"Point",coordinates:[50,25],bbox:[0,0,100,50]}},we=(i=0,e=0,t=100,n=50,s="",r={...V})=>({id:ut(),type:"Feature",properties:{type:"text",content:s,width:t,height:n,style:{...V,...r}},geometry:{type:"Point",coordinates:[i+t/2,e+n/2],bbox:[i,e,i+t,e+n]}});function xe(i,e,t=0,n=0,s=1,r=1){var m;const[o,a]=i.geometry.coordinates;let{width:c,height:h}=Y(i);(m=i.properties.style)!=null&&m.fixedSize&&(c/=r,h/=r);const l=c/2,d=h/2,u=e.x-o,g=e.y-a,f=u*s-g*n,p=u*n+g*s;return f>-l-t&&f<l+t&&p>-d-t&&p<d+t}const D=i=>i.properties.type==="comment",K={background:"#FFFACD",padding:8,borderRadius:4,strokeColor:"#DDD",strokeWidth:1,strokeType:"plain",iconColor:"#FFFACD",iconSymbol:"💬",iconBorderColor:"#aaa",iconBorderWidth:1,minHeight:60,maxHeight:480,iconSize:32,color:"#333",font:"Arial, sans-serif",fontSize:12,showSendButton:!0,autoGrow:!0,shadow:!0,expandOnSelect:!1,fixedSize:!0},jt={mode:"expanded",width:200,height:60,style:K};function be(i,e,t,n){const s={type:"comment",content:t,mode:(n==null?void 0:n.mode)??jt.mode,width:(n==null?void 0:n.width)??jt.width,height:(n==null?void 0:n.height)??jt.height,author:n==null?void 0:n.author,timestamp:n==null?void 0:n.timestamp,style:{...K,...n==null?void 0:n.style}};return{id:ut(),type:"Feature",properties:s,geometry:{type:"Point",coordinates:[i,e]}}}function Ms(i){return{...i,properties:{...i.properties,mode:i.properties.mode===ot?Mt:ot}}}function an(i,e,t=0,n,s,r=1){if(i.properties.mode!==ot)return xe(i,e,t,n,s,r);const o=i.properties,a={...K,...o.style};let c=a.iconSize,h=a.iconSize;a.fixedSize&&(c/=r,h/=r);const l=c/2,d=h/2,u=e.x-i.geometry.coordinates[0],g=e.y-i.geometry.coordinates[1];return u>=-l-t&&u<=l+t&&g>=-d-t&&g<=d+t}function Ps(i){const[e,t]=i.geometry.coordinates;return{x:e,y:t}}function Ds(i){const e=i.properties,t={...K,...e.style};return e.mode===ot?{width:t.iconSize,height:t.iconSize}:{width:e.width,height:e.height}}function ln(i,e=80){const t=e/i.properties.width;return Math.max(.1,Math.min(1,t))}function Fs(i){const e={...K,...i.properties.style};return e.collapseZoomThreshold!==void 0?e.collapseZoomThreshold:ln(i)}function Ls(i,e,t,n,s="",r){const o=be(t,n,s,r==null?void 0:r.commentStyle),a={...mt,head:"arrow",...r==null?void 0:r.arrowStyle},c=_t(t,n,i,e,a);return c.properties.link={[O]:{id:o.id,side:O,type:"comment",magnet:{x:0,y:0}}},{comment:o,arrow:c}}function _s(i,e,t,n,s,r,o,a,c){const h=i-o,l=e-a,d=o+h*r-l*s,u=a+h*s+l*r,g=o+(h+t)*r-l*s,f=a+(h+t)*s+l*r,p=o+(h+t)*r-(l+n)*s,m=a+(h+t)*s+(l+n)*r,x=o+h*r-(l+n)*s,v=a+h*s+(l+n)*r;return c[0]=Math.min(d,g,p,x),c[1]=Math.min(u,f,m,v),c[2]=Math.max(d,g,p,x),c[3]=Math.max(u,f,m,v),c}function Hs(i,e,t){const n=t.x-e.x,s=t.y-e.y,r=n*n+s*s;if(r===0){const d=i.x-e.x,u=i.y-e.y;return Math.sqrt(d*d+u*u)}let o=((i.x-e.x)*n+(i.y-e.y)*s)/r;o=Math.max(0,Math.min(1,o));const a=e.x+o*n,c=e.y+o*s,h=i.x-a,l=i.y-c;return Math.sqrt(h*h+l*l)}const it=i=>i.properties.type==="polygon";function ve(i,e,t=0){const n=i.geometry.coordinates[0],s=i.geometry.bbox;if(s){const[o,a,c,h]=s;if(e.x<o-t||e.x>c+t||e.y<a-t||e.y>h+t)return!1}let r=!1;for(let o=0,a=n.length-1;o<n.length;a=o++){const c=n[o][0],h=n[o][1],l=n[a][0],d=n[a][1];h>e.y!=d>e.y&&e.x<(l-c)*(e.y-h)/(d-h)+c&&(r=!r)}if(r)return!0;if(t>0)for(let o=0;o<n.length-1;o++){const[a,c]=n[o],[h,l]=n[o+1];if(Hs(e,{x:a,y:c},{x:h,y:l})<=t)return!0}return!1}function cn(i,e){const t=i[0];t.length>0&&(t[0][0]!==t[t.length-1][0]||t[0][1]!==t[t.length-1][1])&&t.push([t[0][0],t[0][1]]);let n=1/0,s=1/0,r=-1/0,o=-1/0;for(const[d,u]of t)d<n&&(n=d),d>r&&(r=d),u<s&&(s=u),u>o&&(o=u);const a=[n,s,r,o],{id:c,style:h,...l}=e||{};return{type:"Feature",id:c||ut(),geometry:{type:"Polygon",coordinates:i,bbox:a},properties:{type:"polygon",style:{...ht,...h},...l}}}const ht={...St,strokeColor:"#000000",strokeWidth:2,background:"transparent"},Is={type:"polygon",style:{...ht}},Se=i=>i.type==="FeatureCollection";function Ee(i){return/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(i.trim())}function Ae(i){return/^rgb\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*\)$/.test(i.trim())}function Ce(i){return/^rgba\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*,\s*[0-9.]+\s*\)$/.test(i.trim())}function hn(i){return Ee(i)||Ae(i)||Ce(i)}function Bs(i){if(hn(i))return i;throw new Error(`Invalid color format: ${i}`)}function zs(i){if(Ee(i))return i;throw new Error(`Invalid hex color format: ${i}`)}function Rs(i){if(Ae(i))return i;throw new Error(`Invalid RGB color format: ${i}`)}function $s(i){if(Ce(i))return i;throw new Error(`Invalid RGBA color format: ${i}`)}class Ns{constructor(e){y(this,"previousZoom",-1);this.store=e}toggleComment(e){const t=this.store.getState().getFeature(e);if(!t||!D(t))return;const n=t;this.store.getState().applyLiveUpdate(e,{properties:{...n.properties,mode:n.properties.mode==="collapsed"?"expanded":"collapsed"}})}updateCommentModesForZoom(e){if(Math.abs(this.previousZoom-e)<5e-4)return;this.previousZoom=e;const t=this.store.getState(),n=t.features,s={};Object.values(n).forEach(r=>{if(D(r)){const o=r,a=this.getCommentZoomThreshold(o),c=e<a?ot:Mt;if(o.properties.mode===c)return;s[o.id]={properties:{...o.properties,mode:c}}}}),t.applyLiveUpdates(s)}getCommentZoomThreshold(e){const t={...e.properties.style};if(t.collapseZoomThreshold!==void 0)return t.collapseZoomThreshold;const s=80/e.properties.width;return Math.max(.1,Math.min(1,s))}}class Gt extends EventTarget{constructor(t,n){super();y(this,"annotation",null);y(this,"ogma");y(this,"dragging",!1);y(this,"dragStartPoint");y(this,"hoveredHandle");y(this,"ogmaPanningOption",!1);y(this,"store");y(this,"draggingWasEnabled",!0);y(this,"handleMouseMove",t=>{if(t.target instanceof HTMLTextAreaElement||!this.isActive())return;const n=this.store.getState();if(!this.dragging&&n.mousePressed&&n.mousePressPoint&&(this.detectHandle(t,this.ogma.view.getZoom()),this.hoveredHandle)){this.dragStartPoint=n.mousePressPoint,this.onDragStart(t),this.dispatchEvent(new CustomEvent(xt,{detail:{id:this.annotation,position:{x:t.clientX,y:t.clientY}}})),this.disablePanning();return}this.dragging?this.dragStartPoint&&this.onDrag(t):this.detectHandle(t,this.ogma.view.getZoom())});y(this,"handleMouseDown",t=>{t.target instanceof HTMLTextAreaElement||!this.isActive()||this.dragging||this.hoveredHandle||this.detectHandle(t,this.ogma.view.getZoom())});y(this,"disablePanning",()=>{var t,n;this.ogmaPanningOption=!!((n=(t=this.ogma.getOptions().interactions)==null?void 0:t.pan)!=null&&n.enabled),this.ogma.setOptions({interactions:{pan:{enabled:!1},drag:{enabled:!1}}})});y(this,"restorePanning",()=>{this.ogma.setOptions({interactions:{pan:{enabled:!0},drag:{enabled:!0}}})});y(this,"handleMouseUp",t=>{this.isActive()&&this.dragging&&(this.restorePanning(),this.onDragEnd(t),this.dispatchEvent(new CustomEvent(kt,{detail:{id:this.annotation,position:{x:t.clientX,y:t.clientY}}})))});y(this,"onClick",t=>{});this.store=n,this.ogma=t,this.store.subscribe(s=>s.features,s=>{this.isActive()&&!s[this.annotation]&&this.stopEditing()})}cancelEdit(){!this.isActive()||this.annotation===null||this.clearDragState()}clearDragState(){this.dragging=!1,this.dragStartPoint=void 0,this.hoveredHandle=void 0,this.restorePanning(),this.setCursor(H.default)}commitChange(){this.getAnnotation()&&this.store.getState().commitLiveUpdates()}onDrag(t){this.dispatchEvent(new Event(Tt))}onDragStart(t){return this.isActive()?(this.dragging=!0,this.dragStartPoint=this.clientToCanvas(t),this.disablePanning(),!0):!1}onDragEnd(t){return this.isActive()?(this.restorePanning(),this.dragging=!1,!0):!1}clientToCanvas(t){const n=this.ogma,s=Lt(t,n.getContainer());return n.view.screenToGraphCoordinates(s)}setAnnotation(t){if(this.annotation=t?t.id:null,this.annotation!==null){const n=this.ogma.getContainer();if(n){const s=ge()||n;s.addEventListener("mousemove",this.handleMouseMove),s.addEventListener("mouseup",this.handleMouseUp,!1),n.addEventListener("mousedown",this.handleMouseDown,!0),s.addEventListener("click",this.onClick,!0)}}else{const n=this.ogma.getContainer();if(n){const s=ge()||n;s.removeEventListener("mousemove",this.handleMouseMove),s.removeEventListener("mouseup",this.handleMouseUp),n.removeEventListener("mousedown",this.handleMouseDown),s.removeEventListener("click",this.onClick)}this.clearDragState(),this.setCursor(H.default)}}getAnnotation(t){const n=this.store.getState(),s=n.getFeature(this.annotation);if(!t)return s;const r=n.liveUpdates[this.annotation];return s&&r?{...s,...r}:s}setCursor(t){var s;const n=(s=this.ogma.getContainer())==null?void 0:s.firstChild;n&&(n.style.cursor=t)}stopEditing(){this.isActive()&&this.setAnnotation(null)}cancelDrawing(){if(!this.isActive())return;const t=this.store.getState();t.drawingFeature===this.annotation&&t.removeFeature(this.annotation),this.stopEditing()}isActive(){return this.annotation!==null}}class Os extends Gt{constructor(t,n,s,r,o,a,c){super(t,n);y(this,"links");y(this,"snapping");y(this,"arrowHandler");y(this,"arrowStyle");y(this,"offsetX");y(this,"offsetY");y(this,"comment");y(this,"startX",0);y(this,"startY",0);y(this,"onArrowComplete",()=>{var x;this.arrowHandler.removeEventListener("dragend",this.onArrowComplete);const t=this.store.getState(),n=Array.from(t.selectedFeatures);if(n.length===0)return;const s=t.getFeature(n[0]);if(!s||!tt(s))return;const r=s.geometry.coordinates[0],o=s.geometry.coordinates[1],a=o[0]-this.startX,c=o[1]-this.startY,h=Math.sqrt(a*a+c*c);let l,d;h<5?(l=this.startX+this.offsetX,d=this.startY+this.offsetY):(l=o[0],d=o[1]);const u=this.comment;u.geometry.coordinates=[l,d],t.addFeature(u),this.store.setState({drawingFeature:u.id});const g=u.properties.height,f=l,p=d+g*.5;this.snapArrowStart(s,r[0],r[1]);const m=(x=s.properties.link)==null?void 0:x.start;t.updateFeature(s.id,{...s,geometry:{...s.geometry,coordinates:[[f,p],r]},properties:{...s.properties,link:{start:{side:O,id:u.id,type:P.COMMENT,magnet:{x:0,y:.5}},end:m?{side:rt,id:m.id,type:m.type,magnet:m.magnet}:void 0}}}),this.links.add(s,O,u.id,P.COMMENT,{x:0,y:.5}),m&&m.magnet&&this.links.add(s,rt,m.id,m.type,m.magnet),t.setSelectedFeatures([u.id]),this.store.setState({drawingFeature:null})});this.links=s,this.arrowHandler=o,this.snapping=r,this.offsetX=(c==null?void 0:c.offsetX)??100,this.offsetY=(c==null?void 0:c.offsetY)??-50,this.arrowStyle=c==null?void 0:c.arrowStyle,this.comment=a}detectHandle(t,n){}startDrawing(t,n,s){var o;this.startX=n,this.startY=s;const r=_t(n,s,n,s,{...mt,head:"arrow",...(o=this.arrowStyle)==null?void 0:o.style});this.store.getState().addFeature(r),this.store.setState({drawingFeature:r.id}),this.arrowHandler.addEventListener("dragend",this.onArrowComplete),this.store.getState().setSelectedFeatures([r.id]),this.arrowHandler.startDrawing(r.id,n,s)}snapArrowStart(t,n,s){const r=this.snapping.snap({x:n,y:s});r&&(t.geometry.coordinates[0]=[r.point.x,r.point.y],t.properties.link={start:{side:O,id:r.id,type:r.type,magnet:r.magnet}},this.links.add(t,O,r.id,r.type,r.magnet))}}function Ys(i,e,t,n,s){const{width:r,height:o}=n.view.getSize(),a=8,c=16,h=a*c,l={width:150,height:50},d=l.width,u=l.height,g=Math.max(r,o),f=200,p={minX:0,minY:0,maxX:0,maxY:0},m=n.view.graphToScreenCoordinates({x:i,y:e});for(let x=0;x<h;x++){const v=x%a,S=Math.floor(x/a),E=2*Math.PI*(v/a),b=f+S/c*(g-f),A=Math.cos(E)*b,T=Math.sin(E)*b,C=m.x+A,M=m.y+T;if(p.minX=C,p.minY=M-u/2,p.maxX=C+d,p.maxY=M+u/2,A<0&&(p.minX-=d,p.maxX-=d),p.minX<0||p.maxX>r||p.minY<0||p.maxY>o)continue;const F=n.view.screenToGraphCoordinates({x:p.minX,y:p.minY}),j=n.view.screenToGraphCoordinates({x:p.maxX,y:p.maxY});if(p.minX=F.x,p.minY=F.y,p.maxX=j.x,p.maxY=j.y,!t.query(p).filter(R=>R.properties.type!=="arrow").length)return n.view.screenToGraphCoordinates({x:C,y:M})}return n.view.screenToGraphCoordinates({x:r/2,y:o/2})}class Xs{constructor(e,t,n,s,r,o,a){y(this,"ogma");y(this,"store");y(this,"editor");y(this,"interactions");y(this,"links");y(this,"control");y(this,"index");y(this,"pendingDrawingListener",null);y(this,"placementCleanup",null);this.ogma=e,this.store=t,this.editor=n,this.interactions=s,this.links=r,this.control=o,this.index=a}cancelPendingDrawing(){this.pendingDrawingListener&&(this.ogma.events.off(this.pendingDrawingListener),this.pendingDrawingListener=null),this.placementCleanup&&(this.placementCleanup(),this.placementCleanup=null)}isDrawing(){return this.store.getState().drawingFeature!==null}enableDrawingMode(e){this.control.unselect().cancelDrawing();const t=n=>{this.ogma.events.off(t),this.pendingDrawingListener=null;const{x:s,y:r}=this.ogma.view.screenToGraphCoordinates(n);e(s,r)};return this.pendingDrawingListener=t,this.ogma.events.once("mousedown",t),this.control}enableArrowDrawing(e){return this.enableDrawingMode((t,n)=>{const s=_t(t,n,t,n,e);this.startArrow(t,n,s)})}enableTextDrawing(e){return this.enableDrawingMode((t,n)=>{const s=we(t,n,0,0,void 0,e);this.startText(t,n,s)})}enableBoxDrawing(e){return this.enableDrawingMode((t,n)=>{const s=ye(t,n,0,0,e);this.startBox(t,n,s)})}enablePolygonDrawing(e){return this.enableDrawingMode((t,n)=>{const s=cn([[[t,n]]],{style:e});this.startPolygon(t,n,s)})}enableCommentDrawing(e={}){return this.enableDrawingMode((t,n)=>{let s=e.offsetX,r=e.offsetY;if(s===void 0&&r===void 0){const a=Ys(t,n,this.index,this.ogma);s=a.x,r=a.y}const o=be(t,n,"",e==null?void 0:e.commentStyle);this.startComment(t,n,o,{...e,offsetX:s,offsetY:r})})}enablePlacement(e){this.control.unselect().cancelDrawing(),this.store.setState({drawingFeature:e.id}),this.control.add(e);const t=this.ogma.getContainer();if(!t)return this.control;const n=a=>{const{x:c,y:h}=this.ogma.view.screenToGraphCoordinates(a),l=e.properties.width,d=e.properties.height;this.store.getState().applyLiveUpdate(e.id,{geometry:{...e.geometry,coordinates:[c,h],bbox:[c-l/2,h-d/2,c+l/2,h+d/2]}})},s=a=>{o();const{x:c,y:h}=this.ogma.view.screenToGraphCoordinates(a),l=e.properties.width,d=e.properties.height;this.store.getState().updateFeature(e.id,{geometry:{...e.geometry,coordinates:[c,h],bbox:[c-l/2,h-d/2,c+l/2,h+d/2]}}),this.store.setState({drawingFeature:null}),this.interactions.suppressClicksTemporarily(200),this.control.select(e.id)},r=a=>{a.key==="Escape"&&(o(),this.control.remove(e),this.store.setState({drawingFeature:null}))},o=()=>{t.removeEventListener("mousemove",n),this.ogma.events.off(s),document.removeEventListener("keydown",r),this.placementCleanup=null};return t.addEventListener("mousemove",n,{passive:!0}),this.ogma.events.once("mousedown",s),document.addEventListener("keydown",r),this.placementCleanup=o,this.control}startComment(e,t,n,s){this.editor.getActiveHandler()&&this.editor.getActiveHandler().stopEditing(),this.control.cancelDrawing(),this.store.setState({drawingFeature:n.id}),this.interactions.suppressClicksTemporarily(200);const r=new Os(this.ogma,this.store,this.links,this.editor.getSnapping(),this.editor.getArrowHandler(),n,s),o=a=>{var c;a.id===n.id&&(this.control.select(a.id),this.control.off(Yt,o),(c=this.editor.getActiveHandler())==null||c.startEditingText())};return this.control.on(Yt,o),r.startDrawing(n.id,e,t),this.control}startBox(e,t,n){return n||(n=ye(e,t)),this.store.setState({drawingFeature:n.id}),this.control.add(n),this.interactions.suppressClicksTemporarily(200),this.control.select(n.id),this.editor.getActiveHandler().startDrawing(n.id,e,t),this.control}startArrow(e,t,n){return n||(n=_t(e,t)),this.editor.getActiveHandler()&&this.editor.getActiveHandler().stopEditing(),this.control.cancelDrawing(),this.store.setState({drawingFeature:n.id}),this.control.add(n),this.interactions.suppressClicksTemporarily(200),this.control.select(n.id),this.editor.getActiveHandler().startDrawing(n.id,e,t),this.control}startText(e,t,n){return n||(n=we(e,t)),this.store.setState({drawingFeature:n.id}),this.control.add(n),this.interactions.suppressClicksTemporarily(200),this.control.select(n.id),this.editor.getActiveHandler().startDrawing(n.id,e,t),this.control}startPolygon(e,t,n){return this.store.setState({drawingFeature:n.id}),this.control.add(n),this.interactions.suppressClicksTemporarily(200),this.control.select(n.id),this.editor.getActiveHandler().startDrawing(n.id,e,t),this.control}}class Us{constructor(e,t){this.store=e,this.links=t}undo(){return this.canUndo()?(this.store.temporal.getState().undo(),this.links.refresh(),!0):!1}redo(){return this.canRedo()?(this.store.temporal.getState().redo(),this.links.refresh(),!0):!1}canUndo(){return this.store.temporal.getState().pastStates.length>0}canRedo(){return this.store.temporal.getState().futureStates.length>0}clearHistory(){this.store.temporal.getState().clear()}}class qs{constructor(e){this.store=e}select(e){const t=Array.isArray(e)?e:[e];this.store.getState().setSelectedFeatures(t)}unselect(e){const t=Array.isArray(e)?e:[e];if(e===void 0)this.store.getState().setSelectedFeatures([]);else{const n=new Set(t),s=Array.from(this.store.getState().selectedFeatures).filter(r=>!n.has(r));this.store.getState().setSelectedFeatures(s)}}getSelectedAnnotations(){const e=this.store.getState();return{type:"FeatureCollection",features:Array.from(e.selectedFeatures).map(t=>e.features[t])}}getSelected(){const e=this.store.getState(),t=Array.from(e.selectedFeatures)[0];return t?e.features[t]:null}}class Ws{constructor(e){this.store=e}add(e){if(Se(e))for(const t of e.features)this.add(t);else{const t=sn(e);this.store.getState().addFeature(t)}}remove(e){if(Se(e))for(const t of e.features)this.remove(t);else this.store.getState().removeFeature(e.id)}getAnnotations(){const e=this.store.getState().features;return{type:"FeatureCollection",features:Object.values(e)}}getAnnotation(e){return this.store.getState().getFeature(e)}updateStyle(e,t){const n=this.store.getState().getFeature(e);n&&this.store.getState().updateFeature(e,{id:e,properties:{...n.properties,style:{...n.properties.style,...t}}})}update(e){var s;const t=this.store.getState(),n=t.getFeature(e.id);n&&t.updateFeature(e.id,{...n,...e,properties:{...n.properties,...e.properties,style:{...n.properties.style,...(s=e.properties)==null?void 0:s.style}},geometry:{...n.geometry,...e.geometry}})}setScale(e,t,n,s){const r=this.store.getState().getFeature(e);if(!r)return;const o=this.store.getState();if(tt(r)){const a=r.geometry.coordinates.map(([c,h])=>{const l=c-n,d=h-s;return[n+l*t,s+d*t]});o.updateFeature(e,{geometry:{...r.geometry,coordinates:a}})}else if(L(r)||W(r)){const[a,c]=r.geometry.coordinates,h=a-n,l=c-s,d=n+h*t,u=s+l*t,g=r.properties.width*t,f=r.properties.height*t;o.updateFeature(e,{properties:{...r.properties,width:g,height:f},geometry:{...r.geometry,coordinates:[d,u]}})}}}function dn(i){var t,n;const e=i.properties.link;return e?((t=e.start)==null?void 0:t.type)===P.COMMENT||((n=e.end)==null?void 0:n.type)===P.COMMENT:!1}function un(i){var e,t;return((t=(e=i.properties.link)==null?void 0:e.start)==null?void 0:t.type)!==P.COMMENT}function js(i){return!0}function Te(i,e,t,n,s=!1){const r=i.getState(),o=r.getFeature(t);if(!o)return;const a=new Set,c=new Set;let h="";if(tt(o)){const d=o;if(s){const u=d.properties.link||{};u.start&&Vt(u.start.type)&&a.add(u.start.id),u.end&&Vt(u.end.type)&&a.add(u.end.id)}h=d.id,c.add(d.id)}else a.add(o.id);const l={};for(const d of a){const u=r.getFeature(d);if(!u)continue;const g=Gs(u,n);g&&(l[d]=g,e.updateLinkedArrowsDuringDrag(d,n,l))}for(const d of c){const u=r.getFeature(d);if(!u)continue;const g=u.properties.link||{},f=u.geometry.coordinates,p=[...f];(g.start&&Vt(g.start.type)||h===d)&&(p[0]=[f[0][0]+n.x,f[0][1]+n.y]),(g.end&&Vt(g.end.type)||h===d)&&(p[1]=[f[1][0]+n.x,f[1][1]+n.y]),l[d]={geometry:{...u.geometry,coordinates:p}}}r.applyLiveUpdates(l)}function Vt(i){return i!==P.NODE&&i!==P.EDGE}function Gs(i,e){if(L(i)||W(i)||D(i)){const t=J(i);return{geometry:{type:i.geometry.type,coordinates:[t.x+e.x,t.y+e.y]}}}if(it(i)){const t=i,n=t.geometry.coordinates.map(s=>s.map(r=>[r[0]+e.x,r[1]+e.y]));return{geometry:{type:t.geometry.type,coordinates:n}}}return null}class Vs extends Gt{constructor(t,n,s,r){super(t,n);y(this,"snapping");y(this,"links");y(this,"snap",null);this.snapping=s,this.links=r}detectHandle(t){const n=this.getAnnotation(),s=this.clientToCanvas(t),r=ne,o=n.geometry.coordinates[0],a=n.geometry.coordinates[1],c=Math.sqrt(Math.pow(s.x-o[0],2)+Math.pow(s.y-o[1],2)),h=Math.sqrt(Math.pow(s.x-a[0],2)+Math.pow(s.y-a[1],2));c<r?this.grabHandle("start",o[0],o[1]):h<r?this.grabHandle("end",a[0],a[1]):me(n,s,r)?(this.setCursor(H.grab),this.hoveredHandle={type:"body",point:s},this.store.setState({hoveredHandle:2,hoveredFeature:this.annotation})):(this.store.setState({hoveredHandle:-1,hoveredFeature:null}),this.hoveredHandle=void 0)}grabHandle(t,n,s){this.hoveredHandle={type:t,point:{x:n,y:s}},this.store.setState({hoveredHandle:t==="start"?0:1,hoveredFeature:this.annotation}),this.setCursor(H.move)}onDrag(t){var l;if(!(this.dragStartPoint||!this.hoveredHandle)||!this.isActive())return;t.stopPropagation(),t.stopImmediatePropagation();const n=this.hoveredHandle,s=this.getAnnotation(),r=s.properties.link||{},o=this.clientToCanvas(t);this.snap=this.snapping.snap(o);const a=((l=this.snap)==null?void 0:l.point)||o,c=new CustomEvent(Tt,{detail:{point:a,annotation:this.annotation,handle:n}}),h=[...s.geometry.coordinates];if(n.type==="body"){const d=a.x-n.point.x,u=a.y-n.point.y;Te(this.store,this.links,s.id,{x:d,y:u},!0),this.dispatchEvent(c);return}else n.type==="start"?(h[0]=[a.x,a.y],this.snap&&(r.start={side:n.type,id:this.snap.id,type:this.snap.type,magnet:this.snap.magnet})):n.type==="end"&&(h[1]=[a.x,a.y],this.snap&&(r.end={side:n.type,id:this.snap.id,type:this.snap.type,magnet:this.snap.magnet}));this.store.getState().applyLiveUpdate(s.id,{id:s.id,properties:{...s.properties,link:r},geometry:{type:s.geometry.type,coordinates:h}}),this.dispatchEvent(c)}onDragStart(t){if(!super.onDragStart(t))return!1;const n=this.getAnnotation(),s=this.hoveredHandle;return s.type==="end"&&!1||s.type==="start"&&!un(n)?(this.clearDragState(),!1):(this.store.getState().startLiveUpdate([this.annotation]),!0)}onDragEnd(t){var r,o,a,c;if(!super.onDragEnd(t))return!1;const n=this.getAnnotation(!0);if(this.hoveredHandle){const h=n.geometry.coordinates;if(this.hoveredHandle.type==="body"){const l=this.snapping.snap({x:h[0][0],y:h[0][1]}),d=this.snapping.snap({x:h[1][0],y:h[1][1]});l?this.links.add(n,"start",l.id,l.type,l.magnet):((o=(r=n.properties.link)==null?void 0:r.start)==null?void 0:o.type)!=="comment"&&this.links.remove(n,O),d?this.links.add(n,"end",d.id,d.type,d.magnet):((c=(a=n.properties.link)==null?void 0:a.end)==null?void 0:c.type)!=="comment"&&this.links.remove(n,rt)}else if(this.snap){const l=this.hoveredHandle;l.type!=="body"&&this.links.add(n,l.type,this.snap.id,this.snap.type,this.snap.magnet)}else if(this.snap===null){const l=this.hoveredHandle.type;if(n.properties.link&&n.properties.link[l]){this.links.remove(n,l);const d={...n.properties.link};delete d[l],this.store.getState().applyLiveUpdate(n.id,{properties:{...n.properties,link:d}})}}}return this.store.getState().drawingFeature===this.annotation&&this.store.setState({drawingFeature:null}),this.commitChange(),this.clearDragState(),this.snap=null,!0}snapDrawingStart(t,n,s){const r=this.snapping.snap({x:n,y:s});if(r){const o={geometry:{...t.geometry,coordinates:[[r.point.x,r.point.y],t.geometry.coordinates[1]]},properties:{...t.properties,link:{start:{side:O,id:r.id,type:r.type,magnet:r.magnet}}}},a=this.store.getState();a.applyLiveUpdate(t.id,o),a.updateFeature(t.id,o),this.links.add(t,"start",r.id,r.type,r.magnet)}}startDrawing(t,n,s){this.annotation=t;const r=this.getAnnotation();this.snapDrawingStart(r,n,s),this.grabHandle("end",n,s),this.dragging=!0,this.dragStartPoint={x:n,y:s};const o=this.ogma.view.graphToScreenCoordinates({x:n,y:s});this.onDragStart({clientX:o.x,clientY:o.y})}link(t,n,s){let r=Dt(t,s);const o=t.properties.link||{};let a=null;if(n instanceof q.Node)r=n.getPosition(),a=this.snapping.snapToNodes(r,n.toList());else{const c=this.store.getState().getFeature(n);if(!c)throw new Error(`Annotation with id ${n} not found`);if(L(c)||W(c))r=J(c),a=this.snapping.snapToText(r,[c]);else if(it(c))r=ce(c),a=this.snapping.snapToPolygon(r,[c]);else throw new Error(`Cannot link arrow to annotation of type ${c.properties.type}`)}a&&(o[s]={side:s,id:a.id,type:a.type,magnet:a.magnet},this.links.add(t,s,a.id,a.type,a.magnet),tn(t,s,r.x,r.y),this.store.getState().updateFeature(t.id,{properties:{...t.properties,link:o},geometry:{type:t.geometry.type,coordinates:t.geometry.coordinates}}))}}class Zs extends Gt{constructor(t,n,s){super(t,n);y(this,"links");y(this,"isDrawingMode",!1);y(this,"simplificationTolerance",5);y(this,"handleMouseDown",t=>{!this.isActive()||this.dragging||!this.hoveredHandle||(t.preventDefault(),t.stopPropagation(),this.dragStartPoint=this.clientToCanvas(t),this.onDragStart(t),this.dispatchEvent(new CustomEvent(xt,{detail:{id:this.annotation,position:{x:t.clientX,y:t.clientY}}})),this.disablePanning())});this.links=s}startDrawing(t,n,s){this.annotation=t,this.isDrawingMode=!0;const r=this.store.getState();r.startLiveUpdate([t]),r.setDrawingPoints([]);const o=this.ogma.view.graphToScreenCoordinates({x:n,y:s});return this.dragStartPoint=o,this.disablePanning(),this.onDragStart({clientX:o.x,clientY:o.y}),this}cancelDrawing(){this.isDrawingMode&&(this.isDrawingMode=!1,this.annotation&&(this.store.getState().removeFeature(this.annotation),this.annotation=null)),this.restorePanning()}detectHandle(t,n=1){const s=this.getAnnotation();if(!s)return;const r=this.clientToCanvas(t),o=ne/n,a=s.geometry.coordinates[0];for(let c=0;c<a.length-1;c++){const[h,l]=a[c];if(Math.sqrt(Math.pow(r.x-h,2)+Math.pow(r.y-l,2))<o*2){this.grabHandle("vertex",h,l,c);return}}ve(s,r,o)?(this.setCursor(H.grab),this.hoveredHandle={type:"body",point:r},this.store.setState({hoveredHandle:-1,hoveredFeature:this.annotation})):(this.store.setState({hoveredHandle:-1,hoveredFeature:null}),this.hoveredHandle=void 0)}grabHandle(t,n,s,r){this.setCursor(t==="vertex"?H.pointer:H.grab),this.hoveredHandle={type:t,point:{x:n,y:s},vertexIndex:r},this.store.setState({hoveredHandle:r??0,hoveredFeature:this.annotation})}onDragStart(t){if(this.isDrawingMode){const n=this.clientToCanvas(t);this.dragging=!0;const s=this.getAnnotation();if(s){const r=[[n.x,n.y],[n.x,n.y]],o=this.store.getState();o.setDrawingPoints(r),o.applyLiveUpdate(s.id,{...s,geometry:{type:"Polygon",coordinates:[r],bbox:[n.x,n.y,n.x,n.y]}})}return this.dragStartPoint=n,!0}return this.hoveredHandle?(this.dragging=!0,this.setCursor(H.grabbing),this.store.getState().startLiveUpdate([this.annotation]),!0):!1}onDrag(t){if(this.isDrawingMode&&this.dragging){const a=this.clientToCanvas(t),c=this.store.getState(),h=this.getAnnotation();if(!h)return;const l=c.liveUpdates[this.annotation],d=l?{...h,...l}:h,g=c.drawingPoints.slice(0,-1),f=[...g,[a.x,a.y],g[0]];c.setDrawingPoints(f);const p=ae(f,this.simplificationTolerance,!1),m=[...p,p[0]];c.applyLiveUpdate(this.annotation,{...d,geometry:{type:"Polygon",coordinates:[m]}});return}if(!this.dragging||!this.dragStartPoint||!this.hoveredHandle)return;const n=this.clientToCanvas(t),s=n.x-this.dragStartPoint.x,r=n.y-this.dragStartPoint.y,o=this.getAnnotation();if(o){if(this.hoveredHandle.type==="body")Te(this.store,this.links,o.id,{x:s,y:r});else if(this.hoveredHandle.type==="vertex"&&this.hoveredHandle.vertexIndex!==void 0){const a=o.geometry.coordinates[0].map((h,l)=>l===this.hoveredHandle.vertexIndex?[this.hoveredHandle.point.x+s,this.hoveredHandle.point.y+r]:l===o.geometry.coordinates[0].length-1&&this.hoveredHandle.vertexIndex===0?[this.hoveredHandle.point.x+s,this.hoveredHandle.point.y+r]:h),c={...o,geometry:{...o.geometry,coordinates:[a]}};he(c),this.store.getState().applyLiveUpdate(o.id,c),this.links.snapLinkedArrowsDuringDrag(o.id)}this.dispatchEvent(new Event(Tt))}}onDragEnd(){if(this.isDrawingMode&&this.dragging){const n=this.store.getState(),s=this.getAnnotation();if(s){const r=n.drawingPoints;if(r.length<3)this.cancelDrawing();else{const o=ae(r.slice(1,-1),this.simplificationTolerance,!0),a={...s,geometry:{type:"Polygon",coordinates:[o]}};ft(a),this.store.getState().applyLiveUpdate(s.id,a),this.store.setState({drawingFeature:null}),this.commitChange(),this.isDrawingMode=!1,this.dragging=!1,this.restorePanning(),this.dispatchEvent(new CustomEvent(ee,{detail:a}))}}return!0}return!this.dragging||(this.dragging=!1,this.dragStartPoint=void 0,!this.getAnnotation())?!1:(this.commitChange(),this.setCursor(H.grab),!0)}getAnnotation(){if(this.annotation)return this.store.getState().getFeature(this.annotation)}}class Ks{constructor(e,t,n,s=()=>{}){y(this,"layer");y(this,"textarea");y(this,"sendButton",null);y(this,"isFocused");y(this,"unsubscribe");y(this,"onFocus",()=>{this.isFocused=!0});y(this,"onBlur",()=>{this.getAnnotation()&&this.updateContent(),this.isFocused=!1});y(this,"onKeyup",e=>{e.key==="Escape"&&this.textarea.blur(),e.stopPropagation()});y(this,"onKeydown",e=>{e.stopPropagation()});y(this,"onMouseEvent",e=>{e.stopPropagation()});y(this,"onInput",()=>{this.updateContent(),this.updateStyle(),this.updatePosition(),this.layer.setSize(this.getSize()),this.updateSendButtonState()});y(this,"onSendClick",e=>{e.preventDefault(),e.stopPropagation(),!(!this.sendButton||this.sendButton.disabled)&&(this.updateContent(),this.textarea.blur(),this.onSendHandler())});y(this,"update",()=>{this.getAnnotation()&&(this.updateStyle(),this.updatePosition(),this.layer.setSize(this.getSize()))});var u,g,f;this.ogma=e,this.store=t,this.annotation=n,this.onSendHandler=s;const r=this.getPosition(),o=this.getSize(),a=this.getAnnotation(),c=this.store.getState(),h=D(a)&&(((u=c.options)==null?void 0:u.showSendButton)??!0),l=((g=c.options)==null?void 0:g.sendButtonIcon)||"",d=((f=c.options)==null?void 0:f.textPlaceholder)||"Enter text";this.layer=this.ogma.layers.addOverlay({element:`<div class="ogma-annotation-text-editor">
7
- <textarea wrap="on" name="annotation-text--input" spellcheck="false" placeholder="${d}"></textarea>
8
- ${h?`<button class="ogma-send-button" type="button" title="Send">
9
- <span class="ogma-send-button-icon">${l}</span>
6
+ `;let ht=(s=21)=>crypto.getRandomValues(new Uint8Array(s)).reduce((e,t)=>(t&=63,t<36?e+=t.toString(36):t<62?e+=(t-26).toString(36).toUpperCase():t>62?e+="-":e+="_",e),"");function fs(s,e){const t=s[0]-e[0],n=s[1]-e[1];return t*t+n*n}function gs(s,e,t){let n=e[0],i=e[1],r=t[0]-n,o=t[1]-i;if(r!==0||o!==0){const a=((s[0]-n)*r+(s[1]-i)*o)/(r*r+o*o);a>1?(n=t[0],i=t[1]):a>0&&(n+=r*a,i+=o*a)}return r=s[0]-n,o=s[1]-i,r*r+o*o}function ps(s,e){let t=s[0];const n=[t];let i;for(let r=1,o=s.length;r<o;r++)i=s[r],fs(i,t)>e&&(n.push(i),t=i);return t!==i&&n.push(i),n}function ue(s,e,t,n,i){let r=n,o=0;for(let a=e+1;a<t;a++){const d=gs(s[a],s[e],s[t]);d>r&&(o=a,r=d)}r>n&&(o-e>1&&ue(s,e,o,n,i),i.push(s[o]),t-o>1&&ue(s,o,t,n,i))}function ms(s,e){const t=s.length-1,n=[s[0]];return ue(s,0,t,e,n),n.push(s[t]),n}function he(s,e,t){if(s.length<=2)return s;const n=e!==void 0?e*e:1;return s=t?s:ps(s,n),s=ms(s,n),s}function xe(s){if(s.geometry.bbox)return s.geometry.bbox;const e=s.geometry.coordinates[0];let t=1/0,n=1/0,i=-1/0,r=-1/0;for(const[o,a]of e)o<t&&(t=o),o>i&&(i=o),a<n&&(n=a),a>r&&(r=a);return[t,n,i,r]}function fe(s){const e=s.geometry.coordinates[0];let t=0,n=0;const i=e.length-1;for(let r=0;r<i;r++)t+=e[r][0],n+=e[r][1];return{x:t/i,y:n/i}}function ys(s,e,t){const n=s.geometry.coordinates.map(o=>o.map(([a,d])=>[a+e,d+t])),i=s.geometry.bbox,r=i?[i[0]+e,i[1]+t,i[2]+e,i[3]+t]:void 0;return{...s,geometry:{...s.geometry,coordinates:n,bbox:r}}}function ge(s){const e=s.geometry.coordinates[0];let t=1/0,n=1/0,i=-1/0,r=-1/0;for(const[o,a]of e)o<t&&(t=o),o>i&&(i=o),a<n&&(n=a),a>r&&(r=a);s.geometry.bbox=[t,n,i,r]}function Ss(s,e,t,n){const i=s.geometry.coordinates.map(o=>o.map(([a,d])=>{const c=a-t,l=d-n;return[t+c*e,n+l*e]})),r={...s,geometry:{...s.geometry,coordinates:i}};return ge(r),r}const Fs="http://www.w3.org/2000/svg";function T(s){return document.createElementNS(Fs,s)}function et(s){return s.geometry.bbox||ct(s),s.geometry.bbox}function X(s){if("width"in s.properties&&"height"in s.properties)return{width:s.properties.width,height:s.properties.height};const e=et(s);return{width:e[2]-e[0],height:e[3]-e[1]}}function xt(s,e=!1,t=1){if(s.geometry.type==="Point"&&"width"in s.properties&&"height"in s.properties){const[i,r]=s.geometry.coordinates;let o=s.properties.width,a=s.properties.height;return e&&(o/=t,a/=t),{x:i-o/2,y:r-a/2}}const n=et(s);return{x:n[0],y:n[1]}}function J(s){if(s.geometry.type==="Point")return{x:s.geometry.coordinates[0],y:s.geometry.coordinates[1]};const e=et(s);return{x:(e[0]+e[2])/2,y:(e[1]+e[3])/2}}function ct(s){if(tt(s)){const[e,t]=s.geometry.coordinates[0],[n,i]=s.geometry.coordinates[1];s.geometry.bbox=[Math.min(e,n),Math.min(t,i),Math.max(e,n),Math.max(t,i)]}else if(s.geometry.type==="Point"&&"width"in s.properties&&"height"in s.properties){const[e,t]=s.geometry.coordinates,n=s.properties.width/2,i=s.properties.height/2;s.geometry.bbox=[e-n,t-i,e+n,t+i]}else if(s.geometry.type==="Polygon"){const e=s.geometry.coordinates[0];let t=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,r=Number.NEGATIVE_INFINITY;for(const o of e){const a=o[0],d=o[1];a<t&&(t=a),d<n&&(n=d),a>i&&(i=a),d>r&&(r=d)}s.geometry.bbox=[t,n,i,r]}}function rn(s,e,t,n,i){s.geometry.coordinates=[e+n/2,t+i/2],s.geometry.bbox=[e,t,e+n,t+i],s.properties.width=n,s.properties.height=i}function pe(s){const[e,t]=s.geometry.coordinates[0];return{x:e,y:t}}function kt(s,e){const[t,n]=s.geometry.coordinates[e===$?0:1];return{x:t,y:n}}function me(s){const[e,t]=s.geometry.coordinates[1];return{x:e,y:t}}function on(s,e,t){s.geometry.coordinates[0]=[e,t]}function an(s,e,t){s.geometry.coordinates[1]=[e,t]}function Ut(s){return{start:pe(s),end:me(s)}}function cn(s,e,t,n){e===$?on(s,t,n):an(s,t,n)}const As=s=>parseInt(s.getAttribute("data-handle-id")||"-1");function Es(s){return Lt(s).reduce((e,t)=>(e[0]=Math.min(t[0],e[0]),e[1]=Math.min(t[1],e[1]),e[2]=Math.max(t[0],e[2]),e[3]=Math.max(t[1],e[3]),e),[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY])}function Ns(s){return Array.isArray(s)&&s.length===2&&s.every(isFinite)}function Cs(s,e,t,n){for(let i=0;i<s.coordinates.length;i++){const r=s.coordinates[i];if(Ns(r))r[0]=t+(r[0]-t)*e,r[1]=n+(r[1]-n)*e;else for(let o=0;o<r.length;o++){const a=r[o];a[0]=t+(a[0]-t)*e,a[1]=n+(a[1]-n)*e}}return s}function Lt(s){let e=[];if(s.type=="Point")s.bbox?e=[[s.bbox[0],s.bbox[1]],[s.bbox[2],s.bbox[3]]]:e=[s.coordinates];else if(s.type=="LineString"||s.type=="MultiPoint")e=s.coordinates;else if(s.type=="Polygon"||s.type=="MultiLineString")e=s.coordinates.reduce(function(t,n){return t.concat(n)},[]);else if(s.type=="MultiPolygon")e=s.coordinates.reduce((t,n)=>t.concat(n.reduce((i,r)=>i.concat(r),[])),[]);else if(s.type=="Feature")if(_(s)||G(s)){const t=et(s);e=[[t[0],t[1]],[t[2],t[3]]]}else e=Lt(s.geometry);else s.type=="GeometryCollection"?e=s.geometries.reduce((t,n)=>t.concat(Lt(n)),[]):s.type=="FeatureCollection"&&(e=s.features.reduce((t,n)=>t.concat(Lt(n)),[]));return e}function ws(s,e,t){const n=Math.atan2(s.y-e.y,s.x-e.x);return{x:e.x+t*Math.cos(n),y:e.y+t*Math.sin(n)}}function Tt(s,e){if(!e)return{x:s.clientX,y:s.clientY};const t=e.getBoundingClientRect();return{x:s.clientX-t.left-e.clientLeft,y:s.clientY-t.top-e.clientTop}}function Ms(s,e){return s.startsWith("#")?ln(s,e):s.startsWith("rgb")?dn(s,e):s}function bs(s){if(s.startsWith("#")){const e=Gt(s),t=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),i=parseInt(e.slice(5,7),16);return{r:t,g:n,b:i,a:1}}else{const e=s.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([0-9.]+))?\)/);if(!e)throw new Error(`Invalid RGB color: ${s}`);return{r:parseInt(e[1]),g:parseInt(e[2]),b:parseInt(e[3]),a:e[4]!==void 0?parseFloat(e[4]):1}}}function Gt(s){return s.length===4?s.split("").map(e=>e+e).join(""):s}function ln(s,e){const[t,n,i]=Gt(s).match(/\w\w/g).map(r=>parseInt(r,16));return`rgba(${t}, ${n}, ${i}, ${e})`}function dn(s,e){const[t,n,i]=s.match(/\d+/g).map(r=>parseInt(r,10));return`rgba(${t}, ${n}, ${i}, ${e})`}function ye(){return typeof window<"u"?window:void 0}const Se=(s,e=16,t=!1)=>{let n=!1,i=null;const r=Math.max(1,Math.round(e*60/1e3)),o=a=>{requestAnimationFrame(()=>{if(a>1)o(a-1);else if(n=!1,t&&i!==null){const d=i;i=null,s(...d),n=!0,o(r)}})};return(...a)=>{if(n){t&&(i=a);return}s(...a),n=!0,o(r)}},Ds=(s,e)=>{let t;return(...i)=>{clearTimeout(t),t=setTimeout(()=>s(...i),e)}};function vs(s,e){let t;return function(...n){clearTimeout(t),t=setTimeout(()=>{s.apply(this,n)},e)}}function un(s){if((G(s)||_(s))&&s.geometry.type==="Polygon"){const e=s.geometry.coordinates[0],t=e[0][0],n=e[0][1],i=e[2][0],r=e[2][1],o=i-t,a=r-n,d=t+o/2,c=n+a/2;return{...s,geometry:{type:"Point",coordinates:[d,c],bbox:[t,n,i,r]},properties:{...s.properties,width:o,height:a}}}return s}function Fe(s,e){let t,n,i,r=1;const o=s.trim();if(o.startsWith("#")){const u=(o.length===4?Gt(o):o).match(/#?(\w{2})(\w{2})(\w{2})/);if(!u)return s;t=parseInt(u[1],16),n=parseInt(u[2],16),i=parseInt(u[3],16)}else{const l=o.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([0-9.]+))?\)/);if(!l)return s;t=parseInt(l[1]),n=parseInt(l[2]),i=parseInt(l[3]),r=l[4]!==void 0?parseFloat(l[4]):1}const a=e*100,c=.299*t+.587*n+.114*i>186?-a/2:a;return t=Math.max(0,Math.min(255,t+Math.round(2.55*c))),n=Math.max(0,Math.min(255,n+Math.round(2.55*c))),i=Math.max(0,Math.min(255,i+Math.round(2.55*c))),`rgba(${t},${n},${i},${r})`}const At=s=>Fe(s,ce),Bs=s=>Fe(s,-ce),Y=(s,e)=>({x:s.x-e.x,y:s.y-e.y}),Q=s=>Math.sqrt(s.x*s.x+s.y*s.y),ks=s=>({x:-s.x,y:-s.y}),jt=s=>{const e=Q(s);return e===0?{x:0,y:0}:{x:s.x/e,y:s.y/e}},ft=(s,e)=>({x:s.x+e.x,y:s.y+e.y}),ot=(s,e)=>({x:s.x*e,y:s.y*e}),hn=(s,e)=>{const t=Math.sin(e),n=Math.cos(e);return{x:s.x*n-s.y*t,y:s.x*t+s.y*n}},Et=(s,e)=>s.x*e.x+s.y*e.y,Ls=(s,e)=>s.x*e.y-s.y*e.x,tt=s=>s.properties.type==="arrow";function Ae(s,e,t){const{start:n,end:i}=Ut(s),r=Y(e,n),o=s.properties.style.strokeWidth,a=Y(i,n),d=Q(a),c=Et(r,jt(a));return c>0&&c<d&&Math.abs(Ls(r,jt(a)))<o/2+t}const gt={strokeType:"plain",strokeColor:"#202020",strokeWidth:1,head:"none",tail:"none"},Ts={id:void 0,type:"Feature",properties:{type:"arrow",style:{...gt}},geometry:{type:"LineString",coordinates:[[0,0],[100,100]]}},Ot=(s=0,e=0,t=0,n=0,i={...gt})=>({id:ht(),type:"Feature",properties:{type:"arrow",style:{...gt,...i}},geometry:{type:"LineString",coordinates:[[s,e],[t,n]]}}),G=s=>s.properties.type==="box";function xn(s,e,t=0,n=1,i=0){const r=xt(s),{width:o,height:a}=X(s),d=e.x-r.x,c=e.y-r.y,l=d*n-c*t,u=d*t+c*n;return l>-i&&l<o+i&&u>-i&&u<a+i}const Nt={background:"#f5f5f5",strokeWidth:0,borderRadius:8,boxShadow:"",padding:16,strokeType:"plain"},Os={id:void 0,type:"Feature",properties:{type:"box",width:100,height:50,style:{...Nt}},geometry:{type:"Point",coordinates:[50,25],bbox:[0,0,100,50]}},Ee=(s=0,e=0,t=100,n=50,i={...Nt})=>({id:ht(),type:"Feature",properties:{type:"box",width:t,height:n,style:{...Nt,...i}},geometry:{type:"Point",coordinates:[s+t/2,e+n/2]}}),_=s=>s.properties.type==="text",q={font:"sans-serif",fontSize:18,color:"#505050",background:"#f5f5f5",strokeWidth:0,borderRadius:8,padding:16,strokeType:"plain",fixedSize:!1},Ps={id:ht(),type:"Feature",properties:{type:"text",content:"",width:100,height:50,style:{...q}},geometry:{type:"Point",coordinates:[50,25],bbox:[0,0,100,50]}},Ne=(s=0,e=0,t=100,n=50,i="",r={...q})=>({id:ht(),type:"Feature",properties:{type:"text",content:i,width:t,height:n,style:{...q,...r}},geometry:{type:"Point",coordinates:[s+t/2,e+n/2],bbox:[s,e,s+t,e+n]}});function Ce(s,e,t=0,n=0,i=1,r=1){var p;const[o,a]=s.geometry.coordinates;let{width:d,height:c}=X(s);(p=s.properties.style)!=null&&p.fixedSize&&(d/=r,c/=r);const l=d/2,u=c/2,h=e.x-o,x=e.y-a,g=h*i-x*n,f=h*n+x*i;return g>-l-t&&g<l+t&&f>-u-t&&f<u+t}const I=s=>s.properties.type==="comment",Z={background:"#FFFACD",padding:8,borderRadius:4,strokeColor:"#DDD",strokeWidth:1,strokeType:"plain",iconColor:"#FFFACD",iconSymbol:"💬",iconBorderColor:"#aaa",iconBorderWidth:1,minHeight:60,maxHeight:480,iconSize:32,color:"#333",font:"Arial, sans-serif",fontSize:12,showSendButton:!0,autoGrow:!0,shadow:!0,expandOnSelect:!1,fixedSize:!0},qt={mode:"expanded",width:200,height:60,style:Z};function we(s,e,t,n){const i={type:"comment",content:t,mode:(n==null?void 0:n.mode)??qt.mode,width:(n==null?void 0:n.width)??qt.width,height:(n==null?void 0:n.height)??qt.height,author:n==null?void 0:n.author,timestamp:n==null?void 0:n.timestamp,style:{...Z,...n==null?void 0:n.style}};return{id:ht(),type:"Feature",properties:i,geometry:{type:"Point",coordinates:[s,e]}}}function Rs(s){return{...s,properties:{...s.properties,mode:s.properties.mode===rt?Bt:rt}}}function fn(s,e,t=0,n,i,r=1){if(s.properties.mode!==rt)return Ce(s,e,t,n,i,r);const o=s.properties,a={...Z,...o.style};let d=a.iconSize,c=a.iconSize;a.fixedSize&&(d/=r,c/=r);const l=d/2,u=c/2,h=e.x-s.geometry.coordinates[0],x=e.y-s.geometry.coordinates[1];return h>=-l-t&&h<=l+t&&x>=-u-t&&x<=u+t}function Is(s){const[e,t]=s.geometry.coordinates;return{x:e,y:t}}function gn(s){const e=s.properties,t={...Z,...e.style};return e.mode===rt?{width:t.iconSize,height:t.iconSize}:{width:e.width,height:e.height}}function pn(s,e=80){const t=e/s.properties.width;return Math.max(.1,Math.min(1,t))}function Hs(s){const e={...Z,...s.properties.style};return e.collapseZoomThreshold!==void 0?e.collapseZoomThreshold:pn(s)}function _s(s,e,t,n,i="",r){const o=we(t,n,i,r==null?void 0:r.commentStyle),a={...gt,head:"arrow",...r==null?void 0:r.arrowStyle},d=Ot(t,n,s,e,a);return d.properties.link={[$]:{id:o.id,side:$,type:"comment",magnet:{x:0,y:0}}},{comment:o,arrow:d}}function zs(s,e,t,n,i,r,o,a,d){const c=s-o,l=e-a,u=o+c*r-l*i,h=a+c*i+l*r,x=o+(c+t)*r-l*i,g=a+(c+t)*i+l*r,f=o+(c+t)*r-(l+n)*i,p=a+(c+t)*i+(l+n)*r,y=o+c*r-(l+n)*i,A=a+c*i+(l+n)*r;return d[0]=Math.min(u,x,f,y),d[1]=Math.min(h,g,p,A),d[2]=Math.max(u,x,f,y),d[3]=Math.max(h,g,p,A),d}function Ws(s,e,t){const n=t.x-e.x,i=t.y-e.y,r=n*n+i*i;if(r===0){const u=s.x-e.x,h=s.y-e.y;return Math.sqrt(u*u+h*h)}let o=((s.x-e.x)*n+(s.y-e.y)*i)/r;o=Math.max(0,Math.min(1,o));const a=e.x+o*n,d=e.y+o*i,c=s.x-a,l=s.y-d;return Math.sqrt(c*c+l*l)}const nt=s=>s.properties.type==="polygon";function Me(s,e,t=0){const n=s.geometry.coordinates[0],i=s.geometry.bbox;if(i){const[o,a,d,c]=i;if(e.x<o-t||e.x>d+t||e.y<a-t||e.y>c+t)return!1}let r=!1;for(let o=0,a=n.length-1;o<n.length;a=o++){const d=n[o][0],c=n[o][1],l=n[a][0],u=n[a][1];c>e.y!=u>e.y&&e.x<(l-d)*(e.y-c)/(u-c)+d&&(r=!r)}if(r)return!0;if(t>0)for(let o=0;o<n.length-1;o++){const[a,d]=n[o],[c,l]=n[o+1];if(Ws(e,{x:a,y:d},{x:c,y:l})<=t)return!0}return!1}function mn(s,e){const t=s[0];t.length>0&&(t[0][0]!==t[t.length-1][0]||t[0][1]!==t[t.length-1][1])&&t.push([t[0][0],t[0][1]]);let n=1/0,i=1/0,r=-1/0,o=-1/0;for(const[u,h]of t)u<n&&(n=u),u>r&&(r=u),h<i&&(i=h),h>o&&(o=h);const a=[n,i,r,o],{id:d,style:c,...l}=e||{};return{type:"Feature",id:d||ht(),geometry:{type:"Polygon",coordinates:s,bbox:a},properties:{type:"polygon",style:{...lt,...c},...l}}}const lt={...Nt,strokeColor:"#000000",strokeWidth:2,background:"transparent"},$s={type:"polygon",style:{...lt}},be=s=>s.type==="FeatureCollection";function De(s){return/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(s.trim())}function ve(s){return/^rgb\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*\)$/.test(s.trim())}function Be(s){return/^rgba\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*,\s*[0-9.]+\s*\)$/.test(s.trim())}function yn(s){return De(s)||ve(s)||Be(s)}function Ys(s){if(yn(s))return s;throw new Error(`Invalid color format: ${s}`)}function Xs(s){if(De(s))return s;throw new Error(`Invalid hex color format: ${s}`)}function Us(s){if(ve(s))return s;throw new Error(`Invalid RGB color format: ${s}`)}function Gs(s){if(Be(s))return s;throw new Error(`Invalid RGBA color format: ${s}`)}class js{constructor(e){m(this,"previousZoom",-1);this.store=e}toggleComment(e){const t=this.store.getState().getFeature(e);if(!t||!I(t))return;const n=t;this.store.getState().applyLiveUpdate(e,{properties:{...n.properties,mode:n.properties.mode==="collapsed"?"expanded":"collapsed"}})}updateCommentModesForZoom(e){if(Math.abs(this.previousZoom-e)<5e-4)return;this.previousZoom=e;const t=this.store.getState(),n=t.features,i={};Object.values(n).forEach(r=>{if(I(r)){const o=r,a=this.getCommentZoomThreshold(o),d=e<a?rt:Bt;if(o.properties.mode===d)return;i[o.id]={properties:{...o.properties,mode:d}}}}),t.applyLiveUpdates(i)}getCommentZoomThreshold(e){const t={...e.properties.style};if(t.collapseZoomThreshold!==void 0)return t.collapseZoomThreshold;const i=80/e.properties.width;return Math.max(.1,Math.min(1,i))}}const ke="ogma-annotation-link";function Vt(s){let e=s;for(;e;){if(e.classList&&e.classList.contains(ke))return!0;e=e.parentElement}return!1}const qs="(https?://[^\\s<]+)";function Sn(){return new RegExp(qs,"g")}function Vs(s,e,t,n,i,r){const o=Math.min(n/2,i/2),a=Math.min(r,o);s.beginPath(),s.moveTo(e+a,t),s.lineTo(e+n-a,t),s.quadraticCurveTo(e+n,t,e+n,t+a),s.lineTo(e+n,t+i-a),s.quadraticCurveTo(e+n,t+i,e+n-a,t+i),s.lineTo(e+a,t+i),s.quadraticCurveTo(e,t+i,e,t+i-a),s.lineTo(e,t+a),s.quadraticCurveTo(e,t,e+a,t),s.closePath()}class Kt extends EventTarget{constructor(t,n){super();m(this,"annotation",null);m(this,"ogma");m(this,"dragging",!1);m(this,"dragStartPoint");m(this,"hoveredHandle");m(this,"ogmaPanningOption",!1);m(this,"store");m(this,"draggingWasEnabled",!0);m(this,"handleMouseMove",t=>{if(t.target instanceof HTMLTextAreaElement||!this.isActive())return;const n=this.store.getState();if(!this.dragging&&n.mousePressed&&n.mousePressPoint&&(this.detectHandle(t,this.ogma.view.getZoom()),this.hoveredHandle)){this.dragStartPoint=n.mousePressPoint,this.onDragStart(t),this.dispatchEvent(new CustomEvent(Ft,{detail:{id:this.annotation,position:{x:t.clientX,y:t.clientY}}})),this.disablePanning();return}this.dragging?this.dragStartPoint&&this.onDrag(t):this.detectHandle(t,this.ogma.view.getZoom())});m(this,"handleMouseDown",t=>{t.target instanceof HTMLTextAreaElement||Vt(t.target)||!this.isActive()||this.dragging||this.hoveredHandle||this.detectHandle(t,this.ogma.view.getZoom())});m(this,"disablePanning",()=>{var t,n;this.ogmaPanningOption=!!((n=(t=this.ogma.getOptions().interactions)==null?void 0:t.pan)!=null&&n.enabled),this.ogma.setOptions({interactions:{pan:{enabled:!1},drag:{enabled:!1}}})});m(this,"restorePanning",()=>{this.ogma.setOptions({interactions:{pan:{enabled:!0},drag:{enabled:!0}}})});m(this,"handleMouseUp",t=>{this.isActive()&&this.dragging&&(this.restorePanning(),this.onDragEnd(t),this.dispatchEvent(new CustomEvent(vt,{detail:{id:this.annotation,position:{x:t.clientX,y:t.clientY}}})))});m(this,"onClick",t=>{});this.store=n,this.ogma=t,this.store.subscribe(i=>i.features,i=>{this.isActive()&&!i[this.annotation]&&this.stopEditing()})}cancelEdit(){!this.isActive()||this.annotation===null||this.clearDragState()}clearDragState(){this.dragging=!1,this.dragStartPoint=void 0,this.hoveredHandle=void 0,this.restorePanning(),this.setCursor(z.default)}commitChange(){this.getAnnotation()&&this.store.getState().commitLiveUpdates()}onDrag(t){this.dispatchEvent(new Event(Dt))}onDragStart(t){return this.isActive()?(this.dragging=!0,this.dragStartPoint=this.clientToCanvas(t),this.disablePanning(),!0):!1}onDragEnd(t){return this.isActive()?(this.restorePanning(),this.dragging=!1,!0):!1}clientToCanvas(t){const n=this.ogma,i=Tt(t,n.getContainer());return n.view.screenToGraphCoordinates(i)}setAnnotation(t){if(this.annotation=t?t.id:null,this.annotation!==null){const n=this.ogma.getContainer();if(n){const i=ye()||n;i.addEventListener("mousemove",this.handleMouseMove),i.addEventListener("mouseup",this.handleMouseUp,!1),n.addEventListener("mousedown",this.handleMouseDown,!0),i.addEventListener("click",this.onClick,!0)}}else{const n=this.ogma.getContainer();if(n){const i=ye()||n;i.removeEventListener("mousemove",this.handleMouseMove),i.removeEventListener("mouseup",this.handleMouseUp),n.removeEventListener("mousedown",this.handleMouseDown),i.removeEventListener("click",this.onClick)}this.clearDragState(),this.setCursor(z.default)}}getAnnotation(t){const n=this.store.getState(),i=n.getFeature(this.annotation);if(!t)return i;const r=n.liveUpdates[this.annotation];return i&&r?{...i,...r}:i}setCursor(t){var i;const n=(i=this.ogma.getContainer())==null?void 0:i.firstChild;n&&(n.style.cursor=t)}stopEditing(){this.isActive()&&this.setAnnotation(null)}cancelDrawing(){if(!this.isActive())return;const t=this.store.getState();t.drawingFeature===this.annotation&&t.removeFeature(this.annotation),this.stopEditing()}isActive(){return this.annotation!==null}}class Ks extends Kt{constructor(t,n,i,r,o,a,d){super(t,n);m(this,"links");m(this,"snapping");m(this,"arrowHandler");m(this,"arrowStyle");m(this,"offsetX");m(this,"offsetY");m(this,"comment");m(this,"startX",0);m(this,"startY",0);m(this,"onArrowComplete",()=>{var E;this.arrowHandler.removeEventListener("dragend",this.onArrowComplete);const t=this.store.getState(),n=Array.from(t.selectedFeatures);if(n.length===0)return;const i=t.getFeature(n[0]);if(!i||!tt(i))return;const r=i.geometry.coordinates[0],o=i.geometry.coordinates[1],a=o[0]-this.startX,d=o[1]-this.startY,c=Math.sqrt(a*a+d*d);let l,u;c<5?(l=this.startX+this.offsetX,u=this.startY+this.offsetY):(l=o[0],u=o[1]);const h=this.comment;h.geometry.coordinates=[l,u],t.addFeature(h),this.store.setState({drawingFeature:h.id});const x=h.properties.height,g=t.zoom,f=x/g,p=l,y=u+f*.5;this.snapArrowStart(i,r[0],r[1]);const A=(E=i.properties.link)==null?void 0:E.start;t.updateFeature(i.id,{...i,geometry:{...i.geometry,coordinates:[[p,y],r]},properties:{...i.properties,link:{start:{side:$,id:h.id,type:P.COMMENT,magnet:{x:0,y:.5}},end:A?{side:it,id:A.id,type:A.type,magnet:A.magnet}:void 0}}}),this.links.add(i,$,h.id,P.COMMENT,{x:0,y:.5}),A&&A.magnet&&this.links.add(i,it,A.id,A.type,A.magnet),t.setSelectedFeatures([h.id]),this.store.setState({drawingFeature:null})});this.links=i,this.arrowHandler=o,this.snapping=r,this.offsetX=(d==null?void 0:d.offsetX)??100,this.offsetY=(d==null?void 0:d.offsetY)??-50,this.arrowStyle=d==null?void 0:d.arrowStyle,this.comment=a}detectHandle(t,n){}startDrawing(t,n,i){var o;this.startX=n,this.startY=i;const r=Ot(n,i,n,i,{...gt,head:"arrow",...(o=this.arrowStyle)==null?void 0:o.style});this.store.getState().addFeature(r),this.store.setState({drawingFeature:r.id}),this.arrowHandler.addEventListener("dragend",this.onArrowComplete),this.store.getState().setSelectedFeatures([r.id]),this.arrowHandler.startDrawing(r.id,n,i)}snapArrowStart(t,n,i){const r=this.snapping.snap({x:n,y:i});r&&(t.geometry.coordinates[0]=[r.point.x,r.point.y],t.properties.link={start:{side:$,id:r.id,type:r.type,magnet:r.magnet}},this.links.add(t,$,r.id,r.type,r.magnet))}}function Zs(s,e,t,n,i){const{width:r,height:o}=n.view.getSize(),a=8,d=16,c=a*d,l={width:150,height:50},u=l.width,h=l.height,x=Math.max(r,o),g=200,f={minX:0,minY:0,maxX:0,maxY:0},p=n.view.graphToScreenCoordinates({x:s,y:e});for(let y=0;y<c;y++){const A=y%a,E=Math.floor(y/a),w=2*Math.PI*(A/a),N=g+E/d*(x-g),F=Math.cos(w)*N,C=Math.sin(w)*N,M=p.x+F,B=p.y+C;if(f.minX=M,f.minY=B-h/2,f.maxX=M+u,f.maxY=B+h/2,F<0&&(f.minX-=u,f.maxX-=u),f.minX<0||f.maxX>r||f.minY<0||f.maxY>o)continue;const D=n.view.screenToGraphCoordinates({x:f.minX,y:f.minY}),v=n.view.screenToGraphCoordinates({x:f.maxX,y:f.maxY});if(f.minX=D.x,f.minY=D.y,f.maxX=v.x,f.maxY=v.y,!t.query(f).filter(R=>R.properties.type!=="arrow").length)return n.view.screenToGraphCoordinates({x:M,y:B})}return n.view.screenToGraphCoordinates({x:r/2,y:o/2})}class Js{constructor(e,t,n,i,r,o,a){m(this,"ogma");m(this,"store");m(this,"editor");m(this,"interactions");m(this,"links");m(this,"control");m(this,"index");m(this,"pendingDrawingListener",null);m(this,"placementCleanup",null);this.ogma=e,this.store=t,this.editor=n,this.interactions=i,this.links=r,this.control=o,this.index=a}cancelPendingDrawing(){this.pendingDrawingListener&&(this.ogma.events.off(this.pendingDrawingListener),this.pendingDrawingListener=null),this.placementCleanup&&(this.placementCleanup(),this.placementCleanup=null)}isDrawing(){return this.store.getState().drawingFeature!==null}enableDrawingMode(e){this.control.unselect().cancelDrawing();const t=n=>{this.ogma.events.off(t),this.pendingDrawingListener=null;const{x:i,y:r}=this.ogma.view.screenToGraphCoordinates(n);e(i,r)};return this.pendingDrawingListener=t,this.ogma.events.once("mousedown",t),this.control}enableArrowDrawing(e){return this.enableDrawingMode((t,n)=>{const i=Ot(t,n,t,n,e);this.startArrow(t,n,i)})}enableTextDrawing(e){return this.enableDrawingMode((t,n)=>{const i=Ne(t,n,0,0,void 0,e);this.startText(t,n,i)})}enableBoxDrawing(e){return this.enableDrawingMode((t,n)=>{const i=Ee(t,n,0,0,e);this.startBox(t,n,i)})}enablePolygonDrawing(e){return this.enableDrawingMode((t,n)=>{const i=mn([[[t,n]]],{style:e});this.startPolygon(t,n,i)})}enableCommentDrawing(e={}){return this.enableDrawingMode((t,n)=>{let i=e.offsetX,r=e.offsetY;if(i===void 0&&r===void 0){const a=Zs(t,n,this.index,this.ogma);i=a.x,r=a.y}const o=we(t,n,"",e==null?void 0:e.commentStyle);this.startComment(t,n,o,{...e,offsetX:i,offsetY:r})})}enablePlacement(e){this.control.unselect().cancelDrawing(),this.store.setState({drawingFeature:e.id}),this.control.add(e);const t=this.ogma.getContainer();if(!t)return this.control;const n=a=>{const{x:d,y:c}=this.ogma.view.screenToGraphCoordinates(a),l=e.properties.width,u=e.properties.height;this.store.getState().applyLiveUpdate(e.id,{geometry:{...e.geometry,coordinates:[d,c],bbox:[d-l/2,c-u/2,d+l/2,c+u/2]}})},i=a=>{o();const{x:d,y:c}=this.ogma.view.screenToGraphCoordinates(a),l=e.properties.width,u=e.properties.height;this.store.getState().updateFeature(e.id,{geometry:{...e.geometry,coordinates:[d,c],bbox:[d-l/2,c-u/2,d+l/2,c+u/2]}}),this.store.setState({drawingFeature:null}),this.interactions.suppressClicksTemporarily(200),this.control.select(e.id)},r=a=>{a.key==="Escape"&&(o(),this.control.remove(e),this.store.setState({drawingFeature:null}))},o=()=>{t.removeEventListener("mousemove",n),this.ogma.events.off(i),document.removeEventListener("keydown",r),this.placementCleanup=null};return t.addEventListener("mousemove",n,{passive:!0}),this.ogma.events.once("mousedown",i),document.addEventListener("keydown",r),this.placementCleanup=o,this.control}startComment(e,t,n,i){this.editor.getActiveHandler()&&this.editor.getActiveHandler().stopEditing(),this.control.cancelDrawing(),this.store.setState({drawingFeature:n.id}),this.interactions.suppressClicksTemporarily(200);const r=new Ks(this.ogma,this.store,this.links,this.editor.getSnapping(),this.editor.getArrowHandler(),n,i),o=a=>{var d;a.id===n.id&&(this.control.select(a.id),this.control.off($t,o),(d=this.editor.getActiveHandler())==null||d.startEditingText())};return this.control.on($t,o),r.startDrawing(n.id,e,t),this.control}startBox(e,t,n){return n||(n=Ee(e,t)),this.store.setState({drawingFeature:n.id}),this.control.add(n),this.interactions.suppressClicksTemporarily(200),this.control.select(n.id),this.editor.getActiveHandler().startDrawing(n.id,e,t),this.control}startArrow(e,t,n){return n||(n=Ot(e,t)),this.editor.getActiveHandler()&&this.editor.getActiveHandler().stopEditing(),this.control.cancelDrawing(),this.store.setState({drawingFeature:n.id}),this.control.add(n),this.interactions.suppressClicksTemporarily(200),this.control.select(n.id),this.editor.getActiveHandler().startDrawing(n.id,e,t),this.control}startText(e,t,n){return n||(n=Ne(e,t)),this.store.setState({drawingFeature:n.id}),this.control.add(n),this.interactions.suppressClicksTemporarily(200),this.control.select(n.id),this.editor.getActiveHandler().startDrawing(n.id,e,t),this.control}startPolygon(e,t,n){return this.store.setState({drawingFeature:n.id}),this.control.add(n),this.interactions.suppressClicksTemporarily(200),this.control.select(n.id),this.editor.getActiveHandler().startDrawing(n.id,e,t),this.control}}class Qs{constructor(e,t){this.store=e,this.links=t}undo(){return this.canUndo()?(this.store.temporal.getState().undo(),this.links.refresh(),!0):!1}redo(){return this.canRedo()?(this.store.temporal.getState().redo(),this.links.refresh(),!0):!1}canUndo(){return this.store.temporal.getState().pastStates.length>0}canRedo(){return this.store.temporal.getState().futureStates.length>0}clearHistory(){this.store.temporal.getState().clear()}}class ti{constructor(e){this.store=e}select(e){const t=Array.isArray(e)?e:[e];this.store.getState().setSelectedFeatures(t)}unselect(e){const t=Array.isArray(e)?e:[e];if(e===void 0)this.store.getState().setSelectedFeatures([]);else{const n=new Set(t),i=Array.from(this.store.getState().selectedFeatures).filter(r=>!n.has(r));this.store.getState().setSelectedFeatures(i)}}getSelectedAnnotations(){const e=this.store.getState();return{type:"FeatureCollection",features:Array.from(e.selectedFeatures).map(t=>e.features[t])}}getSelected(){const e=this.store.getState(),t=Array.from(e.selectedFeatures)[0];return t?e.features[t]:null}}class ei{constructor(e){this.store=e}add(e){if(be(e))for(const t of e.features)this.add(t);else{const t=un(e);this.store.getState().addFeature(t)}}remove(e){if(be(e))for(const t of e.features)this.remove(t);else this.store.getState().removeFeature(e.id)}getAnnotations(){const e=this.store.getState().features;return{type:"FeatureCollection",features:Object.values(e)}}getAnnotation(e){return this.store.getState().getFeature(e)}updateStyle(e,t){const n=this.store.getState().getFeature(e);n&&this.store.getState().updateFeature(e,{id:e,properties:{...n.properties,style:{...n.properties.style,...t}}})}update(e){var i;const t=this.store.getState(),n=t.getFeature(e.id);n&&t.updateFeature(e.id,{...n,...e,properties:{...n.properties,...e.properties,style:{...n.properties.style,...(i=e.properties)==null?void 0:i.style}},geometry:{...n.geometry,...e.geometry}})}setScale(e,t,n,i){const r=this.store.getState().getFeature(e);if(!r)return;const o=this.store.getState();if(tt(r)){const a=r.geometry.coordinates.map(([d,c])=>{const l=d-n,u=c-i;return[n+l*t,i+u*t]});o.updateFeature(e,{geometry:{...r.geometry,coordinates:a}})}else if(_(r)||G(r)){const[a,d]=r.geometry.coordinates,c=a-n,l=d-i,u=n+c*t,h=i+l*t,x=r.properties.width*t,g=r.properties.height*t;o.updateFeature(e,{properties:{...r.properties,width:x,height:g},geometry:{...r.geometry,coordinates:[u,h]}})}}}function Fn(s){var t,n;const e=s.properties.link;return e?((t=e.start)==null?void 0:t.type)===P.COMMENT||((n=e.end)==null?void 0:n.type)===P.COMMENT:!1}function An(s){var e,t;return((t=(e=s.properties.link)==null?void 0:e.start)==null?void 0:t.type)!==P.COMMENT}function ni(s){return!0}function Le(s,e,t,n,i=!1){const r=s.getState(),o=r.getFeature(t);if(!o)return;const a=new Set,d=new Set;let c="";if(tt(o)){const u=o;if(i){const h=u.properties.link||{};h.start&&Zt(h.start.type)&&a.add(h.start.id),h.end&&Zt(h.end.type)&&a.add(h.end.id)}c=u.id,d.add(u.id)}else a.add(o.id);const l={};for(const u of a){const h=r.getFeature(u);if(!h)continue;const x=si(h,n);x&&(l[u]=x,e.updateLinkedArrowsDuringDrag(u,n,l))}for(const u of d){const h=r.getFeature(u);if(!h)continue;const x=h.properties.link||{},g=h.geometry.coordinates,f=[...g];(x.start&&Zt(x.start.type)||c===u)&&(f[0]=[g[0][0]+n.x,g[0][1]+n.y]),(x.end&&Zt(x.end.type)||c===u)&&(f[1]=[g[1][0]+n.x,g[1][1]+n.y]),l[u]={geometry:{...h.geometry,coordinates:f}}}r.applyLiveUpdates(l)}function Zt(s){return s!==P.NODE&&s!==P.EDGE}function si(s,e){if(_(s)||G(s)||I(s)){const t=J(s);return{geometry:{type:s.geometry.type,coordinates:[t.x+e.x,t.y+e.y]}}}if(nt(s)){const t=s,n=t.geometry.coordinates.map(i=>i.map(r=>[r[0]+e.x,r[1]+e.y]));return{geometry:{type:t.geometry.type,coordinates:n}}}return null}class ii extends Kt{constructor(t,n,i,r){super(t,n);m(this,"snapping");m(this,"links");m(this,"snap",null);this.snapping=i,this.links=r}detectHandle(t){const n=this.getAnnotation(),i=this.clientToCanvas(t),r=ae,o=n.geometry.coordinates[0],a=n.geometry.coordinates[1],d=Math.sqrt(Math.pow(i.x-o[0],2)+Math.pow(i.y-o[1],2)),c=Math.sqrt(Math.pow(i.x-a[0],2)+Math.pow(i.y-a[1],2));d<r?this.grabHandle("start",o[0],o[1]):c<r?this.grabHandle("end",a[0],a[1]):Ae(n,i,r)?(this.setCursor(z.grab),this.hoveredHandle={type:"body",point:i},this.store.setState({hoveredHandle:2,hoveredFeature:this.annotation})):(this.store.setState({hoveredHandle:-1,hoveredFeature:null}),this.hoveredHandle=void 0)}grabHandle(t,n,i){this.hoveredHandle={type:t,point:{x:n,y:i}},this.store.setState({hoveredHandle:t==="start"?0:1,hoveredFeature:this.annotation}),this.setCursor(z.move)}onDrag(t){var l;if(!(this.dragStartPoint||!this.hoveredHandle)||!this.isActive())return;t.stopPropagation(),t.stopImmediatePropagation();const n=this.hoveredHandle,i=this.getAnnotation(),r=i.properties.link||{},o=this.clientToCanvas(t);this.snap=this.snapping.snap(o);const a=((l=this.snap)==null?void 0:l.point)||o,d=new CustomEvent(Dt,{detail:{point:a,annotation:this.annotation,handle:n}}),c=[...i.geometry.coordinates];if(n.type==="body"){const u=a.x-n.point.x,h=a.y-n.point.y;Le(this.store,this.links,i.id,{x:u,y:h},!0),this.dispatchEvent(d);return}else n.type==="start"?(c[0]=[a.x,a.y],this.snap&&(r.start={side:n.type,id:this.snap.id,type:this.snap.type,magnet:this.snap.magnet})):n.type==="end"&&(c[1]=[a.x,a.y],this.snap&&(r.end={side:n.type,id:this.snap.id,type:this.snap.type,magnet:this.snap.magnet}));this.store.getState().applyLiveUpdate(i.id,{id:i.id,properties:{...i.properties,link:r},geometry:{type:i.geometry.type,coordinates:c}}),this.dispatchEvent(d)}onDragStart(t){if(!super.onDragStart(t))return!1;const n=this.getAnnotation(),i=this.hoveredHandle;return i.type==="end"&&!1||i.type==="start"&&!An(n)?(this.clearDragState(),!1):(this.store.getState().startLiveUpdate([this.annotation]),!0)}onDragEnd(t){var r,o,a,d;if(!super.onDragEnd(t))return!1;const n=this.getAnnotation(!0);if(this.hoveredHandle){const c=n.geometry.coordinates;if(this.hoveredHandle.type==="body"){const l=this.snapping.snap({x:c[0][0],y:c[0][1]}),u=this.snapping.snap({x:c[1][0],y:c[1][1]});l?this.links.add(n,"start",l.id,l.type,l.magnet):((o=(r=n.properties.link)==null?void 0:r.start)==null?void 0:o.type)!=="comment"&&this.links.remove(n,$),u?this.links.add(n,"end",u.id,u.type,u.magnet):((d=(a=n.properties.link)==null?void 0:a.end)==null?void 0:d.type)!=="comment"&&this.links.remove(n,it)}else if(this.snap){const l=this.hoveredHandle;l.type!=="body"&&this.links.add(n,l.type,this.snap.id,this.snap.type,this.snap.magnet)}else if(this.snap===null){const l=this.hoveredHandle.type;if(n.properties.link&&n.properties.link[l]){this.links.remove(n,l);const u={...n.properties.link};delete u[l],this.store.getState().applyLiveUpdate(n.id,{properties:{...n.properties,link:u}})}}}return this.store.getState().drawingFeature===this.annotation&&this.store.setState({drawingFeature:null}),this.commitChange(),this.clearDragState(),this.snap=null,!0}snapDrawingStart(t,n,i){const r=this.snapping.snap({x:n,y:i});if(r){const o={geometry:{...t.geometry,coordinates:[[r.point.x,r.point.y],t.geometry.coordinates[1]]},properties:{...t.properties,link:{start:{side:$,id:r.id,type:r.type,magnet:r.magnet}}}},a=this.store.getState();a.applyLiveUpdate(t.id,o),a.updateFeature(t.id,o),this.links.add(t,"start",r.id,r.type,r.magnet)}}startDrawing(t,n,i){this.annotation=t;const r=this.getAnnotation();this.snapDrawingStart(r,n,i),this.grabHandle("end",n,i),this.dragging=!0,this.dragStartPoint={x:n,y:i};const o=this.ogma.view.graphToScreenCoordinates({x:n,y:i});this.onDragStart({clientX:o.x,clientY:o.y})}link(t,n,i){let r=kt(t,i);const o=t.properties.link||{};let a=null;if(n instanceof U.Node)r=n.getPosition(),a=this.snapping.snapToNodes(r,n.toList());else{const d=this.store.getState().getFeature(n);if(!d)throw new Error(`Annotation with id ${n} not found`);if(_(d)||G(d))r=J(d),a=this.snapping.snapToText(r,[d]);else if(nt(d))r=fe(d),a=this.snapping.snapToPolygon(r,[d]);else throw new Error(`Cannot link arrow to annotation of type ${d.properties.type}`)}a&&(o[i]={side:i,id:a.id,type:a.type,magnet:a.magnet},this.links.add(t,i,a.id,a.type,a.magnet),cn(t,i,r.x,r.y),this.store.getState().updateFeature(t.id,{properties:{...t.properties,link:o},geometry:{type:t.geometry.type,coordinates:t.geometry.coordinates}}))}}class ri extends Kt{constructor(t,n,i){super(t,n);m(this,"links");m(this,"isDrawingMode",!1);m(this,"simplificationTolerance",5);m(this,"handleMouseDown",t=>{!this.isActive()||this.dragging||!this.hoveredHandle||(t.preventDefault(),t.stopPropagation(),this.dragStartPoint=this.clientToCanvas(t),this.onDragStart(t),this.dispatchEvent(new CustomEvent(Ft,{detail:{id:this.annotation,position:{x:t.clientX,y:t.clientY}}})),this.disablePanning())});this.links=i}startDrawing(t,n,i){this.annotation=t,this.isDrawingMode=!0;const r=this.store.getState();r.startLiveUpdate([t]),r.setDrawingPoints([]);const o=this.ogma.view.graphToScreenCoordinates({x:n,y:i});return this.dragStartPoint=o,this.disablePanning(),this.onDragStart({clientX:o.x,clientY:o.y}),this}cancelDrawing(){this.isDrawingMode&&(this.isDrawingMode=!1,this.annotation&&(this.store.getState().removeFeature(this.annotation),this.annotation=null)),this.restorePanning()}detectHandle(t,n=1){const i=this.getAnnotation();if(!i)return;const r=this.clientToCanvas(t),o=ae/n,a=i.geometry.coordinates[0];for(let d=0;d<a.length-1;d++){const[c,l]=a[d];if(Math.sqrt(Math.pow(r.x-c,2)+Math.pow(r.y-l,2))<o*2){this.grabHandle("vertex",c,l,d);return}}Me(i,r,o)?(this.setCursor(z.grab),this.hoveredHandle={type:"body",point:r},this.store.setState({hoveredHandle:-1,hoveredFeature:this.annotation})):(this.store.setState({hoveredHandle:-1,hoveredFeature:null}),this.hoveredHandle=void 0)}grabHandle(t,n,i,r){this.setCursor(t==="vertex"?z.pointer:z.grab),this.hoveredHandle={type:t,point:{x:n,y:i},vertexIndex:r},this.store.setState({hoveredHandle:r??0,hoveredFeature:this.annotation})}onDragStart(t){if(this.isDrawingMode){const n=this.clientToCanvas(t);this.dragging=!0;const i=this.getAnnotation();if(i){const r=[[n.x,n.y],[n.x,n.y]],o=this.store.getState();o.setDrawingPoints(r),o.applyLiveUpdate(i.id,{...i,geometry:{type:"Polygon",coordinates:[r],bbox:[n.x,n.y,n.x,n.y]}})}return this.dragStartPoint=n,!0}return this.hoveredHandle?(this.dragging=!0,this.setCursor(z.grabbing),this.store.getState().startLiveUpdate([this.annotation]),!0):!1}onDrag(t){if(this.isDrawingMode&&this.dragging){const a=this.clientToCanvas(t),d=this.store.getState(),c=this.getAnnotation();if(!c)return;const l=d.liveUpdates[this.annotation],u=l?{...c,...l}:c,x=d.drawingPoints.slice(0,-1),g=[...x,[a.x,a.y],x[0]];d.setDrawingPoints(g);const f=he(g,this.simplificationTolerance,!1),p=[...f,f[0]];d.applyLiveUpdate(this.annotation,{...u,geometry:{type:"Polygon",coordinates:[p]}});return}if(!this.dragging||!this.dragStartPoint||!this.hoveredHandle)return;const n=this.clientToCanvas(t),i=n.x-this.dragStartPoint.x,r=n.y-this.dragStartPoint.y,o=this.getAnnotation();if(o){if(this.hoveredHandle.type==="body")Le(this.store,this.links,o.id,{x:i,y:r});else if(this.hoveredHandle.type==="vertex"&&this.hoveredHandle.vertexIndex!==void 0){const a=o.geometry.coordinates[0].map((c,l)=>l===this.hoveredHandle.vertexIndex?[this.hoveredHandle.point.x+i,this.hoveredHandle.point.y+r]:l===o.geometry.coordinates[0].length-1&&this.hoveredHandle.vertexIndex===0?[this.hoveredHandle.point.x+i,this.hoveredHandle.point.y+r]:c),d={...o,geometry:{...o.geometry,coordinates:[a]}};ge(d),this.store.getState().applyLiveUpdate(o.id,d),this.links.snapLinkedArrowsDuringDrag(o.id)}this.dispatchEvent(new Event(Dt))}}onDragEnd(){if(this.isDrawingMode&&this.dragging){const n=this.store.getState(),i=this.getAnnotation();if(i){const r=n.drawingPoints;if(r.length<3)this.cancelDrawing();else{const o=he(r.slice(1,-1),this.simplificationTolerance,!0),a={...i,geometry:{type:"Polygon",coordinates:[o]}};ct(a),this.store.getState().applyLiveUpdate(i.id,a),this.store.setState({drawingFeature:null}),this.commitChange(),this.isDrawingMode=!1,this.dragging=!1,this.restorePanning(),this.dispatchEvent(new CustomEvent(oe,{detail:a}))}}return!0}return!this.dragging||(this.dragging=!1,this.dragStartPoint=void 0,!this.getAnnotation())?!1:(this.commitChange(),this.setCursor(z.grab),!0)}getAnnotation(){if(this.annotation)return this.store.getState().getFeature(this.annotation)}}class oi{constructor(e,t,n,i=()=>{}){m(this,"layer");m(this,"textarea");m(this,"sendButton",null);m(this,"isFocused");m(this,"unsubscribe");m(this,"fixedSize");m(this,"onFocus",()=>{this.isFocused=!0});m(this,"onBlur",()=>{this.getAnnotation()&&this.updateContent(),this.isFocused=!1});m(this,"onKeyup",e=>{e.key==="Escape"&&this.textarea.blur(),e.stopPropagation()});m(this,"onKeydown",e=>{e.stopPropagation()});m(this,"onMouseEvent",e=>{e.stopPropagation()});m(this,"onInput",()=>{this.updateContent(),this.updateStyle(),this.updatePosition(),this.layer.setSize(this.getSize()),this.updateSendButtonState()});m(this,"onSendClick",e=>{e.preventDefault(),e.stopPropagation(),!(!this.sendButton||this.sendButton.disabled)&&(this.updateContent(),this.textarea.blur(),this.onSendHandler())});m(this,"update",()=>{this.getAnnotation()&&(this.updateStyle(),this.updatePosition(),this.layer.setSize(this.getSize()))});var x,g,f,p;this.ogma=e,this.store=t,this.annotation=n,this.onSendHandler=i;const r=this.getAnnotation(),o=this.store.getState(),a=I(r)&&(((x=o.options)==null?void 0:x.showSendButton)??!0),d=((g=o.options)==null?void 0:g.sendButtonIcon)||"",c=((f=o.options)==null?void 0:f.textPlaceholder)||"Enter text",l=I(r)?Z:q;this.fixedSize=((p=r.properties.style)==null?void 0:p.fixedSize)??l.fixedSize??!1;const u=this.getPosition(),h=this.getSize();this.layer=this.ogma.layers.addOverlay({element:`<div class="ogma-annotation-text-editor">
7
+ <textarea wrap="on" name="annotation-text--input" spellcheck="false" placeholder="${c}"></textarea>
8
+ ${a?`<button class="ogma-send-button" type="button" title="Send">
9
+ <span class="ogma-send-button-icon">${d}</span>
10
10
  </button>`:""}
11
- </div>`,position:r,size:o},Xt.EDITOR),this.textarea=this.layer.element.querySelector("textarea"),this.textarea.setAttribute("wrap","on"),this.textarea.setAttribute("spellcheck","false"),this.textarea.value=a.properties.content||"",h&&(this.sendButton=this.layer.element.querySelector(".ogma-send-button"),this.sendButton.addEventListener("click",this.onSendClick),this.updateSendButtonState()),this.isFocused=!1,this.textarea.addEventListener("focus",this.onFocus),this.textarea.addEventListener("blur",this.onBlur),this.textarea.addEventListener("input",this.onInput),this.textarea.addEventListener("keyup",this.onKeyup),this.textarea.addEventListener("keydown",this.onKeydown),this.textarea.addEventListener("wheel",this.onMouseEvent),this.textarea.addEventListener("mouseup",this.onMouseEvent),this.textarea.addEventListener("mousedown",this.onMouseEvent),this.textarea.addEventListener("click",this.onMouseEvent),this.textarea.addEventListener("drag",this.onMouseEvent),this.updateStyle(),this.updatePosition(),this.textarea.focus(),this.unsubscribe=this.store.subscribe(p=>({rotation:p.rotation,zoom:p.zoom,annotation:p.features[this.annotation]}),this.update,{equalityFn:(p,m)=>p.rotation===m.rotation&&p.zoom===m.zoom&&p.annotation===m.annotation})}getAnnotation(){const e=this.store.getState();e.liveUpdates[this.annotation]||e.startLiveUpdate([this.annotation]);const t=e.getFeature(this.annotation),n=e.liveUpdates[this.annotation];return t&&n?{...t,...n}:t}getPosition(){const e=this.getAnnotation();if(!e)return{x:0,y:0};const t=e.properties.style,n=(t==null?void 0:t.fixedSize)||!1,s=t==null?void 0:t.maxHeight,r=this.store.getState().zoom,o=ke(e),[a,c]=e.geometry.coordinates,h=e.properties.width;let l=e.properties.height;s&&(l=Math.min(l,s));const d=n?1/r:1;return{x:a-h*d/2+o*d,y:c-l*d/2+o*d}}getSize(){var g;const e=this.getAnnotation();if(!e)return{width:0,height:0};const t=Y(e),n=ke(e),s=e.properties.style,r=(s==null?void 0:s.fixedSize)||!1,o=s==null?void 0:s.maxHeight,a=this.store.getState().zoom,c=this.store.getState(),h=D(e)&&(((g=c.options)==null?void 0:g.showSendButton)??!0),l=r?1/a:1;let d=(t.height-n*2)*l;if(o){const f=(o-n*2)*l;d=Math.min(d,f)}const u=h?28*l:0;return{width:(t.width-n*2)*l,height:d+u}}updateStyle(){var v;const e=this.getAnnotation();if(!e)return;const t=D(e)?K:V,{font:n,fontSize:s=t.fontSize,borderRadius:r,color:o,background:a=t.background,padding:c=0,fixedSize:h=t.fixedSize}=e.properties.style||t,l=this.textarea,d=this.layer.element,u=this.store.getState().zoom,g=h?1/u:1,f=parseFloat(s.toString())*g,p=c*g,m=d.style;if(m.display="grid",m.gridTemplateRows="1fr auto",m.boxSizing="border-box",m.background=a||"transparent",m.borderRadius=`${(r||0)*g}px`,m.padding=`${p}px`,m.transformOrigin="center",m.transform=`rotate(${this.store.getState().rotation}rad)`,e.properties.type==="comment"){const S=e.properties.style,E=(S==null?void 0:S.shadow)!==!1;m.boxShadow=E?"0 2px 8px rgba(0, 0, 0, 0.15)":"none"}const x=l.style;if(x.font=`${f} ${n}`,x.fontFamily=n||"sans-serif",x.fontSize=`${f}px`,x.lineHeight=`${f*Pt}px`,x.padding="0",x.border="none",x.outline="none",x.boxSizing="border-box",x.color=o||"black",x.background="transparent",x.flex="1",x.minHeight="0",x.resize="none",this.sendButton){const S=24*g,E=4*g;this.sendButton.style.width=`${S}px`,this.sendButton.style.height=`${S}px`,this.sendButton.style.padding=`${E}px`,this.sendButton.style.transform="";const b=this.sendButton.querySelector(".ogma-send-button-icon");if(b){const A=16*g;b.style.width=`${A}px`,b.style.height=`${A}px`}}if(h){const S=(v=e.properties.style)==null?void 0:v.maxHeight,E=S&&e.properties.height>=S;x.overflowY=E?"auto":"hidden",x.overflowX="hidden"}}updatePosition(){this.layer.setPosition(this.getPosition())}updateContent(){var o,a,c,h;const e=this.getAnnotation();if(!e)return;let t=e.properties.height,n=e.geometry.coordinates;const s=(o=e.properties.style)==null?void 0:o.fixedSize;if(s){const l=this.textarea.style.height;this.textarea.style.height="0px";const d=this.textarea.scrollHeight;this.textarea.style.height=l;const u=ke(e),g=this.store.getState().zoom,f=((a=e.properties.style)==null?void 0:a.padding)||0,p=(d+u*2/g)*g+f*2,m=((c=e.properties.style)==null?void 0:c.minHeight)||50;t=Math.max(m,p);const x=(h=e.properties.style)==null?void 0:h.maxHeight,v=e.properties.height,S=t-v;if(Math.abs(S)>1){const[E,b]=e.geometry.coordinates;if(x&&t>x){const A=x-v;t=x,Math.abs(A)>1&&(n=[E,b+A/2])}else n=[E,b+S/2]}}const r={...e,properties:{...e.properties,content:this.textarea.value,height:t},geometry:{...e.geometry,coordinates:n}};s&&Math.abs(e.properties.height-t)>1&&(this.layer.setSize(this.getSize()),this.layer.setPosition(this.getPosition())),this.store.getState().applyLiveUpdate(this.annotation,r)}updateSendButtonState(){if(!this.sendButton)return;const e=this.textarea.value.trim().length===0;this.sendButton.disabled=e}destroy(){this.store.getState().commitLiveUpdates(new Set([this.annotation])),this.unsubscribe(),this.sendButton&&this.sendButton.removeEventListener("click",this.onSendClick),this.layer.destroy()}}function ke(i){var e;return((e=i.properties.style)==null?void 0:e.strokeWidth)||0}const gn={x:1,y:0},fn={x:0,y:1},Js=[["top",fn,-.5,-.5,.5,-.5],["right",gn,.5,-.5,.5,.5],["bottom",fn,-.5,.5,.5,.5],["left",gn,-.5,-.5,-.5,.5]],Qs={top:[0,1],right:[1,2],bottom:[2,3],left:[3,0]},pn=[[-.5,-.5],[.5,-.5],[.5,.5],[-.5,.5]],ti=[H.nwResize,H.neResize,H.seResize,H.swResize];class Me extends Gt{constructor(t,n,s){super(t,n);y(this,"links");y(this,"textEditor",null);y(this,"justActivated",!1);y(this,"onClick",t=>{const n=this.getAnnotation();if(n){if(D(n)&&n.properties.mode===ot){this.store.getState().updateFeature(n.id,{properties:{...n.properties,mode:Mt}}),this.ogma.view.afterNextFrame(),this.justActivated=!1;return}if(this.store.getState().selectedFeatures.has(n.id)){if(D(n)&&this.justActivated){this.justActivated=!1;return}n&&(L(n)||D(n))&&this.startEditingText()}}});y(this,"stopEditingText",()=>{this.textEditor&&(this.store.getState().drawingFeature===this.annotation&&this.store.setState({drawingFeature:null}),this.textEditor.destroy()),this.textEditor=null,this.store.setState({editingFeature:null})});this.links=s}detectHandle(t,n){var E;const s=this.getAnnotation(),{x:r,y:o}=this.clientToCanvas(t);let{width:a,height:c}=Y(s);const h=5/n,l=J(s),d=this.store.getState();let{revSin:u,revCos:g}=d;(W(s)||D(s))&&(u=0,g=1),this.hoveredHandle=void 0;const f=Ze*(1/n),p=r-l.x,m=o-l.y,x=p*g-m*u,v=p*u+m*g,S=((E=s.properties.style)==null?void 0:E.fixedSize)===!0||D(s);if(S&&(a/=n,c/=n),!S){for(let b=0;b<pn.length;b++){const[A,T]=pn[b],C=a*A,M=c*T;if(x>=C-f-h&&x<=C+f+h&&v>=M-f-h&&v<=M+f+h){this.hoveredHandle={type:"corner",corner:b},this.store.setState({hoveredHandle:b,hoveredFeature:this.annotation}),this.setCursor(this.getCornerCursor(b));return}}for(const[b,A,T,C,M,F]of Js){const j=a*T,U=c*C,R=a*M,at=c*F,lt=vt(A,{x:x-j,y:v-U});if(Math.abs(lt)<h&&x>=j-h&&x<=R+h&&v>=U-h&&v<=at+h){this.hoveredHandle={type:"edge",edge:b,corner:-1},this.store.setState({hoveredHandle:Qs[b][0]+4,hoveredFeature:this.annotation}),this.setCursor(this.getEdgeCursor(b));return}}}if(x>=-a/2-h&&x<=a/2+h&&v>=-c/2-h&&v<=c/2+h){this.store.setState({hoveredHandle:8,hoveredFeature:this.annotation}),this.hoveredHandle={type:"body",corner:-1},this.setCursor(H.grab);return}this.store.setState({hoveredHandle:-1,hoveredFeature:null}),this.setCursor(H.default)}onDrag(t){if(!this.dragStartPoint||!this.hoveredHandle||!this.isActive())return;t.stopPropagation(),t.stopImmediatePropagation();const n=this.getAnnotation(),s=this.clientToCanvas(t),r={x:s.x-this.dragStartPoint.x,y:s.y-this.dragStartPoint.y},o=this.hoveredHandle,a=this.getAnnotation();let c=null;o.type==="corner"?c=this.dragCorner(a,r,o.corner):o.type==="edge"&&o.edge?c=this.dragEdge(a,r,o):o.type==="body"&&(Te(this.store,this.links,n.id,r),this.textEditor&&this.textEditor.update()),c&&(this.store.getState().applyLiveUpdate(n.id,c),this.links.updateLinkedArrowsDuringDrag(n.id,r),this.textEditor&&this.textEditor.update()),this.dispatchEvent(new CustomEvent(Tt,{detail:{point:s,annotation:this.annotation,handle:o}}))}dragCorner(t,n,s){const r=s===0||s===1,o=s===0||s===3,a=s===1||s===2,c=s===2||s===3,{width:h,height:l}=Y(t),d=this.store.getState();let{revSin:u,revCos:g}=d;(W(t)||D(t))&&(u=0,g=1);const f=n.x*g-n.y*u,p=n.x*u+n.y*g;let m=0,x=0;o?m=-f:a&&(m=f),r?x=-p:c&&(x=p);const v=Math.max(0,h+m),S=Math.max(0,l+x),E=J(t),b=E.x+n.x/2,A=E.y+n.y/2;return{...t,properties:{...t.properties,width:v,height:S},geometry:{type:t.geometry.type,coordinates:[b,A]}}}dragEdge(t,n,s){const{width:r,height:o}=Y(t),a=J(t),c=this.store.getState();let{revSin:h,revCos:l}=c;(W(t)||D(t))&&(h=0,l=1);const d=n.x*l-n.y*h,u=n.x*h+n.y*l;let g=r,f=o,p=0,m=0;switch(s.edge){case"top":f=Math.max(0,o-u),m=u/2;break;case"bottom":f=Math.max(0,o+u),m=u/2;break;case"left":g=Math.max(0,r-d),p=d/2;break;case"right":g=Math.max(0,r+d),p=d/2;break}const x=p*l+m*h,v=-p*h+m*l;return{...t,properties:{...t.properties,width:g,height:f},geometry:{type:t.geometry.type,coordinates:[a.x+x,a.y+v]}}}onDragStart(t){return super.onDragStart(t)?(this.stopEditingText(),this.store.getState().startLiveUpdate([this.annotation]),!0):!1}startEditingText(){this.textEditor===null&&(this.store.setState({editingFeature:this.annotation}),this.textEditor=new Ks(this.ogma,this.store,this.annotation,this.stopEditingText))}onDragEnd(t){var a,c;if(!super.onDragEnd(t))return!1;this.store.getState().drawingFeature===this.annotation&&this.store.setState({drawingFeature:null});const s=this.clientToCanvas(t),r=s.x-(((a=this.dragStartPoint)==null?void 0:a.x)||0),o=s.y-(((c=this.dragStartPoint)==null?void 0:c.y)||0);return Math.abs(r)<1&&Math.abs(o)<1?(this.clearDragState(),this.onClick({clientX:t.clientX,clientY:t.clientY})):this.commitChange(),this.hoveredHandle=void 0,this.dragStartPoint=void 0,this.dragging=!1,!0}getCornerCursor(t){return ti[t]}getEdgeCursor(t){switch(t){case"top":case"bottom":return H.nsResize;case"left":case"right":return H.ewResize;default:return H.default}}stopEditing(){super.stopEditing(),this.commitChange(),this.stopEditingText()}startDrawing(t,n,s){this.annotation=t,this.hoveredHandle={type:"corner",corner:2},this.store.setState({hoveredHandle:2,hoveredFeature:this.annotation}),this.dragging=!0;const r=this.ogma.view.graphToScreenCoordinates({x:n,y:s});this.dragStartPoint=r,this.disablePanning(),this.onDragStart({clientX:r.x,clientY:r.y})}setAnnotation(t){t&&D(t)&&(this.justActivated=!0),super.setAnnotation(t),t&&D(t)&&t.properties.mode===ot&&this.store.getState().updateFeature(t.id,{properties:{...t.properties,mode:Mt}})}}class ei extends EventTarget{constructor(t,n,s,r,o){super();y(this,"handlers",new Map);y(this,"activeHandler");y(this,"interaction");y(this,"ogma");y(this,"snapping");y(this,"store");this.ogma=t,this.store=n,this.snapping=s,this.interaction=o,this.handlers.set("box",new Me(this.ogma,this.store,r)),this.handlers.set("text",new Me(this.ogma,this.store,r)),this.handlers.set("comment",new Me(this.ogma,this.store,r)),this.handlers.set("arrow",new Vs(this.ogma,this.store,this.snapping,r)),this.handlers.set("polygon",new Zs(this.ogma,this.store,r)),this.handlers.forEach(a=>{a.addEventListener("dragstart",(c=>{this.dispatchEvent(new CustomEvent(xt,{detail:{...c.detail}})),this.store.setState({isDragging:!0}),this.interaction.setMode("edit")})),a.addEventListener("dragend",(c=>{this.dispatchEvent(new CustomEvent(kt,{detail:{...c.detail}})),this.store.setState({isDragging:!1}),this.interaction.suppressClicksTemporarily()}))}),this.store.subscribe(a=>a.selectedFeatures,(a,c)=>{const h=Array.from(a.keys()).filter(d=>!c.has(d)),l=Array.from(c.keys()).filter(d=>!a.has(d));!h.length&&!l.length||(l.forEach(d=>this.stopEditingFeature(d)),h.forEach(d=>this.editFeature(d)))})}stopEditingFeature(t){const n=this.store.getState().features[t];if(!n)return;const s=n.properties.type,r=this.handlers.get(s);r&&r.stopEditing()}editFeature(t){var s;const n=this.store.getState().features[t];n&&(this.setActiveHandler(n.properties.type),(s=this.activeHandler)==null||s.setAnnotation(n))}getSnapping(){return this.snapping}getArrowHandler(){return this.handlers.get("arrow")}getActiveHandler(){return this.activeHandler}setActiveHandler(t){const n=this.handlers.get(t);if(!n)throw new Error(`Handler for type ${t} not found`);return this.activeHandler=n,this}destroy(){}}const ni=["x","y","radius"],si=1;class ii{constructor(e,t,n,s){y(this,"links",new Map);y(this,"nodeToLink",new Map);y(this,"edgeToLink",new Map);y(this,"annotationToLink",new Map);y(this,"linksByArrowId",new Map);y(this,"store");y(this,"ogma");y(this,"snapping");y(this,"updatedItems",new Set);y(this,"onLinkCreated");y(this,"commitTimeout");y(this,"onSetMultipleAttributes",({elements:e,updatedAttributes:t})=>{const n=new Set(t);!e.isNode||!n.has("x")&&!n.has("y")&&!n.has("radius")||this.requestUpdateFromNodePositions(e.toList())});y(this,"refresh",()=>{const e=this.store.getState(),t=new Map;this.annotationToLink.forEach((n,s)=>{var a;const r=e.getFeature(s);if(!r)return;(L(r)&&((a=r.properties.style)==null?void 0:a.fixedSize)||D(r))&&n.forEach(c=>{const h=this.links.get(c);if(!h)return;const l=h.arrow;t.set(l,this.linksByArrowId.get(l))})}),t.size>0&&this.update(t)});y(this,"throttledRefresh",fe(()=>this.refresh(),20));y(this,"onAddRemoveEdges",e=>{const t=e.edges;if(!t.size||!this.edgeToLink.size)return;const n=new Map,s=new Map;t.getParallelEdges().getId().forEach(r=>{const o=this.edgeToLink.get(r);o&&o.forEach(a=>{const c=this.links.get(a);if(!c)return;const h=c.arrow;n.set(h,this.linksByArrowId.get(h)),s.set(h,this.linksByArrowId.get(h))})}),s.size!==0&&this.update(s)});y(this,"commit",()=>{this.store.getState().batchUpdate(this.commitLiveUpdates),this.updatedItems.clear()});y(this,"commitLiveUpdates",()=>{this.store.getState().commitLiveUpdates(this.updatedItems)});y(this,"onAddArrow",(e,t)=>{const n=this.store.getState(),s=new Set(Object.keys(t)),r=Object.keys(e).filter(a=>!s.has(a)),o=Object.keys(t).filter(a=>!e[a]);r.forEach(a=>{var l,d;const c=n.getFeature(a);if(!c||!tt(c))return;const h=c;if((l=h.properties.link)!=null&&l.start){const u=h.properties.link.start;this.add(h,O,u.id,u.type,u.magnet)}if((d=h.properties.link)!=null&&d.end){const u=h.properties.link.end;this.add(h,rt,u.id,u.type,u.magnet)}}),o.forEach(a=>{const c=t[a];if(tt(c)){const h=c;this.remove(h,O),this.remove(h,rt)}else{const h=this.annotationToLink.get(a);if(!h)return;for(const l of h){const d=this.links.get(l);if(!d)continue;const u=n.getFeature(d.arrow);u?this.remove(u,d.side):this.remove(d.arrow,d.side)}}})});this.ogma=e,this.store=n,this.snapping=t,this.onLinkCreated=s,this.store.subscribe(r=>r.features,this.onAddArrow),this.store.subscribe(r=>({zoom:r.zoom,rotation:r.rotation}),this.throttledRefresh,{equalityFn:(r,o)=>r.zoom===o.zoom&&r.rotation===o.rotation}),this.ogma.events.on("setMultipleAttributes",this.onSetMultipleAttributes).on(["addEdges","removeEdges"],this.onAddRemoveEdges).on("viewChanged",this.refresh)}updateLinkedArrowsDuringDrag(e,t,n){const s=this.store.getState();if(!s.getFeature(e))return;const o=this.annotationToLink.get(e);if(o)for(const a of o){const c=this.links.get(a);if(!c)continue;const h=s.getFeature(c.arrow),l=Dt(h,c.side),d=pt(l,t),u={...h.geometry,coordinates:h.geometry.coordinates.map((g,f)=>c.side===O&&f===0||c.side===rt&&f===1?[d.x,d.y]:[...g])};n?n[h.id]={geometry:u}:s.applyLiveUpdate(h.id,{geometry:u}),this.updatedItems.add(h.id)}}snapLinkedArrowsDuringDrag(e,t){const n=this.store.getState();let s=n.getFeature(e);if(!s)return;const r=n.liveUpdates[e];s=r?{...s,...r}:s;const o=this.annotationToLink.get(e);if(o)for(const a of o){const c=this.links.get(a);if(!c)continue;let h=n.getFeature(c.arrow);const l=n.liveUpdates[h.id];h=l?{...h,...l}:h;const d=h.geometry.coordinates[c.side===O?0:1],u={x:d[0],y:d[1]};let g;if(L(s)||D(s)||W(s)?g=this.snapping.snapToText(u,[s]):it(s)&&(g=this.snapping.snapToPolygon(u,[s])),!g)continue;const f=g.point,p={...h.geometry,coordinates:h.geometry.coordinates.map((m,x)=>c.side===O&&x===0||c.side===rt&&x===1?[f.x,f.y]:[...m])};t?t[h.id]={geometry:p}:n.applyLiveUpdate(h.id,{geometry:p})}}add(e,t,n,s,r){const o=ut(),a=e.id;let c=r;if(s===P.POLYGON){const u=this.store.getState().getFeature(n);if(u&&it(u)){const g=le(u),f=g[2]-g[0],p=g[3]-g[1],m=r.x-g[0],x=r.y-g[1],v=f>0?m/f:.5,S=p>0?x/p:.5;c={x:v,y:S}}}const h={id:o,arrow:a,target:n,targetType:s,magnet:c,side:t};if(s===P.NODE&&!this.ogma.getNode(n)||s===P.EDGE&&!this.ogma.getEdge(n))return;this.remove(e,t),this.links.set(o,h);const l=s===P.NODE?this.nodeToLink:s===P.EDGE?this.edgeToLink:this.annotationToLink;return l.has(n)||l.set(n,new Set),l.get(n).add(o),this.linksByArrowId.has(a)||this.linksByArrowId.set(a,{}),this.linksByArrowId.get(a)[t]=o,e.properties.link=e.properties.link||{},e.properties.link[t]={id:n,side:t,type:s,magnet:c},this.onLinkCreated&&this.onLinkCreated(e,h),this}remove(e,t){var o,a,c,h,l;const n=typeof e=="object"?e.id:e,s=(o=this.linksByArrowId.get(n))==null?void 0:o[t];if(typeof e=="object"&&((a=e.properties.link)==null||delete a[t]),!s)return this;const r=this.links.get(s);return r?(this.links.delete(s),(c=this.nodeToLink.get(r.target))==null||c.delete(s),(h=this.edgeToLink.get(r.target))==null||h.delete(s),(l=this.annotationToLink.get(r.target))==null||l.delete(s),this.linksByArrowId.has(n)&&(this.linksByArrowId.get(n)[t]=void 0),this):this}requestUpdateFromNodePositions(e){setTimeout(()=>this.updateFromNodePositions(e),1)}updateFromNodePositions(e){const t=e.getId(),n=new Map;t.forEach(h=>{const l=this.nodeToLink.get(h);l&&l.forEach(d=>{const u=this.links.get(d);if(!u)return;const g=u.arrow;n.set(g,this.linksByArrowId.get(g))})});const s=new Map;e.getAdjacentEdges().getId().forEach(h=>{const l=this.edgeToLink.get(h);l&&l.forEach(d=>{const u=this.links.get(d);if(!u)return;const g=u.arrow;n.set(g,this.linksByArrowId.get(g)),s.set(g,this.linksByArrowId.get(g))})});const o=e.getAttributes(ni),a=this.store.getState(),c={};for(let h=0;h<t.length;h++){const l=t[h],d=this.nodeToLink.get(l);if(d)for(const u of d){const g=this.links.get(u);if(!g)continue;const f=g.arrow,p=this.store.getState().getFeature(f),m=p.geometry.coordinates.slice(),x=Dt(p,rt),v=Dt(p,O),S=o[h],E=this._getNodeSnapPoint(S,ct(X(x,v),-1),this._isLinkedToCenter(g));m[g.side===O?0:1]=E,c[f]={...p,geometry:{coordinates:m}},this.updatedItems.add(f),g.magnet={x:E[0]-S.x,y:E[1]-S.y},ft(c[f])}}if(a.applyLiveUpdates(c),s.size>0){this.update(s);return}this.requestCommit()}update(e=this.linksByArrowId){const t=this.store.getState(),n=Array.from(this.nodeToLink.keys()),s=new Map;n.forEach((c,h)=>s.set(c,h));const o=this.ogma.getNodes(n).getAttributes(["x","y","radius"]),a={};e.forEach((c,h)=>{const l=this.links.get(c.start),d=this.links.get(c.end),u=t.getFeature(h);let g=u.geometry.coordinates[0],f=u.geometry.coordinates[1];const p=l?l.targetType===P.NODE?o[s.get(l.target)]:l.targetType===P.EDGE?this._getEdgeSnapPoint(l.target,l.magnet.x,!0):this._getAnnotationCenter(t.getFeature(l.target)):{x:g[0],y:g[1]},m=d?d.targetType===P.NODE?o[s.get(d.target)]:d.targetType===P.EDGE?this._getEdgeSnapPoint(d.target,d.magnet.x,!0):this._getAnnotationCenter(t.getFeature(d.target)):{x:f[0],y:f[1]},x=X(m,p);if(l)if(l.targetType===P.NODE)g=this._getNodeSnapPoint(p,x,this._isLinkedToCenter(l));else if(l.targetType===P.EDGE)g=this._getEdgeSnapPoint(l.target,l.magnet.x);else{const v=t.getFeature(l.target);g=this._getAnnotationSnapPoint(v,m,l,t.zoom)}if(d)if(d.targetType===P.NODE)f=this._getNodeSnapPoint(m,ct(x,-1),this._isLinkedToCenter(d));else if(d.targetType===P.EDGE)f=this._getEdgeSnapPoint(d.target,d.magnet.x);else{const v=t.getFeature(d.target);f=this._getAnnotationSnapPoint(v,p,d,t.zoom)}a[u.id]={properties:u.properties,geometry:{coordinates:[g,f]}},ft(a[u.id]),this.updatedItems.add(u.id)}),t.applyLiveUpdates(a),this.requestCommit()}requestCommit(){clearTimeout(this.commitTimeout),this.commitTimeout=setTimeout(this.commit,si)}_isLinkedToCenter(e){return e.magnet.x===0&&e.magnet.y===0}_getAnnotationCenter(e){return it(e)?ce(e):J(e)}_getAnnotationSnapPoint(e,t,n,s){if(it(e)){const r=le(e),o=r[0]+n.magnet.x*(r[2]-r[0]),a=r[1]+n.magnet.y*(r[3]-r[1]);return[o,a]}return this._getBoxSnapPoint(e,t,n,s)}_getBoxSnapPoint(e,t,n,s){var d;const r=J(e);let{width:o,height:a}=Y(e);(L(e)&&((d=e.properties.style)==null?void 0:d.fixedSize)||D(e))&&(o/=s,a/=s);let h=n.magnet.x*o,l=n.magnet.y*a;if(L(e)&&!W(e)){const{sin:u,cos:g}=this.store.getState(),f=h*g-l*u,p=h*u+l*g;h=f,l=p}else if(D(e)){const g={...e.properties.style}.iconSize||32,f=g/16*.5;h=n.magnet.x*g*f,l=n.magnet.y*g*f}return[r.x+h,r.y+l]}_getNodeSnapPoint(e,t,n){if(n)return[e.x,e.y];const s=Math.sqrt(t.x*t.x+t.y*t.y),r=ct(t,1/s),o=s<Number(e.radius)/2?{x:e.x,y:e.y}:pt({x:e.x,y:e.y},ct(r,-Number(e.radius)));return[o.x,o.y]}_getEdgeSnapPoint(e,t,n=!1){const s=this.ogma.getEdge(e);if(!s)return[0,0];const r=s.getAttribute("curvature"),a=s.getExtremities().getPosition(),c=a[0],h=a[1];if(r===0||r===void 0){const u=[c.x+t*(h.x-c.x),c.y+t*(h.y-c.y)];return n?{x:u[0],y:u[1]}:u}const l=q.geometry.getQuadraticCurveControlPoint(c.x,c.y,h.x,h.y,r),d=q.geometry.getPointOnQuadraticCurve(t,c.x,c.y,h.x,h.y,l.x,l.y);return n?{x:d.x,y:d.y}:[d.x,d.y]}destroy(){this.ogma.events.off(this.onSetMultipleAttributes)}}function ri(i,e,t,n,s=20){let r=0,o=1/0,a=null;for(let c=0;c<=s;c++){const h=c/s,l=q.geometry.getPointOnQuadraticCurve(h,e.x,e.y,t.x,t.y,n.x,n.y),d=Q(X(l,i));d<o&&(o=d,a=l,r=h)}return a?{t:r,point:a,distance:o}:null}function oi(i,e,t){const n=t.x-e.x,s=t.y-e.y,r=n*n+s*s;if(r===0)return{t:0,point:{x:e.x,y:e.y},distance:Q(X(e,i))};const o=Math.max(0,Math.min(1,((i.x-e.x)*n+(i.y-e.y)*s)/r)),a={x:e.x+o*n,y:e.y+o*s};return{t:o,point:a,distance:Q(X(a,i))}}function ai(i,e,t){let n=null,s=t;const r=e.getAttribute("curvature"),a=e.getExtremities().getPosition();for(let c=0;c<e.size;c++){const h=e.get(c),l=r[c],d=a[2*c],u=a[2*c+1];let g;if(l===0||l===void 0)g=oi(i,d,u);else{const f=q.geometry.getQuadraticCurveControlPoint(d.x,d.y,u.x,u.y,l);g=ri(i,d,u,f)}g&&g.distance<s&&(s=g.distance,n={point:g.point,id:h.getId(),magnet:{x:g.t,y:0},type:P.EDGE})}return n}function li(i,e,t){const n=e.getAttributes(["x","y","radius"]);for(let s=0;s<n.length;s++){const r=n[s],o=X({x:r.x,y:r.y},i),a=Q(o);if(a>=Number(r.radius)+Number(t))continue;const c=ct(o,1/a),h=a<Number(r.radius)/2,l=h?{x:r.x,y:r.y}:pt({x:r.x,y:r.y},ct(c,-Number(r.radius))),d=h?{x:0,y:0}:c;return{point:l,id:e.get(s).getId(),magnet:d,type:P.NODE}}return null}function ci(i,e){let t=!1;for(let n=0,s=e.length-1;n<e.length;s=n++){const r=e[n][0],o=e[n][1],a=e[s][0],c=e[s][1];o>i.y!=c>i.y&&i.x<(a-r)*(i.y-o)/(c-o)+r&&(t=!t)}return t}function hi(i,e,t,n,s){const r=i*i,o=r*i,a=1-i,c=a*a,h=c*a;return{x:h*e.x+3*c*i*t.x+3*a*r*n.x+o*s.x,y:h*e.y+3*c*i*t.y+3*a*r*n.y+o*s.y}}function di(i,e,t,n,s){let r=1/0,o=null;const a=20;for(let c=0;c<=a;c++){const h=c/a,l=hi(h,e,t,n,s),d=Q(X(l,i));d<r&&(r=d,o=l)}return o?{point:o,distance:r}:null}function ui(i,e,t){const n=e.geometry.coordinates[0];for(let s=0;s<n.length-1;s++){const[r,o]=n[s];if(Q(X({x:r,y:o},i))<t)return{point:{x:r,y:o},magnet:{x:r,y:o},type:P.POLYGON,id:e.id}}for(let s=0;s<n.length-1;s++){const[r,o]=n[s],[a,c]=n[s+1],h={x:r,y:o},d=X({x:a,y:c},h),u=Q(d),g={x:d.x/u,y:d.y/u},f={x:-g.y,y:g.x},p=X(i,h),m=Math.abs(vt(f,p)),x=vt(g,p);if(x>=0&&x<=u&&m<t){const v={x:h.x+g.x*x,y:h.y+g.y*x};return{point:v,magnet:v,type:P.POLYGON,id:e.id}}}return null}function gi(i,e,t){for(const s of e){const o=s.geometry.coordinates[0].slice(0,-1);if(o.length<3)return ui(i,s,t);for(let l=0;l<o.length;l++){const[d,u]=o[l];if(Q(X({x:d,y:u},i))<t)return{point:{x:d,y:u},magnet:{x:d,y:u},type:P.POLYGON,id:s.id}}const a=ci(i,o);let c=null,h=a?1/0:t;for(let l=0;l<o.length;l++){const d=o[(l-1+o.length)%o.length],u=o[l],g=o[(l+1)%o.length],f=o[(l+2)%o.length],p=u[0]+(g[0]-d[0])/6*.5,m=u[1]+(g[1]-d[1])/6*.5,x=g[0]-(f[0]-u[0])/6*.5,v=g[1]-(f[1]-u[1])/6*.5,S=di(i,{x:u[0],y:u[1]},{x:p,y:m},{x,y:v},{x:g[0],y:g[1]});if(S){const E=S.distance;if(a)E<h&&(h=E,c=S.point);else if(E<t)return{point:S.point,magnet:S.point,type:P.POLYGON,id:s.id}}}if(a&&c)return{point:c,magnet:c,type:P.POLYGON,id:s.id}}return null}const mn=[{x:-.5,y:-.5},{x:0,y:-.5},{x:.5,y:-.5},{x:-.5,y:0},{x:.5,y:0},{x:-.5,y:.5},{x:0,y:.5},{x:.5,y:.5},{x:0,y:0}],fi=[[-.5,-.5,.5,-.5],[.5,-.5,.5,.5],[.5,.5,-.5,.5],[-.5,.5,-.5,-.5]];function yn(i,e,t,n,s,r,o,a,c){const h=i*s,l=e*r;return c?{x:t+(h*o-l*a),y:n+(h*a+l*o)}:{x:t+h,y:n+l}}function pi(i,e,t,n,s){var l;const r=J(e);let{width:o,height:a}=Y(e);const{sin:c,cos:h}=s.getState();(l=e.properties.style)!=null&&l.fixedSize&&(o/=t,a/=t);for(const d of mn){let u=d.x*o,g=d.y*a;if(!W(e)){const m=u*h-g*c,x=u*c+g*h;u=m,g=x}const f={x:r.x+u,y:r.y+g};if(!(Q(X(f,i))>=n))return{point:{x:f.x,y:f.y},type:P.TEXT,magnet:d,id:e.id}}return null}function mi(i,e,t,n,s){var f;const{x:r,y:o}=J(e);let{width:a,height:c}=Y(e);(f=e.properties.style)!=null&&f.fixedSize&&(a/=t,c/=t);const{sin:h,cos:l}=s.getState(),d=!W(e);let u=null,g=1/0;for(let p=0;p<4;p++){const[m,x,v,S]=fi[p],E=yn(m,x,r,o,a,c,l,h,d),b=yn(v,S,r,o,a,c,l,h,d),A=X(b,E),T=Q(A),C={x:A.x/T,y:A.y/T},M={x:-C.y,y:C.x},F=X(i,E),j=vt(M,F),U=vt(C,F);if(U>=0&&U<=T){const R=Math.abs(j);if(R<n||R<g){const at=U/T,lt={point:{x:E.x+C.x*U,y:E.y+C.y*U},magnet:{x:m+(v-m)*at,y:x+(S-x)*at},type:P.TEXT,id:e.id};if(R<n)return lt;R<g&&(g=R,u=lt)}}}return u&&g<Math.max(a,c)?u:null}function yi(i,e,t,n,s){for(const r of e){const o=pi(i,r,t,n,s)||mi(i,r,t,n,s);if(o)return o}return null}class wi extends EventTarget{constructor(t,n,s,r){super();y(this,"ogma");y(this,"options");y(this,"spatialIndex");y(this,"hoveredNode",null);y(this,"store");this.ogma=t,this.options=n,this.spatialIndex=s,this.store=r}snap(t){const n=this.findMagnet(t);return n||null}findMagnet(t){const n=this.options.detectMargin,s={minX:t.x-n,minY:t.y-n,maxX:t.x+n,maxY:t.y+n},r=this.spatialIndex.search(s),o=r.filter(f=>L(f)||W(f)),a=r.filter(f=>it(f)),{nodes:c,edges:h}=this.ogma.view.getElementsInside(s.minX,s.minY,s.maxX,s.maxY),l=this.snapToNodes(t,c);if(l)return l;const d=this.snapToEdges(t,h);if(d)return d;const u=this.snapToText(t,o);if(u)return u;const g=this.snapToPolygon(t,a);return g||null}snapToText(t,n){const{zoom:s}=this.store.getState();return yi(t,n,s,this.options.magnetRadius,this.store)}snapToPolygon(t,n){return gi(t,n,this.options.magnetRadius)}snapToNodes(t,n){return li(t,n,this.options.detectMargin)}snapToEdges(t,n){return ai(t,n,this.options.magnetRadius)}getHoveredNode(){return this.hoveredNode}clearHoveredNode(){var t;(t=this.hoveredNode)==null||t.setSelected(!1),this.hoveredNode=null}getMagnets(){return mn}}class xi extends EventTarget{constructor(t,n,s){super();y(this,"query",{minX:1/0,minY:1/0,maxX:1/0,maxY:1/0});y(this,"suppressClickUntil",0);y(this,"mouseDownState",null);y(this,"DRAG_THRESHOLD",3);y(this,"onMouseMove",t=>{const n=Lt(t,this.ogma.getContainer()),s=this.store.getState();if(this.mouseDownState&&!s.isDragging){const l=t.clientX-this.mouseDownState.screenX,d=t.clientY-this.mouseDownState.screenY;Math.sqrt(l*l+d*d)>this.DRAG_THRESHOLD&&(this.mouseDownState.hasMoved=!0)}if(s.isDragging)return;const{x:r,y:o}=this.ogma.view.screenToGraphCoordinates(n),a=this.detect(r,o),c=(a==null?void 0:a.id)??null,h=s.hoveredFeature;c!==h&&s.setHoveredFeature(c),this.setCursor(c===null?H.default:H.pointer)});y(this,"onMouseClick",()=>{Date.now()<this.suppressClickUntil});y(this,"onMouseDown",t=>{if(Date.now()<this.suppressClickUntil)return;const n=Lt(t,this.ogma.getContainer()),{x:s,y:r}=this.ogma.view.screenToGraphCoordinates(n),o=this.detect(s,r);this.mouseDownState={annotation:o,screenX:t.clientX,screenY:t.clientY,hasMoved:!1};const a=this.store.getState();this.store.setState({mousePressed:!0,mousePressPoint:{x:s,y:r}}),o&&!a.selectedFeatures.has(o.id)&&(t.ctrlKey||t.metaKey?a.toggleSelection(o.id):a.setSelectedFeatures([o.id]))});y(this,"onMouseUp",t=>{const n=this.store.getState();if(this.store.setState({mousePressed:!1,mousePressPoint:null}),this.mouseDownState&&!this.mouseDownState.hasMoved&&!n.isDragging){const s=this.mouseDownState.annotation;s?t.ctrlKey||t.metaKey?n.toggleSelection(s.id):n.selectedFeatures.has(s.id)||n.setSelectedFeatures([s.id]):!t.ctrlKey&&!t.metaKey&&n.clearSelection(),this.dispatchEvent(new CustomEvent(Ot,{detail:{id:(s==null?void 0:s.id)??null,position:{x:t.clientX,y:t.clientY}}}))}this.mouseDownState=null});y(this,"onWheel",t=>{var d;if(t.target instanceof HTMLTextAreaElement)return;const n=Lt(t,this.ogma.getContainer()),{x:s,y:r}=this.ogma.view.screenToGraphCoordinates(n),o=this.detect(s,r);if(!o||!D(o))return;const a=(d=o.properties.style)==null?void 0:d.maxHeight,c=o.properties.height;if(!a||c<=a)return;const h=this.ogma.getContainer(),l=h==null?void 0:h.querySelector(`[data-annotation="${o.id}"] .comment-box foreignObject div`);l&&(t.stopPropagation(),t.preventDefault(),l.scrollTop+=t.deltaY)});this.ogma=t,this.store=n,this.index=s;const r=this.ogma.getContainer();r&&(r.addEventListener("mousemove",this.onMouseMove,{passive:!0,capture:!0}),r.addEventListener("click",this.onMouseClick,{passive:!0,capture:!0}),r.addEventListener("mousedown",this.onMouseDown,{passive:!0,capture:!1}),r.addEventListener("mouseup",this.onMouseUp,{passive:!0,capture:!0}),r.addEventListener("wheel",this.onWheel,{passive:!1,capture:!0}))}detect(t,n,s){let r=null;const o=this.store.getState(),a=s??o.options.detectMargin;this.query.minX=t-a,this.query.minY=n-a,this.query.maxX=t+a,this.query.maxY=n+a;const c=this.index.query(this.query);if(c.length===0)return null;for(const h of c){const l=o.getFeature(h.id);if(tt(l)){if(me(l,{x:t,y:n},a)){r=l;break}}else if(W(l)){if(on(l,{x:t,y:n},0,1,a)){r=l;break}}else if(it(l)){if(ve(l,{x:t,y:n},a)){r=l;break}}else if(D(l)){if(an(l,{x:t,y:n},a,o.sin,o.cos,o.zoom)){r=l;break}}else if(L(l)&&xe(l,{x:t,y:n},a,o.revSin,o.revCos,o.zoom)){r=l;break}}return r}setCursor(t){var s;const n=(s=this.ogma.getContainer())==null?void 0:s.firstChild;n&&(n.style.cursor=t)}setMode(t){var n;t==="default"?this.setCursor(((n=this.ogma.getOptions().cursor)==null?void 0:n.default)||"default"):t==="add"||t==="link"?this.setCursor(H.crosshair):t==="rotate"&&this.setCursor(H.alias)}suppressClicksTemporarily(t=100){this.suppressClickUntil=Date.now()+t}destroy(){const t=this.ogma.getContainer();t&&(t.removeEventListener("mousemove",this.onMouseMove),t.removeEventListener("click",this.onMouseClick))}}function wn(i,e,t=0,n=i.length-1,s=bi){for(;n>t;){if(n-t>600){const c=n-t+1,h=e-t+1,l=Math.log(c),d=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*d*(c-d)/c)*(h-c/2<0?-1:1),g=Math.max(t,Math.floor(e-h*d/c+u)),f=Math.min(n,Math.floor(e+(c-h)*d/c+u));wn(i,e,g,f,s)}const r=i[e];let o=t,a=n;for(Ht(i,t,e),s(i[n],r)>0&&Ht(i,t,n);o<a;){for(Ht(i,o,a),o++,a--;s(i[o],r)<0;)o++;for(;s(i[a],r)>0;)a--}s(i[t],r)===0?Ht(i,t,a):(a++,Ht(i,a,n)),a<=e&&(t=a+1),e<=a&&(n=a-1)}}function Ht(i,e,t){const n=i[e];i[e]=i[t],i[t]=n}function bi(i,e){return i<e?-1:i>e?1:0}class vi{constructor(e=9){this._maxEntries=Math.max(4,e),this._minEntries=Math.max(2,Math.ceil(this._maxEntries*.4)),this.clear()}all(){return this._all(this.data,[])}search(e){let t=this.data;const n=[];if(!Kt(e,t))return n;const s=this.toBBox,r=[];for(;t;){for(let o=0;o<t.children.length;o++){const a=t.children[o],c=t.leaf?s(a):a;Kt(e,c)&&(t.leaf?n.push(a):De(e,c)?this._all(a,n):r.push(a))}t=r.pop()}return n}collides(e){let t=this.data;if(!Kt(e,t))return!1;const n=[];for(;t;){for(let s=0;s<t.children.length;s++){const r=t.children[s],o=t.leaf?this.toBBox(r):r;if(Kt(e,o)){if(t.leaf||De(e,o))return!0;n.push(r)}}t=n.pop()}return!1}load(e){if(!(e&&e.length))return this;if(e.length<this._minEntries){for(let n=0;n<e.length;n++)this.insert(e[n]);return this}let t=this._build(e.slice(),0,e.length-1,0);if(!this.data.children.length)this.data=t;else if(this.data.height===t.height)this._splitRoot(this.data,t);else{if(this.data.height<t.height){const n=this.data;this.data=t,t=n}this._insert(t,this.data.height-t.height-1,!0)}return this}insert(e){return e&&this._insert(e,this.data.height-1),this}clear(){return this.data=At([]),this}remove(e,t){if(!e)return this;let n=this.data;const s=this.toBBox(e),r=[],o=[];let a,c,h;for(;n||r.length;){if(n||(n=r.pop(),c=r[r.length-1],a=o.pop(),h=!0),n.leaf){const l=Si(e,n.children,t);if(l!==-1)return n.children.splice(l,1),r.push(n),this._condense(r),this}!h&&!n.leaf&&De(n,s)?(r.push(n),o.push(a),a=0,c=n,n=n.children[0]):c?(a++,n=c.children[a],h=!1):n=null}return this}toBBox(e){return e}compareMinX(e,t){return e.minX-t.minX}compareMinY(e,t){return e.minY-t.minY}toJSON(){return this.data}fromJSON(e){return this.data=e,this}_all(e,t){const n=[];for(;e;)e.leaf?t.push(...e.children):n.push(...e.children),e=n.pop();return t}_build(e,t,n,s){const r=n-t+1;let o=this._maxEntries,a;if(r<=o)return a=At(e.slice(t,n+1)),Et(a,this.toBBox),a;s||(s=Math.ceil(Math.log(r)/Math.log(o)),o=Math.ceil(r/Math.pow(o,s-1))),a=At([]),a.leaf=!1,a.height=s;const c=Math.ceil(r/o),h=c*Math.ceil(Math.sqrt(o));xn(e,t,n,h,this.compareMinX);for(let l=t;l<=n;l+=h){const d=Math.min(l+h-1,n);xn(e,l,d,c,this.compareMinY);for(let u=l;u<=d;u+=c){const g=Math.min(u+c-1,d);a.children.push(this._build(e,u,g,s-1))}}return Et(a,this.toBBox),a}_chooseSubtree(e,t,n,s){for(;s.push(t),!(t.leaf||s.length-1===n);){let r=1/0,o=1/0,a;for(let c=0;c<t.children.length;c++){const h=t.children[c],l=Pe(h),d=Ci(e,h)-l;d<o?(o=d,r=l<r?l:r,a=h):d===o&&l<r&&(r=l,a=h)}t=a||t.children[0]}return t}_insert(e,t,n){const s=n?e:this.toBBox(e),r=[],o=this._chooseSubtree(s,this.data,t,r);for(o.children.push(e),Bt(o,s);t>=0&&r[t].children.length>this._maxEntries;)this._split(r,t),t--;this._adjustParentBBoxes(s,r,t)}_split(e,t){const n=e[t],s=n.children.length,r=this._minEntries;this._chooseSplitAxis(n,r,s);const o=this._chooseSplitIndex(n,r,s),a=At(n.children.splice(o,n.children.length-o));a.height=n.height,a.leaf=n.leaf,Et(n,this.toBBox),Et(a,this.toBBox),t?e[t-1].children.push(a):this._splitRoot(n,a)}_splitRoot(e,t){this.data=At([e,t]),this.data.height=e.height+1,this.data.leaf=!1,Et(this.data,this.toBBox)}_chooseSplitIndex(e,t,n){let s,r=1/0,o=1/0;for(let a=t;a<=n-t;a++){const c=It(e,0,a,this.toBBox),h=It(e,a,n,this.toBBox),l=Ti(c,h),d=Pe(c)+Pe(h);l<r?(r=l,s=a,o=d<o?d:o):l===r&&d<o&&(o=d,s=a)}return s||n-t}_chooseSplitAxis(e,t,n){const s=e.leaf?this.compareMinX:Ei,r=e.leaf?this.compareMinY:Ai,o=this._allDistMargin(e,t,n,s),a=this._allDistMargin(e,t,n,r);o<a&&e.children.sort(s)}_allDistMargin(e,t,n,s){e.children.sort(s);const r=this.toBBox,o=It(e,0,t,r),a=It(e,n-t,n,r);let c=Zt(o)+Zt(a);for(let h=t;h<n-t;h++){const l=e.children[h];Bt(o,e.leaf?r(l):l),c+=Zt(o)}for(let h=n-t-1;h>=t;h--){const l=e.children[h];Bt(a,e.leaf?r(l):l),c+=Zt(a)}return c}_adjustParentBBoxes(e,t,n){for(let s=n;s>=0;s--)Bt(t[s],e)}_condense(e){for(let t=e.length-1,n;t>=0;t--)e[t].children.length===0?t>0?(n=e[t-1].children,n.splice(n.indexOf(e[t]),1)):this.clear():Et(e[t],this.toBBox)}}function Si(i,e,t){if(!t)return e.indexOf(i);for(let n=0;n<e.length;n++)if(t(i,e[n]))return n;return-1}function Et(i,e){It(i,0,i.children.length,e,i)}function It(i,e,t,n,s){s||(s=At(null)),s.minX=1/0,s.minY=1/0,s.maxX=-1/0,s.maxY=-1/0;for(let r=e;r<t;r++){const o=i.children[r];Bt(s,i.leaf?n(o):o)}return s}function Bt(i,e){return i.minX=Math.min(i.minX,e.minX),i.minY=Math.min(i.minY,e.minY),i.maxX=Math.max(i.maxX,e.maxX),i.maxY=Math.max(i.maxY,e.maxY),i}function Ei(i,e){return i.minX-e.minX}function Ai(i,e){return i.minY-e.minY}function Pe(i){return(i.maxX-i.minX)*(i.maxY-i.minY)}function Zt(i){return i.maxX-i.minX+(i.maxY-i.minY)}function Ci(i,e){return(Math.max(e.maxX,i.maxX)-Math.min(e.minX,i.minX))*(Math.max(e.maxY,i.maxY)-Math.min(e.minY,i.minY))}function Ti(i,e){const t=Math.max(i.minX,e.minX),n=Math.max(i.minY,e.minY),s=Math.min(i.maxX,e.maxX),r=Math.min(i.maxY,e.maxY);return Math.max(0,s-t)*Math.max(0,r-n)}function De(i,e){return i.minX<=e.minX&&i.minY<=e.minY&&e.maxX<=i.maxX&&e.maxY<=i.maxY}function Kt(i,e){return e.minX<=i.maxX&&e.minY<=i.maxY&&e.maxX>=i.minX&&e.maxY>=i.minY}function At(i){return{children:i,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function xn(i,e,t,n,s){const r=[e,t];for(;r.length;){if(t=r.pop(),e=r.pop(),t-e<=n)continue;const o=e+Math.ceil((t-e)/n/2)*n;wn(i,o,e,t,s),r.push(e,o,o,t)}}const zt={minX:0,minY:0,maxX:0,maxY:0},bn=(i,e)=>i.id===e.id;class ki extends vi{constructor(t){super();y(this,"store");y(this,"onRotationChange",()=>{const t=this.store.getState().getAllFeatures().filter(n=>L(n)||D(n));for(const n of t)this.updateRotatedText(n)});y(this,"onZoomChange",()=>{const t=this.store.getState().getAllFeatures().filter(n=>{var s;return(L(n)||D(n))&&((s=n.properties.style)==null?void 0:s.fixedSize)});for(const n of t)this.updateRotatedText(n)});this.store=t,this.store.subscribe(n=>n.features,n=>{this.clear(),Object.values(n).forEach(s=>{L(s)||D(s)?this.updateRotatedText(s):this.insert(s)})}),this.store.subscribe(n=>({features:n.features,isDragging:n.isDragging,lastChangedFeatures:n.lastChangedFeatures,rotation:n.rotation}),(n,s)=>{s&&s.isDragging&&!n.isDragging&&n.lastChangedFeatures.length>0&&n.lastChangedFeatures.forEach(r=>{const o=n.features[r];o&&(ft(o),L(o)||D(o)?this.updateRotatedText(o):(this.remove(o,bn),this.insert(o)))})},{equalityFn:(n,s)=>n.isDragging===s.isDragging}),this.store.subscribe(n=>n.rotation,this.onRotationChange),this.store.subscribe(n=>n.zoom,this.onZoomChange)}updateRotatedText(t){var d;const n=this.store.getState();this.remove(t,bn);const s=J(t);let{width:r,height:o}=Y(t);if(((d=t.properties.style)==null?void 0:d.fixedSize)===!0){const u=n.invZoom;r*=u,o*=u}const c=r/2,h=o/2,l=n.getRotatedBBox(s.x-c,s.y-h,s.x+c,s.y+h);this.insert({...t,geometry:{...t.geometry,bbox:l.slice()}})}compareMinX(t,n){return st(t)[0]-st(n)[0]}compareMinY(t,n){return st(t)[1]-st(n)[1]}toBBox(t){const n=st(t);return zt.minX=n[0],zt.minY=n[1],zt.maxX=n[2],zt.maxY=n[3],zt}query(t){return super.search(t)}}class vn{constructor(e,t){y(this,"layer");this.ogma=e,this.store=t}destroy(){}}function Mi(i,e,t,n,s,r){const o=Math.min(n/2,s/2),a=Math.min(r,o);i.beginPath(),i.moveTo(e+a,t),i.lineTo(e+n-a,t),i.quadraticCurveTo(e+n,t,e+n,t+a),i.lineTo(e+n,t+s-a),i.quadraticCurveTo(e+n,t+s,e+n-a,t+s),i.lineTo(e+a,t+s),i.quadraticCurveTo(e,t+s,e,t+s-a),i.lineTo(e,t+a),i.quadraticCurveTo(e,t,e+a,t),i.closePath()}const Sn=[[-.5,-.5],[.5,-.5],[.5,.5],[-.5,.5]];class Pi extends vn{constructor(t,n){super(t,n);y(this,"handleFill","#fff");y(this,"handleStroke","#1A70E5");y(this,"handleStrokeWidth",1.5);y(this,"handleRadius",3);y(this,"handleMagnifier",1.5);y(this,"refresh",()=>{this.layer.refresh()});y(this,"render",t=>{const n=this.store.getState(),s=1/n.zoom,{hoveredHandle:r,rotation:o,liveUpdates:a,features:c}=n,h=this.handleRadius*s;t.fillStyle=this.handleFill,t.lineWidth=this.handleStrokeWidth*s,t.strokeStyle=this.handleStroke,Object.values(c).forEach(l=>{if(!n.isSelected(l.id))return;const d=a[l.id]?{...l,...a[l.id]}:l;if(tt(d))this.renderArrowHandles(d,t,h,r);else if(W(d)||L(d)){const u=L(d)?o:0;this.renderOutline(d,t,u,r,n.zoom),this.renderBoxHandles(d,t,h,r,u)}else it(d)&&this.renderPolygonHandles(d,t,h,r,n.drawingFeature===d.id)})});this.layer=t.layers.addCanvasLayer(this.render,void 0,Xt.HANDLES),this.store.subscribe(s=>({selectedFeatures:s.selectedFeatures,liveUpdates:s.liveUpdates}),this.refresh),t.events.on("zoom",this.refresh)}renderOutline(t,n,s,r,o){var m,x;const a=L(t)&&((m=t.properties.style)==null?void 0:m.fixedSize);let{width:c,height:h}=Y(t);a&&(c/=o,h/=o);const l=gt(t,a,o),d=c/2,u=h/2,g=l.x+d,f=l.y+u;n.save(),n.translate(g,f),n.rotate(s);const p=(x=t.properties.style)==null?void 0:x.borderRadius;if(p&&p>0?(Mi(n,-d,-u,c,h,p),n.stroke()):n.strokeRect(-d,-u,c,h),r>=4&&r<8){let v,S,E,b;const A=p&&p>0?p:this.handleRadius/o;switch(r){case 4:v=-d+A,S=-u,E=d-A,b=-u;break;case 5:v=d,S=-u+A,E=d,b=u-A;break;case 6:v=d-A,S=u,E=-d+A,b=u;break;case 7:v=-d,S=u-A,E=-d,b=-u+A;break}n.lineWidth=this.handleStrokeWidth*this.handleMagnifier/o,n.beginPath(),n.moveTo(v,S),n.lineTo(E,b),n.stroke(),n.lineWidth=this.handleStrokeWidth}n.restore()}renderArrowHandles(t,n,s,r){var u,g,f,p;const o=de(t),a=ue(t),c=+(r===0),h=+(r===1),l=s*(1+(this.handleMagnifier-1)*c),d=s*(1+(this.handleMagnifier-1)*h);n.beginPath(),n.moveTo(o.x,o.y),n.lineTo(a.x,a.y),n.closePath(),n.stroke(),n.beginPath(),((g=(u=t.properties.link)==null?void 0:u.start)==null?void 0:g.type)!=="comment"&&(n.moveTo(o.x-l,o.y-l),n.rect(o.x-l,o.y-l,l*2,l*2)),((p=(f=t.properties.link)==null?void 0:f.end)==null?void 0:p.type)!=="comment"&&(n.moveTo(a.x-d,a.y-d),n.rect(a.x-d,a.y-d,d*2,d*2)),n.closePath(),n.fill(),n.stroke()}renderBoxHandles(t,n,s,r,o){var f;if(L(t)&&((f=t.properties.style)!=null&&f.fixedSize))return;const{width:a,height:c}=Y(t),h=gt(t),l=a/2,d=c/2,u=h.x+l,g=h.y+d;n.save(),n.translate(u,g),n.rotate(o),n.beginPath();for(let p=0;p<Sn.length;p++){const[m,x]=Sn[p],v=a*m,S=c*x,E=r===p?s*this.handleMagnifier:s;n.rect(v-E,S-E,E*2,E*2)}n.closePath(),n.fill(),n.stroke(),n.restore()}renderPolygonHandles(t,n,s,r,o){const a=t.geometry.coordinates[0];if(!o){a.length>2&&(n.save(),n.strokeStyle=this.handleStroke,n.lineWidth=this.handleStrokeWidth/this.store.getState().zoom,this.drawSmoothPolygon(n,a,.5),n.stroke(),n.restore()),n.beginPath();for(let c=0;c<a.length-1;c++){const[h,l]=a[c],d=r===c?s*this.handleMagnifier:s;n.moveTo(h+d,l),n.arc(h,l,d,0,2*Math.PI)}n.closePath(),n.fill(),n.stroke()}}drawSmoothPolygon(t,n,s){const r=n.slice(0,-1);if(r.length<3)return;t.beginPath();const o=r.length;for(let a=0;a<o;a++){const c=r[(a-1+o)%o],h=r[a],l=r[(a+1)%o],d=r[(a+2)%o],u=h[0]+(l[0]-c[0])/6*s,g=h[1]+(l[1]-c[1])/6*s,f=l[0]-(d[0]-h[0])/6*s,p=l[1]-(d[1]-h[1])/6*s;a===0&&t.moveTo(h[0],h[1]),t.bezierCurveTo(u,g,f,p,l[0],l[1])}t.closePath()}renderCenterPoint(t,n){var r;const s=this.store.getState();if(L(t)){const o=gt(t,(r=t.properties.style)==null?void 0:r.fixedSize,s.zoom),a=Y(t);n.moveTo(o.x+a.width/2+5,o.y+a.height/2),n.arc(o.x+a.width/2,o.y+a.height/2,5,0,Math.PI*2,!0)}}destroy(){this.layer.destroy(),super.destroy()}}const Di=.5;function Fi(i,e,t,n){const{start:s,end:r}=Ut(i),o=X(r,s);return Math.min(n,Math.max(2*e,Q(o)*.01,t))}function En(i,e){return!i||i==="none"?0:i==="dot"?e*2:i==="halo-dot"?e*4:i==="arrow"||i==="arrow-plain"?e:0}function Li(i,e){if(!i){i=k("g");const t=k("path");i.classList.add("annotation-arrow"),i.setAttribute("data-annotation",`${e}`),i.setAttribute("data-annotation-type","arrow"),i.appendChild(t);const n=k("g");n.classList.add("annotation-arrow-endpoints"),i.appendChild(n)}return i}function _i(i,e,t,n,s,r){const{start:o,end:a}=Ut(e),c=e.properties.style||mt,{tail:h,strokeWidth:l=0,head:d,strokeColor:u,strokeType:g}=c,f=X(a,o),p=dn(e)?1/r.zoom:1,m=Fi(e,l,t,n)*p,x=Li(s,e.id),v=x.firstChild,S=u||"none";v.setAttribute("stroke",S),v.setAttribute("stroke-width",`${p*l}`),v.setAttribute("fill","none"),v.setAttribute("stroke-linecap","round"),v.setAttribute("stroke-linejoin","round");const E=En(h,l*p),b=En(d,l*p),A=Wt(f),T=pt(o,ct(A,E)),C=pt(a,ct(A,-b)),M=`M ${T.x} ${T.y} L ${C.x} ${C.y}`;v.setAttribute("d",M);const F=x.children[1];return F.innerHTML="",g==="dashed"?v.setAttribute("stroke-dasharray","5,10"):v.removeAttribute("stroke-dasharray"),An(F,o,f,S,h,l,p,m),An(F,a,Es(f),S,d,l,p,m),x.setAttribute("transform",`rotate(${-r.rotation*(180/Math.PI)})`),i.appendChild(x),x}function An(i,e,t,n,s,r,o,a){s==="halo-dot"&&Cn(i,e,Hi(n),Di,r*o*4),(s==="dot"||s==="halo-dot")&&Cn(i,e,n,1,r*o*2),(s==="arrow"||s==="arrow-plain")&&Ii(i,e,t,n,s==="arrow-plain",r*o,a)}function Hi(i){return i==="none"?"none":i}function Cn(i,e,t,n,s){const r=k("circle");r.setAttribute("cx",`${e.x}`),r.setAttribute("cy",`${e.y}`),r.setAttribute("r",`${s}`),r.setAttribute("fill-opacity",`${n}`),r.setAttribute("fill",t),i.appendChild(r)}function Ii(i,e,t,n,s,r,o){const a=ct(Wt(t),o),c=pt(e,rn(a,Math.PI/6)),h=pt(e,rn(a,-Math.PI/6)),l=k("path"),d=`${e.x} ${e.y}`,u=`M ${c.x} ${c.y} L ${d} L ${h.x} ${h.y}${s?" Z":""}`;l.setAttribute("d",u),l.setAttribute("stroke",n),l.setAttribute("stroke-width",`${r}`),l.setAttribute("fill",s?n:"none"),l.setAttribute("stroke-linecap","round"),l.setAttribute("stroke-linejoin","round"),i.appendChild(l)}function Bi(i,e,t="box"){if(!i){i=k("g"),i.setAttribute("data-annotation",`${e}`),i.setAttribute("data-annotation-type",t),i.classList.add(`annotation-${t}`);const n=k("rect");i.appendChild(n)}return i}function Tn(i,e,t,n){const s=e.id,r=`class${s}`,o=Y(e),a=Bi(t,s,e.properties.type),{strokeColor:c,strokeWidth:h,strokeType:l,background:d,borderRadius:u,boxShadow:g}=e.properties.style||St;a.classList.add("annotation-box"),a.setAttribute("fill",`${d||"transparent"}`);const f=a.firstChild;u&&(f.setAttribute("rx",`${u}`),f.setAttribute("ry",`${u}`)),l&&l!=="none"&&(f.setAttribute("stroke",c||"black"),f.setAttribute("stroke-width",`${h}`),l==="dashed"&&f.setAttribute("stroke-dasharray","5,5")),d&&d.length&&(n.hoveredFeature===e.id?f.setAttribute("fill",bt(d)):f.setAttribute("fill",d));const p=gt(e);return f.setAttribute("width",`${o.width}`),f.setAttribute("height",`${o.height}`),f.setAttribute("x",`${p.x}`),f.setAttribute("y",`${p.y}`),a.appendChild(f),g?a.style.filter=`drop-shadow(${g})`:a.style.filter="",a.setAttribute("transform",n.getRotationTransform(0,0)),a.classList.add(r),a.setAttribute("data-annotation",`${e.id}`),a.setAttribute("data-annotation-type",e.properties.type),i.appendChild(a),a}let Fe=null;function kn(){return Fe||(Fe=document.createElement("canvas").getContext("2d")),Fe}function Mn(i,e,t,n,s){if(!i||i.length===0)return!0;if(i.includes(`
12
- `))return!1;const r=kn();r.font=`${t}px ${e}`;const o=r.measureText(i).width,a=n-s*2;return o<=a}function zi(i,e,t,n,s){if(!i||i.length===0)return 60;const r=kn();r.font=`${t}px ${e}`;const o=i.split(`
13
- `);let a=0;for(const h of o){if(h.length===0)continue;const l=h.split(/\s+/);let d=0;const u=r.measureText(" ").width,g=n-s*2;for(let f=0;f<l.length;f++){const p=l[f],m=r.measureText(p).width;d===0?d=m:d+u+m<=g?d+=u+m:(a=Math.max(a,d),d=m)}a=Math.max(a,d)}const c=a+s*2+4;return Math.min(c,n)}function Ri(){const i=k("style");return i.textContent=`
11
+ </div>`,position:u,size:h,scaled:!this.fixedSize},Yt.EDITOR),this.textarea=this.layer.element.querySelector("textarea"),this.textarea.setAttribute("wrap","on"),this.textarea.setAttribute("spellcheck","false"),this.textarea.value=r.properties.content||"",a&&(this.sendButton=this.layer.element.querySelector(".ogma-send-button"),this.sendButton.addEventListener("click",this.onSendClick),this.updateSendButtonState()),this.isFocused=!1,this.textarea.addEventListener("focus",this.onFocus),this.textarea.addEventListener("blur",this.onBlur),this.textarea.addEventListener("input",this.onInput),this.textarea.addEventListener("keyup",this.onKeyup),this.textarea.addEventListener("keydown",this.onKeydown),this.textarea.addEventListener("wheel",this.onMouseEvent),this.textarea.addEventListener("mouseup",this.onMouseEvent),this.textarea.addEventListener("mousedown",this.onMouseEvent),this.textarea.addEventListener("click",this.onMouseEvent),this.textarea.addEventListener("drag",this.onMouseEvent),this.updateStyle(),this.updatePosition(),this.textarea.focus(),this.unsubscribe=this.store.subscribe(y=>({rotation:y.rotation,zoom:y.zoom,annotation:y.features[this.annotation]}),this.update,{equalityFn:(y,A)=>y.rotation===A.rotation&&y.zoom===A.zoom&&y.annotation===A.annotation})}getAnnotation(){const e=this.store.getState();e.liveUpdates[this.annotation]||e.startLiveUpdate([this.annotation]);const t=e.getFeature(this.annotation),n=e.liveUpdates[this.annotation];return t&&n?{...t,...n}:t}getPosition(){const e=this.getAnnotation();if(!e)return{x:0,y:0};const t=e.properties.style,n=t==null?void 0:t.maxHeight,i=this.store.getState().zoom,r=En(e),[o,a]=e.geometry.coordinates,d=e.properties.width;let c=e.properties.height;n&&(c=Math.min(c,n));const l=this.fixedSize?1/i:1;return{x:o-d*l/2+r*l,y:a-c*l/2+r*l}}getSize(){const e=this.getAnnotation();if(!e)return{width:0,height:0};const t=X(e),n=En(e),i=e.properties.style,r=i==null?void 0:i.maxHeight;let o=t.height-n*2;return r&&(o=Math.min(o,r-n*2)),{width:t.width-n*2,height:o}}updateStyle(){var y;const e=this.getAnnotation();if(!e)return;const t=I(e)?Z:q,{font:n,fontSize:i=t.fontSize,borderRadius:r,color:o,background:a=t.background,padding:d=0,fixedSize:c=t.fixedSize}=e.properties.style||t,l=this.textarea,u=this.layer.element,h=1,x=parseFloat(i.toString())*h,g=d*h,f=u.style;if(f.display="grid",f.gridTemplateRows="1fr auto",f.boxSizing="border-box",f.background=a||"transparent",f.borderRadius=`${(r||0)*h}px`,f.padding=`${g}px`,f.transformOrigin="center",f.transform=`rotate(${this.store.getState().rotation}rad)`,e.properties.type==="comment"){const A=e.properties.style,E=(A==null?void 0:A.shadow)!==!1;f.boxShadow=E?"0 2px 8px rgba(0, 0, 0, 0.15)":"none"}const p=l.style;if(p.fontFamily=n||"sans-serif",p.fontSize=`${x}px`,p.lineHeight=`${x*Xt}px`,p.padding="0",p.border="none",p.outline="none",p.boxSizing="border-box",p.color=o||"black",p.background="transparent",p.flex="1",p.minHeight="0",p.resize="none",this.sendButton){const A=24*h,E=4*h;this.sendButton.style.width=`${A}px`,this.sendButton.style.height=`${A}px`,this.sendButton.style.padding=`${E}px`,this.sendButton.style.transform="";const w=this.sendButton.querySelector(".ogma-send-button-icon");if(w){const N=16*h;w.style.width=`${N}px`,w.style.height=`${N}px`}}if(c){const A=(y=e.properties.style)==null?void 0:y.maxHeight,E=A&&e.properties.height>=A;p.overflowY=E?"auto":"hidden",p.overflowX="hidden"}}updatePosition(){this.layer.setPosition(this.getPosition())}updateContent(){var o,a,d,c;const e=this.getAnnotation();if(!e)return;let t=e.properties.height,n=e.geometry.coordinates;const i=(o=e.properties.style)==null?void 0:o.fixedSize;if(i){const l=this.textarea.style.height;this.textarea.style.height="0px";const u=this.textarea.scrollHeight;this.textarea.style.height=l;const h=((a=e.properties.style)==null?void 0:a.padding)||0,x=this.sendButton?parseFloat(this.sendButton.style.height||"0"):0,g=u+h*2+x,f=((d=e.properties.style)==null?void 0:d.minHeight)||50;t=Math.max(f,g);const p=(c=e.properties.style)==null?void 0:c.maxHeight,y=e.properties.height,A=t-y;if(!I(e)&&Math.abs(A)>1){const[w,N]=e.geometry.coordinates;if(p&&t>p){const F=p-y;t=p,Math.abs(F)>1&&(n=[w,N+F/2])}else n=[w,N+A/2]}else p&&t>p&&(t=p)}const r={...e,properties:{...e.properties,content:this.textarea.value,height:t},geometry:{...e.geometry,coordinates:n}};i&&Math.abs(e.properties.height-t)>1&&(this.layer.setSize(this.getSize()),this.layer.setPosition(this.getPosition())),this.store.getState().applyLiveUpdate(this.annotation,r)}updateSendButtonState(){if(!this.sendButton)return;const e=this.textarea.value.trim().length===0;this.sendButton.disabled=e}destroy(){this.store.getState().commitLiveUpdates(new Set([this.annotation])),this.unsubscribe(),this.sendButton&&this.sendButton.removeEventListener("click",this.onSendClick),this.layer.destroy()}}function En(s){var e;return((e=s.properties.style)==null?void 0:e.strokeWidth)||0}const Nn={x:1,y:0},Cn={x:0,y:1},ai=[["top",Cn,-.5,-.5,.5,-.5],["right",Nn,.5,-.5,.5,.5],["bottom",Cn,-.5,.5,.5,.5],["left",Nn,-.5,-.5,-.5,.5]],ci={top:[0,1],right:[1,2],bottom:[2,3],left:[3,0]},wn=[[-.5,-.5],[.5,-.5],[.5,.5],[-.5,.5]],li=[z.nwResize,z.neResize,z.seResize,z.swResize];class Te extends Kt{constructor(t,n,i){super(t,n);m(this,"links");m(this,"textEditor",null);m(this,"justActivated",!1);m(this,"onClick",t=>{if(Vt(t.target??null))return;const n=this.getAnnotation();if(n){if(I(n)&&n.properties.mode===rt){this.store.getState().updateFeature(n.id,{properties:{...n.properties,mode:Bt}}),this.ogma.view.afterNextFrame(),this.justActivated=!1;return}if(this.store.getState().selectedFeatures.has(n.id)){if(I(n)&&this.justActivated){this.justActivated=!1;return}n&&(_(n)||I(n))&&this.startEditingText()}}});m(this,"stopEditingText",()=>{this.textEditor&&(this.store.getState().drawingFeature===this.annotation&&this.store.setState({drawingFeature:null}),this.textEditor.destroy()),this.textEditor=null,this.store.setState({editingFeature:null})});this.links=i}detectHandle(t,n){var w;const i=this.getAnnotation(),{x:r,y:o}=this.clientToCanvas(t);let{width:a,height:d}=X(i);const c=5/n,l=J(i),u=this.store.getState();let{revSin:h,revCos:x}=u;(G(i)||I(i))&&(h=0,x=1),this.hoveredHandle=void 0;const g=sn*(1/n),f=r-l.x,p=o-l.y,y=f*x-p*h,A=f*h+p*x,E=((w=i.properties.style)==null?void 0:w.fixedSize)===!0||I(i);if(E&&(a/=n,d/=n),!E){for(let N=0;N<wn.length;N++){const[F,C]=wn[N],M=a*F,B=d*C;if(y>=M-g-c&&y<=M+g+c&&A>=B-g-c&&A<=B+g+c){this.hoveredHandle={type:"corner",corner:N},this.store.setState({hoveredHandle:N,hoveredFeature:this.annotation}),this.setCursor(this.getCornerCursor(N));return}}for(const[N,F,C,M,B,D]of ai){const v=a*C,O=d*M,R=a*B,W=d*D,b=Et(F,{x:y-v,y:A-O});if(Math.abs(b)<c&&y>=v-c&&y<=R+c&&A>=O-c&&A<=W+c){this.hoveredHandle={type:"edge",edge:N,corner:-1},this.store.setState({hoveredHandle:ci[N][0]+4,hoveredFeature:this.annotation}),this.setCursor(this.getEdgeCursor(N));return}}}if(y>=-a/2-c&&y<=a/2+c&&A>=-d/2-c&&A<=d/2+c){this.store.setState({hoveredHandle:8,hoveredFeature:this.annotation}),this.hoveredHandle={type:"body",corner:-1},this.setCursor(z.grab);return}this.store.setState({hoveredHandle:-1,hoveredFeature:null}),this.setCursor(z.default)}onDrag(t){if(!this.dragStartPoint||!this.hoveredHandle||!this.isActive())return;t.stopPropagation(),t.stopImmediatePropagation();const n=this.getAnnotation(),i=this.clientToCanvas(t),r={x:i.x-this.dragStartPoint.x,y:i.y-this.dragStartPoint.y},o=this.hoveredHandle,a=this.getAnnotation();let d=null;o.type==="corner"?d=this.dragCorner(a,r,o.corner):o.type==="edge"&&o.edge?d=this.dragEdge(a,r,o):o.type==="body"&&(Le(this.store,this.links,n.id,r),this.textEditor&&this.textEditor.update()),d&&(this.store.getState().applyLiveUpdate(n.id,d),this.links.updateLinkedArrowsDuringDrag(n.id,r),this.textEditor&&this.textEditor.update()),this.dispatchEvent(new CustomEvent(Dt,{detail:{point:i,annotation:this.annotation,handle:o}}))}dragCorner(t,n,i){const r=i===0||i===1,o=i===0||i===3,a=i===1||i===2,d=i===2||i===3,{width:c,height:l}=X(t),u=this.store.getState();let{revSin:h,revCos:x}=u;(G(t)||I(t))&&(h=0,x=1);const g=n.x*x-n.y*h,f=n.x*h+n.y*x;let p=0,y=0;o?p=-g:a&&(p=g),r?y=-f:d&&(y=f);const A=Math.max(0,c+p),E=Math.max(0,l+y),w=J(t),N=w.x+n.x/2,F=w.y+n.y/2;return{...t,properties:{...t.properties,width:A,height:E},geometry:{type:t.geometry.type,coordinates:[N,F]}}}dragEdge(t,n,i){const{width:r,height:o}=X(t),a=J(t),d=this.store.getState();let{revSin:c,revCos:l}=d;(G(t)||I(t))&&(c=0,l=1);const u=n.x*l-n.y*c,h=n.x*c+n.y*l;let x=r,g=o,f=0,p=0;switch(i.edge){case"top":g=Math.max(0,o-h),p=h/2;break;case"bottom":g=Math.max(0,o+h),p=h/2;break;case"left":x=Math.max(0,r-u),f=u/2;break;case"right":x=Math.max(0,r+u),f=u/2;break}const y=f*l+p*c,A=-f*c+p*l;return{...t,properties:{...t.properties,width:x,height:g},geometry:{type:t.geometry.type,coordinates:[a.x+y,a.y+A]}}}onDragStart(t){return super.onDragStart(t)?(this.stopEditingText(),this.store.getState().startLiveUpdate([this.annotation]),!0):!1}startEditingText(){this.textEditor===null&&(this.store.setState({editingFeature:this.annotation}),this.textEditor=new oi(this.ogma,this.store,this.annotation,this.stopEditingText))}onDragEnd(t){var a,d;if(!super.onDragEnd(t))return!1;this.store.getState().drawingFeature===this.annotation&&this.store.setState({drawingFeature:null});const i=this.clientToCanvas(t),r=i.x-(((a=this.dragStartPoint)==null?void 0:a.x)||0),o=i.y-(((d=this.dragStartPoint)==null?void 0:d.y)||0);return Math.abs(r)<1&&Math.abs(o)<1?(this.clearDragState(),this.onClick({clientX:t.clientX,clientY:t.clientY})):this.commitChange(),this.hoveredHandle=void 0,this.dragStartPoint=void 0,this.dragging=!1,!0}getCornerCursor(t){return li[t]}getEdgeCursor(t){switch(t){case"top":case"bottom":return z.nsResize;case"left":case"right":return z.ewResize;default:return z.default}}stopEditing(){super.stopEditing(),this.commitChange(),this.stopEditingText()}startDrawing(t,n,i){this.annotation=t,this.hoveredHandle={type:"corner",corner:2},this.store.setState({hoveredHandle:2,hoveredFeature:this.annotation}),this.dragging=!0;const r=this.ogma.view.graphToScreenCoordinates({x:n,y:i});this.dragStartPoint=r,this.disablePanning(),this.onDragStart({clientX:r.x,clientY:r.y})}setAnnotation(t){t&&I(t)&&(this.justActivated=!0),super.setAnnotation(t),t&&I(t)&&t.properties.mode===rt&&this.store.getState().updateFeature(t.id,{properties:{...t.properties,mode:Bt}})}}class di extends EventTarget{constructor(t,n,i,r,o){super();m(this,"handlers",new Map);m(this,"activeHandler");m(this,"interaction");m(this,"ogma");m(this,"snapping");m(this,"store");this.ogma=t,this.store=n,this.snapping=i,this.interaction=o,this.handlers.set("box",new Te(this.ogma,this.store,r)),this.handlers.set("text",new Te(this.ogma,this.store,r)),this.handlers.set("comment",new Te(this.ogma,this.store,r)),this.handlers.set("arrow",new ii(this.ogma,this.store,this.snapping,r)),this.handlers.set("polygon",new ri(this.ogma,this.store,r)),this.handlers.forEach(a=>{a.addEventListener("dragstart",(d=>{this.dispatchEvent(new CustomEvent(Ft,{detail:{...d.detail}})),this.store.setState({isDragging:!0}),this.interaction.setMode("edit")})),a.addEventListener("dragend",(d=>{this.dispatchEvent(new CustomEvent(vt,{detail:{...d.detail}})),this.store.setState({isDragging:!1}),this.interaction.suppressClicksTemporarily()}))}),this.store.subscribe(a=>a.selectedFeatures,(a,d)=>{const c=Array.from(a.keys()).filter(u=>!d.has(u)),l=Array.from(d.keys()).filter(u=>!a.has(u));!c.length&&!l.length||(l.forEach(u=>this.stopEditingFeature(u)),c.forEach(u=>this.editFeature(u)))})}stopEditingFeature(t){const n=this.store.getState().features[t];if(!n)return;const i=n.properties.type,r=this.handlers.get(i);r&&r.stopEditing()}editFeature(t){var i;const n=this.store.getState().features[t];n&&(this.setActiveHandler(n.properties.type),(i=this.activeHandler)==null||i.setAnnotation(n))}getSnapping(){return this.snapping}getArrowHandler(){return this.handlers.get("arrow")}getActiveHandler(){return this.activeHandler}setActiveHandler(t){const n=this.handlers.get(t);if(!n)throw new Error(`Handler for type ${t} not found`);return this.activeHandler=n,this}destroy(){}}const ui=["x","y","radius"],hi=1;function xi(s,e){return e===P.NODE?{type:"node",center:s.x===0&&s.y===0}:e===P.EDGE?{type:"edge",t:s.x}:e===P.POLYGON?{type:"polygon",rx:s.x,ry:s.y}:{type:"box",nx:s.x,ny:s.y}}class fi{constructor(e,t,n,i){m(this,"links",new Map);m(this,"nodeToLink",new Map);m(this,"edgeToLink",new Map);m(this,"annotationToLink",new Map);m(this,"linksByArrowId",new Map);m(this,"store");m(this,"ogma");m(this,"snapping");m(this,"updatedItems",new Set);m(this,"onLinkCreated");m(this,"commitTimeout");m(this,"nodePositionTimeout");m(this,"onSetMultipleAttributes",({elements:e,updatedAttributes:t})=>{const n=new Set(t);!e.isNode||!n.has("x")&&!n.has("y")&&!n.has("radius")||this.requestUpdateFromNodePositions(e.toList())});m(this,"refresh",()=>{const e=this.store.getState(),t=new Map;this.annotationToLink.forEach((n,i)=>{var a;const r=e.getFeature(i);if(!r)return;(_(r)&&((a=r.properties.style)==null?void 0:a.fixedSize)||I(r))&&n.forEach(d=>{const c=this.links.get(d);if(!c)return;const l=c.arrow;t.set(l,this.linksByArrowId.get(l))})}),t.size>0&&this.update(t)});m(this,"throttledRefresh",Se(()=>this.refresh(),20));m(this,"onAddRemoveEdges",e=>{const t=e.edges;if(!t.size||!this.edgeToLink.size)return;const n=new Map,i=new Map;t.getParallelEdges().getId().forEach(r=>{const o=this.edgeToLink.get(r);o&&o.forEach(a=>{const d=this.links.get(a);if(!d)return;const c=d.arrow;n.set(c,this.linksByArrowId.get(c)),i.set(c,this.linksByArrowId.get(c))})}),i.size!==0&&this.update(i)});m(this,"commit",()=>{this.store.getState().batchUpdate(this.commitLiveUpdates),this.updatedItems.clear()});m(this,"commitLiveUpdates",()=>{this.store.getState().commitLiveUpdates(this.updatedItems)});m(this,"onAddArrow",(e,t)=>{const n=this.store.getState(),i=new Set(Object.keys(t)),r=Object.keys(e).filter(d=>!i.has(d)),o=Object.keys(t).filter(d=>!e[d]);r.forEach(d=>{var u,h;const c=n.getFeature(d);if(!c||!tt(c))return;const l=c;if((u=l.properties.link)!=null&&u.start){const x=l.properties.link.start;this.add(l,$,x.id,x.type,x.magnet)}if((h=l.properties.link)!=null&&h.end){const x=l.properties.link.end;this.add(l,it,x.id,x.type,x.magnet)}}),o.forEach(d=>{const c=t[d];if(tt(c)){const l=c;this.remove(l,$),this.remove(l,it)}else{const l=this.annotationToLink.get(d);if(!l)return;for(const u of l){const h=this.links.get(u);if(!h)continue;const x=n.getFeature(h.arrow);x?this.remove(x,h.side):this.remove(h.arrow,h.side)}}});const a=new Map;for(const d of i){const c=e[d];if(!c||!this.annotationToLink.has(d))continue;const l=t[d],u=l.geometry.coordinates!==c.geometry.coordinates,h=l.properties.width!==c.properties.width||l.properties.height!==c.properties.height;if(!u&&!h)continue;const x=this.annotationToLink.get(d);for(const g of x){const f=this.links.get(g);if(!f)continue;const p=f.arrow;this.linksByArrowId.has(p)&&a.set(p,this.linksByArrowId.get(p))}}a.size>0&&this._updateAndCommitSync(a)});this.ogma=e,this.store=n,this.snapping=t,this.onLinkCreated=i,this.store.subscribe(r=>r.features,this.onAddArrow),this.store.subscribe(r=>({zoom:r.zoom,rotation:r.rotation}),this.throttledRefresh,{equalityFn:(r,o)=>r.zoom===o.zoom&&r.rotation===o.rotation}),this.ogma.events.on("setMultipleAttributes",this.onSetMultipleAttributes).on(["addEdges","removeEdges"],this.onAddRemoveEdges).on("viewChanged",this.refresh)}updateLinkedArrowsDuringDrag(e,t,n){const i=this.store.getState();if(!i.getFeature(e))return;const o=this.annotationToLink.get(e);if(o)for(const a of o){const d=this.links.get(a);if(!d)continue;const c=i.getFeature(d.arrow),l=kt(c,d.side),u=ft(l,t),h={...c.geometry,coordinates:c.geometry.coordinates.map((x,g)=>d.side===$&&g===0||d.side===it&&g===1?[u.x,u.y]:[...x])};n?n[c.id]={geometry:h}:i.applyLiveUpdate(c.id,{geometry:h}),this.updatedItems.add(c.id)}}snapLinkedArrowsDuringDrag(e,t){const n=this.store.getState();let i=n.getFeature(e);if(!i)return;const r=n.liveUpdates[e];i=r?{...i,...r}:i;const o=this.annotationToLink.get(e);if(o)for(const a of o){const d=this.links.get(a);if(!d)continue;let c=n.getFeature(d.arrow);const l=n.liveUpdates[c.id];c=l?{...c,...l}:c;const u=c.geometry.coordinates[d.side===$?0:1],h={x:u[0],y:u[1]};let x;if(_(i)||I(i)||G(i)?x=this.snapping.snapToText(h,[i]):nt(i)&&(x=this.snapping.snapToPolygon(h,[i])),!x)continue;const g=x.point,f={...c.geometry,coordinates:c.geometry.coordinates.map((p,y)=>d.side===$&&y===0||d.side===it&&y===1?[g.x,g.y]:[...p])};t?t[c.id]={geometry:f}:n.applyLiveUpdate(c.id,{geometry:f})}}add(e,t,n,i,r){const o=ht(),a=e.id;let d=r;if(i===P.POLYGON){const h=this.store.getState().getFeature(n);if(h&&nt(h)){const x=xe(h),g=x[2]-x[0],f=x[3]-x[1],p=r.x-x[0],y=r.y-x[1],A=g>0?p/g:.5,E=f>0?y/f:.5;d={x:A,y:E}}}const c={id:o,arrow:a,target:n,targetType:i,magnet:xi(d,i),side:t};if(i===P.NODE&&!this.ogma.getNode(n)||i===P.EDGE&&!this.ogma.getEdge(n))return;this.remove(e,t),this.links.set(o,c);const l=i===P.NODE?this.nodeToLink:i===P.EDGE?this.edgeToLink:this.annotationToLink;return l.has(n)||l.set(n,new Set),l.get(n).add(o),this.linksByArrowId.has(a)||this.linksByArrowId.set(a,{}),this.linksByArrowId.get(a)[t]=o,e.properties.link=e.properties.link||{},e.properties.link[t]={id:n,side:t,type:i,magnet:d},this.onLinkCreated&&this.onLinkCreated(e,c),this}remove(e,t){var o,a,d,c,l;const n=typeof e=="object"?e.id:e,i=(o=this.linksByArrowId.get(n))==null?void 0:o[t];if(typeof e=="object"&&((a=e.properties.link)==null||delete a[t]),!i)return this;const r=this.links.get(i);return r?(this.links.delete(i),(d=this.nodeToLink.get(r.target))==null||d.delete(i),(c=this.edgeToLink.get(r.target))==null||c.delete(i),(l=this.annotationToLink.get(r.target))==null||l.delete(i),this.linksByArrowId.has(n)&&(this.linksByArrowId.get(n)[t]=void 0),this):this}requestUpdateFromNodePositions(e){clearTimeout(this.nodePositionTimeout),this.nodePositionTimeout=setTimeout(()=>this.updateFromNodePositions(e),1)}updateFromNodePositions(e){if(!e.size)return;const t=e.getId(),n=new Map;t.forEach(c=>{const l=this.nodeToLink.get(c);l&&l.forEach(u=>{const h=this.links.get(u);if(!h)return;const x=h.arrow;n.set(x,this.linksByArrowId.get(x))})});const i=new Map;e.getAdjacentEdges().getId().forEach(c=>{const l=this.edgeToLink.get(c);l&&l.forEach(u=>{const h=this.links.get(u);if(!h)return;const x=h.arrow;n.set(x,this.linksByArrowId.get(x)),i.set(x,this.linksByArrowId.get(x))})});const o=e.getAttributes(ui),a=this.store.getState(),d={};for(let c=0;c<t.length;c++){const l=t[c],u=this.nodeToLink.get(l);if(u)for(const h of u){const x=this.links.get(h);if(!x)continue;const g=x.arrow,f=this.store.getState().getFeature(g),p=f.geometry.coordinates.slice(),y=kt(f,it),A=kt(f,$),E=x.side===$?0:1,w=o[c],N=this._getNodeSnapPoint(w,ot(Y(y,A),-1),this._isLinkedToCenter(x)),F=this._getRigidFollowComment(g,x);if(F){const C=p[E],M=Y({x:N[0],y:N[1]},{x:C[0],y:C[1]});p[0]=[p[0][0]+M.x,p[0][1]+M.y],p[1]=[p[1][0]+M.x,p[1][1]+M.y];const[B,D]=F.geometry.coordinates,v={...F,geometry:{type:"Point",coordinates:[B+M.x,D+M.y]}};d[F.id]=v,ct(v),this.updatedItems.add(F.id)}else p[E]=N;d[g]={...f,geometry:{coordinates:p}},this.updatedItems.add(g),ct(d[g])}}if(a.applyLiveUpdates(d),i.size>0){this.update(i);return}this.requestCommit()}update(e=this.linksByArrowId){const t=this._computeArrowUpdates(e);this.store.getState().applyLiveUpdates(t),this.requestCommit()}_updateAndCommitSync(e){const t=this._computeArrowUpdates(e);if(Object.keys(t).length===0)return;const n=this.store.getState();n.batchUpdate(()=>{n.updateFeatures(t)})}_computeArrowUpdates(e){const t=this.store.getState(),n=Array.from(this.nodeToLink.keys()),i=new Map;n.forEach((d,c)=>i.set(d,c));const o=this.ogma.getNodes(n).getAttributes(["x","y","radius"]),a={};return e.forEach((d,c)=>{const l=this.links.get(d.start),u=this.links.get(d.end),h=t.getFeature(c);let x=h.geometry.coordinates[0],g=h.geometry.coordinates[1];const f=l?l.targetType===P.NODE?o[i.get(l.target)]:l.targetType===P.EDGE?this._getEdgeSnapPoint(l.target,l.magnet.t,!0):this._getAnnotationCenter(t.getFeature(l.target)):{x:x[0],y:x[1]},p=u?u.targetType===P.NODE?o[i.get(u.target)]:u.targetType===P.EDGE?this._getEdgeSnapPoint(u.target,u.magnet.t,!0):this._getAnnotationCenter(t.getFeature(u.target)):{x:g[0],y:g[1]},y=Y(p,f);if(l)if(l.targetType===P.NODE)x=this._getNodeSnapPoint(f,y,this._isLinkedToCenter(l));else if(l.targetType===P.EDGE)x=this._getEdgeSnapPoint(l.target,l.magnet.t);else{const A=t.getMergedFeature(l.target);x=this._getAnnotationSnapPoint(A,p,l,t.zoom)}if(u)if(u.targetType===P.NODE)g=this._getNodeSnapPoint(p,ot(y,-1),this._isLinkedToCenter(u));else if(u.targetType===P.EDGE)g=this._getEdgeSnapPoint(u.target,u.magnet.t);else{const A=t.getMergedFeature(u.target);g=this._getAnnotationSnapPoint(A,f,u,t.zoom)}a[h.id]={properties:h.properties,geometry:{coordinates:[x,g]}},ct(a[h.id]),this.updatedItems.add(h.id)}),a}requestCommit(){clearTimeout(this.commitTimeout),this.commitTimeout=setTimeout(this.commit,hi)}_isLinkedToCenter(e){return e.magnet.type==="node"&&e.magnet.center}_getRigidFollowComment(e,t){const n=this.linksByArrowId.get(e);if(!n)return;const i=t.side===$?n.end:n.start;if(!i)return;const r=this.links.get(i);if(!r||r.targetType!==P.COMMENT)return;const o=this.annotationToLink.get(r.target);if(!o||o.size!==1)return;const a=this.store.getState().getFeature(r.target);if(!(!a||!I(a)))return a}_getAnnotationCenter(e){return nt(e)?fe(e):J(e)}_getAnnotationSnapPoint(e,t,n,i){if(nt(e)){const r=xe(e),o=n.magnet,a=r[0]+o.rx*(r[2]-r[0]),d=r[1]+o.ry*(r[3]-r[1]);return[a,d]}return this._getBoxSnapPoint(e,t,n,i)}_getBoxSnapPoint(e,t,n,i){var h;const r=J(e);let{width:o,height:a}=I(e)?gn(e):X(e);(_(e)&&((h=e.properties.style)==null?void 0:h.fixedSize)||I(e))&&(o/=i,a/=i);const c=n.magnet;let l=c.nx*o,u=c.ny*a;if(_(e)&&!G(e)){const{sin:x,cos:g}=this.store.getState(),f=l*g-u*x,p=l*x+u*g;l=f,u=p}return[r.x+l,r.y+u]}_getNodeSnapPoint(e,t,n){if(n)return[e.x,e.y];const i=Math.sqrt(t.x*t.x+t.y*t.y),r=ot(t,1/i),o=i<Number(e.radius)/2?{x:e.x,y:e.y}:ft({x:e.x,y:e.y},ot(r,-Number(e.radius)));return[o.x,o.y]}_getEdgeSnapPoint(e,t,n=!1){const i=this.ogma.getEdge(e);if(!i)return[0,0];const r=i.getAttribute("curvature"),a=i.getExtremities().getPosition(),d=a[0],c=a[1];if(r===0||r===void 0){const h=[d.x+t*(c.x-d.x),d.y+t*(c.y-d.y)];return n?{x:h[0],y:h[1]}:h}const l=U.geometry.getQuadraticCurveControlPoint(d.x,d.y,c.x,c.y,r),u=U.geometry.getPointOnQuadraticCurve(t,d.x,d.y,c.x,c.y,l.x,l.y);return n?{x:u.x,y:u.y}:[u.x,u.y]}destroy(){clearTimeout(this.commitTimeout),clearTimeout(this.nodePositionTimeout),this.ogma.events.off(this.onSetMultipleAttributes)}}function gi(s,e,t,n,i=20){let r=0,o=1/0,a=null;for(let d=0;d<=i;d++){const c=d/i,l=U.geometry.getPointOnQuadraticCurve(c,e.x,e.y,t.x,t.y,n.x,n.y),u=Q(Y(l,s));u<o&&(o=u,a=l,r=c)}return a?{t:r,point:a,distance:o}:null}function pi(s,e,t){const n=t.x-e.x,i=t.y-e.y,r=n*n+i*i;if(r===0)return{t:0,point:{x:e.x,y:e.y},distance:Q(Y(e,s))};const o=Math.max(0,Math.min(1,((s.x-e.x)*n+(s.y-e.y)*i)/r)),a={x:e.x+o*n,y:e.y+o*i};return{t:o,point:a,distance:Q(Y(a,s))}}function mi(s,e,t){let n=null,i=t;const r=e.getAttribute("curvature"),a=e.getExtremities().getPosition();for(let d=0;d<e.size;d++){const c=e.get(d),l=r[d],u=a[2*d],h=a[2*d+1];let x;if(l===0||l===void 0)x=pi(s,u,h);else{const g=U.geometry.getQuadraticCurveControlPoint(u.x,u.y,h.x,h.y,l);x=gi(s,u,h,g)}x&&x.distance<i&&(i=x.distance,n={point:x.point,id:c.getId(),magnet:{x:x.t,y:0},type:P.EDGE})}return n}function yi(s,e,t){const n=e.getAttributes(["x","y","radius"]);for(let i=0;i<n.length;i++){const r=n[i],o=Y({x:r.x,y:r.y},s),a=Q(o);if(a>=Number(r.radius)+Number(t))continue;const d=ot(o,1/a),c=a<Number(r.radius)/2,l=c?{x:r.x,y:r.y}:ft({x:r.x,y:r.y},ot(d,-Number(r.radius))),u=c?{x:0,y:0}:d;return{point:l,id:e.get(i).getId(),magnet:u,type:P.NODE}}return null}function Si(s,e){let t=!1;for(let n=0,i=e.length-1;n<e.length;i=n++){const r=e[n][0],o=e[n][1],a=e[i][0],d=e[i][1];o>s.y!=d>s.y&&s.x<(a-r)*(s.y-o)/(d-o)+r&&(t=!t)}return t}function Fi(s,e,t,n,i){const r=s*s,o=r*s,a=1-s,d=a*a,c=d*a;return{x:c*e.x+3*d*s*t.x+3*a*r*n.x+o*i.x,y:c*e.y+3*d*s*t.y+3*a*r*n.y+o*i.y}}function Ai(s,e,t,n,i){let r=1/0,o=null;const a=20;for(let d=0;d<=a;d++){const c=d/a,l=Fi(c,e,t,n,i),u=Q(Y(l,s));u<r&&(r=u,o=l)}return o?{point:o,distance:r}:null}function Ei(s,e,t){const n=e.geometry.coordinates[0];for(let i=0;i<n.length-1;i++){const[r,o]=n[i];if(Q(Y({x:r,y:o},s))<t)return{point:{x:r,y:o},magnet:{x:r,y:o},type:P.POLYGON,id:e.id}}for(let i=0;i<n.length-1;i++){const[r,o]=n[i],[a,d]=n[i+1],c={x:r,y:o},u=Y({x:a,y:d},c),h=Q(u),x={x:u.x/h,y:u.y/h},g={x:-x.y,y:x.x},f=Y(s,c),p=Math.abs(Et(g,f)),y=Et(x,f);if(y>=0&&y<=h&&p<t){const A={x:c.x+x.x*y,y:c.y+x.y*y};return{point:A,magnet:A,type:P.POLYGON,id:e.id}}}return null}function Ni(s,e,t){for(const i of e){const o=i.geometry.coordinates[0].slice(0,-1);if(o.length<3)return Ei(s,i,t);for(let l=0;l<o.length;l++){const[u,h]=o[l];if(Q(Y({x:u,y:h},s))<t)return{point:{x:u,y:h},magnet:{x:u,y:h},type:P.POLYGON,id:i.id}}const a=Si(s,o);let d=null,c=a?1/0:t;for(let l=0;l<o.length;l++){const u=o[(l-1+o.length)%o.length],h=o[l],x=o[(l+1)%o.length],g=o[(l+2)%o.length],f=h[0]+(x[0]-u[0])/6*.5,p=h[1]+(x[1]-u[1])/6*.5,y=x[0]-(g[0]-h[0])/6*.5,A=x[1]-(g[1]-h[1])/6*.5,E=Ai(s,{x:h[0],y:h[1]},{x:f,y:p},{x:y,y:A},{x:x[0],y:x[1]});if(E){const w=E.distance;if(a)w<c&&(c=w,d=E.point);else if(w<t)return{point:E.point,magnet:E.point,type:P.POLYGON,id:i.id}}}if(a&&d)return{point:d,magnet:d,type:P.POLYGON,id:i.id}}return null}const Mn=[{x:-.5,y:-.5},{x:0,y:-.5},{x:.5,y:-.5},{x:-.5,y:0},{x:.5,y:0},{x:-.5,y:.5},{x:0,y:.5},{x:.5,y:.5},{x:0,y:0}],Ci=[[-.5,-.5,.5,-.5],[.5,-.5,.5,.5],[.5,.5,-.5,.5],[-.5,.5,-.5,-.5]];function bn(s,e,t,n,i,r,o,a,d){const c=s*i,l=e*r;return d?{x:t+(c*o-l*a),y:n+(c*a+l*o)}:{x:t+c,y:n+l}}function wi(s,e,t,n,i){var l;const r=J(e);let{width:o,height:a}=X(e);const{sin:d,cos:c}=i.getState();(l=e.properties.style)!=null&&l.fixedSize&&(o/=t,a/=t);for(const u of Mn){let h=u.x*o,x=u.y*a;if(!G(e)){const p=h*c-x*d,y=h*d+x*c;h=p,x=y}const g={x:r.x+h,y:r.y+x};if(!(Q(Y(g,s))>=n))return{point:{x:g.x,y:g.y},type:P.TEXT,magnet:u,id:e.id}}return null}function Mi(s,e,t,n,i){var g;const{x:r,y:o}=J(e);let{width:a,height:d}=X(e);(g=e.properties.style)!=null&&g.fixedSize&&(a/=t,d/=t);const{sin:c,cos:l}=i.getState(),u=!G(e);let h=null,x=1/0;for(let f=0;f<4;f++){const[p,y,A,E]=Ci[f],w=bn(p,y,r,o,a,d,l,c,u),N=bn(A,E,r,o,a,d,l,c,u),F=Y(N,w),C=Q(F),M={x:F.x/C,y:F.y/C},B={x:-M.y,y:M.x},D=Y(s,w),v=Et(B,D),O=Et(M,D);if(O>=0&&O<=C){const R=Math.abs(v);if(R<n||R<x){const W=O/C,b={point:{x:w.x+M.x*O,y:w.y+M.y*O},magnet:{x:p+(A-p)*W,y:y+(E-y)*W},type:P.TEXT,id:e.id};if(R<n)return b;R<x&&(x=R,h=b)}}}return h&&x<Math.max(a,d)?h:null}function bi(s,e,t,n,i){for(const r of e){const o=wi(s,r,t,n,i)||Mi(s,r,t,n,i);if(o)return o}return null}class Di extends EventTarget{constructor(t,n,i,r){super();m(this,"ogma");m(this,"options");m(this,"spatialIndex");m(this,"hoveredNode",null);m(this,"store");this.ogma=t,this.options=n,this.spatialIndex=i,this.store=r}snap(t){const n=this.findMagnet(t);return n||null}findMagnet(t){const n=this.options.detectMargin,i={minX:t.x-n,minY:t.y-n,maxX:t.x+n,maxY:t.y+n},r=this.spatialIndex.search(i),o=r.filter(g=>_(g)||G(g)),a=r.filter(g=>nt(g)),{nodes:d,edges:c}=this.ogma.view.getElementsInside(i.minX,i.minY,i.maxX,i.maxY),l=this.snapToNodes(t,d);if(l)return l;const u=this.snapToEdges(t,c);if(u)return u;const h=this.snapToText(t,o);if(h)return h;const x=this.snapToPolygon(t,a);return x||null}snapToText(t,n){const{zoom:i}=this.store.getState();return bi(t,n,i,this.options.magnetRadius,this.store)}snapToPolygon(t,n){return Ni(t,n,this.options.magnetRadius)}snapToNodes(t,n){return yi(t,n,this.options.detectMargin)}snapToEdges(t,n){return mi(t,n,this.options.magnetRadius)}getHoveredNode(){return this.hoveredNode}clearHoveredNode(){var t;(t=this.hoveredNode)==null||t.setSelected(!1),this.hoveredNode=null}getMagnets(){return Mn}}class vi extends EventTarget{constructor(t,n,i){super();m(this,"query",{minX:1/0,minY:1/0,maxX:1/0,maxY:1/0});m(this,"suppressClickUntil",0);m(this,"mouseDownState",null);m(this,"DRAG_THRESHOLD",3);m(this,"onMouseMove",t=>{const n=Tt(t,this.ogma.getContainer()),i=this.store.getState();if(this.mouseDownState&&!i.isDragging){const l=t.clientX-this.mouseDownState.screenX,u=t.clientY-this.mouseDownState.screenY;Math.sqrt(l*l+u*u)>this.DRAG_THRESHOLD&&(this.mouseDownState.hasMoved=!0)}if(i.isDragging)return;const{x:r,y:o}=this.ogma.view.screenToGraphCoordinates(n),a=this.detect(r,o),d=(a==null?void 0:a.id)??null,c=i.hoveredFeature;d!==c&&i.setHoveredFeature(d),this.setCursor(d===null?z.default:z.pointer)});m(this,"onMouseClick",()=>{Date.now()<this.suppressClickUntil});m(this,"onMouseDown",t=>{if(Date.now()<this.suppressClickUntil)return;if(Vt(t.target)){this.mouseDownState=null;return}const n=Tt(t,this.ogma.getContainer()),{x:i,y:r}=this.ogma.view.screenToGraphCoordinates(n),o=this.detect(i,r);this.mouseDownState={annotation:o,screenX:t.clientX,screenY:t.clientY,hasMoved:!1};const a=this.store.getState();this.store.setState({mousePressed:!0,mousePressPoint:{x:i,y:r}}),o&&!a.selectedFeatures.has(o.id)&&(t.ctrlKey||t.metaKey?a.toggleSelection(o.id):a.setSelectedFeatures([o.id]))});m(this,"onMouseUp",t=>{const n=this.store.getState();if(this.store.setState({mousePressed:!1,mousePressPoint:null}),Vt(t.target)){this.mouseDownState=null;return}if(this.mouseDownState&&!this.mouseDownState.hasMoved&&!n.isDragging){const i=this.mouseDownState.annotation;i?t.ctrlKey||t.metaKey?n.toggleSelection(i.id):n.selectedFeatures.has(i.id)||n.setSelectedFeatures([i.id]):!t.ctrlKey&&!t.metaKey&&n.clearSelection(),this.dispatchEvent(new CustomEvent(Wt,{detail:{id:(i==null?void 0:i.id)??null,position:{x:t.clientX,y:t.clientY}}}))}this.mouseDownState=null});m(this,"onWheel",t=>{var u;if(t.target instanceof HTMLTextAreaElement)return;const n=Tt(t,this.ogma.getContainer()),{x:i,y:r}=this.ogma.view.screenToGraphCoordinates(n),o=this.detect(i,r);if(!o||!I(o))return;const a=(u=o.properties.style)==null?void 0:u.maxHeight,d=o.properties.height;if(!a||d<=a)return;const c=this.ogma.getContainer(),l=c==null?void 0:c.querySelector(`[data-annotation="${o.id}"] .comment-box foreignObject div`);l&&(t.stopPropagation(),t.preventDefault(),l.scrollTop+=t.deltaY)});this.ogma=t,this.store=n,this.index=i;const r=this.ogma.getContainer();r&&(r.addEventListener("mousemove",this.onMouseMove,{passive:!0,capture:!0}),r.addEventListener("click",this.onMouseClick,{passive:!0,capture:!0}),r.addEventListener("mousedown",this.onMouseDown,{passive:!0,capture:!1}),r.addEventListener("mouseup",this.onMouseUp,{passive:!0,capture:!0}),r.addEventListener("wheel",this.onWheel,{passive:!1,capture:!0}))}detect(t,n,i){let r=null;const o=this.store.getState(),a=i??o.options.detectMargin;this.query.minX=t-a,this.query.minY=n-a,this.query.maxX=t+a,this.query.maxY=n+a;const d=this.index.query(this.query);if(d.length===0)return null;for(const c of d){const l=o.getFeature(c.id);if(tt(l)){if(Ae(l,{x:t,y:n},a)){r=l;break}}else if(G(l)){if(xn(l,{x:t,y:n},0,1,a)){r=l;break}}else if(nt(l)){if(Me(l,{x:t,y:n},a)){r=l;break}}else if(I(l)){if(fn(l,{x:t,y:n},a,o.sin,o.cos,o.zoom)){r=l;break}}else if(_(l)&&Ce(l,{x:t,y:n},a,o.revSin,o.revCos,o.zoom)){r=l;break}}return r}setCursor(t){var i;const n=(i=this.ogma.getContainer())==null?void 0:i.firstChild;n&&(n.style.cursor=t)}setMode(t){var n;t==="default"?this.setCursor(((n=this.ogma.getOptions().cursor)==null?void 0:n.default)||"default"):t==="add"||t==="link"?this.setCursor(z.crosshair):t==="rotate"&&this.setCursor(z.alias)}suppressClicksTemporarily(t=100){this.suppressClickUntil=Date.now()+t}destroy(){const t=this.ogma.getContainer();t&&(t.removeEventListener("mousemove",this.onMouseMove),t.removeEventListener("click",this.onMouseClick))}}function Dn(s,e,t=0,n=s.length-1,i=Bi){for(;n>t;){if(n-t>600){const d=n-t+1,c=e-t+1,l=Math.log(d),u=.5*Math.exp(2*l/3),h=.5*Math.sqrt(l*u*(d-u)/d)*(c-d/2<0?-1:1),x=Math.max(t,Math.floor(e-c*u/d+h)),g=Math.min(n,Math.floor(e+(d-c)*u/d+h));Dn(s,e,x,g,i)}const r=s[e];let o=t,a=n;for(Pt(s,t,e),i(s[n],r)>0&&Pt(s,t,n);o<a;){for(Pt(s,o,a),o++,a--;i(s[o],r)<0;)o++;for(;i(s[a],r)>0;)a--}i(s[t],r)===0?Pt(s,t,a):(a++,Pt(s,a,n)),a<=e&&(t=a+1),e<=a&&(n=a-1)}}function Pt(s,e,t){const n=s[e];s[e]=s[t],s[t]=n}function Bi(s,e){return s<e?-1:s>e?1:0}class ki{constructor(e=9){this._maxEntries=Math.max(4,e),this._minEntries=Math.max(2,Math.ceil(this._maxEntries*.4)),this.clear()}all(){return this._all(this.data,[])}search(e){let t=this.data;const n=[];if(!Qt(e,t))return n;const i=this.toBBox,r=[];for(;t;){for(let o=0;o<t.children.length;o++){const a=t.children[o],d=t.leaf?i(a):a;Qt(e,d)&&(t.leaf?n.push(a):Pe(e,d)?this._all(a,n):r.push(a))}t=r.pop()}return n}collides(e){let t=this.data;if(!Qt(e,t))return!1;const n=[];for(;t;){for(let i=0;i<t.children.length;i++){const r=t.children[i],o=t.leaf?this.toBBox(r):r;if(Qt(e,o)){if(t.leaf||Pe(e,o))return!0;n.push(r)}}t=n.pop()}return!1}load(e){if(!(e&&e.length))return this;if(e.length<this._minEntries){for(let n=0;n<e.length;n++)this.insert(e[n]);return this}let t=this._build(e.slice(),0,e.length-1,0);if(!this.data.children.length)this.data=t;else if(this.data.height===t.height)this._splitRoot(this.data,t);else{if(this.data.height<t.height){const n=this.data;this.data=t,t=n}this._insert(t,this.data.height-t.height-1,!0)}return this}insert(e){return e&&this._insert(e,this.data.height-1),this}clear(){return this.data=wt([]),this}remove(e,t){if(!e)return this;let n=this.data;const i=this.toBBox(e),r=[],o=[];let a,d,c;for(;n||r.length;){if(n||(n=r.pop(),d=r[r.length-1],a=o.pop(),c=!0),n.leaf){const l=Li(e,n.children,t);if(l!==-1)return n.children.splice(l,1),r.push(n),this._condense(r),this}!c&&!n.leaf&&Pe(n,i)?(r.push(n),o.push(a),a=0,d=n,n=n.children[0]):d?(a++,n=d.children[a],c=!1):n=null}return this}toBBox(e){return e}compareMinX(e,t){return e.minX-t.minX}compareMinY(e,t){return e.minY-t.minY}toJSON(){return this.data}fromJSON(e){return this.data=e,this}_all(e,t){const n=[];for(;e;)e.leaf?t.push(...e.children):n.push(...e.children),e=n.pop();return t}_build(e,t,n,i){const r=n-t+1;let o=this._maxEntries,a;if(r<=o)return a=wt(e.slice(t,n+1)),Ct(a,this.toBBox),a;i||(i=Math.ceil(Math.log(r)/Math.log(o)),o=Math.ceil(r/Math.pow(o,i-1))),a=wt([]),a.leaf=!1,a.height=i;const d=Math.ceil(r/o),c=d*Math.ceil(Math.sqrt(o));vn(e,t,n,c,this.compareMinX);for(let l=t;l<=n;l+=c){const u=Math.min(l+c-1,n);vn(e,l,u,d,this.compareMinY);for(let h=l;h<=u;h+=d){const x=Math.min(h+d-1,u);a.children.push(this._build(e,h,x,i-1))}}return Ct(a,this.toBBox),a}_chooseSubtree(e,t,n,i){for(;i.push(t),!(t.leaf||i.length-1===n);){let r=1/0,o=1/0,a;for(let d=0;d<t.children.length;d++){const c=t.children[d],l=Oe(c),u=Pi(e,c)-l;u<o?(o=u,r=l<r?l:r,a=c):u===o&&l<r&&(r=l,a=c)}t=a||t.children[0]}return t}_insert(e,t,n){const i=n?e:this.toBBox(e),r=[],o=this._chooseSubtree(i,this.data,t,r);for(o.children.push(e),It(o,i);t>=0&&r[t].children.length>this._maxEntries;)this._split(r,t),t--;this._adjustParentBBoxes(i,r,t)}_split(e,t){const n=e[t],i=n.children.length,r=this._minEntries;this._chooseSplitAxis(n,r,i);const o=this._chooseSplitIndex(n,r,i),a=wt(n.children.splice(o,n.children.length-o));a.height=n.height,a.leaf=n.leaf,Ct(n,this.toBBox),Ct(a,this.toBBox),t?e[t-1].children.push(a):this._splitRoot(n,a)}_splitRoot(e,t){this.data=wt([e,t]),this.data.height=e.height+1,this.data.leaf=!1,Ct(this.data,this.toBBox)}_chooseSplitIndex(e,t,n){let i,r=1/0,o=1/0;for(let a=t;a<=n-t;a++){const d=Rt(e,0,a,this.toBBox),c=Rt(e,a,n,this.toBBox),l=Ri(d,c),u=Oe(d)+Oe(c);l<r?(r=l,i=a,o=u<o?u:o):l===r&&u<o&&(o=u,i=a)}return i||n-t}_chooseSplitAxis(e,t,n){const i=e.leaf?this.compareMinX:Ti,r=e.leaf?this.compareMinY:Oi,o=this._allDistMargin(e,t,n,i),a=this._allDistMargin(e,t,n,r);o<a&&e.children.sort(i)}_allDistMargin(e,t,n,i){e.children.sort(i);const r=this.toBBox,o=Rt(e,0,t,r),a=Rt(e,n-t,n,r);let d=Jt(o)+Jt(a);for(let c=t;c<n-t;c++){const l=e.children[c];It(o,e.leaf?r(l):l),d+=Jt(o)}for(let c=n-t-1;c>=t;c--){const l=e.children[c];It(a,e.leaf?r(l):l),d+=Jt(a)}return d}_adjustParentBBoxes(e,t,n){for(let i=n;i>=0;i--)It(t[i],e)}_condense(e){for(let t=e.length-1,n;t>=0;t--)e[t].children.length===0?t>0?(n=e[t-1].children,n.splice(n.indexOf(e[t]),1)):this.clear():Ct(e[t],this.toBBox)}}function Li(s,e,t){if(!t)return e.indexOf(s);for(let n=0;n<e.length;n++)if(t(s,e[n]))return n;return-1}function Ct(s,e){Rt(s,0,s.children.length,e,s)}function Rt(s,e,t,n,i){i||(i=wt(null)),i.minX=1/0,i.minY=1/0,i.maxX=-1/0,i.maxY=-1/0;for(let r=e;r<t;r++){const o=s.children[r];It(i,s.leaf?n(o):o)}return i}function It(s,e){return s.minX=Math.min(s.minX,e.minX),s.minY=Math.min(s.minY,e.minY),s.maxX=Math.max(s.maxX,e.maxX),s.maxY=Math.max(s.maxY,e.maxY),s}function Ti(s,e){return s.minX-e.minX}function Oi(s,e){return s.minY-e.minY}function Oe(s){return(s.maxX-s.minX)*(s.maxY-s.minY)}function Jt(s){return s.maxX-s.minX+(s.maxY-s.minY)}function Pi(s,e){return(Math.max(e.maxX,s.maxX)-Math.min(e.minX,s.minX))*(Math.max(e.maxY,s.maxY)-Math.min(e.minY,s.minY))}function Ri(s,e){const t=Math.max(s.minX,e.minX),n=Math.max(s.minY,e.minY),i=Math.min(s.maxX,e.maxX),r=Math.min(s.maxY,e.maxY);return Math.max(0,i-t)*Math.max(0,r-n)}function Pe(s,e){return s.minX<=e.minX&&s.minY<=e.minY&&e.maxX<=s.maxX&&e.maxY<=s.maxY}function Qt(s,e){return e.minX<=s.maxX&&e.minY<=s.maxY&&e.maxX>=s.minX&&e.maxY>=s.minY}function wt(s){return{children:s,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function vn(s,e,t,n,i){const r=[e,t];for(;r.length;){if(t=r.pop(),e=r.pop(),t-e<=n)continue;const o=e+Math.ceil((t-e)/n/2)*n;Dn(s,o,e,t,i),r.push(e,o,o,t)}}const Ht={minX:0,minY:0,maxX:0,maxY:0},Bn=(s,e)=>s.id===e.id;class Ii extends ki{constructor(t){super();m(this,"store");m(this,"onRotationChange",()=>{const t=this.store.getState().getAllFeatures().filter(n=>_(n)||I(n));for(const n of t)this.updateRotatedText(n)});m(this,"onZoomChange",()=>{const t=this.store.getState().getAllFeatures().filter(n=>{var i;return(_(n)||I(n))&&((i=n.properties.style)==null?void 0:i.fixedSize)});for(const n of t)this.updateRotatedText(n)});this.store=t,this.store.subscribe(n=>n.features,n=>{this.clear(),Object.values(n).forEach(i=>{_(i)||I(i)?this.updateRotatedText(i):this.insert(i)})}),this.store.subscribe(n=>({features:n.features,isDragging:n.isDragging,lastChangedFeatures:n.lastChangedFeatures,rotation:n.rotation}),(n,i)=>{i&&i.isDragging&&!n.isDragging&&n.lastChangedFeatures.length>0&&n.lastChangedFeatures.forEach(r=>{const o=n.features[r];o&&(ct(o),_(o)||I(o)?this.updateRotatedText(o):(this.remove(o,Bn),this.insert(o)))})},{equalityFn:(n,i)=>n.isDragging===i.isDragging}),this.store.subscribe(n=>n.rotation,this.onRotationChange),this.store.subscribe(n=>n.zoom,this.onZoomChange)}updateRotatedText(t){var u;const n=this.store.getState();this.remove(t,Bn);const i=J(t);let{width:r,height:o}=X(t);if(((u=t.properties.style)==null?void 0:u.fixedSize)===!0){const h=n.invZoom;r*=h,o*=h}const d=r/2,c=o/2,l=n.getRotatedBBox(i.x-d,i.y-c,i.x+d,i.y+c);this.insert({...t,geometry:{...t.geometry,bbox:l.slice()}})}compareMinX(t,n){return et(t)[0]-et(n)[0]}compareMinY(t,n){return et(t)[1]-et(n)[1]}toBBox(t){const n=et(t);return Ht.minX=n[0],Ht.minY=n[1],Ht.maxX=n[2],Ht.maxY=n[3],Ht}query(t){return super.search(t)}}class kn{constructor(e,t){m(this,"layer");this.ogma=e,this.store=t}destroy(){}}const Ln=[[-.5,-.5],[.5,-.5],[.5,.5],[-.5,.5]];class Hi extends kn{constructor(t,n){super(t,n);m(this,"handleFill","#fff");m(this,"handleStroke","#1A70E5");m(this,"handleStrokeWidth",1.5);m(this,"handleRadius",3);m(this,"handleMagnifier",1.5);m(this,"refresh",()=>{this.layer.refresh()});m(this,"render",t=>{const n=this.store.getState(),i=1/n.zoom,{hoveredHandle:r,rotation:o,liveUpdates:a,features:d}=n,c=this.handleRadius*i;t.fillStyle=this.handleFill,t.lineWidth=this.handleStrokeWidth*i,t.strokeStyle=this.handleStroke,Object.values(d).forEach(l=>{if(!n.isSelected(l.id))return;const u=a[l.id]?{...l,...a[l.id]}:l;if(tt(u))this.renderArrowHandles(u,t,c,r);else if(G(u)||_(u)){const h=_(u)?o:0;this.renderOutline(u,t,h,r,n.zoom),this.renderBoxHandles(u,t,c,r,h)}else nt(u)&&this.renderPolygonHandles(u,t,c,r,n.drawingFeature===u.id)})});this.layer=t.layers.addCanvasLayer(this.render,void 0,Yt.HANDLES),this.store.subscribe(i=>({selectedFeatures:i.selectedFeatures,liveUpdates:i.liveUpdates}),this.refresh),t.events.on("zoom",this.refresh)}renderOutline(t,n,i,r,o){var p,y;const a=_(t)&&((p=t.properties.style)==null?void 0:p.fixedSize);let{width:d,height:c}=X(t);a&&(d/=o,c/=o);const l=xt(t,a,o),u=d/2,h=c/2,x=l.x+u,g=l.y+h;n.save(),n.translate(x,g),n.rotate(i);const f=(y=t.properties.style)==null?void 0:y.borderRadius;if(f&&f>0?(Vs(n,-u,-h,d,c,f),n.stroke()):n.strokeRect(-u,-h,d,c),r>=4&&r<8){let A,E,w,N;const F=f&&f>0?f:this.handleRadius/o;switch(r){case 4:A=-u+F,E=-h,w=u-F,N=-h;break;case 5:A=u,E=-h+F,w=u,N=h-F;break;case 6:A=u-F,E=h,w=-u+F,N=h;break;case 7:A=-u,E=h-F,w=-u,N=-h+F;break}n.lineWidth=this.handleStrokeWidth*this.handleMagnifier/o,n.beginPath(),n.moveTo(A,E),n.lineTo(w,N),n.stroke(),n.lineWidth=this.handleStrokeWidth}n.restore()}renderArrowHandles(t,n,i,r){var h,x,g,f;const o=pe(t),a=me(t),d=+(r===0),c=+(r===1),l=i*(1+(this.handleMagnifier-1)*d),u=i*(1+(this.handleMagnifier-1)*c);n.beginPath(),n.moveTo(o.x,o.y),n.lineTo(a.x,a.y),n.closePath(),n.stroke(),n.beginPath(),((x=(h=t.properties.link)==null?void 0:h.start)==null?void 0:x.type)!=="comment"&&(n.moveTo(o.x-l,o.y-l),n.rect(o.x-l,o.y-l,l*2,l*2)),((f=(g=t.properties.link)==null?void 0:g.end)==null?void 0:f.type)!=="comment"&&(n.moveTo(a.x-u,a.y-u),n.rect(a.x-u,a.y-u,u*2,u*2)),n.closePath(),n.fill(),n.stroke()}renderBoxHandles(t,n,i,r,o){var g;if(_(t)&&((g=t.properties.style)!=null&&g.fixedSize))return;const{width:a,height:d}=X(t),c=xt(t),l=a/2,u=d/2,h=c.x+l,x=c.y+u;n.save(),n.translate(h,x),n.rotate(o),n.beginPath();for(let f=0;f<Ln.length;f++){const[p,y]=Ln[f],A=a*p,E=d*y,w=r===f?i*this.handleMagnifier:i;n.rect(A-w,E-w,w*2,w*2)}n.closePath(),n.fill(),n.stroke(),n.restore()}renderPolygonHandles(t,n,i,r,o){const a=t.geometry.coordinates[0];if(!o){a.length>2&&(n.save(),n.strokeStyle=this.handleStroke,n.lineWidth=this.handleStrokeWidth/this.store.getState().zoom,this.drawSmoothPolygon(n,a,.5),n.stroke(),n.restore()),n.beginPath();for(let d=0;d<a.length-1;d++){const[c,l]=a[d],u=r===d?i*this.handleMagnifier:i;n.moveTo(c+u,l),n.arc(c,l,u,0,2*Math.PI)}n.closePath(),n.fill(),n.stroke()}}drawSmoothPolygon(t,n,i){const r=n.slice(0,-1);if(r.length<3)return;t.beginPath();const o=r.length;for(let a=0;a<o;a++){const d=r[(a-1+o)%o],c=r[a],l=r[(a+1)%o],u=r[(a+2)%o],h=c[0]+(l[0]-d[0])/6*i,x=c[1]+(l[1]-d[1])/6*i,g=l[0]-(u[0]-c[0])/6*i,f=l[1]-(u[1]-c[1])/6*i;a===0&&t.moveTo(c[0],c[1]),t.bezierCurveTo(h,x,g,f,l[0],l[1])}t.closePath()}renderCenterPoint(t,n){var r;const i=this.store.getState();if(_(t)){const o=xt(t,(r=t.properties.style)==null?void 0:r.fixedSize,i.zoom),a=X(t);n.moveTo(o.x+a.width/2+5,o.y+a.height/2),n.arc(o.x+a.width/2,o.y+a.height/2,5,0,Math.PI*2,!0)}}destroy(){this.layer.destroy(),super.destroy()}}const _i=.5;function zi(s,e,t,n){const{start:i,end:r}=Ut(s),o=Y(r,i);return Math.min(n,Math.max(2*e,Q(o)*.01,t))}function Tn(s,e){return!s||s==="none"?0:s==="dot"?e*2:s==="halo-dot"?e*4:s==="arrow"||s==="arrow-plain"?e:0}function Wi(s,e){if(!s){s=T("g");const t=T("path");s.classList.add("annotation-arrow"),s.setAttribute("data-annotation",`${e}`),s.setAttribute("data-annotation-type","arrow"),s.appendChild(t);const n=T("g");n.classList.add("annotation-arrow-endpoints"),s.appendChild(n)}return s}function $i(s,e,t,n,i,r){const{start:o,end:a}=Ut(e),d=e.properties.style||gt,{tail:c,strokeWidth:l=0,head:u,strokeColor:h,strokeType:x}=d,g=Y(a,o),f=Fn(e)?1/r.zoom:1,p=zi(e,l,t,n)*f,y=Wi(i,e.id),A=y.firstChild,E=h||"none";A.setAttribute("stroke",E),A.setAttribute("stroke-width",`${f*l}`),A.setAttribute("fill","none"),A.setAttribute("stroke-linecap","round"),A.setAttribute("stroke-linejoin","round");const w=Tn(c,l*f),N=Tn(u,l*f),F=jt(g),C=ft(o,ot(F,w)),M=ft(a,ot(F,-N)),B=`M ${C.x} ${C.y} L ${M.x} ${M.y}`;A.setAttribute("d",B);const D=y.children[1];return D.innerHTML="",x==="dashed"?A.setAttribute("stroke-dasharray","5,10"):A.removeAttribute("stroke-dasharray"),On(D,o,g,E,c,l,f,p),On(D,a,ks(g),E,u,l,f,p),y.setAttribute("transform",`rotate(${-r.rotation*(180/Math.PI)})`),s.appendChild(y),y}function On(s,e,t,n,i,r,o,a){i==="halo-dot"&&Pn(s,e,Yi(n),_i,r*o*4),(i==="dot"||i==="halo-dot")&&Pn(s,e,n,1,r*o*2),(i==="arrow"||i==="arrow-plain")&&Xi(s,e,t,n,i==="arrow-plain",r*o,a)}function Yi(s){return s==="none"?"none":s}function Pn(s,e,t,n,i){const r=T("circle");r.setAttribute("cx",`${e.x}`),r.setAttribute("cy",`${e.y}`),r.setAttribute("r",`${i}`),r.setAttribute("fill-opacity",`${n}`),r.setAttribute("fill",t),s.appendChild(r)}function Xi(s,e,t,n,i,r,o){const a=ot(jt(t),o),d=ft(e,hn(a,Math.PI/6)),c=ft(e,hn(a,-Math.PI/6)),l=T("path"),u=`${e.x} ${e.y}`,h=`M ${d.x} ${d.y} L ${u} L ${c.x} ${c.y}${i?" Z":""}`;l.setAttribute("d",h),l.setAttribute("stroke",n),l.setAttribute("stroke-width",`${r}`),l.setAttribute("fill",i?n:"none"),l.setAttribute("stroke-linecap","round"),l.setAttribute("stroke-linejoin","round"),s.appendChild(l)}function Ui(s,e,t="box"){if(!s){s=T("g"),s.setAttribute("data-annotation",`${e}`),s.setAttribute("data-annotation-type",t),s.classList.add(`annotation-${t}`);const n=T("rect");s.appendChild(n)}return s}function Rn(s,e,t,n){const i=e.id,r=`class${i}`,o=X(e),a=Ui(t,i,e.properties.type),{strokeColor:d,strokeWidth:c,strokeType:l,background:u,borderRadius:h,boxShadow:x}=e.properties.style||Nt;a.classList.add("annotation-box"),a.setAttribute("fill",`${u||"transparent"}`);const g=a.firstChild;h&&(g.setAttribute("rx",`${h}`),g.setAttribute("ry",`${h}`)),l&&l!=="none"&&(g.setAttribute("stroke",d||"black"),g.setAttribute("stroke-width",`${c}`),l==="dashed"&&g.setAttribute("stroke-dasharray","5,5")),u&&u.length&&(n.hoveredFeature===e.id?g.setAttribute("fill",At(u)):g.setAttribute("fill",u));const f=xt(e);return g.setAttribute("width",`${o.width}`),g.setAttribute("height",`${o.height}`),g.setAttribute("x",`${f.x}`),g.setAttribute("y",`${f.y}`),a.appendChild(g),x?a.style.filter=`drop-shadow(${x})`:a.style.filter="",a.setAttribute("transform",n.getRotationTransform(0,0)),a.classList.add(r),a.setAttribute("data-annotation",`${e.id}`),a.setAttribute("data-annotation-type",e.properties.type),s.appendChild(a),a}function Gi(){const s=T("style");return s.textContent=`
14
12
  /* Comment Animation Styles */
15
13
  .comment-icon {
16
14
  transition:
@@ -87,5 +85,7 @@
87
85
  .comment-edit-button:hover {
88
86
  opacity: 1;
89
87
  }
90
- `,i}function $i(i,e,t){const n={...K,...e.properties.style},s=n.iconSize,{iconColor:r=K.iconColor,iconSymbol:o=K.iconSymbol,iconBorderColor:a=K.iconBorderColor,iconBorderWidth:c=K.iconBorderWidth}=n;let h=i.querySelector("rect");h||(h=k("rect"),h.setAttribute("x",`${-s/2}`),h.setAttribute("y",`${-s/2}`),h.setAttribute("rx",`${n.borderRadius}`),h.setAttribute("ry",`${n.borderRadius}`),i.appendChild(h)),h.setAttribute("width",`${s}`),h.setAttribute("height",`${s}`),t.hoveredFeature===e.id?h.setAttribute("fill",bt(r)):h.setAttribute("fill",r),c&&c>0?(h.setAttribute("stroke",a||"#CCC"),h.setAttribute("stroke-width",`${c}`)):(h.removeAttribute("stroke"),h.removeAttribute("stroke-width"));let l=i.querySelector("text");l||(l=k("text"),l.setAttribute("x","0"),l.setAttribute("y","0"),l.setAttribute("text-anchor","middle"),l.setAttribute("dominant-baseline","central"),l.setAttribute("pointer-events","none"),i.appendChild(l)),l.setAttribute("font-size",`${s*.5}`),l.textContent=o}function Ni(i,e,t,n=0,s=!1){const r={...K,...e.properties.style},{font:o="Arial, sans-serif",fontSize:a=12,padding:c=8,background:h="#FFFACD",color:l="#333",borderRadius:d=4,strokeColor:u="#DDD",strokeWidth:g=1,maxHeight:f}=r,p=e.properties.width,m=e.properties.content||"",x=typeof a=="number"?a:parseFloat(a),v=zi(m,o,x,p,c),b=t.selectedFeatures.has(e.id)&&r.expandOnSelect===!0?p:v+n,A=e.properties.height,T=Mn(m,o,x,p,c),C=x*Pt+c*2,M=T?Math.min(A,C):A,F=f?Math.min(M,f):M,j=!T&&f?A>f:!1,R=F+(s?28:0);i.innerHTML="";const at=-b/2,lt=-R/2,G=k("rect");G.setAttribute("x",`${at}`),G.setAttribute("y",`${lt}`),G.setAttribute("width",`${b}`),G.setAttribute("height",`${R}`),G.setAttribute("rx",`${d}`),G.setAttribute("ry",`${d}`),G.setAttribute("fill",t.hoveredFeature===e.id?bt(h):h),g&&g>0&&(G.setAttribute("stroke",u||"#DDD"),G.setAttribute("stroke-width",`${g}`)),i.appendChild(G);const Z=k("foreignObject");Z.setAttribute("x",`${at}`),Z.setAttribute("y",`${lt}`),Z.setAttribute("width",`${b}`),Z.setAttribute("height",`${R}`),Z.style.pointerEvents="none";const B=document.createElement("div");B.style.width="100%",B.style.height="100%",B.style.padding=`${c}px`,B.style.boxSizing="border-box",B.style.fontFamily=o,B.style.fontSize=`${a}px`,B.style.lineHeight=`${(typeof a=="number"?a:parseFloat(a))*Pt}px`,B.style.color=l,B.style.overflowY=j?"auto":"hidden",B.style.overflowX="hidden",B.style.overflowWrap="break-word",B.style.whiteSpace="pre-wrap",B.style.pointerEvents="none",B.style.display="flex",B.style.flexDirection="column",B.style.position="relative";const _=document.createElement("div");if(_.style.flex="1",_.style.minHeight="0",_.style.overflowY=j?"auto":"hidden",_.innerHTML=Oi(m),B.appendChild(_),s){const z=document.createElement("div");z.classList.add("ogma-send-button"),z.style.pointerEvents="auto";const Oe=document.createElement("span");Oe.classList.add("ogma-send-button-icon"),Oe.innerHTML=t.options.editButtonIcon,z.appendChild(Oe),B.appendChild(z)}Z.appendChild(B),i.appendChild(Z),r.shadow!==!1?i.setAttribute("filter","url(#softShadow)"):i.removeAttribute("filter")}function Oi(i){if(!i)return"";let e=i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");return e=e.replace(/(https?:\/\/[^\s<]+)/g,'<a href="$1" target="_blank" style="color: #38e; text-decoration: none;">$1</a>'),e}function Yi(i,e,t,n,s){const r=e.properties.mode;let o=t;o||(o=k("g"),o.setAttribute("data-annotation",`${e.id}`),o.setAttribute("data-annotation-type","comment"));let a=o.querySelector(".comment-icon");a||(a=k("g"),a.classList.add("comment-icon"),o.appendChild(a));let c=o.querySelector(".comment-box");c||(c=k("g"),c.classList.add("comment-box"),o.appendChild(c));const h=r!==ot&&n.selectedFeatures.has(e.id)&&n.editingFeature!==e.id&&n.options.showEditButton;let l=0;if(h){const u={...K,...e.properties.style},g=e.properties.content||"",f=typeof u.fontSize=="number"?u.fontSize:parseFloat((u.fontSize||"12").toString());Mn(g,u.font||"Arial, sans-serif",f,e.properties.width,u.padding||8)&&(l=32)}$i(a,e,n),Ni(c,e,n,l,h),s?o.classList.remove("comment-no-transition"):o.classList.add("comment-no-transition"),r===ot?(o.classList.add("comment-collapsed"),o.classList.remove("comment-expanded")):(o.classList.add("comment-expanded"),o.classList.remove("comment-collapsed"));const d=J(e);return o.setAttribute("transform",n.getScreenAlignedTransform(d.x,d.y,!1)),o.style.visibility=n.editingFeature===e.id?"hidden":"",(!o.parentNode||o.parentNode!==i)&&i.appendChild(o),o}function Xi(i,e=.5,t=!1){if(i.length<2)return"";if(i.length<3)return i.map((o,a)=>`${a===0?"M":"L"}${o[0]},${o[1]}`).join(" ")+" Z";const n=i,s=n.length-1,r=[];for(let o=0;o<s;o++){const a=n[(o-1+s)%s],c=n[o],h=n[(o+1)%s],l=n[(o+2)%s],d=c[0]+(h[0]-a[0])/6*e,u=c[1]+(h[1]-a[1])/6*e,g=h[0]-(l[0]-c[0])/6*e,f=h[1]-(l[1]-c[1])/6*e;o===0&&r.push(`M${c[0]},${c[1]}`),t&&o===s-1?r.push(`L${h[0]},${h[1]}`):r.push(`C${d},${u} ${g},${f} ${h[0]},${h[1]}`)}return r.push("Z"),r.join(" ")}const Ui=(i,e,t="box")=>(i||(i=k("g"),i.setAttribute("data-annotation",`${e}`),i.classList.add(`annotation-${t}`)),i);function qi(i,e,t,n){const s=Ui(t,e.id.toString(),e.properties.type);s.setAttribute("data-annotation",String(e.id));let r=s.querySelector("path");r||(r=k("path"),s.appendChild(r));const{strokeColor:o=ht.strokeColor,strokeWidth:a=ht.strokeWidth,background:c=ht.background,strokeType:h=ht.strokeType}=e.properties.style||ht;o&&r.setAttribute("stroke",o),a!==void 0&&r.setAttribute("stroke-width",String(a)),c&&(n.hoveredFeature===e.id?r.setAttribute("fill",bt(c)):r.setAttribute("fill",c)),h==="dashed"?r.setAttribute("stroke-dasharray","5,5"):r.removeAttribute("stroke-dasharray");const l=e.geometry.coordinates[0],d=Xi(l,.5,n.drawingFeature===e.id);return r.setAttribute("d",d),s.setAttribute("transform",n.getRotationTransform(0,0)),i.appendChild(s),s}const Wi=/^((?:[a-z\d-]+\s+)*)([\d.]+(%|em|px)|(?:x+-)?large|(?:x+-)?small|medium)(?:\s*\/\s*(normal|[\d.]+(%|px|em)?))?(\s.+)?$/,ji=/\bsmall-caps\b/,Gi=/\b(?:italic|oblique)\b/,Vi=/\bbold(?:er)?\b/,Pn=16,Dn=13.3333333,Zi=.01*Pn,Ki={"xx-small":9,"x-small":10,smaller:13.3333,small:13,medium:16,large:18,larger:19.2,"x-large":24,"xx-large":32},Le=new Map;function Ji(i){if(Le.has(i))return Le.get(i);const e=Wi.exec(i);if(!e)return;const t={};t.family=(e[6]||"").trim();let n=Ki[e[2]]||parseFloat(e[2]);if(e[3]==="%"?n*=Zi:e[3]==="em"?n*=Pn:e[3]==="pt"&&(n*=Dn),t.size=n,e[4]==="normal"||e[4]==="inherit"||!e[4]?t.height=Math.round(n*(7/6)):!e[5]||e[5]==="em"?t.height=parseFloat(e[4]||"")*n:e[5]==="pt"?t.height=parseFloat(e[4]||"")*Dn:e[5]==="%"?t.height=n*.01:t.height=parseFloat(e[4]||""),t.variant=ji.test(e[1])?"small-caps":"normal",t.style=Gi.test(e[1])?"italic":"normal",Vi.test(e[1]))t.weight=700;else{const s=/\b(\d+)\b/.exec(e[1]),r=s?parseInt(s[1],10):400;r>=100&&r!==400?t.weight=r:t.weight=400}return Le.set(i,t),t}const Qi="12px/14px sans-serif";class et{constructor(e=Qi){let t,n=14,s=12,r=400,o="normal",a="normal",c=0,h;if(typeof e=="string"){const l=Ji(e);l&&(t=l.family,s=l.size,n=l.height||14,a=l.variant,o=l.style,r=l.weight)}else e instanceof et&&(t=e.family,s=e.size,n=e.height,a=e.variant,r=e.weight,o=e.style,c=e.baseline,h=e.color);this.family=t||"sans-serif",this.size=s||s===0?s:12,this.height=n||n===0?n:this.size*(7/6),this.variant=a||"",this.style=o||"",this.weight=r||400,this.baseline=c||0,this.color=h||""}assign(e={}){const t=new et(this);return e.bold&&(t.weight=700),e.weight&&(t.weight=e.weight),e.italic&&(t.style="italic"),e.family&&(t.family=e.family),e.style&&(t.style=e.style),e.color&&(t.color=e.color),typeof e.baseline=="number"&&(t.baseline=e.baseline),typeof e.size=="number"&&(t.size=e.size),t}toString(e){let t="";return this.style&&this.style!=="normal"&&(t+=this.style),this.variant&&this.variant!=="normal"&&(t+=(t?" ":"")+this.variant),this.weight&&this.weight!==400&&(t+=t?" ":"",this.weight===700?t+="bold":t+=this.weight),this.size&&(t+=(t?" ":"")+this.size+"px",this.height!==this.size&&(t+="/"+this.height+"px")),this.family&&(t+=(t?" ":"")+this.family),e&&(t+="::"+this.baseline),e&&(t+="::"+this.color),t}valueOf(){return this.toString(!0)}}const Fn={"\n":.28,"\r":.28," ":.28," ":.28," ":.28,"᠎":0," ":.5," ":1," ":.5," ":1," ":.33," ":.25," ":.16," ":.56," ":.28," ":.2," ":.15,"​":0," ":.16," ":.22," ":1,"\uFEFF":0},tr=new et,Ln={trim:!0,collapse:!0},_e={};function He(){return(i,e)=>{const t=new et(e);let n=t.size;return/\bmonospace\b/.test(t.family)?n*=.6:(n*=.45,t.weight>400&&(n*=1.18)),i.length*n}}function Ie(i){if(i&&i.getContext){const e=i.getContext("2d");if(e&&typeof e.measureText=="function")return(t,n)=>(e.font=String(n),e.measureText(t).width)}}function _n(){const i=typeof document<"u"?document:null;return typeof OffscreenCanvas<"u"&&new OffscreenCanvas(100,100)||i&&i.createElement&&i.createElement("canvas")||null}let Rt=Ie(_n())||He();function er(i){if(i==null)Rt=Ie(_n())||He();else if(i)Rt=Ie(i)||He();else throw new Error("setMeasureCanvas argument is not a canvas or null")}function dt(i,e,t=Ln){typeof e=="string"?e=new et(e):e instanceof et?e=tr.assign(e):e=new et().assign(e);const n=Object.assign({},Ln,t);let s=String(i);if(!s)return 0;if(s in Fn){const o=e.valueOf()+"/"+s;return o in _e||(_e[o]=Rt(`_${s}_`,e)-Rt("__",e)),_e[o]}!n.trim||!n.collapse?s=s.replace(/\n/g," "):n.trim?s=s.replace(/\n/g," ").trim():n.collapse&&(s=s.replace(/\s+/g," "));const r=typeof i=="string"?0:i.tracking||0;return Rt(s,e)+e.size*r}class I{constructor(e=""){this.value=e,this.font=null,this.href="",this.sub=!1,this.sup=!1,this.width,this.line,this.tracking,this.whitespace}clone(){const e=new I(this.value);return Object.assign(e,this)}valueOf(){return this.value}toString(){return this.value}}class $t extends I{}class nt extends I{}class yt extends I{}const nr=/[\r\n\xA0]+/g,Hn=.7;function sr(i,e){i.sup&&(i.baseline=.45,i.size=Hn),i.sub&&(i.baseline=-.3,i.size=Hn);let t=e;return(i.style||i.weight||i.baseline||i.color||i.size||i.family)&&(t=e.assign(i)),t}function In(i,e,t){let n=i.width,s,r;for(;n+t.width>e&&i.length;)s=i[i.length-1],r=s.width,s.width>t.width?(s.value=s.value.slice(0,-1),s.width=dt(s,s.font),n+=s.width):i.pop(),n-=r;i[i.length-1]instanceof yt&&i.pop(),s=i[i.length-1]||s||{},t.font=t.font.assign(s),t.href=i.length?s.href:null,t.rel=i.length?s.rel:null,t.target=i.length?s.target:null,i.push(t)}function Bn(i){return Object.assign([],{height:0,font:i,width:0,hasOverflow:!1,hasLineOverflow:!1})}function ir(i,e,t){if(!i.length)return Bn(t);const n=e.height(),s=e.width(),r=e.overflowLine(),o=e.overflowWrap(),a=t.assign({bold:!0}),c=isFinite(n())?Math.floor(n()/t.height):1/0;if(!n()&&!s(0)||!c)return Bn(t);let h=0,l=0,d=0;const u=[];let g=[],f=!1;for(;h<i.length&&l<c;){const b=i[h],A=sr(b,t);if(b.width=dt(b,A),b.font=A,b.line=l,b.whitespace=b.value in Fn,b.value&&(b.value=b.value.replace(nr," ")),!(!d&&b.whitespace||f&&b.whitespace))if(b instanceof nt)d=0,g=[],u.push(h+1),l++;else if(b instanceof $t||b instanceof yt)g.push({index:h,width:d});else if(b.whitespace||d+b.width<s(l))d+=b.width;else if(g.length){let T,C;do{C=!0,T=g.pop();const M=i[T.index];let F;M instanceof yt&&(F=dt("-",M.font||t),T.width+F>s(l)&&(C=!g.length))}while(!C);u.push(T.index+1),d=0,l++,h=T.index,g=[]}else if(o==="break-word"){const T=s(l);if(d+b.width>T){const C=b.clone();do b.value=b.value.slice(0,-1),b.width=dt(b,b.font||t),d+=b.width;while(b.value&&b.width>T);C.value=C.value.slice(b.value.length),i.splice(h+1,0,new $t,C)}u.push(h+1),d=0,l++}else d+=b.width;h++,f=b.whitespace}h!==u[u.length-1]&&u.push(h);let p=0,m=0;const x=u.map(b=>{let A=p,T;for(;(T=i[A])&&(T.whitespace||!T.value);)A++;let C=b,M=null;for(;C>A&&(T=i[C-1])&&(T.whitespace||!(T.value||T instanceof yt));)T instanceof nt&&(M=T),C--;T instanceof yt&&(T.value="-",T.width=dt("-",T.font||t)),p=b;const F=Object.assign(i.slice(A,C).filter(j=>j.value),{width:0});return M&&F.push(M),F.width=F.reduce((j,U)=>j+U.width,0),F.width>m&&(m=F.width),F});let v=!1;if(r){const b=r==="ellipsis"?"…":r;x.forEach((A,T)=>{const C=s(T);if(A.width>C){const M=new I(b);M.font=t,M.width=dt(b,a),In(A,C,M),v=!0}})}let S=!1;const E=e.overflow()==="ellipsis"?"…":e.overflow();if(E&&h!==i.length){const b=s(x.length-1),A=x[x.length-1],T=new I(E);T.font=t,T.width=dt(E,a),In(A,b,T),S=!0}else S=!1;return Object.assign(x,{height:x.length*t.height,font:t,width:m,hasOverflow:S,hasLineOverflow:v})}function Ct(i){return Math.round(i*1e6)/1e6}const rr={center:"middle",right:"end"},or={middle:.5,center:.5,bottom:1,end:1},Be=(i,e)=>!i&&!e||i===e;function ar(i,e){const t=[],n=e.font(),s=n.size,r=n.family,o=e.align(),a=e.createElement();if(i.length){const c=n.height,h=e.valign(),l=e.height()(),d=e.width()(0),u=!isFinite(d)&&i.length===1,g=u?null:e.x(),f=Ct(c/s);let p=u?null:Ct(c/(s*1.15+(c-s)/2));if(or[h]&&isFinite(l)){const C=h==="bottom"?1:.5;p=(p||0)+(l*C-c*i.length*C)/s}const x=o==="justify";let v=0;o==="right"?v=d:o==="center"&&(v=d/2);let S=[],E="tspan",b=null,A="";const T=()=>{if(A){const C=a(E,b,A);S.push(C)}E="tspan",b=null,A=""};for(let C=0,M=i.length;C<M;C++){let F="",j="",U=0;const R=i[C];if(!R.length){t.push(a("tspan",{x:g(C),dy:Ct(C?f:p)+"em"}," "));continue}S=[];let at=0,lt=0,G;for(let Z=0,B=R.length;Z<B;Z++){const _=R[Z],z=_.font;_.whitespace&&at++,lt+=_.width,Z&&!_.tracking&&!U&&Be(z.id,F)&&Be(_.class,j)&&Be(G,_.href)?A+=_.value:(T(),A=_.value,b={fontFamily:z.family!==r?z.family:null,fontSize:z.size!==s?z.size:null,fontWeight:z.weight!==400&&z.weight||null,fontStyle:z.style!=="normal"&&z.style||null,fontVariant:z.variant!=="normal"&&z.variant||null,fill:z.color||null,baselineShift:z.baseline?z.baseline*100+"%":null,className:_.class||null,dx:0,href:null,rel:null,target:null},U&&(b.dx=Ct(U),U=0),_.tracking&&(U=z.size*_.tracking),_.href&&!G?(G=_.href,E="a",b.href=G,b.rel=_.rel,b.target=_.target):G=null,F=z.id,j=_.class)}if(T(),u)t.push(...S);else{let Z=null;const B=C===M-1||R[R.length-1]instanceof nt;if(x&&R.length>1&&!B){const _=d-lt;Z=Ct(_/at)}t.push(a("tspan",{wordSpacing:Z,x:g(C)+v,dy:Ct(C?f:p)+"em"},...S))}}}return a("text",{fontFamily:r,fontSize:s,textAnchor:rr[o]||"start"},...t)}const lr={middle:.5,center:.5,bottom:1,end:1};function cr(i,e){return i.color?i.color:e.href?"#00C":"#000"}function hr(i,e,t){if(!i.length)return;t.textBaseline="middle";const n=e.font(),s=n.height,r=n.size,o=e.valign(),a=e.height()(),c=e.width()(0),h=e.align(),l=h==="justify";let d=s*.5;const u=lr[o];if(u&&isFinite(a)){const g=i.length*s;d+=a*u-g*u}i.forEach((g,f)=>{let p=e.x()(f);const m=f*s+d;let x=0,v=0;g.forEach(b=>{b.whitespace&&x++,v+=b.width});let S=0;const E=f===i.length-1||g[g.length-1]instanceof nt;l&&g.length>1&&!E&&(S=(c-v)/x),g.forEach(b=>{t.font=b.font;const A=b.font,T=A.baseline?r*-A.baseline+r*.15:0;t.fillStyle=cr(A,b);let C=0;if(h==="right"?C+=c-v:h==="center"?C+=c/2-v/2:h==="justify"&&(b.whitespace||b instanceof nt)&&(p+=S),t.fillText(b.value,p+C,m+T),b.href){t.beginPath(),t.strokeStyle=t.fillStyle;const M=Math.floor(m+r*.45)+.5;t.moveTo(p+C,M),t.lineTo(p+C+b.width,M),t.stroke()}p+=b.width})})}function zn(i){const e={};for(let t=0;t<i.length;t++){const n=i[t];typeof n=="number"||n==null||(typeof n=="string"?e.text=n:typeof n=="function"?e.fn=n:typeof n=="object"&&n._groups?e.d3=n:n&&n.nodeType&&n.getContext?e.ctx=n.getContext("2d"):n&&n.fillText&&n.beginPath?e.ctx=n:n&&(e.text=n))}return e}const dr=Object.prototype.hasOwnProperty,ze={};function ur(i){return ze[i]||(ze[i]=i.replace(/([a-z])([A-Z])/g,(e,t,n)=>t+"-"+n.toLowerCase())),ze[i]}function Rn(i,e){if(Array.isArray(e))return e.forEach(t=>Rn(i,t));typeof e=="string"&&(e=document.createTextNode(e)),i.appendChild(e)}function $n(i,e,...t){if(typeof document>"u")throw new Error("No document found, cannot create elements");const n=typeof i=="string"?document.createElementNS("http://www.w3.org/2000/svg",i):i;if(e&&n.setAttribute)for(const s in e)dr.call(e,s)&&e[s]!=null&&n.setAttribute(s==="className"?"class":ur(s),String(e[s]));return t!=null&&t.length&&t.forEach(s=>{Rn(n,s)}),n}const Nn=i=>typeof i=="function"?i:()=>i,gr={top:{vAnchor:-0},middle:{vAnchor:-.5},bottom:{vAnchor:-1},left:{hAnchor:-0},center:{hAnchor:-.5},right:{hAnchor:-1}},Qt=class Qt{constructor(e){if(this.props={width:()=>1/0,height:()=>1/0,rotation:0,vAnchor:0,hAnchor:0},e)for(const t in e)typeof this[t]=="function"&&this[t](e[t]);this.render=this.render.bind(this)}anchor(e){const{hAnchor:t,vAnchor:n,width:s,height:r}=this.props;if(!arguments.length)return[t*s(),n*r()];if(typeof e=="string"){const o=this.props;e.toLowerCase().trim().split(/\s+/).forEach(a=>Object.assign(o,gr[a]))}return this}width(e){return arguments.length?(this.props.width=Nn(e),this):this.props.width}height(e){return arguments.length?(this.props.height=Nn(e),this):this.props.height}rotate(e){return arguments.length?(this.props.rotation=e,this):this.props.rotation}createElement(e){return arguments.length?(this.props.createElement=e,this):this.props.createElement||Qt.createElement}canvas(e,t){const n=e.getContext?e.getContext("2d"):e;return n.save(),n.rotate(this.rotate()*Math.PI/180),n.translate(...this.anchor()),t(n),n.restore(),n}render(...e){const t=zn(e);if(t.d3)return t.d3.attr("transform",`rotate(${this.rotate()}) translate(${this.anchor()})`);if(t.ctx)return this.canvas(t.ctx,t.fn);if(t.text){const n=typeof t.text.render=="function"?t.text.render():t.text;return this.createElement()("g",{transform:`rotate(${this.rotate()}) translate(${this.anchor()})`},n)}}};y(Qt,"createElement",$n);let Re=Qt;const $e=/^[\n\r\t\x20\xA0\u2000-\u200B\u205F\u3000]/,fr=/^[^\n\r\t\u0020\u2000-\u200B\u205F\u3000]{2,}/,On=/^[\xA0\u2011\u202F\u2060\uFEFF]/,pr=/^(?:[;\xAD%?…]|,(?!\d))/,mr=/^[´±°¢£¤$¥\u2212]/,yr="'“‘[「【﹝〔<‹«{『((<《".split(""),wr="',,,!!??”]」】》>’»﹞〕〗〉}))』。".split(""),Yn=i=>{const e=i.charCodeAt(0);return e>=19968&&e<=40959};function Jt(i,e){e!==!1&&(i=i.trim());const t=[];let n=i.charAt(0),s,r,o=0;for(let a=1,c=i.length;a<c;a++){s=i.charAt(a),r=i.charAt(a+1);const h=$e.test(n),l=$e.test(s);let d=l||h||Yn(n)||Yn(s),u;if((mr.test(s)&&!On.test(n)||pr.test(n+r)&&!On.test(s))&&(d=!0),d&&(wr.includes(s)||yr.includes(n))&&(d=!1),(n==="-"||n==="‐"||n==="–"||n==="—")&&(u=$e.test(i.charAt(a-2)),u&&!l&&(d=!1),!u&&fr.test(s+r)&&(d=!0)),d){const g=i.slice(o,a);/\u00AD$/.test(g)?(t.push(new I(g.slice(0,-1))),t.push(new yt)):(t.push(new I(g)),t.push(new $t)),o=a}n=s}return t.push(new I(i.slice(o))),t}const Xn={nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",fnof:"ƒ",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",bull:"•",hellip:"…",prime:"′",Prime:"″",oline:"‾",frasl:"⁄",weierp:"℘",image:"ℑ",real:"ℜ",trade:"™",alefsym:"ℵ",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lArr:"⇐",uArr:"⇑",rArr:"⇒",dArr:"⇓",hArr:"⇔",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"⊥",or:"⊦",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",lang:"〈",rang:"〉",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦",quot:'"',amp:"&",lt:"<",gt:">",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",permil:"‰",lsaquo:"‹",rsaquo:"›"},xr=/^[\n\r\x20\u2000-\u200B\u205F\u3000]/,br=/^<\/([a-zA-Z0-9]+)([^>]*)>/,vr=/^<([a-zA-Z0-9]+)((?:\s[^=\s/]+(?:\s*=\s*(?:"[^"]+"|'[^']+'|[^>\\s]+))?)+)?\s*(\/?)>(\n*)/,Sr=/^<!--(.+?)-->/,Er=/&(?:#(\d\d{2,})|#x([\da-fA-F]{2,})|([a-zA-Z][a-zA-Z1-4]{1,8}));/g,Un={b:i=>i.weight=700,strong:i=>i.weight=700,i:i=>i.style="italic",em:i=>i.style="italic",dfn:i=>i.style="italic",cite:i=>i.style="italic",code:i=>i.family="monospace",kbd:i=>i.family="monospace",samp:i=>i.family="monospace",var:i=>i.family="monospace",tt:i=>i.family="monospace",sub:i=>i.sub=!0,sup:i=>i.sup=!0},Ar={div:1,li:1,blockquote:2,h1:2,h2:2,h3:2,h4:2,h5:2,h6:2,ul:2,ol:2,hr:2,p:2};function qn(i){return i.replace(Er,function(e,t,n,s){if(t||n){const r=t?10:16;return String.fromCharCode(parseInt(t||n,r))}else if(s in Xn)return Xn[s];return e})}function Cr(i){return i&&i.length>1&&(i[0]==='"'&&i[i.length-1]==='"'||i[0]==="'"&&i[i.length-1]==="'")?i.slice(1,-1):i}const Tr=/^\s*([^=\s&]+)(?:\s*=\s*("[^"]+"|'[^']+'|[^>\s]+))?/;function kr(i){let e;const t={};if(i){do if(e=Tr.exec(i),e){const n=qn(Cr(e[2]||"")).replace(/[ \r\n\t]+/g," ").trim();if(t[e[1]]=n,i=i.slice(e[0].length),i.length&&/^\S/.test(i[0]))throw new Error("Attribute error")}while(e&&i.length);if(/\S/.test(i))throw new Error("Attribute error")}return t}function Mr(i){i=String(i||"").trim();let e={weight:null,style:null,sub:!1,sup:!1,href:null,color:null,rel:null,target:null};const t=[],n=[];let s,r;const o=function(d){for(const u in e)e[u]&&(d[u]=e[u]);t.push(d)},a=()=>{n.push(e),e=Object.create(e)},c=()=>{n.length&&(e=n.pop())},h=d=>{const u=t.length;let g=Ar[d];if(u&&g){let f=u-1;for(;t[f]&&(t[f]instanceof $t||xr.test(t[f].value));)f--;for(;g&&t[f]&&t[f]instanceof nt;)f--,g--;for(;g-- >0;)t.push(new nt)}};for(;i.length;){if(s=/^[^<]+/.exec(i)){const d=qn(s[0]);Jt(d,!1).forEach(o)}else if(!(s=Sr.exec(i)))if(s=br.exec(i))c(),h(s[1]);else if(s=vr.exec(i)){const d=s[1];h(d),a(),Un[d]&&Un[d](e);const u=kr(s[2]);d==="a"&&(u.href&&(e.href=u.href),u.rel&&(e.rel=u.rel),u.target&&(e.target=u.target)),u.class&&(e.class=e.class?e.class+" "+u.class:u.class),u.style&&(r=/(?:^|\s|;)color\s*:\s*([^;\s"']+)/.exec(u.style),r&&r[1]&&(e.color=r[1])),d==="br"&&t.push(new nt)}else s=[i.slice(0,1)],o(new I(s[0]));i=i.slice(s[0].length)}let l=t[t.length-1];for(;l instanceof nt;)t.pop(),l=t[t.length-1];return t}const Wn={copyright:"©",textcopyright:"©",dag:"†",textdagger:"†",ddag:"‡",textdaggerdbl:"‡",guillemotleft:"«",guillemotright:"»",guilsinglleft:"‹",guilsinglright:"›",ldots:"…",dots:"…",textellipsis:"…",lq:"‘",P:"¶",textparagraph:"¶",pounds:"£",textsterling:"£",quotedblbase:"„",quotesinglbase:"‚",rq:"’",S:"§",sim:"~",textasciicircum:"^",textasciitilde:"˜",texttildelow:"~",textasteriskcentered:"*",textbackslash:"'",textbar:"|",textbardbl:"╎",textbigcircle:"◯",textbraceleft:"{",textbraceright:"}",textbullet:"•",textdollar:"$",textemdash:"—",textendash:"—",texteuro:"€",eurosym:"€",euro:"€",textexclamdown:"¡",textgreater:">",textless:"<",textordfeminine:"ª",textordmasculine:"º",textperiodcentered:"·",cdot:"·",textquestiondown:"¿",textquotedblleft:"“",textquotedblright:"”",textquoteleft:"‘",textquoteright:"’",textquotestraightbase:"‚",textquotestraightdblbase:"„",textregistered:"®",textthreequartersemdash:"-",texttrademark:"™",texttwelveudash:"-",textunderscore:"_",textvisiblespace:"␣",gets:"←",textleftarrow:"←",to:"→",textrightarrow:"→",textdegree:"°",infty:"∞",triangle:"△",triangledown:"▽",blacktriangle:"▲",blacktriangledown:"▼",angle:"∠",sphericalangle:"∢",aleph:"ℵ",hbar:"ħ",imath:"𝚤",jmath:"𝚥",ell:"ℓ",wp:"℘",Re:"ℜ",Im:"ℑ",mho:"℧",prime:"′",emptyset:"∅",nabla:"∇",surd:"√",partial:"∂",top:"⟙",bot:"⟂",vdash:"⟝",dashv:"⟞",forall:"∀",exists:"∃",nexists:"∄",neg:"¬",lnot:"¬",flat:"♭",natural:"♮",sharp:"♯",backslash:"\\",Box:"□",Diamond:"♢",clubsuit:"♣",diamondsuit:"♦",heartsuit:"♥",spadesuit:"♠",Join:"⨝",blacksquare:"■",bigstar:"★",diagdown:"╲",diagup:"╱",blacklozenge:"⧫",rfloor:"⌋",lfloor:"⌊",rceil:"⌉",lceil:"⌈",rangle:"⟩",langle:"⟨",sum:"∑",int:"∫",oint:"∮",prod:"∏",coprod:"∏",bigcap:"∩",bigcup:"∪",bigsqcup:"⊔",bigvee:"∨",bigwedge:"∧",bigodot:"⊙",bigotimes:"⊗",bigoplus:"⊕",biguplus:"⊎",alpha:"α",beta:"β",chi:"χ",delta:"δ",epsilon:"ε",eta:"η",gamma:"γ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",omega:"ω",phi:"φ",pi:"π",psi:"ψ",rho:"ρ",sigma:"σ",tau:"τ",theta:"θ",upsilon:"υ",xi:"ξ",zeta:"ζ",Alpha:"Α",Beta:"Β",Chi:"Χ",Delta:"Δ",Epsilon:"Ε",Eta:"Η",Gamma:"Γ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Omega:"Ω",Phi:"Φ",Pi:"Π",Psi:"Ψ",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Theta:"Θ",Upsilon:"Υ",Xi:"Ξ",Zeta:"Ζ",aa:"å",AA:"Å",ae:"æ",AE:"Æ",dh:"ð",DH:"Ð",dj:"đ",DJ:"Đ",ij:"ij",IJ:"IJ",l:"ł",L:"Ł",ng:"ŋ",NG:"Ŋ",o:"ø",O:"Ø",oe:"œ",OE:"Œ",ss:"ß",SS:"SS",th:"þ",TH:"Þ"},Pr=/^(\^|_|\\[^#$%&~_^\\{}()\s]+)(\{)?/,Dr=/^%[^\n]+(?:\n|$)/,Fr=/^[^#$%&~_^\\{}]+/,Lr=/^\\([&{}$%#_])/,_r=/(?:\\[\\@,!:;-]|-{2,3}|[!?]`|``?|,,|''?|~|<<|>>)/g,Hr={"---":"—","--":"–","!`":"¡","?`":"¿","``":"“",",,":"„","''":"”","`":"‘","'":"’","<<":"«",">>":"»","~":" ","\\-":"­","\\,":" ","\\;":" ","\\:":" ","\\!":" ","\\@":"\uFEFF","\\\\":"\\newline{}"},$={bf:i=>i.weight="bold",it:i=>i.style="italic",sl:i=>i.style="italic",color:(i,e)=>i.color=e,href:(i,e)=>i.href=e,"^":i=>i.sup=!0,_:i=>i.sub=!0,par:function(i){this.tokens.push(new nt,new nt)},newline:function(i){this.tokens.push(new nt)},url:function(i,e){i=this.open_context(),i.href=e,this.add_token(new I(e)),this.close_context()}};$.textsuperscript=$["^"],$.textsubscript=$._,$.textsl=$.sl,$.mathbf=$.bf,$.mathit=$.it,$.textbf=$.bf,$.textit=$.it,$.textcolor=$.color;function Ir(i){i=String(i||"").trim();const e=[0];i=i.replace(/\\verb,(.*?),/,(l,d)=>(e.push(d),"\\verb,"+(e.length-1)+",")).replace(/\\\\\n/g,()=>"\\\\").replace(_r,(l,d,u)=>u.charAt(d-1)==="\\"?l:Hr[l]).replace(/\n\s+/g,l=>/\n/.test(l.slice(1))?"\\par ":l).replace(/\\symbol\{(\d+)\}/,(l,d,u,g)=>g.charAt(u-1)==="\\"?l:String.fromCharCode(1*d)).replace(/(^|[^\\])(\^|_)(\d|[^{]\S*)/g,(l,d,u,g)=>d+u+"{"+g+"}").replace(/\\verb,(.*?),/,(l,d)=>`\\verb,${e[+d]},`);let t={weight:null,italic:null,variant:null,sub:!1,sup:!1,href:null};const n=[],s=[];let r;const o=function(l){for(const d in t)t[d]&&(l[d]=t[d]);return n.push(l),l},a=function(){s.push(t),t=Object.create(t)},c=function(){if(!s.length)throw new Error("Unexpected }");t=s.pop()},h={tokens:n,open_context:a,close_context:c,add_token:o};for(;i.length;){if(r=Fr.exec(i))Jt(r[0],!1).forEach(o);else if(r=Lr.exec(i))o(new I(r[1]));else if(!(r=Dr.exec(i))){if(r=/^\{/.exec(i))a();else if(r=/^\}/.exec(i))c();else if(!(r=/^\$/.exec(i)))if(r=/^\\verb,([^,]+),/.exec(i))o(new I(r[1]));else if(r=Pr.exec(i)){const l=r[1].slice(1)||r[1];let d=!!r[2];if(/^(La)?TeX$/i.test(l)){a(),t.family="serif";let u;l==="LaTeX"&&(u=o(new I("L")),u.tracking=-.25,u=o(new I("A")),u.size=.7,u.baseline=.3,u.tracking=-.1),u=o(new I("T")),u.tracking=-.17,u=o(new I("E")),u.baseline=-.22,u.tracking=-.13,u=o(new I("X")),c()}else if(l in Wn)o(new I(Wn[l])),d&&a();else if(l in $){const u=[];let g=$[l].length-1,f;if(g){for(d=!1,i=i.slice(r[0].length-1);g--;)if(f=/^\{([^}]+)\}/.exec(i))u.push(f[1]),i=i.slice(f[0].length);else throw new Error(l+" is missing an argument");r[0]=/^\{/.exec(i)?"{":"",d=!!r[0]}d&&a(),$[l].apply(h,[t,...u])}else o(new I(r[1])),d&&a()}else r=[i.slice(0,1)],o(new I(r[0]))}i=i.slice(r[0].length)}return n}const Br=new et,Ne=i=>typeof i=="function"?i:()=>i,jn={left:"left",start:"left",center:"center",middle:"center",right:"right",end:"right",justify:"justify"},N=class N{constructor(e){this.props={overflow:"ellipsis",overflowWrap:null,overflowLine:"",align:"left",wordBreak:null,valign:"top",width:()=>1/0,height:()=>1/0,x:()=>0,font:Br,parser:N.defaultparser},e&&(e.font&&this.font(e.font),e.overflow&&this.overflow(e.overflow),e.overflowLine&&this.overflowLine(e.overflowLine),e.overflowWrap&&this.overflowWrap(e.overflowWrap),e.valign&&this.valign(e.valign),e.align&&this.align(e.align),e.width&&this.width(e.width),e.height&&this.height(e.height),e.x&&this.x(e.x),e.parser&&this.parser(e.parser),e.createElement&&this.createElement(e.createElement))}linebreak(e){const t=this.props.parser(String(e)),n=ir(t,this,this.font()),s=r=>this.render(n,r);return Object.assign(n,{render:s,svg:s,draw:s})}font(e){return arguments.length?(this.props.font=new et(e),this):this.props.font||new et}overflow(e){return arguments.length?(this.props.overflow=String(e),this):this.props.overflow}overflowLine(e){return arguments.length?(this.props.overflowLine=String(e),this):this.props.overflowLine}valign(e){return arguments.length?(this.props.valign=e,this):this.props.valign}align(e){if(!arguments.length)return this.props.align;const t=String(e).toLowerCase();return t in jn&&(this.props.align=jn[t]),this}overflowWrap(e){if(!arguments.length)return this.props.overflowWrap||"normal";const t=String(e).toLowerCase();return t==="break-word"?this.props.overflowWrap="break-word":(t==="normal"||e==null)&&(this.props.overflowWrap=null),this}width(e){return arguments.length?(this.props.width=Ne(e),this):this.props.width}height(e){return arguments.length?(this.props.height=Ne(e),this):this.props.height}x(e){return arguments.length?(this.props.x=Ne(e),this):this.props.x}parser(e){if(!arguments.length)return this.props.parser;if(typeof e=="string"){const t=N[e]||N[e+"parser"];typeof t=="function"&&(e=t)}if(typeof e!="function")throw new Error("Unknown parser: "+e);return this.props.parser=e,this}createElement(e){return arguments.length?(this.props.createElement=e,this):this.props.createElement||N.createElement}render(e,t){const n=zn([e,t]);if(typeof n.text=="string"&&(n.text=this.linebreak(n.text)),n.ctx)hr(n.text,this,n.ctx);else return ar(n.text,this)}};y(N,"createElement",$n),y(N,"textparser",Jt),y(N,"defaultparser",Jt),y(N,"htmlparser",Mr),y(N,"latexparser",Ir),y(N,"Token",I),y(N,"Break",$t),y(N,"LineBreak",nt),y(N,"SoftHyphen",yt),y(N,"Rotator",Re),y(N,"Font",et),y(N,"setMeasureCanvas",er),y(N,"measureText",function(e,t,n){return dt(e,new et(t),n)});let Nt=N;function zr(i,e,t,n){const{width:s,height:r}=Y(e),{color:o=V.color,strokeColor:a=V.strokeColor,strokeWidth:c=V.strokeWidth,strokeType:h=V.strokeType,background:l=V.background,borderRadius:d=V.borderRadius,fixedSize:u=V.fixedSize}=e.properties.style||V,g=Tn(i,e,t,n);g.setAttribute("data-annotation-type",e.properties.type),g.classList.add("annotation-text"),g.setAttribute("fill",`${o}`);let f=g.firstChild;for(;f;){const S=f.nextSibling;f.nodeType===1&&f.tagName!=="rect"&&g.removeChild(f),f=S}let p=g.firstChild;p||(p=k("rect"),g.appendChild(p));const m=-s/2,x=-r/2;d&&(p.setAttribute("rx",`${d}`),p.setAttribute("ry",`${d}`)),h&&h!=="none"&&(p.setAttribute("stroke",a||"black"),p.setAttribute("stroke-width",`${c}`),h==="dashed"&&p.setAttribute("stroke-dasharray","5,5")),l&&l.length&&(n.hoveredFeature===e.id?p.setAttribute("fill",bt(l)):p.setAttribute("fill",l)),p.setAttribute("width",`${s}`),p.setAttribute("height",`${r}`);const v=J(e);return p.setAttribute("x",`${m}`),p.setAttribute("y",`${x}`),Rr(e,g,m,x),g.setAttribute("transform",n.getScreenAlignedTransform(v.x,v.y,!u)),i.appendChild(g),g}const Gn=i=>i.replace(/…$/,""),Vn=i=>i.children[0].innerHTML;function Rr(i,e,t=0,n=0){const{width:s,height:r}=Y(i),{fontSize:o=V.fontSize,font:a=V.font,padding:c=0}=i.properties.style||{};if(s===r&&s===0)return;const h=parseFloat(o.toString())*Pt,l=new Nt({font:`${o}px/${h}px ${a}`.replace(/(px)+/g,"px"),width:s-c*2,height:r-c,align:"left",valign:"top",x:0,overflow:"ellipsis",parser:Nt.htmlparser,createElement:Nt.createElement});l.overflowWrap("break-word");const d=i.properties.content||"";if(d.length===0)return;const g=l.linebreak(d.replaceAll(`
91
- `,"<br>")).svg(),f=[...g.children],p=d.match(/(https?:\/\/.*)/gm);(p?p.map(x=>x.split(" ")[0]):[]).forEach(x=>{let v=x;const S=[];for(;v.length>0;){const E=f.find(A=>!!A.children[0]&&A.children[0].tagName==="tspan"&&v.startsWith(Gn(Vn(A))));if(!E)break;S.push(E);const b=Gn(E.children[0].innerHTML).length;if(!b)break;v=v.slice(b)}S.forEach(E=>{const b=document.createElementNS("http://www.w3.org/2000/svg","a");b.setAttribute("href",x),b.setAttribute("target","_blank"),b.innerHTML=Vn(E),E.children[0].innerHTML="",E.children[0].appendChild(b)})}),g.setAttribute("transform",`translate(${t+c}, ${n+c})`),e.appendChild(g)}class $r extends vn{constructor(t,n){super(t,n);y(this,"features",new Map);y(this,"arrowsRoot",null);y(this,"shapesRoot",null);y(this,"commentsRoot",null);y(this,"annotationsRoot",null);y(this,"visibleFeatures",new Set);y(this,"isExporting",!1);y(this,"render",t=>{if(!t)return;const{features:n,hoveredFeature:s,selectedFeatures:r,liveUpdates:o}=this.store.getState();(!this.annotationsRoot||!t.contains(this.annotationsRoot))&&(t.innerHTML="",t.appendChild(this.getDefs()),this.arrowsRoot=k("g"),this.commentsRoot=k("g"),this.annotationsRoot=k("g"),this.shapesRoot=k("g"),this.annotationsRoot.appendChild(this.arrowsRoot),this.annotationsRoot.appendChild(this.shapesRoot),this.annotationsRoot.appendChild(this.commentsRoot),t.appendChild(this.annotationsRoot)),t.removeChild(this.annotationsRoot);const a=this.arrowsRoot,c=this.annotationsRoot,h=this.commentsRoot,l=this.shapesRoot,d=this.store.getState(),u=this.getViewportBounds(),g=new Set(Object.keys(n));this.removeFeatures(g);const f=new Set;for(let p of Object.values(n)){if(o[p.id]&&(p={...p,...o[p.id]}),!this.isExporting&&!this.isFeatureVisible(p,u))continue;f.add(p.id);let m=this.features.get(p.id);W(p)?m=Tn(l,p,m,d):L(p)?m=zr(l,p,m,d):D(p)?m=Yi(h,p,m,d,this.visibleFeatures.has(p.id)):it(p)?m=qi(l,p,m,d):tt(p)&&(m=_i(a,p,d.options.minArrowHeight,d.options.maxArrowHeight,m,d)),m&&this.features.set(p.id,m)}this.applyStateClasses(c,s,r),t.appendChild(c),this.visibleFeatures.clear(),this.visibleFeatures=f});y(this,"throttleRender",fe(()=>this.render(this.layer.element),16,!0));y(this,"refresh",()=>{this.layer.refresh()});y(this,"onExportStart",()=>{this.isExporting=!0});y(this,"onExportEnd",()=>{this.isExporting=!1});t.events.on("viewExportStart",this.onExportStart),t.events.on("afterImageExport",this.onExportEnd),this.layer=this.ogma.layers.addSVGLayer({draw:this.render},Xt.SHAPES),this.store.subscribe(s=>({features:s.features,liveUpdates:s.liveUpdates,hoveredFeature:s.hoveredFeature,selectedFeatures:s.selectedFeatures,editingFeature:s.editingFeature,rotation:s.rotation,zoom:s.zoom}),this.throttleRender,{equalityFn:(s,r)=>s.features===r.features&&s.liveUpdates===r.liveUpdates&&s.hoveredFeature===r.hoveredFeature&&s.selectedFeatures===r.selectedFeatures&&s.editingFeature===r.editingFeature&&s.rotation===r.rotation&&s.zoom===r.zoom})}getViewportBounds(){const t=this.ogma;let n=null;try{n=t.view.getSize()}catch{return[0,0,0,0]}if(!n)return[0,0,0,0];const{width:s,height:r}=n,o=1.5,a=t.view.screenToGraphCoordinates({x:0,y:0}),c=t.view.screenToGraphCoordinates({x:s*o,y:0}),h=t.view.screenToGraphCoordinates({x:0,y:r*o}),l=t.view.screenToGraphCoordinates({x:s*o,y:r*o});return[Math.min(a.x,c.x,h.x,l.x),Math.min(a.y,c.y,h.y,l.y),Math.max(a.x,c.x,h.x,l.x),Math.max(a.y,c.y,h.y,l.y)]}isFeatureVisible(t,n){const s=t.geometry.bbox;if(!s)return!0;const[r,o,a,c]=s;return!(a<n[0]||r>n[2]||c<n[1]||o>n[3])}getDefs(){const t=k("defs");t.appendChild(Ri());const n=k("filter");n.setAttribute("id","softShadow"),n.setAttribute("x","-50%"),n.setAttribute("y","-50%"),n.setAttribute("width","200%"),n.setAttribute("height","200%");const s=k("feGaussianBlur");s.setAttribute("in","SourceAlpha"),s.setAttribute("stdDeviation","2"),s.setAttribute("result","blur");const r=k("feOffset");r.setAttribute("in","blur"),r.setAttribute("dx","0"),r.setAttribute("dy","1"),r.setAttribute("result","offsetBlur");const o=k("feComponentTransfer");o.setAttribute("in","offsetBlur"),o.setAttribute("result","shadow");const a=k("feFuncA");a.setAttribute("type","linear"),a.setAttribute("slope","0.25"),o.appendChild(a);const c=k("feMerge"),h=k("feMergeNode");h.setAttribute("in","shadow");const l=k("feMergeNode");return l.setAttribute("in","SourceGraphic"),c.appendChild(h),c.appendChild(l),n.appendChild(s),n.appendChild(r),n.appendChild(o),n.appendChild(c),t.appendChild(n),t}removeFeatures(t){for(const n of this.features.keys())if(!t.has(n)){const s=this.features.get(n);s&&s.parentNode&&s.parentNode.removeChild(s),this.features.delete(n)}}applyStateClasses(t,n,s){if(n!==null){const r=t.querySelector(`[data-annotation="${n}"]`);r&&r.classList.add("annotation-hovered")}s.forEach(r=>{const o=t.querySelector(`[data-annotation="${r}"]`);o&&o.classList.add("annotation-selected")})}destroy(){this.features.clear(),this.layer.destroy(),this.ogma.events.off(this.onExportStart),this.ogma.events.off(this.onExportEnd),super.destroy()}}const Zn=i=>{let e;const t=new Set,n=(h,l)=>{const d=typeof h=="function"?h(e):h;if(!Object.is(d,e)){const u=e;e=l??(typeof d!="object"||d===null)?d:Object.assign({},e,d),t.forEach(g=>g(e,u))}},s=()=>e,a={setState:n,getState:s,getInitialState:()=>c,subscribe:h=>(t.add(h),()=>t.delete(h))},c=e=i(n,s,a);return a},Kn=i=>i?Zn(i):Zn;var Jn=(i,e,t)=>(s,r)=>({pastStates:(t==null?void 0:t.pastStates)||[],futureStates:(t==null?void 0:t.futureStates)||[],undo:(o=1)=>{var a,c;if(r().pastStates.length){const h=((a=t==null?void 0:t.partialize)==null?void 0:a.call(t,e()))||e(),l=r().pastStates.splice(-o,o),d=l.shift();i(d),s({pastStates:r().pastStates,futureStates:r().futureStates.concat(((c=t==null?void 0:t.diff)==null?void 0:c.call(t,h,d))||h,l.reverse())})}},redo:(o=1)=>{var a,c;if(r().futureStates.length){const h=((a=t==null?void 0:t.partialize)==null?void 0:a.call(t,e()))||e(),l=r().futureStates.splice(-o,o),d=l.shift();i(d),s({pastStates:r().pastStates.concat(((c=t==null?void 0:t.diff)==null?void 0:c.call(t,h,d))||h,l.reverse()),futureStates:r().futureStates})}},clear:()=>s({pastStates:[],futureStates:[]}),isTracking:!0,pause:()=>s({isTracking:!1}),resume:()=>s({isTracking:!0}),setOnSave:o=>s({_onSave:o}),_onSave:t==null?void 0:t.onSave,_handleSet:(o,a,c,h)=>{var l,d;t!=null&&t.limit&&r().pastStates.length>=(t==null?void 0:t.limit)&&r().pastStates.shift(),(d=(l=r())._onSave)==null||d.call(l,o,c),s({pastStates:r().pastStates.concat(h||o),futureStates:[]})}}),Nr=(i,e)=>(n,s,r)=>{var h,l;r.temporal=Kn(((h=e==null?void 0:e.wrapTemporal)==null?void 0:h.call(e,Jn(n,s,e)))||Jn(n,s,e));const o=((l=e==null?void 0:e.handleSet)==null?void 0:l.call(e,r.temporal.getState()._handleSet))||r.temporal.getState()._handleSet,a=d=>{var f,p,m;if(!r.temporal.getState().isTracking)return;const u=((f=e==null?void 0:e.partialize)==null?void 0:f.call(e,s()))||s(),g=(p=e==null?void 0:e.diff)==null?void 0:p.call(e,d,u);g===null||(m=e==null?void 0:e.equality)!=null&&m.call(e,d,u)||o(d,void 0,u,g)},c=r.setState;return r.setState=(...d)=>{var g;const u=((g=e==null?void 0:e.partialize)==null?void 0:g.call(e,s()))||s();c(...d),a(u)},i((...d)=>{var g;const u=((g=e==null?void 0:e.partialize)==null?void 0:g.call(e,s()))||s();n(...d),a(u)},s,r)};const Or=i=>(e,t,n)=>{const s=n.subscribe;return n.subscribe=(o,a,c)=>{let h=o;if(a){const l=(c==null?void 0:c.equalityFn)||Object.is;let d=o(n.getState());h=u=>{const g=o(u);if(!l(d,g)){const f=d;a(d=g,f)}},c!=null&&c.fireImmediately&&a(d,d)}return s(h)},i(e,t,n)},Yr=[0,0,0,0];function Xr(i,e){const t=Object.keys(i.features),n=Object.keys(e.features);if(t.length!==n.length)return!1;for(const s of t)if(!(s in e.features))return!1;for(const s of t){const r=i.features[s],o=e.features[s],a=r.geometry,c=o.geometry;if(a.coordinates!==c.coordinates||r.properties!==o.properties||r.properties.style!==o.properties.style||a!==c)return!1}return i.drawingFeature===e.drawingFeature}const Ur=i=>{const e=Kn()(Or(Nr((t,n)=>({features:{},liveUpdates:{},isDragging:!1,hoveringHandle:!1,hoveredHandle:-1,hoveredFeature:null,selectedFeatures:new Set,lastChangedFeatures:[],drawingFeature:null,drawingPoints:null,editingFeature:null,mousePressed:!1,mousePressPoint:null,rotation:0,sin:0,cos:1,revRotation:0,revSin:0,revCos:1,zoom:1,invZoom:1,options:{showSendButton:(i==null?void 0:i.showSendButton)??!0,sendButtonIcon:(i==null?void 0:i.sendButtonIcon)??ie,showEditButton:(i==null?void 0:i.showEditButton)??!0,editButtonIcon:(i==null?void 0:i.editButtonIcon)??re,minArrowHeight:(i==null?void 0:i.minArrowHeight)??20,maxArrowHeight:(i==null?void 0:i.maxArrowHeight)??30,detectMargin:(i==null?void 0:i.detectMargin)??2,magnetRadius:(i==null?void 0:i.magnetRadius)??10,magnetHandleRadius:(i==null?void 0:i.magnetHandleRadius)??5,textPlaceholder:(i==null?void 0:i.textPlaceholder)??"Type here"},setOptions:s=>t(r=>({options:{...r.options,...s}})),removeFeature:s=>t(r=>{var u,g,f,p;const o=r.features[s];if(!o)return r;const{features:a,liveUpdates:c}=r,h=new Set([s]);if((D(o)||L(o))&&Object.values(a).forEach(m=>{var x,v,S,E;tt(m)&&(((v=(x=m.properties.link)==null?void 0:x.end)==null?void 0:v.id)===s||((E=(S=m.properties.link)==null?void 0:S.start)==null?void 0:E.id)===s)&&h.add(m.id)}),tt(o)){const m=((g=(u=o.properties.link)==null?void 0:u.end)==null?void 0:g.type)==="comment"?o.properties.link.end.id:((p=(f=o.properties.link)==null?void 0:f.start)==null?void 0:p.type)==="comment"?o.properties.link.start.id:null;if(m){let x=0;if(Object.values(r.features).forEach(v=>{var S,E,b,A;tt(v)&&v.id!==s&&(((E=(S=v.properties.link)==null?void 0:S.end)==null?void 0:E.id)===m||((A=(b=v.properties.link)==null?void 0:b.start)==null?void 0:A.id)===m)&&x++}),x===0)return console.error("Cannot delete last arrow attached to comment. Delete the comment instead."),r}}const l={...a},d={...c};return h.forEach(m=>{delete l[m],delete d[m]}),{features:l,liveUpdates:d}}),addFeature:s=>t(r=>({features:{...r.features,[s.id]:s}})),startLiveUpdate:s=>{t(r=>({liveUpdates:s.reduce((o,a)=>({...o,[a]:{...r.features[a]}}),{})}))},applyLiveUpdate:(s,r)=>{t(o=>({liveUpdates:{...o.liveUpdates,[s]:{...o.liveUpdates[s],...r}}}))},applyLiveUpdates:s=>{t(r=>{const o={...r.liveUpdates};for(const a in s)o[a]=s[a];return{liveUpdates:o}})},commitLiveUpdates:s=>{const{features:r,liveUpdates:o}=n(),a={...r},c=[],h=Object.keys(o);s||(s=new Set(h)),h.forEach(l=>{const d=o[l];a[l]&&Object.keys(d).length>0&&(a[l]={...a[l],...d},c.push(l))}),t({features:a,liveUpdates:{},isDragging:!1,lastChangedFeatures:c})},cancelLiveUpdates:()=>t({liveUpdates:{},isDragging:!1}),updateFeature:(s,r)=>t(o=>{const a={...o.features[s],...r},c={...o.liveUpdates};return delete c[s],{features:{...o.features,[s]:a},liveUpdates:c}}),updateFeatures:s=>t(r=>{const o={...r.features};return Object.entries(s).forEach(([a,c])=>{o[a]&&(o[a]={...o[a],...c})}),{features:o}}),batchUpdate:s=>{const r=e.temporal.getState();r.pause(),s(),r.resume()},getFeature:s=>n().features[s],getMergedFeature:s=>{const r=n().features[s],o=n().liveUpdates[s];if(r)return o?{...r,...o}:r},getAllFeatures:()=>{const{features:s,liveUpdates:r}=n();return Object.entries(s).map(([o,a])=>{const c=r[o];return c?{...a,...c}:a})},setHoveredFeature:s=>t({hoveredFeature:s}),setSelectedFeatures:s=>t({selectedFeatures:new Set(s)}),addToSelection:s=>{const{selectedFeatures:r}=n(),o=new Set(r);o.add(s),t({selectedFeatures:o})},removeFromSelection:s=>{const{selectedFeatures:r}=n(),o=new Set(r);o.delete(s),t({selectedFeatures:o})},toggleSelection:s=>{const{selectedFeatures:r}=n(),o=new Set(r);o.has(s)?o.delete(s):o.add(s),t({selectedFeatures:o})},clearSelection:()=>t({selectedFeatures:new Set}),isHovered:s=>n().hoveredFeature===s,isSelected:s=>n().selectedFeatures.has(s),setRotation:s=>{t({rotation:s,sin:Math.sin(s),cos:Math.cos(s),revRotation:-s,revSin:Math.sin(-s),revCos:Math.cos(-s)})},setZoom:s=>{t({zoom:s,invZoom:1/s})},getScreenAlignedTransform(s,r,o=!0){const a=this.revSin,c=this.revCos,h=s*c-r*a,l=s*a+r*c,d=o?1:this.invZoom;return`matrix(${d}, 0, 0, ${d}, ${h}, ${l})`},getRotationTransform(s,r){const o=this.revSin,a=this.revCos,c=s*a-r*o,h=s*o+r*a;return`matrix(${a}, ${o}, ${-o}, ${a}, ${-c}, ${-h})`},getRotatedBBox(s,r,o,a){return _s(s,r,o-s,a-r,this.sin,this.cos,s+(o-s)/2,r+(a-r)/2,Yr)},setDrawingPoints:s=>t({drawingPoints:s})}),{limit:250,partialize:t=>({drawingFeature:t.drawingFeature,isDragging:t.isDragging,features:t.features,lastChangedFeatures:t.lastChangedFeatures}),equality:Xr,handleSet:t=>n=>{n.drawingFeature===null&&t(n)}})));return e},qr={detectMargin:2,magnetHandleRadius:5,magnetRadius:10,textPlaceholder:"Type here",showSendButton:!0,sendButtonIcon:ie,showEditButton:!0,editButtonIcon:re,minArrowHeight:20,maxArrowHeight:30};class Wr extends es{constructor(t,n={}){super();y(this,"ogma");y(this,"store");y(this,"renderers",{});y(this,"interactions");y(this,"editor");y(this,"links");y(this,"index");y(this,"drawing");y(this,"snapping");y(this,"selectionManager");y(this,"historyManager");y(this,"updateManager");y(this,"commentManager");y(this,"onRotate",()=>this.store.getState().setRotation(this.ogma.view.getAngle()));y(this,"onZoom",()=>{const t=this.ogma.view.getZoom();this.store.getState().setZoom(t),this.commentManager.updateCommentModesForZoom(t)});y(this,"onLayout",()=>{this.links.update()});this.ogma=t;const s={...qr,...n};this.store=Ur(s),this.index=new ki(this.store),this.snapping=new wi(this.ogma,{detectMargin:n.detectMargin===void 0?10:n.detectMargin,magnetRadius:n.magnetRadius===void 0?10:n.magnetRadius},this.index,this.store),this.links=new ii(this.ogma,this.snapping,this.store,(r,o)=>{this.emit(Ge,{arrow:r,link:o})}),this.interactions=new xi(this.ogma,this.store,this.index),this.editor=new ei(this.ogma,this.store,this.snapping,this.links,this.interactions),this.drawing=new Xs(this.ogma,this.store,this.editor,this.interactions,this.links,this,this.index),this.selectionManager=new qs(this.store),this.historyManager=new Us(this.store,this.links),this.updateManager=new Ws(this.store),this.commentManager=new Ns(this.store),this.initializeRenderers(),this.setupEvents()}initializeRenderers(){this.renderers.shapes=new $r(this.ogma,this.store),this.renderers.handles=new Pi(this.ogma,this.store)}setupEvents(){this.ogma.events.on("rotate",this.onRotate).on("zoom",this.onZoom).on("layoutEnd",this.onLayout),this.editor.addEventListener(xt,t=>this.emit(xt,{id:t.detail.id,position:t.detail.position})),this.editor.addEventListener(kt,t=>this.emit(kt,{id:t.detail.id,position:t.detail.position})),this.interactions.addEventListener(Ot,(t=>this.emit(Ot,{id:t.detail.id,position:t.detail.position}))),this.store.temporal.subscribe(t=>{this.emit(Ve,{canUndo:t.pastStates.length>0,canRedo:t.futureStates.length>0})}),this.store.subscribe(t=>t.selectedFeatures,(t,n)=>{const s=Array.from(t).filter(r=>!(n!=null&&n.has(r)));if(s.length>0&&this.emit(Xe,{ids:s}),n){const r=Array.from(n).filter(o=>!t.has(o));r.length>0&&this.emit(Ue,{ids:r})}}),this.store.subscribe(t=>t.drawingFeature,(t,n)=>{t===null&&n!==null&&this.emit(ee,{id:n})}),this.store.subscribe(t=>t.features,(t,n)=>{for(const s of Object.keys(t))n[s]?n[s]!==t[s]&&this.emit(je,t[s]):this.emit(Yt,{id:s});for(const s of Object.keys(n))t[s]||this.emit(qe,{id:s})})}setOptions(t={}){return this.store.getState().setOptions(t),this.store.getState().options}add(t){return this.updateManager.add(t),this}remove(t){return this.updateManager.remove(t),this}undo(){return this.historyManager.undo()}redo(){return this.historyManager.redo()}canUndo(){return this.historyManager.canUndo()}canRedo(){return this.historyManager.canRedo()}clearHistory(){this.historyManager.clearHistory()}getAnnotations(){return this.updateManager.getAnnotations()}select(t){return this.selectionManager.select(t),this}unselect(t){return this.selectionManager.unselect(t),this}cancelDrawing(){var t;return this.drawing.cancelPendingDrawing(),(t=this.editor.getActiveHandler())==null||t.cancelDrawing(),this.emit(We),this}enableArrowDrawing(t){return this.drawing.enableArrowDrawing(t),this}enableTextDrawing(t){return this.drawing.enableTextDrawing(t),this}enableBoxDrawing(t){return this.drawing.enableBoxDrawing(t),this}enablePolygonDrawing(t){return this.drawing.enablePolygonDrawing(t),this}enableCommentDrawing(t={}){return this.drawing.enableCommentDrawing(t),this}enablePlacement(t){return this.drawing.enablePlacement(t),this}startComment(t,n,s,r){return this.drawing.startComment(t,n,s,r),this}startBox(t,n,s){return this.drawing.startBox(t,n,s),this}startArrow(t,n,s){return this.drawing.startArrow(t,n,s),this}startText(t,n,s){return this.drawing.startText(t,n,s),this}startPolygon(t,n,s){return this.drawing.startPolygon(t,n,s),this}getSelectedAnnotations(){return this.selectionManager.getSelectedAnnotations()}getSelected(){return this.selectionManager.getSelected()}getAnnotation(t){return this.updateManager.getAnnotation(t)}setScale(t,n,s,r){return this.updateManager.setScale(t,n,s,r),this}toggleComment(t){return this.commentManager.toggleComment(t),this}destroy(){this.ogma.events.off(this.onRotate).off(this.onZoom),this.links.destroy(),Object.values(this.renderers).forEach(t=>t.destroy()),this.interactions.destroy(),this.editor.destroy()}updateStyle(t,n){return this.updateManager.updateStyle(t,n),this}update(t){return this.updateManager.update(t),this}link(t,n,s=rt){const r=this.getAnnotation(t);if(!r)throw new Error(`Arrow with id ${t} not found`);return this.editor.getArrowHandler().link(r,n,s),this}isDrawing(){return this.drawing.isDrawing()}}w.COMMENT_MODE_COLLAPSED=ot,w.COMMENT_MODE_EXPANDED=Mt,w.Control=Wr,w.DATA_ATTR=rs,w.DEFAULT_EDIT_ICON=re,w.DEFAULT_SEND_ICON=ie,w.EVT_ADD=Yt,w.EVT_CANCEL_DRAWING=We,w.EVT_CLICK=Ot,w.EVT_COMPLETE_DRAWING=ee,w.EVT_DRAG=Tt,w.EVT_DRAG_END=kt,w.EVT_DRAG_START=xt,w.EVT_HISTORY=Ve,w.EVT_HOVER=ss,w.EVT_LINK=Ge,w.EVT_REMOVE=qe,w.EVT_SELECT=Xe,w.EVT_UNHOVER=is,w.EVT_UNSELECT=Ue,w.EVT_UPDATE=je,w.HL_BRIGHTEN=se,w.LAYERS=Xt,w.NONE=ns,w.SIDE_END=rt,w.SIDE_START=O,w.TARGET_TYPES=P,w.TEXT_LINE_HEIGHT=Pt,w.adjustColorBrightness=pe,w.asColor=Bs,w.asHexColor=zs,w.asRgbColor=Rs,w.asRgbaColor=$s,w.brighten=bt,w.calculateCommentZoomThreshold=ln,w.canDetachArrowEnd=js,w.canDetachArrowStart=un,w.clientToContainerPosition=Lt,w.colorToRgba=ws,w.createArrow=_t,w.createBox=ye,w.createComment=be,w.createCommentWithArrow=Ls,w.createPolygon=cn,w.createSVGElement=k,w.createText=we,w.cursors=H,w.darken=Ss,w.debounce=bs,w.debounceTail=vs,w.defaultArrowOptions=Cs,w.defaultArrowStyle=mt,w.defaultBoxOptions=Ts,w.defaultBoxStyle=St,w.defaultCommentOptions=jt,w.defaultCommentStyle=K,w.defaultPolygonProperties=Is,w.defaultPolygonStyle=ht,w.defaultTextOptions=ks,w.defaultTextStyle=V,w.detectArrow=me,w.detectBox=on,w.detectComment=an,w.detectPolygon=ve,w.detectText=xe,w.getAnnotationsBounds=fs,w.getArrowEnd=ue,w.getArrowEndPoints=Ut,w.getArrowSide=Dt,w.getArrowStart=de,w.getAttachmentPointOnNode=ys,w.getBbox=st,w.getBoxCenter=J,w.getBoxPosition=gt,w.getBoxSize=Y,w.getBrowserWindow=ge,w.getCommentPosition=Ps,w.getCommentSize=Ds,w.getCommentZoomThreshold=Fs,w.getCoordinates=Ft,w.getHandleId=gs,w.getPolygonBounds=le,w.getPolygonCenter=ce,w.getTextBbox=st,w.getTextPosition=gt,w.getTextSize=Y,w.handleDetectionThreshold=ne,w.handleRadius=Ze,w.hexShortToLong=qt,w.hexToRgba=en,w.isAnnotationCollection=Se,w.isArrow=tt,w.isBox=W,w.isColor=hn,w.isComment=D,w.isCommentArrow=dn,w.isHexColor=Ee,w.isPolygon=it,w.isRgbColor=Ae,w.isRgbaColor=Ce,w.isText=L,w.migrateBoxOrTextIfNeeded=sn,w.parseColor=xs,w.rgbToRgba=nn,w.scaleGeometry=ms,w.scalePolygon=ds,w.setArrowEnd=Qe,w.setArrowEndPoint=tn,w.setArrowStart=Je,w.setBbox=Ke,w.setTextBbox=Ke,w.simplifyPolygon=ae,w.throttle=fe,w.toggleCommentMode=Ms,w.translatePolygon=hs,w.updateBbox=ft,w.updatePolygonBbox=he,w.updateTextBbox=ft,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})}));
88
+ `,s}function ji(s,e,t){const n={...Z,...e.properties.style},i=n.iconSize,{iconColor:r=Z.iconColor,iconSymbol:o=Z.iconSymbol,iconBorderColor:a=Z.iconBorderColor,iconBorderWidth:d=Z.iconBorderWidth}=n;let c=s.querySelector("rect");c||(c=T("rect"),c.setAttribute("x",`${-i/2}`),c.setAttribute("y",`${-i/2}`),c.setAttribute("rx",`${n.borderRadius}`),c.setAttribute("ry",`${n.borderRadius}`),s.appendChild(c)),c.setAttribute("width",`${i}`),c.setAttribute("height",`${i}`),t.hoveredFeature===e.id?c.setAttribute("fill",At(r)):c.setAttribute("fill",r),d&&d>0?(c.setAttribute("stroke",a||"#CCC"),c.setAttribute("stroke-width",`${d}`)):(c.removeAttribute("stroke"),c.removeAttribute("stroke-width"));let l=s.querySelector("text");l||(l=T("text"),l.setAttribute("x","0"),l.setAttribute("y","0"),l.setAttribute("text-anchor","middle"),l.setAttribute("dominant-baseline","central"),l.setAttribute("pointer-events","none"),s.appendChild(l)),l.setAttribute("font-size",`${i*.5}`),l.textContent=o}function qi(s,e,t,n=!1){const i={...Z,...e.properties.style},{font:r="Arial, sans-serif",fontSize:o=12,padding:a=8,background:d="#FFFACD",color:c="#333",borderRadius:l=4,strokeColor:u="#DDD",strokeWidth:h=1,maxHeight:x}=i,g=e.properties.width,f=e.properties.height,p=x?Math.min(f,x):f,y=x?f>x:!1,A=e.properties.content||"";s.innerHTML="";const E=-g/2,w=-p/2,N=T("rect");N.setAttribute("x",`${E}`),N.setAttribute("y",`${w}`),N.setAttribute("width",`${g}`),N.setAttribute("height",`${p}`),N.setAttribute("rx",`${l}`),N.setAttribute("ry",`${l}`),N.setAttribute("fill",t.hoveredFeature===e.id?At(d):d),h&&h>0&&(N.setAttribute("stroke",u||"#DDD"),N.setAttribute("stroke-width",`${h}`)),s.appendChild(N);const F=T("foreignObject");F.setAttribute("x",`${E}`),F.setAttribute("y",`${w}`),F.setAttribute("width",`${g}`),F.setAttribute("height",`${p}`),F.style.pointerEvents="none";const C=document.createElement("div");if(C.style.width="100%",C.style.height="100%",C.style.padding=`${a}px`,C.style.boxSizing="border-box",C.style.fontFamily=r,C.style.fontSize=`${typeof o=="number"?o:parseFloat(o)}px`,C.style.lineHeight=`${(typeof o=="number"?o:parseFloat(o))*Xt}px`,C.style.color=c,C.style.overflowY=y?"auto":"hidden",C.style.overflowX="hidden",C.style.overflowWrap="break-word",C.style.whiteSpace="pre-wrap",C.style.pointerEvents="none",C.innerHTML=Vi(A),F.appendChild(C),s.appendChild(F),n){const D=T("foreignObject");D.setAttribute("x",`${E+g-24-4}`),D.setAttribute("y",`${w+p-24-4}`),D.setAttribute("width","24"),D.setAttribute("height","24");const v=document.createElement("div");v.classList.add("ogma-send-button"),v.style.width="100%",v.style.height="100%",v.style.display="flex",v.style.alignItems="center",v.style.justifyContent="center",v.style.boxSizing="border-box",v.style.background=d,v.style.border=`1px solid ${u||"#DDD"}`,v.style.borderRadius="4px",v.style.pointerEvents="auto";const O=document.createElement("span");O.classList.add("ogma-send-button-icon"),O.innerHTML=t.options.editButtonIcon,v.appendChild(O),D.appendChild(v),s.appendChild(D)}i.shadow!==!1?s.setAttribute("filter","url(#softShadow)"):s.removeAttribute("filter")}function Vi(s){if(!s)return"";let e=s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");return e=e.replace(Sn(),`<a href="$1" class="${ke}" target="_blank" rel="noopener noreferrer">$1</a>`),e}function Ki(s,e,t,n,i){const r=e.properties.mode;let o=t;o||(o=T("g"),o.setAttribute("data-annotation",`${e.id}`),o.setAttribute("data-annotation-type","comment"));let a=o.querySelector(".comment-icon");a||(a=T("g"),a.classList.add("comment-icon"),o.appendChild(a));let d=o.querySelector(".comment-box");d||(d=T("g"),d.classList.add("comment-box"),o.appendChild(d));const c=r!==rt&&n.selectedFeatures.has(e.id)&&n.editingFeature!==e.id&&n.options.showEditButton;ji(a,e,n),qi(d,e,n,c),i?o.classList.remove("comment-no-transition"):o.classList.add("comment-no-transition"),r===rt?(o.classList.add("comment-collapsed"),o.classList.remove("comment-expanded")):(o.classList.add("comment-expanded"),o.classList.remove("comment-collapsed"));const l=J(e);return o.setAttribute("transform",n.getScreenAlignedTransform(l.x,l.y,!1)),o.style.visibility=n.editingFeature===e.id?"hidden":"",(!o.parentNode||o.parentNode!==s)&&s.appendChild(o),o}function Zi(s,e=.5,t=!1){if(s.length<2)return"";if(s.length<3)return s.map((o,a)=>`${a===0?"M":"L"}${o[0]},${o[1]}`).join(" ")+" Z";const n=s,i=n.length-1,r=[];for(let o=0;o<i;o++){const a=n[(o-1+i)%i],d=n[o],c=n[(o+1)%i],l=n[(o+2)%i],u=d[0]+(c[0]-a[0])/6*e,h=d[1]+(c[1]-a[1])/6*e,x=c[0]-(l[0]-d[0])/6*e,g=c[1]-(l[1]-d[1])/6*e;o===0&&r.push(`M${d[0]},${d[1]}`),t&&o===i-1?r.push(`L${c[0]},${c[1]}`):r.push(`C${u},${h} ${x},${g} ${c[0]},${c[1]}`)}return r.push("Z"),r.join(" ")}const Ji=(s,e,t="box")=>(s||(s=T("g"),s.setAttribute("data-annotation",`${e}`),s.classList.add(`annotation-${t}`)),s);function Qi(s,e,t,n){const i=Ji(t,e.id.toString(),e.properties.type);i.setAttribute("data-annotation",String(e.id));let r=i.querySelector("path");r||(r=T("path"),i.appendChild(r));const{strokeColor:o=lt.strokeColor,strokeWidth:a=lt.strokeWidth,background:d=lt.background,strokeType:c=lt.strokeType}=e.properties.style||lt;o&&r.setAttribute("stroke",o),a!==void 0&&r.setAttribute("stroke-width",String(a)),d&&(n.hoveredFeature===e.id?r.setAttribute("fill",At(d)):r.setAttribute("fill",d)),c==="dashed"?r.setAttribute("stroke-dasharray","5,5"):r.removeAttribute("stroke-dasharray");const l=e.geometry.coordinates[0],u=Zi(l,.5,n.drawingFeature===e.id);return r.setAttribute("d",u),i.setAttribute("transform",n.getRotationTransform(0,0)),s.appendChild(i),i}const tr=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L","ON","ON","BN","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],In=[[697,698,"ON"],[706,719,"ON"],[722,735,"ON"],[741,749,"ON"],[751,767,"ON"],[768,879,"NSM"],[884,885,"ON"],[894,894,"ON"],[900,901,"ON"],[903,903,"ON"],[1014,1014,"ON"],[1155,1161,"NSM"],[1418,1418,"ON"],[1421,1422,"ON"],[1423,1423,"ET"],[1424,1424,"R"],[1425,1469,"NSM"],[1470,1470,"R"],[1471,1471,"NSM"],[1472,1472,"R"],[1473,1474,"NSM"],[1475,1475,"R"],[1476,1477,"NSM"],[1478,1478,"R"],[1479,1479,"NSM"],[1480,1535,"R"],[1536,1541,"AN"],[1542,1543,"ON"],[1544,1544,"AL"],[1545,1546,"ET"],[1547,1547,"AL"],[1548,1548,"CS"],[1549,1549,"AL"],[1550,1551,"ON"],[1552,1562,"NSM"],[1563,1610,"AL"],[1611,1631,"NSM"],[1632,1641,"AN"],[1642,1642,"ET"],[1643,1644,"AN"],[1645,1647,"AL"],[1648,1648,"NSM"],[1649,1749,"AL"],[1750,1756,"NSM"],[1757,1757,"AN"],[1758,1758,"ON"],[1759,1764,"NSM"],[1765,1766,"AL"],[1767,1768,"NSM"],[1769,1769,"ON"],[1770,1773,"NSM"],[1774,1775,"AL"],[1776,1785,"EN"],[1786,1808,"AL"],[1809,1809,"NSM"],[1810,1839,"AL"],[1840,1866,"NSM"],[1867,1957,"AL"],[1958,1968,"NSM"],[1969,1983,"AL"],[1984,2026,"R"],[2027,2035,"NSM"],[2036,2037,"R"],[2038,2041,"ON"],[2042,2044,"R"],[2045,2045,"NSM"],[2046,2069,"R"],[2070,2073,"NSM"],[2074,2074,"R"],[2075,2083,"NSM"],[2084,2084,"R"],[2085,2087,"NSM"],[2088,2088,"R"],[2089,2093,"NSM"],[2094,2136,"R"],[2137,2139,"NSM"],[2140,2143,"R"],[2144,2191,"AL"],[2192,2193,"AN"],[2194,2198,"AL"],[2199,2207,"NSM"],[2208,2249,"AL"],[2250,2273,"NSM"],[2274,2274,"AN"],[2275,2306,"NSM"],[2362,2362,"NSM"],[2364,2364,"NSM"],[2369,2376,"NSM"],[2381,2381,"NSM"],[2385,2391,"NSM"],[2402,2403,"NSM"],[2433,2433,"NSM"],[2492,2492,"NSM"],[2497,2500,"NSM"],[2509,2509,"NSM"],[2530,2531,"NSM"],[2546,2547,"ET"],[2555,2555,"ET"],[2558,2558,"NSM"],[2561,2562,"NSM"],[2620,2620,"NSM"],[2625,2626,"NSM"],[2631,2632,"NSM"],[2635,2637,"NSM"],[2641,2641,"NSM"],[2672,2673,"NSM"],[2677,2677,"NSM"],[2689,2690,"NSM"],[2748,2748,"NSM"],[2753,2757,"NSM"],[2759,2760,"NSM"],[2765,2765,"NSM"],[2786,2787,"NSM"],[2801,2801,"ET"],[2810,2815,"NSM"],[2817,2817,"NSM"],[2876,2876,"NSM"],[2879,2879,"NSM"],[2881,2884,"NSM"],[2893,2893,"NSM"],[2901,2902,"NSM"],[2914,2915,"NSM"],[2946,2946,"NSM"],[3008,3008,"NSM"],[3021,3021,"NSM"],[3059,3064,"ON"],[3065,3065,"ET"],[3066,3066,"ON"],[3072,3072,"NSM"],[3076,3076,"NSM"],[3132,3132,"NSM"],[3134,3136,"NSM"],[3142,3144,"NSM"],[3146,3149,"NSM"],[3157,3158,"NSM"],[3170,3171,"NSM"],[3192,3198,"ON"],[3201,3201,"NSM"],[3260,3260,"NSM"],[3276,3277,"NSM"],[3298,3299,"NSM"],[3328,3329,"NSM"],[3387,3388,"NSM"],[3393,3396,"NSM"],[3405,3405,"NSM"],[3426,3427,"NSM"],[3457,3457,"NSM"],[3530,3530,"NSM"],[3538,3540,"NSM"],[3542,3542,"NSM"],[3633,3633,"NSM"],[3636,3642,"NSM"],[3647,3647,"ET"],[3655,3662,"NSM"],[3761,3761,"NSM"],[3764,3772,"NSM"],[3784,3790,"NSM"],[3864,3865,"NSM"],[3893,3893,"NSM"],[3895,3895,"NSM"],[3897,3897,"NSM"],[3898,3901,"ON"],[3953,3966,"NSM"],[3968,3972,"NSM"],[3974,3975,"NSM"],[3981,3991,"NSM"],[3993,4028,"NSM"],[4038,4038,"NSM"],[4141,4144,"NSM"],[4146,4151,"NSM"],[4153,4154,"NSM"],[4157,4158,"NSM"],[4184,4185,"NSM"],[4190,4192,"NSM"],[4209,4212,"NSM"],[4226,4226,"NSM"],[4229,4230,"NSM"],[4237,4237,"NSM"],[4253,4253,"NSM"],[4957,4959,"NSM"],[5008,5017,"ON"],[5120,5120,"ON"],[5760,5760,"WS"],[5787,5788,"ON"],[5906,5908,"NSM"],[5938,5939,"NSM"],[5970,5971,"NSM"],[6002,6003,"NSM"],[6068,6069,"NSM"],[6071,6077,"NSM"],[6086,6086,"NSM"],[6089,6099,"NSM"],[6107,6107,"ET"],[6109,6109,"NSM"],[6128,6137,"ON"],[6144,6154,"ON"],[6155,6157,"NSM"],[6158,6158,"BN"],[6159,6159,"NSM"],[6277,6278,"NSM"],[6313,6313,"NSM"],[6432,6434,"NSM"],[6439,6440,"NSM"],[6450,6450,"NSM"],[6457,6459,"NSM"],[6464,6464,"ON"],[6468,6469,"ON"],[6622,6655,"ON"],[6679,6680,"NSM"],[6683,6683,"NSM"],[6742,6742,"NSM"],[6744,6750,"NSM"],[6752,6752,"NSM"],[6754,6754,"NSM"],[6757,6764,"NSM"],[6771,6780,"NSM"],[6783,6783,"NSM"],[6832,6877,"NSM"],[6880,6891,"NSM"],[6912,6915,"NSM"],[6964,6964,"NSM"],[6966,6970,"NSM"],[6972,6972,"NSM"],[6978,6978,"NSM"],[7019,7027,"NSM"],[7040,7041,"NSM"],[7074,7077,"NSM"],[7080,7081,"NSM"],[7083,7085,"NSM"],[7142,7142,"NSM"],[7144,7145,"NSM"],[7149,7149,"NSM"],[7151,7153,"NSM"],[7212,7219,"NSM"],[7222,7223,"NSM"],[7376,7378,"NSM"],[7380,7392,"NSM"],[7394,7400,"NSM"],[7405,7405,"NSM"],[7412,7412,"NSM"],[7416,7417,"NSM"],[7616,7679,"NSM"],[8125,8125,"ON"],[8127,8129,"ON"],[8141,8143,"ON"],[8157,8159,"ON"],[8173,8175,"ON"],[8189,8190,"ON"],[8192,8202,"WS"],[8203,8205,"BN"],[8207,8207,"R"],[8208,8231,"ON"],[8232,8232,"WS"],[8233,8233,"B"],[8234,8238,"BN"],[8239,8239,"CS"],[8240,8244,"ET"],[8245,8259,"ON"],[8260,8260,"CS"],[8261,8286,"ON"],[8287,8287,"WS"],[8288,8303,"BN"],[8304,8304,"EN"],[8308,8313,"EN"],[8314,8315,"ES"],[8316,8318,"ON"],[8320,8329,"EN"],[8330,8331,"ES"],[8332,8334,"ON"],[8352,8399,"ET"],[8400,8432,"NSM"],[8448,8449,"ON"],[8451,8454,"ON"],[8456,8457,"ON"],[8468,8468,"ON"],[8470,8472,"ON"],[8478,8483,"ON"],[8485,8485,"ON"],[8487,8487,"ON"],[8489,8489,"ON"],[8494,8494,"ET"],[8506,8507,"ON"],[8512,8516,"ON"],[8522,8525,"ON"],[8528,8543,"ON"],[8585,8587,"ON"],[8592,8721,"ON"],[8722,8722,"ES"],[8723,8723,"ET"],[8724,9013,"ON"],[9083,9108,"ON"],[9110,9257,"ON"],[9280,9290,"ON"],[9312,9351,"ON"],[9352,9371,"EN"],[9450,9899,"ON"],[9901,10239,"ON"],[10496,11123,"ON"],[11126,11263,"ON"],[11493,11498,"ON"],[11503,11505,"NSM"],[11513,11519,"ON"],[11647,11647,"NSM"],[11744,11775,"NSM"],[11776,11869,"ON"],[11904,11929,"ON"],[11931,12019,"ON"],[12032,12245,"ON"],[12272,12287,"ON"],[12288,12288,"WS"],[12289,12292,"ON"],[12296,12320,"ON"],[12330,12333,"NSM"],[12336,12336,"ON"],[12342,12343,"ON"],[12349,12351,"ON"],[12441,12442,"NSM"],[12443,12444,"ON"],[12448,12448,"ON"],[12539,12539,"ON"],[12736,12773,"ON"],[12783,12783,"ON"],[12829,12830,"ON"],[12880,12895,"ON"],[12924,12926,"ON"],[12977,12991,"ON"],[13004,13007,"ON"],[13175,13178,"ON"],[13278,13279,"ON"],[13311,13311,"ON"],[19904,19967,"ON"],[42128,42182,"ON"],[42509,42511,"ON"],[42607,42610,"NSM"],[42611,42611,"ON"],[42612,42621,"NSM"],[42622,42623,"ON"],[42654,42655,"NSM"],[42736,42737,"NSM"],[42752,42785,"ON"],[42888,42888,"ON"],[43010,43010,"NSM"],[43014,43014,"NSM"],[43019,43019,"NSM"],[43045,43046,"NSM"],[43048,43051,"ON"],[43052,43052,"NSM"],[43064,43065,"ET"],[43124,43127,"ON"],[43204,43205,"NSM"],[43232,43249,"NSM"],[43263,43263,"NSM"],[43302,43309,"NSM"],[43335,43345,"NSM"],[43392,43394,"NSM"],[43443,43443,"NSM"],[43446,43449,"NSM"],[43452,43453,"NSM"],[43493,43493,"NSM"],[43561,43566,"NSM"],[43569,43570,"NSM"],[43573,43574,"NSM"],[43587,43587,"NSM"],[43596,43596,"NSM"],[43644,43644,"NSM"],[43696,43696,"NSM"],[43698,43700,"NSM"],[43703,43704,"NSM"],[43710,43711,"NSM"],[43713,43713,"NSM"],[43756,43757,"NSM"],[43766,43766,"NSM"],[43882,43883,"ON"],[44005,44005,"NSM"],[44008,44008,"NSM"],[44013,44013,"NSM"],[64285,64285,"R"],[64286,64286,"NSM"],[64287,64296,"R"],[64297,64297,"ES"],[64298,64335,"R"],[64336,64450,"AL"],[64451,64466,"ON"],[64467,64829,"AL"],[64830,64847,"ON"],[64848,64911,"AL"],[64912,64913,"ON"],[64914,64967,"AL"],[64968,64975,"ON"],[64976,65007,"BN"],[65008,65020,"AL"],[65021,65023,"ON"],[65024,65039,"NSM"],[65040,65049,"ON"],[65056,65071,"NSM"],[65072,65103,"ON"],[65104,65104,"CS"],[65105,65105,"ON"],[65106,65106,"CS"],[65108,65108,"ON"],[65109,65109,"CS"],[65110,65118,"ON"],[65119,65119,"ET"],[65120,65121,"ON"],[65122,65123,"ES"],[65124,65126,"ON"],[65128,65128,"ON"],[65129,65130,"ET"],[65131,65131,"ON"],[65136,65278,"AL"],[65279,65279,"BN"],[65281,65282,"ON"],[65283,65285,"ET"],[65286,65290,"ON"],[65291,65291,"ES"],[65292,65292,"CS"],[65293,65293,"ES"],[65294,65295,"CS"],[65296,65305,"EN"],[65306,65306,"CS"],[65307,65312,"ON"],[65339,65344,"ON"],[65371,65381,"ON"],[65504,65505,"ET"],[65506,65508,"ON"],[65509,65510,"ET"],[65512,65518,"ON"],[65520,65528,"BN"],[65529,65533,"ON"],[65534,65535,"BN"],[65793,65793,"ON"],[65856,65932,"ON"],[65936,65948,"ON"],[65952,65952,"ON"],[66045,66045,"NSM"],[66272,66272,"NSM"],[66273,66299,"EN"],[66422,66426,"NSM"],[67584,67870,"R"],[67871,67871,"ON"],[67872,68096,"R"],[68097,68099,"NSM"],[68100,68100,"R"],[68101,68102,"NSM"],[68103,68107,"R"],[68108,68111,"NSM"],[68112,68151,"R"],[68152,68154,"NSM"],[68155,68158,"R"],[68159,68159,"NSM"],[68160,68324,"R"],[68325,68326,"NSM"],[68327,68408,"R"],[68409,68415,"ON"],[68416,68863,"R"],[68864,68899,"AL"],[68900,68903,"NSM"],[68904,68911,"AL"],[68912,68921,"AN"],[68922,68927,"AL"],[68928,68937,"AN"],[68938,68968,"R"],[68969,68973,"NSM"],[68974,68974,"ON"],[68975,69215,"R"],[69216,69246,"AN"],[69247,69290,"R"],[69291,69292,"NSM"],[69293,69311,"R"],[69312,69327,"AL"],[69328,69336,"ON"],[69337,69369,"AL"],[69370,69375,"NSM"],[69376,69423,"R"],[69424,69445,"AL"],[69446,69456,"NSM"],[69457,69487,"AL"],[69488,69505,"R"],[69506,69509,"NSM"],[69510,69631,"R"],[69633,69633,"NSM"],[69688,69702,"NSM"],[69714,69733,"ON"],[69744,69744,"NSM"],[69747,69748,"NSM"],[69759,69761,"NSM"],[69811,69814,"NSM"],[69817,69818,"NSM"],[69826,69826,"NSM"],[69888,69890,"NSM"],[69927,69931,"NSM"],[69933,69940,"NSM"],[70003,70003,"NSM"],[70016,70017,"NSM"],[70070,70078,"NSM"],[70089,70092,"NSM"],[70095,70095,"NSM"],[70191,70193,"NSM"],[70196,70196,"NSM"],[70198,70199,"NSM"],[70206,70206,"NSM"],[70209,70209,"NSM"],[70367,70367,"NSM"],[70371,70378,"NSM"],[70400,70401,"NSM"],[70459,70460,"NSM"],[70464,70464,"NSM"],[70502,70508,"NSM"],[70512,70516,"NSM"],[70587,70592,"NSM"],[70606,70606,"NSM"],[70608,70608,"NSM"],[70610,70610,"NSM"],[70625,70626,"NSM"],[70712,70719,"NSM"],[70722,70724,"NSM"],[70726,70726,"NSM"],[70750,70750,"NSM"],[70835,70840,"NSM"],[70842,70842,"NSM"],[70847,70848,"NSM"],[70850,70851,"NSM"],[71090,71093,"NSM"],[71100,71101,"NSM"],[71103,71104,"NSM"],[71132,71133,"NSM"],[71219,71226,"NSM"],[71229,71229,"NSM"],[71231,71232,"NSM"],[71264,71276,"ON"],[71339,71339,"NSM"],[71341,71341,"NSM"],[71344,71349,"NSM"],[71351,71351,"NSM"],[71453,71453,"NSM"],[71455,71455,"NSM"],[71458,71461,"NSM"],[71463,71467,"NSM"],[71727,71735,"NSM"],[71737,71738,"NSM"],[71995,71996,"NSM"],[71998,71998,"NSM"],[72003,72003,"NSM"],[72148,72151,"NSM"],[72154,72155,"NSM"],[72160,72160,"NSM"],[72193,72198,"NSM"],[72201,72202,"NSM"],[72243,72248,"NSM"],[72251,72254,"NSM"],[72263,72263,"NSM"],[72273,72278,"NSM"],[72281,72283,"NSM"],[72330,72342,"NSM"],[72344,72345,"NSM"],[72544,72544,"NSM"],[72546,72548,"NSM"],[72550,72550,"NSM"],[72752,72758,"NSM"],[72760,72765,"NSM"],[72850,72871,"NSM"],[72874,72880,"NSM"],[72882,72883,"NSM"],[72885,72886,"NSM"],[73009,73014,"NSM"],[73018,73018,"NSM"],[73020,73021,"NSM"],[73023,73029,"NSM"],[73031,73031,"NSM"],[73104,73105,"NSM"],[73109,73109,"NSM"],[73111,73111,"NSM"],[73459,73460,"NSM"],[73472,73473,"NSM"],[73526,73530,"NSM"],[73536,73536,"NSM"],[73538,73538,"NSM"],[73562,73562,"NSM"],[73685,73692,"ON"],[73693,73696,"ET"],[73697,73713,"ON"],[78912,78912,"NSM"],[78919,78933,"NSM"],[90398,90409,"NSM"],[90413,90415,"NSM"],[92912,92916,"NSM"],[92976,92982,"NSM"],[94031,94031,"NSM"],[94095,94098,"NSM"],[94178,94178,"ON"],[94180,94180,"NSM"],[113821,113822,"NSM"],[113824,113827,"BN"],[117760,117973,"ON"],[118e3,118009,"EN"],[118010,118012,"ON"],[118016,118451,"ON"],[118458,118480,"ON"],[118496,118512,"ON"],[118528,118573,"NSM"],[118576,118598,"NSM"],[119143,119145,"NSM"],[119155,119162,"BN"],[119163,119170,"NSM"],[119173,119179,"NSM"],[119210,119213,"NSM"],[119273,119274,"ON"],[119296,119361,"ON"],[119362,119364,"NSM"],[119365,119365,"ON"],[119552,119638,"ON"],[120513,120513,"ON"],[120539,120539,"ON"],[120571,120571,"ON"],[120597,120597,"ON"],[120629,120629,"ON"],[120655,120655,"ON"],[120687,120687,"ON"],[120713,120713,"ON"],[120745,120745,"ON"],[120771,120771,"ON"],[120782,120831,"EN"],[121344,121398,"NSM"],[121403,121452,"NSM"],[121461,121461,"NSM"],[121476,121476,"NSM"],[121499,121503,"NSM"],[121505,121519,"NSM"],[122880,122886,"NSM"],[122888,122904,"NSM"],[122907,122913,"NSM"],[122915,122916,"NSM"],[122918,122922,"NSM"],[123023,123023,"NSM"],[123184,123190,"NSM"],[123566,123566,"NSM"],[123628,123631,"NSM"],[123647,123647,"ET"],[124140,124143,"NSM"],[124398,124399,"NSM"],[124643,124643,"NSM"],[124646,124646,"NSM"],[124654,124655,"NSM"],[124661,124661,"NSM"],[124928,125135,"R"],[125136,125142,"NSM"],[125143,125251,"R"],[125252,125258,"NSM"],[125259,126063,"R"],[126064,126143,"AL"],[126144,126207,"R"],[126208,126287,"AL"],[126288,126463,"R"],[126464,126703,"AL"],[126704,126705,"ON"],[126706,126719,"AL"],[126720,126975,"R"],[126976,127019,"ON"],[127024,127123,"ON"],[127136,127150,"ON"],[127153,127167,"ON"],[127169,127183,"ON"],[127185,127221,"ON"],[127232,127242,"EN"],[127243,127247,"ON"],[127279,127279,"ON"],[127338,127343,"ON"],[127405,127405,"ON"],[127584,127589,"ON"],[127744,128728,"ON"],[128732,128748,"ON"],[128752,128764,"ON"],[128768,128985,"ON"],[128992,129003,"ON"],[129008,129008,"ON"],[129024,129035,"ON"],[129040,129095,"ON"],[129104,129113,"ON"],[129120,129159,"ON"],[129168,129197,"ON"],[129200,129211,"ON"],[129216,129217,"ON"],[129232,129240,"ON"],[129280,129623,"ON"],[129632,129645,"ON"],[129648,129660,"ON"],[129664,129674,"ON"],[129678,129734,"ON"],[129736,129736,"ON"],[129741,129756,"ON"],[129759,129770,"ON"],[129775,129784,"ON"],[129792,129938,"ON"],[129940,130031,"ON"],[130032,130041,"EN"],[130042,130042,"ON"],[131070,131071,"BN"],[196606,196607,"BN"],[262142,262143,"BN"],[327678,327679,"BN"],[393214,393215,"BN"],[458750,458751,"BN"],[524286,524287,"BN"],[589822,589823,"BN"],[655358,655359,"BN"],[720894,720895,"BN"],[786430,786431,"BN"],[851966,851967,"BN"],[917502,917759,"BN"],[917760,917999,"NSM"],[918e3,921599,"BN"],[983038,983039,"BN"],[1048574,1048575,"BN"],[1114110,1114111,"BN"]];function er(s){if(s<=255)return tr[s];let e=0,t=In.length-1;for(;e<=t;){const n=e+t>>1,i=In[n];if(s<i[0]){t=n-1;continue}if(s>i[1]){e=n+1;continue}return i[2]}return"L"}function nr(s){const e=s.length;if(e===0)return null;const t=new Array(e);let n=!1;for(let c=0;c<e;){const l=s.charCodeAt(c);let u=l,h=1;if(l>=55296&&l<=56319&&c+1<e){const g=s.charCodeAt(c+1);g>=56320&&g<=57343&&(u=(l-55296<<10)+(g-56320)+65536,h=2)}const x=er(u);(x==="R"||x==="AL"||x==="AN")&&(n=!0);for(let g=0;g<h;g++)t[c+g]=x;c+=h}if(!n)return null;let i=0;for(let c=0;c<e;c++){const l=t[c];if(l==="L"){i=0;break}if(l==="R"||l==="AL"){i=1;break}}const r=new Int8Array(e);for(let c=0;c<e;c++)r[c]=i;const o=i&1?"R":"L",a=o;let d=a;for(let c=0;c<e;c++)t[c]==="NSM"?t[c]=d:d=t[c];d=a;for(let c=0;c<e;c++){const l=t[c];l==="EN"?t[c]=d==="AL"?"AN":"EN":(l==="R"||l==="L"||l==="AL")&&(d=l)}for(let c=0;c<e;c++)t[c]==="AL"&&(t[c]="R");for(let c=1;c<e-1;c++)t[c]==="ES"&&t[c-1]==="EN"&&t[c+1]==="EN"&&(t[c]="EN"),t[c]==="CS"&&(t[c-1]==="EN"||t[c-1]==="AN")&&t[c+1]===t[c-1]&&(t[c]=t[c-1]);for(let c=0;c<e;c++){if(t[c]!=="EN")continue;let l;for(l=c-1;l>=0&&t[l]==="ET";l--)t[l]="EN";for(l=c+1;l<e&&t[l]==="ET";l++)t[l]="EN"}for(let c=0;c<e;c++){const l=t[c];(l==="WS"||l==="ES"||l==="ET"||l==="CS")&&(t[c]="ON")}d=a;for(let c=0;c<e;c++){const l=t[c];l==="EN"?t[c]=d==="L"?"L":"EN":(l==="R"||l==="L")&&(d=l)}for(let c=0;c<e;c++){if(t[c]!=="ON")continue;let l=c+1;for(;l<e&&t[l]==="ON";)l++;const u=c>0?t[c-1]:a,h=l<e?t[l]:a,x=u!=="L"?"R":"L";if(x===(h!=="L"?"R":"L"))for(let f=c;f<l;f++)t[f]=x;c=l-1}for(let c=0;c<e;c++)t[c]==="ON"&&(t[c]=o);for(let c=0;c<e;c++){const l=t[c];(r[c]&1)===0?l==="R"?r[c]++:(l==="AN"||l==="EN")&&(r[c]+=2):(l==="L"||l==="AN"||l==="EN")&&r[c]++}return r}function sr(s,e){const t=nr(s);if(t===null)return null;const n=new Int8Array(e.length);for(let i=0;i<e.length;i++)n[i]=t[e[i]];return n}const ir=/[ \t\n\r\f]+/g,rr=/[\t\n\r\f]| {2,}|^ | $/;function or(s){const e=s??"normal";return e==="pre-wrap"?{mode:e,preserveOrdinarySpaces:!0,preserveHardBreaks:!0}:{mode:e,preserveOrdinarySpaces:!1,preserveHardBreaks:!1}}function ar(s){if(!rr.test(s))return s;let e=s.replace(ir," ");return e.charCodeAt(0)===32&&(e=e.slice(1)),e.length>0&&e.charCodeAt(e.length-1)===32&&(e=e.slice(0,-1)),e}function cr(s){return/[\r\f]/.test(s)?s.replace(/\r\n/g,`
89
+ `).replace(/[\r\f]/g,`
90
+ `):s}let Re=null,lr;function dr(){return Re===null&&(Re=new Intl.Segmenter(lr,{granularity:"word"})),Re}const ur=new RegExp("\\p{Script=Arabic}","u"),pt=new RegExp("\\p{M}","u"),Ie=new RegExp("\\p{Nd}","u");function Hn(s){return ur.test(s)}function _n(s){return s>=19968&&s<=40959||s>=13312&&s<=19903||s>=131072&&s<=173791||s>=173824&&s<=177983||s>=177984&&s<=178207||s>=178208&&s<=183983||s>=183984&&s<=191471||s>=191472&&s<=192093||s>=194560&&s<=195103||s>=196608&&s<=201551||s>=201552&&s<=205743||s>=205744&&s<=210041||s>=63744&&s<=64255||s>=12288&&s<=12351||s>=12352&&s<=12447||s>=12448&&s<=12543||s>=12592&&s<=12687||s>=44032&&s<=55215||s>=65280&&s<=65519}function at(s){for(let e=0;e<s.length;e++){const t=s.charCodeAt(e);if(!(t<12288)){if(t>=55296&&t<=56319&&e+1<s.length){const n=s.charCodeAt(e+1);if(n>=56320&&n<=57343){const i=(t-55296<<10)+(n-56320)+65536;if(_n(i))return!0;e++;continue}}if(_n(t))return!0}}return!1}function hr(s){const e=_t(s);return e!==null&&(He.has(e)||mt.has(e))}const xr=new Set([" "," ","⁠","\uFEFF"]),fr=new Set(["-","‐","–","—"]);function gr(s){const e=_t(s);return e!==null&&xr.has(e)}function pr(s){const e=_t(s);return e!==null&&fr.has(e)}function mr(s,e){return gr(s)?!1:e?!(hr(s)||pr(s)):!0}const He=new Set([",",".","!",":",";","?","、","。","・",")","〕","〉","》","」","』","】","〗","〙","〛","ー","々","〻","ゝ","ゞ","ヽ","ヾ"]),te=new Set(['"',"(","[","{","¡","¿","“","‘","‚","„","«","‹","⸘","(","〔","〈","《","「","『","【","〖","〘","〚"]),_e=new Set(["'","’"]),mt=new Set([".",",","!","?",":",";","،","؛","؟","।","॥","၊","။","၌","၍","၏",")","]","}","%",'"',"”","’","»","›","…"]),yr=new Set([":",".","،","؛"]),Sr=new Set(["၏"]),Fr=new Set(["”","’","»","›","」","』","】","》","〉","〕",")"]);function Ar(s){if(ze(s))return!0;let e=!1;for(const t of s){if(mt.has(t)||ne(t)){e=!0;continue}if(!(e&&pt.test(t)))return!1}return e}function Er(s){for(const e of s)if(!He.has(e)&&!mt.has(e))return!1;return s.length>0}function Nr(s){if(ze(s))return!0;for(const e of s)if(!te.has(e)&&!_e.has(e)&&!pt.test(e)&&!ne(e))return!1;return s.length>0}function ze(s){let e=!1;for(const t of s)if(!(t==="\\"||pt.test(t))){if(te.has(t)||mt.has(t)||_e.has(t)){e=!0;continue}return!1}return e}function ee(s,e){const t=e-1;if(t<=0)return Math.max(t,0);const n=s.charCodeAt(t);if(n<56320||n>57343)return t;const i=t-1;if(i<0)return t;const r=s.charCodeAt(i);return r>=55296&&r<=56319?i:t}function _t(s){if(s.length===0)return null;const e=ee(s,s.length);return s.slice(e)}function Cr(s){for(const e of s)if(!pt.test(e))return e;return null}function wr(s){for(let e=s.length;e>0;){const t=ee(s,e),n=s.slice(t,e);if(!pt.test(n))return n;e=t}return null}const Mr=[36,37,43,43,92,92,162,165,176,177,1423,1423,1545,1547,1642,1642,2046,2047,2546,2547,2553,2555,2801,2801,3065,3065,3449,3449,3647,3647,6107,6107,8240,8247,8279,8279,8352,8399,8451,8451,8457,8457,8470,8470,8722,8723,43064,43064,65020,65020,65129,65130,65284,65285,65504,65505,65509,65510,73693,73696,123647,123647,126124,126124,126128,126128];function br(s,e){for(let t=0;t<e.length;t+=2)if(s>=e[t]&&s<=e[t+1])return!0;return!1}function ne(s){const e=s.codePointAt(0);return e!==void 0&&br(e,Mr)}function Dr(s){const e=wr(s);return e!==null&&ne(e)}function vr(s){const e=Cr(s);return e!==null&&Ie.test(e)}function Br(s){const e=Array.from(s);let t=e.length;for(;t>0;){const n=e[t-1];if(pt.test(n)){t--;continue}if(te.has(n)||_e.has(n)){t--;continue}break}return t<=0||t===e.length?null:{head:e.slice(0,t).join(""),tail:e.slice(t).join("")}}function kr(s,e,t){return t==="text"&&!e&&s.length===1&&s!=="-"&&s!=="—"?s:null}function zn(s,e,t,n){const i=e[n],r=s[n];if(i==null)return r;const o=t[n];if(r.length===o)return r;const a=i.repeat(o);return s[n]=a,a}function Wn(s,e){return s&&e!==null&&yr.has(e)}function Lr(s){const e=_t(s);return e!==null&&Sr.has(e)}function Tr(s){if(s.length<2||s[0]!==" ")return null;const e=s.slice(1);return new RegExp("^\\p{M}+$","u").test(e)?{space:" ",marks:e}:null}function We(s){let e=s.length;for(;e>0;){const t=ee(s,e),n=s.slice(t,e);if(Fr.has(n))return!0;if(!mt.has(n))return!1;e=t}return!1}function Or(s,e){if(e.preserveOrdinarySpaces||e.preserveHardBreaks){if(s===" ")return"preserved-space";if(s===" ")return"tab";if(e.preserveHardBreaks&&s===`
91
+ `)return"hard-break"}return s===" "?"space":s===" "||s===" "||s==="⁠"||s==="\uFEFF"?"glue":s==="​"?"zero-width-break":s==="­"?"soft-hyphen":"text"}const Pr=/[\x20\t\n\xA0\xAD\u200B\u202F\u2060\uFEFF]/;function st(s){return s.length===1?s[0]:s.join("")}function Rr(s,e){const t=[];for(let n=s.length-1;n>=0;n--)t.push(s[n]);return t.push(e),st(t)}function Ir(s,e,t,n){if(!Pr.test(s))return[{text:s,isWordLike:e,kind:"text",start:t}];const i=[];let r=null,o=[],a=t,d=!1,c=0;for(const l of s){const u=Or(l,n),h=u==="text"&&e;if(r!==null&&u===r&&h===d){o.push(l),c+=l.length;continue}r!==null&&i.push({text:st(o),isWordLike:d,kind:r,start:a}),r=u,o=[l],a=t+c,d=h,c+=l.length}return r!==null&&i.push({text:st(o),isWordLike:d,kind:r,start:a}),i}function $e(s){return s==="space"||s==="preserved-space"||s==="zero-width-break"||s==="hard-break"}const Hr=/^[A-Za-z][A-Za-z0-9+.-]*:$/;function _r(s,e){const t=s.texts[e];return t.startsWith("www.")?!0:Hr.test(t)&&e+1<s.len&&s.kinds[e+1]==="text"&&s.texts[e+1]==="//"}function zr(s){return s.includes("?")&&(s.includes("://")||s.startsWith("www."))}function Wr(s){const e=s.texts.slice(),t=s.isWordLike.slice(),n=s.kinds.slice(),i=s.starts.slice();for(let o=0;o<s.len;o++){if(n[o]!=="text"||!_r(s,o))continue;const a=[e[o]];let d=o+1;for(;d<s.len&&!$e(n[d]);){a.push(e[d]),t[o]=!0;const c=e[d].includes("?");if(n[d]="text",e[d]="",d++,c)break}e[o]=st(a)}let r=0;for(let o=0;o<e.length;o++){const a=e[o];a.length!==0&&(r!==o&&(e[r]=a,t[r]=t[o],n[r]=n[o],i[r]=i[o]),r++)}return e.length=r,t.length=r,n.length=r,i.length=r,{len:r,texts:e,isWordLike:t,kinds:n,starts:i}}function $r(s){const e=[],t=[],n=[],i=[];for(let r=0;r<s.len;r++){const o=s.texts[r];if(e.push(o),t.push(s.isWordLike[r]),n.push(s.kinds[r]),i.push(s.starts[r]),!zr(o))continue;const a=r+1;if(a>=s.len||$e(s.kinds[a]))continue;const d=[],c=s.starts[a];let l=a;for(;l<s.len&&!$e(s.kinds[l]);)d.push(s.texts[l]),l++;d.length>0&&(e.push(st(d)),t.push(!0),n.push("text"),i.push(c),r=l-1)}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:i}}const Yr=new Set([":","-","/","×",",",".","+","–","—"]),Xr=new Set([".",",",":",";"]);function $n(s){for(let e=s.length;e>0;){const t=ee(s,e),n=s.slice(t,e);if(pt.test(n)){e=t;continue}return Xr.has(n)||ne(n)}return!1}function Ur(s,e){return e&&!at(s)}function Yn(s){for(const e of s)if(Ie.test(e))return!0;return!1}function se(s){if(s.length===0)return!1;for(const e of s)if(!(Ie.test(e)||Yr.has(e)))return!1;return!0}function Gr(s){const e=[],t=[],n=[],i=[];for(let r=0;r<s.len;r++){const o=s.texts[r],a=s.kinds[r];if(a==="text"&&se(o)&&Yn(o)){const d=[o];let c=r+1;for(;c<s.len&&s.kinds[c]==="text"&&se(s.texts[c]);)d.push(s.texts[c]),c++;e.push(st(d)),t.push(!0),n.push("text"),i.push(s.starts[r]),r=c-1;continue}e.push(o),t.push(s.isWordLike[r]),n.push(a),i.push(s.starts[r])}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:i}}function jr(s){const e=[],t=[],n=[],i=[];for(let r=0;r<s.len;r++){const o=s.texts[r],a=s.kinds[r],d=s.isWordLike[r];if(a==="text"&&$n(o)&&(d||Dr(o))&&!at(o)){const c=[o];let l=!0,u=r+1;for(;l&&u<s.len&&s.kinds[u]==="text"&&Ur(s.texts[u],s.isWordLike[u]);){const h=s.texts[u];c.push(h),l=$n(h),u++}e.push(st(c)),t.push(!0),n.push("text"),i.push(s.starts[r]),r=u-1;continue}e.push(o),t.push(d),n.push(a),i.push(s.starts[r])}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:i}}function qr(s){const e=[],t=[],n=[],i=[];for(let r=0;r<s.len;r++){const o=s.texts[r];if(s.kinds[r]==="text"&&o.includes("-")){const a=o.split("-");let d=a.length>1;for(let c=0;c<a.length;c++){const l=a[c];if(!d)break;(l.length===0||!Yn(l)||!se(l))&&(d=!1)}if(d){let c=0;for(let l=0;l<a.length;l++){const u=a[l],h=l<a.length-1?`${u}-`:u;e.push(h),t.push(!0),n.push("text"),i.push(s.starts[r]+c),c+=h.length}continue}}e.push(o),t.push(s.isWordLike[r]),n.push(s.kinds[r]),i.push(s.starts[r])}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:i}}function Vr(s){const e=[],t=[],n=[],i=[];let r=0;for(;r<s.len;){const o=[s.texts[r]];let a=s.isWordLike[r],d=s.kinds[r],c=s.starts[r];if(d==="glue"){const l=[o[0]],u=c;for(r++;r<s.len&&s.kinds[r]==="glue";)l.push(s.texts[r]),r++;const h=st(l);if(r<s.len&&s.kinds[r]==="text")o[0]=h,o.push(s.texts[r]),a=s.isWordLike[r],d="text",c=u,r++;else{e.push(h),t.push(!1),n.push("glue"),i.push(u);continue}}else r++;if(d==="text")for(;r<s.len&&s.kinds[r]==="glue";){const l=[];for(;r<s.len&&s.kinds[r]==="glue";)l.push(s.texts[r]),r++;const u=st(l);if(r<s.len&&s.kinds[r]==="text"){o.push(u,s.texts[r]),a=a||s.isWordLike[r],r++;continue}o.push(u)}e.push(st(o)),t.push(a),n.push(d),i.push(c)}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:i}}function Kr(s){const e=s.texts.slice(),t=s.isWordLike.slice(),n=s.kinds.slice(),i=s.starts.slice();for(let r=0;r<e.length-1;r++){if(n[r]!=="text"||n[r+1]!=="text"||!at(e[r])||!at(e[r+1]))continue;const o=Br(e[r]);o!==null&&(e[r]=o.head,e[r+1]=o.tail+e[r+1],i[r+1]=i[r]+o.head.length)}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:i}}function Zr(s,e,t){const n=dr();let i=0;const r=[],o=[],a=[],d=[],c=[],l=[],u=[],h=[],x=[],g=[],f=[],p=[];for(const F of n.segment(s))for(const C of Ir(F.segment,F.isWordLike??!1,F.index,t)){let L=function(){l[b]!==null&&(o[b]=[zn(r,l,u,b)],l[b]=null),o[b].push(C.text),a[b]=a[b]||C.isWordLike,h[b]=h[b]||D,x[b]=x[b]||v,g[b]=R,f[b]=W,p[b]=Wn(x[b],O)};const M=C.kind==="text",B=kr(C.text,C.isWordLike,C.kind),D=at(C.text),v=Hn(C.text),O=_t(C.text),R=We(C.text),W=Lr(C.text),b=i-1;e.carryCJKAfterClosingQuote&&M&&i>0&&d[b]==="text"&&D&&h[b]&&g[b]||M&&i>0&&d[b]==="text"&&Er(C.text)&&h[b]||M&&i>0&&d[b]==="text"&&f[b]?L():M&&i>0&&d[b]==="text"&&C.isWordLike&&v&&p[b]?(L(),a[b]=!0):B!==null&&i>0&&d[b]==="text"&&l[b]===B?u[b]=(u[b]??1)+1:M&&!C.isWordLike&&i>0&&d[b]==="text"&&!h[b]&&(Ar(C.text)||C.text==="-"&&a[b])?L():(r[i]=C.text,o[i]=[C.text],a[i]=C.isWordLike,d[i]=C.kind,c[i]=C.start,l[i]=B,u[i]=B===null?0:1,h[i]=D,x[i]=v,g[i]=R,f[i]=W,p[i]=Wn(v,O),i++)}for(let F=0;F<i;F++){if(l[F]!==null){r[F]=zn(r,l,u,F);continue}r[F]=st(o[F])}for(let F=1;F<i;F++)d[F]==="text"&&!a[F]&&ze(r[F])&&d[F-1]==="text"&&!h[F-1]&&(r[F-1]+=r[F],a[F-1]=a[F-1]||a[F],r[F]="");const y=Array.from({length:i},()=>null);let A=-1;for(let F=i-1;F>=0;F--){const C=r[F];if(C.length!==0){if(d[F]==="text"&&!a[F]&&A>=0&&d[A]==="text"&&(Nr(C)||C==="-"&&vr(r[A]))){const M=y[A]??[];M.push(C),y[A]=M,c[A]=c[F],r[F]="";continue}A=F}}for(let F=0;F<i;F++){const C=y[F];C!=null&&(r[F]=Rr(C,r[F]))}let E=0;for(let F=0;F<i;F++){const C=r[F];C.length!==0&&(E!==F&&(r[E]=C,a[E]=a[F],d[E]=d[F],c[E]=c[F]),E++)}r.length=E,a.length=E,d.length=E,c.length=E;const w=Vr({len:E,texts:r,isWordLike:a,kinds:d,starts:c}),N=Kr(jr(qr(Gr($r(Wr(w))))));for(let F=0;F<N.len-1;F++){const C=Tr(N.texts[F]);C!==null&&(N.kinds[F]!=="space"&&N.kinds[F]!=="preserved-space"||N.kinds[F+1]!=="text"||!Hn(N.texts[F+1])||(N.texts[F]=C.space,N.isWordLike[F]=!1,N.kinds[F]=N.kinds[F]==="preserved-space"?"preserved-space":"space",N.texts[F+1]=C.marks+N.texts[F+1],N.starts[F+1]=N.starts[F]+C.space.length))}return N}function Jr(s,e){if(s.len===0)return[];if(!e.preserveHardBreaks)return[{startSegmentIndex:0,endSegmentIndex:s.len,consumedEndSegmentIndex:s.len}];const t=[];let n=0;for(let i=0;i<s.len;i++)s.kinds[i]==="hard-break"&&(t.push({startSegmentIndex:n,endSegmentIndex:i,consumedEndSegmentIndex:i+1}),n=i+1);return n<s.len&&t.push({startSegmentIndex:n,endSegmentIndex:s.len,consumedEndSegmentIndex:s.len}),t}function Qr(s,e,t){if(e.len<=1)return e;const n=[],i=[],r=[],o=[];let a=-1,d=!1;function c(h){n.push(e.texts[h]),i.push(e.isWordLike[h]),r.push("text"),o.push(e.starts[h])}function l(h,x){let g=!1;for(let y=h;y<x;y++)g=g||e.isWordLike[y];const f=e.starts[h],p=x<e.len?e.starts[x]:s.length;n.push(s.slice(f,p)),i.push(g),r.push("text"),o.push(f)}function u(h){if(!(a<0)){if(d)a+1===h?c(a):l(a,h);else for(let x=a;x<h;x++)c(x);a=-1,d=!1}}for(let h=0;h<e.len;h++){const x=e.texts[h],g=e.kinds[h];if(g==="text"){a>=0&&!mr(e.texts[h-1],t)&&u(h),a<0&&(a=h),d=d||at(x);continue}u(h),n.push(x),i.push(e.isWordLike[h]),r.push(g),o.push(e.starts[h])}return u(e.len),{len:n.length,texts:n,isWordLike:i,kinds:r,starts:o}}function to(s,e,t="normal",n="normal"){const i=or(t),r=i.mode==="pre-wrap"?cr(s):ar(s);if(r.length===0)return{normalized:r,chunks:[],len:0,texts:[],isWordLike:[],kinds:[],starts:[]};const o=Zr(r,e,i),a=n==="keep-all"?Qr(r,o,e.breakKeepAllAfterPunctuation):o;return{normalized:r,chunks:Jr(a,i),...a}}let Mt=null;const Xn=new Map;let bt=null;const eo=96,no=new RegExp("\\p{Emoji_Presentation}","u"),so=/[\p{Emoji_Presentation}\p{Extended_Pictographic}\p{Regional_Indicator}\uFE0F\u20E3]/u;let Ye=null;const Un=new Map;function Xe(){if(Mt!==null)return Mt;if(typeof OffscreenCanvas<"u")return Mt=new OffscreenCanvas(1,1).getContext("2d"),Mt;if(typeof document<"u")return Mt=document.createElement("canvas").getContext("2d"),Mt;throw new Error("Text measurement requires OffscreenCanvas or a DOM canvas context.")}function io(s){let e=Xn.get(s);return e||(e=new Map,Xn.set(s,e)),e}function dt(s,e){let t=e.get(s);return t===void 0&&(t={width:Xe().measureText(s).width,containsCJK:at(s)},e.set(s,t)),t}function ie(){if(bt!==null)return bt;if(typeof navigator>"u")return bt={lineFitEpsilon:.005,carryCJKAfterClosingQuote:!1,breakKeepAllAfterPunctuation:!0,preferPrefixWidthsForBreakableRuns:!1,preferEarlySoftHyphenBreak:!1},bt;const s=navigator.userAgent,t=navigator.vendor==="Apple Computer, Inc."&&s.includes("Safari/")&&!s.includes("Chrome/")&&!s.includes("Chromium/")&&!s.includes("CriOS/")&&!s.includes("FxiOS/")&&!s.includes("EdgiOS/"),n=s.includes("Chrome/")||s.includes("Chromium/")||s.includes("CriOS/")||s.includes("Edg/");return bt={lineFitEpsilon:t?1/64:.005,carryCJKAfterClosingQuote:n,breakKeepAllAfterPunctuation:!t,preferPrefixWidthsForBreakableRuns:t,preferEarlySoftHyphenBreak:t},bt}function ro(s){const e=s.match(/(\d+(?:\.\d+)?)\s*px/);return e?parseFloat(e[1]):16}function Gn(){return Ye===null&&(Ye=new Intl.Segmenter(void 0,{granularity:"grapheme"})),Ye}function oo(s){return no.test(s)||s.includes("️")}function ao(s){return so.test(s)}function co(s,e){let t=Un.get(s);if(t!==void 0)return t;const n=Xe();n.font=s;const i=n.measureText("😀").width;if(t=0,i>e+.5&&typeof document<"u"&&document.body!==null){const r=document.createElement("span");r.style.font=s,r.style.display="inline-block",r.style.visibility="hidden",r.style.position="absolute",r.textContent="😀",document.body.appendChild(r);const o=r.getBoundingClientRect().width;document.body.removeChild(r),i-o>.5&&(t=i-o)}return Un.set(s,t),t}function lo(s){let e=0;const t=Gn();for(const n of t.segment(s))oo(n.segment)&&e++;return e}function uo(s,e){return e.emojiCount===void 0&&(e.emojiCount=lo(s)),e.emojiCount}function yt(s,e,t){return t===0?e.width:e.width-uo(s,e)*t}function ho(s,e,t,n,i){if(e.breakableFitAdvances!==void 0&&e.breakableFitMode===i)return e.breakableFitAdvances;e.breakableFitMode=i;const r=Gn(),o=[];for(const l of r.segment(s))o.push(l.segment);if(o.length<=1)return e.breakableFitAdvances=null,e.breakableFitAdvances;if(i==="sum-graphemes"){const l=[];for(const u of o){const h=dt(u,t);l.push(yt(u,h,n))}return e.breakableFitAdvances=l,e.breakableFitAdvances}if(i==="pair-context"||o.length>eo){const l=[];let u=null,h=0;for(const x of o){const g=dt(x,t),f=yt(x,g,n);if(u===null)l.push(f);else{const p=u+x,y=dt(p,t);l.push(yt(p,y,n)-h)}u=x,h=f}return e.breakableFitAdvances=l,e.breakableFitAdvances}const a=[];let d="",c=0;for(const l of o){d+=l;const u=dt(d,t),h=yt(d,u,n);a.push(h-c),c=h}return e.breakableFitAdvances=a,e.breakableFitAdvances}function xo(s,e){const t=Xe();t.font=s;const n=io(s),i=ro(s),r=e?co(s,i):0;return{cache:n,fontSize:i,emojiCorrection:r}}function fo(s){return s==="space"||s==="zero-width-break"||s==="soft-hyphen"}function jn(s){return s==="space"||s==="preserved-space"||s==="tab"||s==="zero-width-break"||s==="soft-hyphen"}function qn(s,e,t=s.widths.length){for(;e<t;){const n=s.kinds[e];if(!fo(n))break;e++}return e}function go(s,e){if(e<=0)return 0;const t=s%e;return Math.abs(t)<=1e-6?e:e-t}function po(s,e,t){return s.letterSpacing!==0&&e&&s.spacingGraphemeCounts[t]>0?s.letterSpacing:0}function Ue(s,e){return e===0?0:s+e}function mo(s,e){return s.letterSpacing!==0&&s.spacingGraphemeCounts[e]>0?s.letterSpacing:0}function yo(s,e,t,n,i){const r=e==="tab"?i+mo(s,t):s.lineEndFitAdvances[t];return Ue(n,r)}function Vn(s,e,t,n){const i=e==="tab"?0:s.lineEndFitAdvances[t];return Ue(n,i)}function Kn(s,e,t,n,i){const r=e==="tab"?i:s.lineEndPaintAdvances[t];return Ue(n,r)}function So(s,e,t){return s.letterSpacing!==0&&e?t+s.letterSpacing:t}function Fo(s,e){return s.letterSpacing===0?e:e+s.letterSpacing}function Ao(s,e,t,n,i){if(s.letterSpacing===0)return 0;if(i>0)return s.spacingGraphemeCounts[n]>0?s.letterSpacing:0;for(let r=n-1;r>=e;r--){const o=s.kinds[r];if(!(o==="space"||o==="zero-width-break"||o==="hard-break")){if(o==="soft-hyphen"){if(r===n-1)return 0;continue}return r===e&&t>0||s.spacingGraphemeCounts[r]>0?s.letterSpacing:0}}return 0}function Eo(s,e,t,n,i,r){return e+Ao(s,t,n,i,r)}function No(s,e,t){const{widths:n,kinds:i,breakableFitAdvances:r}=s;if(n.length===0)return 0;const a=ie().lineFitEpsilon,d=e+a;let c=0,l=0,u=!1,h=0,x=0,g=0,f=0,p=-1,y=0;function A(){p=-1,y=0}function E(B=g,D=f,v=l){c++,t==null||t(v,h,x,B,D),l=0,u=!1,A()}function w(B,D){u=!0,h=B,x=0,g=B+1,f=0,l=D}function N(B,D,v){u=!0,h=B,x=D,g=B,f=D+1,l=v}function F(B,D){if(!u){w(B,D);return}l+=D,g=B+1,f=0}function C(B,D){const v=r[B];for(let O=D;O<v.length;O++){const R=v[O];u?l+R>d?(E(),N(B,O,R)):(l+=R,g=B,f=O+1):N(B,O,R)}u&&g===B&&f===v.length&&(g=B+1,f=0)}let M=0;for(;M<n.length&&!(!u&&(M=qn(s,M),M>=n.length));){const B=n[M],D=i[M],v=jn(D);if(!u){B>d&&r[M]!==null?C(M,0):w(M,B),v&&(p=M+1,y=l-B),M++;continue}if(l+B>d){if(v){F(M,B),E(M+1,0,l-B),M++;continue}if(p>=0){if(g>p||g===p&&f>0){E();continue}E(p,0,y);continue}if(B>d&&r[M]!==null){E(),C(M,0),M++;continue}E();continue}F(M,B),v&&(p=M+1,y=l-B),M++}return u&&E(),c}function Co(s,e,t){if(s.simpleLineWalkFastPath)return No(s,e,t);const{widths:n,kinds:i,breakableFitAdvances:r,discretionaryHyphenWidth:o,chunks:a}=s;if(n.length===0||a.length===0)return 0;const d=ie(),c=d.lineFitEpsilon,l=e+c;let u=0,h=0,x=!1,g=0,f=0,p=0,y=0,A=-1,E=0,w=0,N=null;function F(){A=-1,E=0,w=0,N=null}function C(){return N==="soft-hyphen"&&A===p&&y===0?w:h}function M(b=p,L=y,k){u++,t!==void 0&&t(Eo(s,k??C(),g,f,b,L),g,f,b,L),h=0,x=!1,F()}function B(b,L){x=!0,g=b,f=0,p=b+1,y=0,h=L}function D(b,L,k){x=!0,g=b,f=L,p=b,y=L+1,h=k}function v(b,L){if(!x){B(b,L);return}h+=L,p=b+1,y=0}function O(b,L,k,H,j,K){if(!L)return;const V=Vn(s,b,k,j),ut=Kn(s,b,k,j,H);A=k+1,E=h-K+V,w=h-K+ut,N=b}function R(b,L){const k=r[b];for(let H=L;H<k.length;H++){const j=k[H];if(!x)D(b,H,j);else{const K=So(s,!0,j),V=h+K;Fo(s,V)>l?(M(),D(b,H,j)):(h=V,p=b,y=H+1)}}x&&p===b&&y===k.length&&(p=b+1,y=0)}function W(b){u++,t==null||t(0,b.startSegmentIndex,0,b.consumedEndSegmentIndex,0),F()}for(let b=0;b<a.length;b++){const L=a[b];if(L.startSegmentIndex===L.endSegmentIndex){W(L);continue}x=!1,h=0,g=L.startSegmentIndex,f=0,p=L.startSegmentIndex,y=0,F();let k=L.startSegmentIndex;for(;k<L.endSegmentIndex&&!(!x&&(k=qn(s,k,L.endSegmentIndex),k>=L.endSegmentIndex));){const H=i[k],j=jn(H),K=po(s,x,k),V=H==="tab"?go(h+K,s.tabStopAdvance):n[k],ut=K+V,qe=yo(s,H,k,K,V);if(H==="soft-hyphen"){x&&(p=k+1,y=0,A=k+1,E=h+o,w=h+o,N=H),k++;continue}if(!x){qe>l&&r[k]!==null?R(k,0):B(k,V),O(H,j,k,V,K,ut),k++;continue}if(h+qe>l){const Vo=h+Vn(s,H,k,K),Ko=h+Kn(s,H,k,K,V);if(N==="soft-hyphen"&&d.preferEarlySoftHyphenBreak&&E<=l){M(A,0,w);continue}if(j&&Vo<=l){v(k,ut),M(k+1,0,Ko),k++;continue}if(A>=0&&E<=l){if(p>A||p===A&&y>0){M();continue}const os=A;M(os,0,w),k=os;continue}if(qe>l&&r[k]!==null){M(),R(k,0),k++;continue}M();continue}v(k,ut),O(H,j,k,V,K,ut),k++}if(x){const H=A===L.consumedEndSegmentIndex?w:h;M(L.consumedEndSegmentIndex,0,H)}}return u}let Ge=null,Zn=new WeakMap;function wo(){return Ge===null&&(Ge=new Intl.Segmenter(void 0,{granularity:"grapheme"})),Ge}function Jn(s,e,t){let n=t.get(s);if(n!==void 0)return n;n=[];const i=wo();for(const r of i.segment(e[s]))n.push(r.segment);return t.set(s,n),n}function Mo(s,e,t){return t>e&&s[t-1]==="soft-hyphen"}function Qn(s,e,t,n){for(let i=t;i<n;i++)s+=e[i];return s}function bo(s){let e=Zn.get(s);return e!==void 0||(e=new Map,Zn.set(s,e)),e}function Do(s,e,t,n,i,r){let o="";const a=Mo(s.kinds,t,i);for(let d=t;d<i;d++)if(!(s.kinds[d]==="soft-hyphen"||s.kinds[d]==="hard-break"))if(d===t&&n>0){const c=Jn(d,s.segments,e);o=Qn(o,c,n,c.length)}else o+=s.segments[d];if(r>0){a&&(o+="-");const d=Jn(i,s.segments,e);o=Qn(o,d,t===i?n:0,r)}else a&&(o+="-");return o}let je=null;function ts(){return je===null&&(je=new Intl.Segmenter(void 0,{granularity:"grapheme"})),je}function vo(s){return{widths:[],lineEndFitAdvances:[],lineEndPaintAdvances:[],kinds:[],simpleLineWalkFastPath:!0,segLevels:null,breakableFitAdvances:[],letterSpacing:0,spacingGraphemeCounts:[],discretionaryHyphenWidth:0,tabStopAdvance:0,chunks:[],segments:[]}}function Bo(s,e){const t=[];let n=[],i=0,r=!1,o=!1,a=!1;function d(){n.length!==0&&(t.push({text:n.length===1?n[0]:n.join(""),start:i}),n=[],r=!1,o=!1,a=!1)}function c(u,h,x){n=[u],i=h,r=x,o=We(u),a=te.has(u)}function l(u,h){n.push(u),r=r||h;const x=We(u);u.length===1&&mt.has(u)?o=o||x:o=x,a=!1}for(const u of ts().segment(s)){const h=u.segment,x=at(h);if(n.length===0){c(h,u.index,x);continue}if(a||He.has(h)||mt.has(h)||e.carryCJKAfterClosingQuote&&x&&o){l(h,x);continue}if(!r&&!x){l(h,x);continue}d(),c(h,u.index,x)}return d(),t}function es(s,e){if(e==="zero-width-break"||e==="soft-hyphen"||e==="hard-break")return 0;if(e==="tab")return 1;let t=0;const n=ts();for(const i of n.segment(s))t++;return t}function ko(s,e,t){return e>1?s+(e-1)*t:s}function Lo(s,e,t,n,i){const r=ie(),{cache:o,emojiCorrection:a}=xo(e,ao(s.normalized)),d=yt("-",dt("-",o),a)+(i===0?0:i*2),l=yt(" ",dt(" ",o),a)*8,u=i!==0;if(s.len===0)return vo();const h=[],x=[],g=[],f=[];let p=s.chunks.length<=1&&!u;const y=t?[]:null,A=[],E=[],w=t?[]:null,N=Array.from({length:s.len});function F(D,v,O,R,W,b,L,k){W!=="text"&&W!=="space"&&W!=="zero-width-break"&&(p=!1),h.push(v),x.push(O),g.push(R),f.push(W),y==null||y.push(b),A.push(L),u&&E.push(k),w!==null&&w.push(D)}function C(D,v,O,R,W){const b=dt(D,o),L=u?es(D,v):0,k=ko(yt(D,b,a),L,i),H=v==="space"||v==="preserved-space"||v==="zero-width-break"?0:k,j=H===0?0:H+(L>0?i:0),K=v==="space"||v==="zero-width-break"?0:k;if(W&&R&&D.length>1){let V="sum-graphemes";i!==0?V="segment-prefixes":se(D)?V="pair-context":r.preferPrefixWidthsForBreakableRuns&&(V="segment-prefixes");const ut=ho(D,b,o,a,V);F(D,k,j,K,v,O,ut,L);return}F(D,k,j,K,v,O,null,L)}for(let D=0;D<s.len;D++){N[D]=h.length;const v=s.texts[D],O=s.isWordLike[D],R=s.kinds[D],W=s.starts[D];if(R==="soft-hyphen"){F(v,0,d,d,R,W,null,0);continue}if(R==="hard-break"){F(v,0,0,0,R,W,null,0);continue}if(R==="tab"){F(v,0,0,0,R,W,null,u?es(v,R):0);continue}const b=dt(v,o);if(R==="text"&&b.containsCJK){const k=Bo(v,r);for(let H=0;H<k.length;H++){const j=k[H];C(j.text,"text",W+j.start,O,!at(j.text))}continue}C(v,R,W,O,!0)}const M=To(s.chunks,N,h.length),B=y===null?null:sr(s.normalized,y);return w!==null?{widths:h,lineEndFitAdvances:x,lineEndPaintAdvances:g,kinds:f,simpleLineWalkFastPath:p,segLevels:B,breakableFitAdvances:A,letterSpacing:i,spacingGraphemeCounts:E,discretionaryHyphenWidth:d,tabStopAdvance:l,chunks:M,segments:w}:{widths:h,lineEndFitAdvances:x,lineEndPaintAdvances:g,kinds:f,simpleLineWalkFastPath:p,segLevels:B,breakableFitAdvances:A,letterSpacing:i,spacingGraphemeCounts:E,discretionaryHyphenWidth:d,tabStopAdvance:l,chunks:M}}function To(s,e,t){const n=[];for(let i=0;i<s.length;i++){const r=s[i],o=r.startSegmentIndex<e.length?e[r.startSegmentIndex]:t,a=r.endSegmentIndex<e.length?e[r.endSegmentIndex]:t,d=r.consumedEndSegmentIndex<e.length?e[r.consumedEndSegmentIndex]:t;n.push({startSegmentIndex:o,endSegmentIndex:a,consumedEndSegmentIndex:d})}return n}function Oo(s,e,t,n){const i=n==null?void 0:n.wordBreak,r=(n==null?void 0:n.letterSpacing)??0,o=to(s,ie(),n==null?void 0:n.whiteSpace,i);return Lo(o,e,t,i,r)}function Po(s,e,t){return Oo(s,e,!0,t)}function Qo(s){return s}function Ro(s,e,t,n,i,r,o){return{text:Do(s,e,n,i,r,o),width:t,start:{segmentIndex:n,graphemeIndex:i},end:{segmentIndex:r,graphemeIndex:o}}}function Io(s,e,t){const n=[];if(s.widths.length===0)return{lineCount:0,height:0,lines:n};const i=bo(s),r=Co(s,e,(o,a,d,c,l)=>{n.push(Ro(s,i,o,a,d,c,l))});return{lineCount:r,height:r*t,lines:n}}function Ho(s,e,t,n){const{width:i,height:r}=X(e),{color:o=q.color,strokeColor:a=q.strokeColor,strokeWidth:d=q.strokeWidth,strokeType:c=q.strokeType,background:l=q.background,borderRadius:u=q.borderRadius,fixedSize:h=q.fixedSize}=e.properties.style||q,x=Rn(s,e,t,n);x.setAttribute("data-annotation-type",e.properties.type),x.classList.add("annotation-text"),x.setAttribute("fill",`${o}`);let g=x.firstChild;for(;g;){const E=g.nextSibling;g.nodeType===1&&g.tagName!=="rect"&&x.removeChild(g),g=E}let f=x.firstChild;f||(f=T("rect"),x.appendChild(f));const p=-i/2,y=-r/2;u&&(f.setAttribute("rx",`${u}`),f.setAttribute("ry",`${u}`)),c&&c!=="none"&&(f.setAttribute("stroke",a||"black"),f.setAttribute("stroke-width",`${d}`),c==="dashed"&&f.setAttribute("stroke-dasharray","5,5")),l&&l.length&&(n.hoveredFeature===e.id?f.setAttribute("fill",At(l)):f.setAttribute("fill",l)),f.setAttribute("width",`${i}`),f.setAttribute("height",`${r}`);const A=J(e);return f.setAttribute("x",`${p}`),f.setAttribute("y",`${y}`),zo(e,x,p,y),x.setAttribute("transform",n.getScreenAlignedTransform(A.x,A.y,!h)),s.appendChild(x),x}let zt=null;const ns=new Map;function _o(s,e){const t=`${s}|${e}`,n=ns.get(t);if(n!=null)return n;try{const i=document.createElement("div"),r=document.createElement("span");i.style.cssText=`font:${s};line-height:${e}px;position:fixed;left:-9999px;top:0;margin:0;padding:0;visibility:hidden;`,r.style.cssText="display:inline-block;width:1px;height:1px;vertical-align:baseline;",i.appendChild(r),document.body.appendChild(i);const o=r.getBoundingClientRect().bottom-i.getBoundingClientRect().top;if(document.body.removeChild(i),o>0&&o<=e)return ns.set(t,o),o}catch{}try{if(zt||(zt=document.createElement("canvas").getContext("2d")),zt){zt.font=s;const i=zt.measureText("M"),r=i.fontBoundingBoxAscent,o=i.fontBoundingBoxDescent;if(r!=null&&o!=null)return Math.max(0,(e-r-o)/2)+r}}catch{}return e}function zo(s,e,t=0,n=0){const{width:i,height:r}=X(s),{fontSize:o=q.fontSize,font:a=q.font,padding:d=0}=s.properties.style||{};if(i===r&&i===0)return;const c=parseFloat(o.toString())*Xt,l=`${o}px ${a}`.replace(/(px)+/g,"px"),u=i-d*2,h=r-d,x=s.properties.content||"";if(x.length===0)return;const g=Po(x,l,{whiteSpace:"pre-wrap",wordBreak:"normal"}),{lines:f}=Io(g,u,c),p=Math.max(1,Math.floor(h/c)),y=f.slice(0,p);if(f.length>p&&y.length>0){const w=y[y.length-1];y[y.length-1]={...w,text:w.text.trimEnd()+"…"}}const A=T("text");A.setAttribute("font-size",`${parseFloat(o.toString())}`),A.setAttribute("font-family",`${a}`),A.setAttribute("transform",`translate(${t+d}, ${n+d})`);const E=_o(l,c);y.forEach((w,N)=>{const F=T("tspan");F.setAttribute("x","0"),F.setAttribute("dy",`${N===0?E:c}`);let C=0,M;const B=Sn();for(;(M=B.exec(w.text))!==null;){M.index>C&&F.appendChild(document.createTextNode(w.text.slice(C,M.index)));const D=document.createElementNS("http://www.w3.org/2000/svg","a");D.setAttribute("href",M[0]),D.setAttribute("target","_blank"),D.setAttribute("rel","noopener noreferrer"),D.setAttribute("class",ke),D.textContent=M[0],F.appendChild(D),C=M.index+M[0].length}C<w.text.length&&F.appendChild(document.createTextNode(w.text.slice(C))),A.appendChild(F)}),e.appendChild(A)}class Wo extends kn{constructor(t,n){super(t,n);m(this,"features",new Map);m(this,"arrowsRoot",null);m(this,"shapesRoot",null);m(this,"commentsRoot",null);m(this,"annotationsRoot",null);m(this,"visibleFeatures",new Set);m(this,"isExporting",!1);m(this,"render",t=>{if(!t)return;const{features:n,hoveredFeature:i,selectedFeatures:r,liveUpdates:o}=this.store.getState();(!this.annotationsRoot||!t.contains(this.annotationsRoot))&&(t.innerHTML="",t.appendChild(this.getDefs()),this.arrowsRoot=T("g"),this.commentsRoot=T("g"),this.annotationsRoot=T("g"),this.shapesRoot=T("g"),this.annotationsRoot.appendChild(this.arrowsRoot),this.annotationsRoot.appendChild(this.shapesRoot),this.annotationsRoot.appendChild(this.commentsRoot),t.appendChild(this.annotationsRoot)),t.removeChild(this.annotationsRoot);const a=this.arrowsRoot,d=this.annotationsRoot,c=this.commentsRoot,l=this.shapesRoot,u=this.store.getState(),h=this.getViewportBounds(),x=new Set(Object.keys(n));this.removeFeatures(x);const g=new Set;for(let f of Object.values(n)){if(o[f.id]&&(f={...f,...o[f.id]}),!this.isExporting&&!this.isFeatureVisible(f,h))continue;g.add(f.id);let p=this.features.get(f.id);G(f)?p=Rn(l,f,p,u):_(f)?p=Ho(l,f,p,u):I(f)?p=Ki(c,f,p,u,this.visibleFeatures.has(f.id)):nt(f)?p=Qi(l,f,p,u):tt(f)&&(p=$i(a,f,u.options.minArrowHeight,u.options.maxArrowHeight,p,u)),p&&this.features.set(f.id,p)}this.applyStateClasses(d,i,r),t.appendChild(d),this.visibleFeatures.clear(),this.visibleFeatures=g});m(this,"throttleRender",Se(()=>this.render(this.layer.element),16,!0));m(this,"refresh",()=>{this.layer.refresh()});m(this,"onExportStart",()=>{this.isExporting=!0});m(this,"onExportEnd",()=>{this.isExporting=!1});t.events.on("viewExportStart",this.onExportStart),t.events.on("afterImageExport",this.onExportEnd),this.layer=this.ogma.layers.addSVGLayer({draw:this.render},Yt.SHAPES),this.store.subscribe(i=>({features:i.features,liveUpdates:i.liveUpdates,hoveredFeature:i.hoveredFeature,selectedFeatures:i.selectedFeatures,editingFeature:i.editingFeature,rotation:i.rotation,zoom:i.zoom}),this.throttleRender,{equalityFn:(i,r)=>i.features===r.features&&i.liveUpdates===r.liveUpdates&&i.hoveredFeature===r.hoveredFeature&&i.selectedFeatures===r.selectedFeatures&&i.editingFeature===r.editingFeature&&i.rotation===r.rotation&&i.zoom===r.zoom})}getViewportBounds(){const t=this.ogma;let n=null;try{n=t.view.getSize()}catch{return[0,0,0,0]}if(!n)return[0,0,0,0];const{width:i,height:r}=n,o=1.5,a=t.view.screenToGraphCoordinates({x:0,y:0}),d=t.view.screenToGraphCoordinates({x:i*o,y:0}),c=t.view.screenToGraphCoordinates({x:0,y:r*o}),l=t.view.screenToGraphCoordinates({x:i*o,y:r*o});return[Math.min(a.x,d.x,c.x,l.x),Math.min(a.y,d.y,c.y,l.y),Math.max(a.x,d.x,c.x,l.x),Math.max(a.y,d.y,c.y,l.y)]}isFeatureVisible(t,n){const i=t.geometry.bbox;if(!i)return!0;const[r,o,a,d]=i;return!(a<n[0]||r>n[2]||d<n[1]||o>n[3])}getDefs(){const t=T("defs");t.appendChild(Gi());const n=T("filter");n.setAttribute("id","softShadow"),n.setAttribute("x","-50%"),n.setAttribute("y","-50%"),n.setAttribute("width","200%"),n.setAttribute("height","200%");const i=T("feGaussianBlur");i.setAttribute("in","SourceAlpha"),i.setAttribute("stdDeviation","2"),i.setAttribute("result","blur");const r=T("feOffset");r.setAttribute("in","blur"),r.setAttribute("dx","0"),r.setAttribute("dy","1"),r.setAttribute("result","offsetBlur");const o=T("feComponentTransfer");o.setAttribute("in","offsetBlur"),o.setAttribute("result","shadow");const a=T("feFuncA");a.setAttribute("type","linear"),a.setAttribute("slope","0.25"),o.appendChild(a);const d=T("feMerge"),c=T("feMergeNode");c.setAttribute("in","shadow");const l=T("feMergeNode");return l.setAttribute("in","SourceGraphic"),d.appendChild(c),d.appendChild(l),n.appendChild(i),n.appendChild(r),n.appendChild(o),n.appendChild(d),t.appendChild(n),t}removeFeatures(t){for(const n of this.features.keys())if(!t.has(n)){const i=this.features.get(n);i&&i.parentNode&&i.parentNode.removeChild(i),this.features.delete(n)}}applyStateClasses(t,n,i){if(n!==null){const r=t.querySelector(`[data-annotation="${n}"]`);r&&r.classList.add("annotation-hovered")}i.forEach(r=>{const o=t.querySelector(`[data-annotation="${r}"]`);o&&o.classList.add("annotation-selected")})}destroy(){this.features.clear(),this.layer.destroy(),this.ogma.events.off(this.onExportStart),this.ogma.events.off(this.onExportEnd),super.destroy()}}const ss=s=>{let e;const t=new Set,n=(c,l)=>{const u=typeof c=="function"?c(e):c;if(!Object.is(u,e)){const h=e;e=l??(typeof u!="object"||u===null)?u:Object.assign({},e,u),t.forEach(x=>x(e,h))}},i=()=>e,a={setState:n,getState:i,getInitialState:()=>d,subscribe:c=>(t.add(c),()=>t.delete(c))},d=e=s(n,i,a);return a},is=s=>s?ss(s):ss;var rs=(s,e,t)=>(i,r)=>({pastStates:(t==null?void 0:t.pastStates)||[],futureStates:(t==null?void 0:t.futureStates)||[],undo:(o=1)=>{var a,d;if(r().pastStates.length){const c=((a=t==null?void 0:t.partialize)==null?void 0:a.call(t,e()))||e(),l=r().pastStates.splice(-o,o),u=l.shift();s(u),i({pastStates:r().pastStates,futureStates:r().futureStates.concat(((d=t==null?void 0:t.diff)==null?void 0:d.call(t,c,u))||c,l.reverse())})}},redo:(o=1)=>{var a,d;if(r().futureStates.length){const c=((a=t==null?void 0:t.partialize)==null?void 0:a.call(t,e()))||e(),l=r().futureStates.splice(-o,o),u=l.shift();s(u),i({pastStates:r().pastStates.concat(((d=t==null?void 0:t.diff)==null?void 0:d.call(t,c,u))||c,l.reverse()),futureStates:r().futureStates})}},clear:()=>i({pastStates:[],futureStates:[]}),isTracking:!0,pause:()=>i({isTracking:!1}),resume:()=>i({isTracking:!0}),setOnSave:o=>i({_onSave:o}),_onSave:t==null?void 0:t.onSave,_handleSet:(o,a,d,c)=>{var l,u;t!=null&&t.limit&&r().pastStates.length>=(t==null?void 0:t.limit)&&r().pastStates.shift(),(u=(l=r())._onSave)==null||u.call(l,o,d),i({pastStates:r().pastStates.concat(c||o),futureStates:[]})}}),$o=(s,e)=>(n,i,r)=>{var c,l;r.temporal=is(((c=e==null?void 0:e.wrapTemporal)==null?void 0:c.call(e,rs(n,i,e)))||rs(n,i,e));const o=((l=e==null?void 0:e.handleSet)==null?void 0:l.call(e,r.temporal.getState()._handleSet))||r.temporal.getState()._handleSet,a=u=>{var g,f,p;if(!r.temporal.getState().isTracking)return;const h=((g=e==null?void 0:e.partialize)==null?void 0:g.call(e,i()))||i(),x=(f=e==null?void 0:e.diff)==null?void 0:f.call(e,u,h);x===null||(p=e==null?void 0:e.equality)!=null&&p.call(e,u,h)||o(u,void 0,h,x)},d=r.setState;return r.setState=(...u)=>{var x;const h=((x=e==null?void 0:e.partialize)==null?void 0:x.call(e,i()))||i();d(...u),a(h)},s((...u)=>{var x;const h=((x=e==null?void 0:e.partialize)==null?void 0:x.call(e,i()))||i();n(...u),a(h)},i,r)};const Yo=s=>(e,t,n)=>{const i=n.subscribe;return n.subscribe=(o,a,d)=>{let c=o;if(a){const l=(d==null?void 0:d.equalityFn)||Object.is;let u=o(n.getState());c=h=>{const x=o(h);if(!l(u,x)){const g=u;a(u=x,g)}},d!=null&&d.fireImmediately&&a(u,u)}return i(c)},s(e,t,n)},Xo=[0,0,0,0];function Uo(s,e){const t=Object.keys(s.features),n=Object.keys(e.features);if(t.length!==n.length)return!1;for(const i of t)if(!(i in e.features))return!1;for(const i of t){const r=s.features[i],o=e.features[i],a=r.geometry,d=o.geometry;if(a.coordinates!==d.coordinates||r.properties!==o.properties||r.properties.style!==o.properties.style||a!==d)return!1}return s.drawingFeature===e.drawingFeature}const Go=s=>{const e=is()(Yo($o((t,n)=>({features:{},liveUpdates:{},isDragging:!1,hoveringHandle:!1,hoveredHandle:-1,hoveredFeature:null,selectedFeatures:new Set,lastChangedFeatures:[],drawingFeature:null,drawingPoints:null,editingFeature:null,mousePressed:!1,mousePressPoint:null,rotation:0,sin:0,cos:1,revRotation:0,revSin:0,revCos:1,zoom:1,invZoom:1,options:{showSendButton:(s==null?void 0:s.showSendButton)??!0,sendButtonIcon:(s==null?void 0:s.sendButtonIcon)??le,showEditButton:(s==null?void 0:s.showEditButton)??!0,editButtonIcon:(s==null?void 0:s.editButtonIcon)??de,minArrowHeight:(s==null?void 0:s.minArrowHeight)??20,maxArrowHeight:(s==null?void 0:s.maxArrowHeight)??30,detectMargin:(s==null?void 0:s.detectMargin)??2,magnetRadius:(s==null?void 0:s.magnetRadius)??10,magnetHandleRadius:(s==null?void 0:s.magnetHandleRadius)??5,textPlaceholder:(s==null?void 0:s.textPlaceholder)??"Type here"},setOptions:i=>t(r=>({options:{...r.options,...i}})),removeFeature:i=>t(r=>{var h,x,g,f;const o=r.features[i];if(!o)return r;const{features:a,liveUpdates:d}=r,c=new Set([i]);if((I(o)||_(o))&&Object.values(a).forEach(p=>{var y,A,E,w;tt(p)&&(((A=(y=p.properties.link)==null?void 0:y.end)==null?void 0:A.id)===i||((w=(E=p.properties.link)==null?void 0:E.start)==null?void 0:w.id)===i)&&c.add(p.id)}),tt(o)){const p=((x=(h=o.properties.link)==null?void 0:h.end)==null?void 0:x.type)==="comment"?o.properties.link.end.id:((f=(g=o.properties.link)==null?void 0:g.start)==null?void 0:f.type)==="comment"?o.properties.link.start.id:null;if(p){let y=0;if(Object.values(r.features).forEach(A=>{var E,w,N,F;tt(A)&&A.id!==i&&(((w=(E=A.properties.link)==null?void 0:E.end)==null?void 0:w.id)===p||((F=(N=A.properties.link)==null?void 0:N.start)==null?void 0:F.id)===p)&&y++}),y===0)return console.error("Cannot delete last arrow attached to comment. Delete the comment instead."),r}}const l={...a},u={...d};return c.forEach(p=>{delete l[p],delete u[p]}),{features:l,liveUpdates:u}}),addFeature:i=>t(r=>({features:{...r.features,[i.id]:i}})),startLiveUpdate:i=>{t(r=>({liveUpdates:i.reduce((o,a)=>({...o,[a]:{...r.features[a]}}),{})}))},applyLiveUpdate:(i,r)=>{t(o=>({liveUpdates:{...o.liveUpdates,[i]:{...o.liveUpdates[i],...r}}}))},applyLiveUpdates:i=>{t(r=>{const o={...r.liveUpdates};for(const a in i)o[a]=i[a];return{liveUpdates:o}})},commitLiveUpdates:i=>{const{features:r,liveUpdates:o}=n(),a={...r},d=[],c=Object.keys(o);i||(i=new Set(c)),c.forEach(l=>{const u=o[l];a[l]&&Object.keys(u).length>0&&(a[l]={...a[l],...u},d.push(l))}),t({features:a,liveUpdates:{},isDragging:!1,lastChangedFeatures:d})},cancelLiveUpdates:()=>t({liveUpdates:{},isDragging:!1}),updateFeature:(i,r)=>t(o=>{const a={...o.features[i],...r},d={...o.liveUpdates};return delete d[i],{features:{...o.features,[i]:a},liveUpdates:d}}),updateFeatures:i=>t(r=>{const o={...r.features};return Object.entries(i).forEach(([a,d])=>{o[a]&&(o[a]={...o[a],...d})}),{features:o}}),batchUpdate:i=>{const r=e.temporal.getState();r.pause(),i(),r.resume()},getFeature:i=>n().features[i],getMergedFeature:i=>{const r=n().features[i],o=n().liveUpdates[i];if(r)return o?{...r,...o}:r},getAllFeatures:()=>{const{features:i,liveUpdates:r}=n();return Object.entries(i).map(([o,a])=>{const d=r[o];return d?{...a,...d}:a})},setHoveredFeature:i=>t({hoveredFeature:i}),setSelectedFeatures:i=>t({selectedFeatures:new Set(i)}),addToSelection:i=>{const{selectedFeatures:r}=n(),o=new Set(r);o.add(i),t({selectedFeatures:o})},removeFromSelection:i=>{const{selectedFeatures:r}=n(),o=new Set(r);o.delete(i),t({selectedFeatures:o})},toggleSelection:i=>{const{selectedFeatures:r}=n(),o=new Set(r);o.has(i)?o.delete(i):o.add(i),t({selectedFeatures:o})},clearSelection:()=>t({selectedFeatures:new Set}),isHovered:i=>n().hoveredFeature===i,isSelected:i=>n().selectedFeatures.has(i),setRotation:i=>{t({rotation:i,sin:Math.sin(i),cos:Math.cos(i),revRotation:-i,revSin:Math.sin(-i),revCos:Math.cos(-i)})},setZoom:i=>{t({zoom:i,invZoom:1/i})},getScreenAlignedTransform(i,r,o=!0){const a=this.revSin,d=this.revCos,c=i*d-r*a,l=i*a+r*d,u=o?1:this.invZoom;return`matrix(${u}, 0, 0, ${u}, ${c}, ${l})`},getRotationTransform(i,r){const o=this.revSin,a=this.revCos,d=i*a-r*o,c=i*o+r*a;return`matrix(${a}, ${o}, ${-o}, ${a}, ${-d}, ${-c})`},getRotatedBBox(i,r,o,a){return zs(i,r,o-i,a-r,this.sin,this.cos,i+(o-i)/2,r+(a-r)/2,Xo)},setDrawingPoints:i=>t({drawingPoints:i})}),{limit:250,partialize:t=>({drawingFeature:t.drawingFeature,isDragging:t.isDragging,features:t.features,lastChangedFeatures:t.lastChangedFeatures}),equality:Uo,handleSet:t=>n=>{n.drawingFeature===null&&t(n)}})));return e},jo={detectMargin:2,magnetHandleRadius:5,magnetRadius:10,textPlaceholder:"Type here",showSendButton:!0,sendButtonIcon:le,showEditButton:!0,editButtonIcon:de,minArrowHeight:20,maxArrowHeight:30};class qo extends ls{constructor(t,n={}){super();m(this,"ogma");m(this,"store");m(this,"renderers",{});m(this,"interactions");m(this,"editor");m(this,"links");m(this,"index");m(this,"drawing");m(this,"snapping");m(this,"selectionManager");m(this,"historyManager");m(this,"updateManager");m(this,"commentManager");m(this,"onRotate",()=>this.store.getState().setRotation(this.ogma.view.getAngle()));m(this,"onZoom",()=>{const t=this.ogma.view.getZoom();this.store.getState().setZoom(t),this.commentManager.updateCommentModesForZoom(t)});m(this,"onLayout",()=>{this.links.update()});this.ogma=t;const i={...jo,...n};this.store=Go(i),this.index=new Ii(this.store),this.snapping=new Di(this.ogma,{detectMargin:n.detectMargin===void 0?10:n.detectMargin,magnetRadius:n.magnetRadius===void 0?10:n.magnetRadius},this.index,this.store),this.links=new fi(this.ogma,this.snapping,this.store,(r,o)=>{this.emit(en,{arrow:r,link:o})}),this.interactions=new vi(this.ogma,this.store,this.index),this.editor=new di(this.ogma,this.store,this.snapping,this.links,this.interactions),this.drawing=new Js(this.ogma,this.store,this.editor,this.interactions,this.links,this,this.index),this.selectionManager=new ti(this.store),this.historyManager=new Qs(this.store,this.links),this.updateManager=new ei(this.store),this.commentManager=new js(this.store),this.initializeRenderers(),this.setupEvents()}initializeRenderers(){this.renderers.shapes=new Wo(this.ogma,this.store),this.renderers.handles=new Hi(this.ogma,this.store)}setupEvents(){this.ogma.events.on("rotate",this.onRotate).on("zoom",this.onZoom).on("layoutEnd",this.onLayout),this.editor.addEventListener(Ft,t=>this.emit(Ft,{id:t.detail.id,position:t.detail.position})),this.editor.addEventListener(vt,t=>this.emit(vt,{id:t.detail.id,position:t.detail.position})),this.interactions.addEventListener(Wt,(t=>this.emit(Wt,{id:t.detail.id,position:t.detail.position}))),this.store.temporal.subscribe(t=>{this.emit(nn,{canUndo:t.pastStates.length>0,canRedo:t.futureStates.length>0})}),this.store.subscribe(t=>t.selectedFeatures,(t,n)=>{const i=Array.from(t).filter(r=>!(n!=null&&n.has(r)));if(i.length>0&&this.emit(Ke,{ids:i}),n){const r=Array.from(n).filter(o=>!t.has(o));r.length>0&&this.emit(Ze,{ids:r})}}),this.store.subscribe(t=>t.drawingFeature,(t,n)=>{t===null&&n!==null&&this.emit(oe,{id:n})}),this.store.subscribe(t=>t.features,(t,n)=>{for(const i of Object.keys(t))n[i]?n[i]!==t[i]&&this.emit(tn,t[i]):this.emit($t,{id:i});for(const i of Object.keys(n))t[i]||this.emit(Je,{id:i})})}setOptions(t={}){return this.store.getState().setOptions(t),this.store.getState().options}add(t){return this.updateManager.add(t),this}remove(t){return this.updateManager.remove(t),this}undo(){return this.historyManager.undo()}redo(){return this.historyManager.redo()}canUndo(){return this.historyManager.canUndo()}canRedo(){return this.historyManager.canRedo()}clearHistory(){this.historyManager.clearHistory()}getAnnotations(){return this.updateManager.getAnnotations()}select(t){return this.selectionManager.select(t),this}unselect(t){return this.selectionManager.unselect(t),this}cancelDrawing(){var t;return this.drawing.cancelPendingDrawing(),(t=this.editor.getActiveHandler())==null||t.cancelDrawing(),this.emit(Qe),this}enableArrowDrawing(t){return this.drawing.enableArrowDrawing(t),this}enableTextDrawing(t){return this.drawing.enableTextDrawing(t),this}enableBoxDrawing(t){return this.drawing.enableBoxDrawing(t),this}enablePolygonDrawing(t){return this.drawing.enablePolygonDrawing(t),this}enableCommentDrawing(t={}){return this.drawing.enableCommentDrawing(t),this}enablePlacement(t){return this.drawing.enablePlacement(t),this}startComment(t,n,i,r){return this.drawing.startComment(t,n,i,r),this}startBox(t,n,i){return this.drawing.startBox(t,n,i),this}startArrow(t,n,i){return this.drawing.startArrow(t,n,i),this}startText(t,n,i){return this.drawing.startText(t,n,i),this}startPolygon(t,n,i){return this.drawing.startPolygon(t,n,i),this}getSelectedAnnotations(){return this.selectionManager.getSelectedAnnotations()}getSelected(){return this.selectionManager.getSelected()}getAnnotation(t){return this.updateManager.getAnnotation(t)}setScale(t,n,i,r){return this.updateManager.setScale(t,n,i,r),this}toggleComment(t){return this.commentManager.toggleComment(t),this}destroy(){this.ogma.events.off(this.onRotate).off(this.onZoom),this.links.destroy(),Object.values(this.renderers).forEach(t=>t.destroy()),this.interactions.destroy(),this.editor.destroy()}updateStyle(t,n){return this.updateManager.updateStyle(t,n),this}update(t){return this.updateManager.update(t),this}link(t,n,i=it){const r=this.getAnnotation(t);if(!r)throw new Error(`Arrow with id ${t} not found`);return this.editor.getArrowHandler().link(r,n,i),this}isDrawing(){return this.drawing.isDrawing()}}S.COMMENT_MODE_COLLAPSED=rt,S.COMMENT_MODE_EXPANDED=Bt,S.Control=qo,S.DATA_ATTR=xs,S.DEFAULT_EDIT_ICON=de,S.DEFAULT_SEND_ICON=le,S.EVT_ADD=$t,S.EVT_CANCEL_DRAWING=Qe,S.EVT_CLICK=Wt,S.EVT_COMPLETE_DRAWING=oe,S.EVT_DRAG=Dt,S.EVT_DRAG_END=vt,S.EVT_DRAG_START=Ft,S.EVT_HISTORY=nn,S.EVT_HOVER=us,S.EVT_LINK=en,S.EVT_REMOVE=Je,S.EVT_SELECT=Ke,S.EVT_UNHOVER=hs,S.EVT_UNSELECT=Ze,S.EVT_UPDATE=tn,S.HL_BRIGHTEN=ce,S.LAYERS=Yt,S.NONE=ds,S.SIDE_END=it,S.SIDE_START=$,S.TARGET_TYPES=P,S.TEXT_LINE_HEIGHT=Xt,S.adjustColorBrightness=Fe,S.asColor=Ys,S.asHexColor=Xs,S.asRgbColor=Us,S.asRgbaColor=Gs,S.brighten=At,S.calculateCommentZoomThreshold=pn,S.canDetachArrowEnd=ni,S.canDetachArrowStart=An,S.clientToContainerPosition=Tt,S.colorToRgba=Ms,S.createArrow=Ot,S.createBox=Ee,S.createComment=we,S.createCommentWithArrow=_s,S.createPolygon=mn,S.createSVGElement=T,S.createText=Ne,S.cursors=z,S.darken=Bs,S.debounce=Ds,S.debounceTail=vs,S.defaultArrowOptions=Ts,S.defaultArrowStyle=gt,S.defaultBoxOptions=Os,S.defaultBoxStyle=Nt,S.defaultCommentOptions=qt,S.defaultCommentStyle=Z,S.defaultPolygonProperties=$s,S.defaultPolygonStyle=lt,S.defaultTextOptions=Ps,S.defaultTextStyle=q,S.detectArrow=Ae,S.detectBox=xn,S.detectComment=fn,S.detectPolygon=Me,S.detectText=Ce,S.getAnnotationsBounds=Es,S.getArrowEnd=me,S.getArrowEndPoints=Ut,S.getArrowSide=kt,S.getArrowStart=pe,S.getAttachmentPointOnNode=ws,S.getBbox=et,S.getBoxCenter=J,S.getBoxPosition=xt,S.getBoxSize=X,S.getBrowserWindow=ye,S.getCommentPosition=Is,S.getCommentSize=gn,S.getCommentZoomThreshold=Hs,S.getCoordinates=Lt,S.getHandleId=As,S.getPolygonBounds=xe,S.getPolygonCenter=fe,S.getTextBbox=et,S.getTextPosition=xt,S.getTextSize=X,S.handleDetectionThreshold=ae,S.handleRadius=sn,S.hexShortToLong=Gt,S.hexToRgba=ln,S.isAnnotationCollection=be,S.isArrow=tt,S.isBox=G,S.isColor=yn,S.isComment=I,S.isCommentArrow=Fn,S.isHexColor=De,S.isPolygon=nt,S.isRgbColor=ve,S.isRgbaColor=Be,S.isText=_,S.migrateBoxOrTextIfNeeded=un,S.parseColor=bs,S.rgbToRgba=dn,S.scaleGeometry=Cs,S.scalePolygon=Ss,S.setArrowEnd=an,S.setArrowEndPoint=cn,S.setArrowStart=on,S.setBbox=rn,S.setTextBbox=rn,S.simplifyPolygon=he,S.throttle=Se,S.toggleCommentMode=Rs,S.translatePolygon=ys,S.updateBbox=ct,S.updatePolygonBbox=ge,S.updateTextBbox=ct,Object.defineProperty(S,Symbol.toStringTag,{value:"Module"})}));