@linkurious/ogma-annotations 2.0.3 → 2.1.1
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/Polygon-DVFVmDbR.js +780 -0
- package/dist/index.js +8 -13
- package/dist/index.mjs +4352 -3732
- package/dist/ogma-annotations.css +1 -1
- package/dist/types/index.d.ts +111 -5
- package/dist/types/ui.d.ts +1415 -0
- package/dist/ui-styles.css +573 -0
- package/dist/ui.js +48 -0
- package/dist/ui.mjs +533 -0
- package/package.json +30 -11
- package/src/style.d.ts +2 -0
package/dist/index.js
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
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">
|
|
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">
|
|
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
|
-
</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 S;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=t.zoom,p=g/f,m=l,x=d+p*.5;this.snapArrowStart(s,r[0],r[1]);const v=(S=s.properties.link)==null?void 0:S.start;t.updateFeature(s.id,{...s,geometry:{...s.geometry,coordinates:[[m,x],r]},properties:{...s.properties,link:{start:{side:O,id:u.id,type:P.COMMENT,magnet:{x:0,y:.5}},end:v?{side:rt,id:v.id,type:v.type,magnet:v.magnet}:void 0}}}),this.links.add(s,O,u.id,P.COMMENT,{x:0,y:.5}),v&&v.magnet&&this.links.add(s,rt,v.id,v.type,v.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">
|
|
1
|
+
"use strict";var Oe=Object.defineProperty;var Re=(i,e,t)=>e in i?Oe(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var S=(i,e,t)=>Re(i,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("./Polygon-D6lGfOCn.cjs"),nt=require("@linkurious/ogma");function _e(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var gt={exports:{}},Wt;function He(){return Wt||(Wt=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(u,d,c){this.fn=u,this.context=d,this.once=c||!1}function r(u,d,c,h,x){if(typeof c!="function")throw new TypeError("The listener must be a function");var f=new s(c,h||u,x),g=t?t+d:d;return u._events[g]?u._events[g].fn?u._events[g]=[u._events[g],f]:u._events[g].push(f):(u._events[g]=f,u._eventsCount++),u}function o(u,d){--u._eventsCount===0?u._events=new n:delete u._events[d]}function a(){this._events=new n,this._eventsCount=0}a.prototype.eventNames=function(){var d=[],c,h;if(this._eventsCount===0)return d;for(h in c=this._events)e.call(c,h)&&d.push(t?h.slice(1):h);return Object.getOwnPropertySymbols?d.concat(Object.getOwnPropertySymbols(c)):d},a.prototype.listeners=function(d){var c=t?t+d:d,h=this._events[c];if(!h)return[];if(h.fn)return[h.fn];for(var x=0,f=h.length,g=new Array(f);x<f;x++)g[x]=h[x].fn;return g},a.prototype.listenerCount=function(d){var c=t?t+d:d,h=this._events[c];return h?h.fn?1:h.length:0},a.prototype.emit=function(d,c,h,x,f,g){var p=t?t+d:d;if(!this._events[p])return!1;var m=this._events[p],A=arguments.length,E,y;if(m.fn){switch(m.once&&this.removeListener(d,m.fn,void 0,!0),A){case 1:return m.fn.call(m.context),!0;case 2:return m.fn.call(m.context,c),!0;case 3:return m.fn.call(m.context,c,h),!0;case 4:return m.fn.call(m.context,c,h,x),!0;case 5:return m.fn.call(m.context,c,h,x,f),!0;case 6:return m.fn.call(m.context,c,h,x,f,g),!0}for(y=1,E=new Array(A-1);y<A;y++)E[y-1]=arguments[y];m.fn.apply(m.context,E)}else{var D=m.length,C;for(y=0;y<D;y++)switch(m[y].once&&this.removeListener(d,m[y].fn,void 0,!0),A){case 1:m[y].fn.call(m[y].context);break;case 2:m[y].fn.call(m[y].context,c);break;case 3:m[y].fn.call(m[y].context,c,h);break;case 4:m[y].fn.call(m[y].context,c,h,x);break;default:if(!E)for(C=1,E=new Array(A-1);C<A;C++)E[C-1]=arguments[C];m[y].fn.apply(m[y].context,E)}}return!0},a.prototype.on=function(d,c,h){return r(this,d,c,h,!1)},a.prototype.once=function(d,c,h){return r(this,d,c,h,!0)},a.prototype.removeListener=function(d,c,h,x){var f=t?t+d:d;if(!this._events[f])return this;if(!c)return o(this,f),this;var g=this._events[f];if(g.fn)g.fn===c&&(!x||g.once)&&(!h||g.context===h)&&o(this,f);else{for(var p=0,m=[],A=g.length;p<A;p++)(g[p].fn!==c||x&&!g[p].once||h&&g[p].context!==h)&&m.push(g[p]);m.length?this._events[f]=m.length===1?m[0]:m:o(this,f)}return this},a.prototype.removeAllListeners=function(d){var c;return d?(c=t?t+d:d,this._events[c]&&o(this,c)):(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})(gt)),gt.exports}var Ie=He();const Ge=_e(Ie);function ze(i,e){const t=i[0]-e[0],n=i[1]-e[1];return t*t+n*n}function Ye(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 We(i,e){let t=i[0];const n=[t];let s;for(let r=1,o=i.length;r<o;r++)s=i[r],ze(s,t)>e&&(n.push(s),t=s);return t!==s&&n.push(s),n}function Ct(i,e,t,n,s){let r=n,o=0;for(let a=e+1;a<t;a++){const u=Ye(i[a],i[e],i[t]);u>r&&(o=a,r=u)}r>n&&(o-e>1&&Ct(i,e,o,n,s),s.push(i[o]),t-o>1&&Ct(i,o,t,n,s))}function $e(i,e){const t=i.length-1,n=[i[0]];return Ct(i,0,t,e,n),n.push(i[t]),n}function Nt(i,e,t){if(i.length<=2)return i;const n=e!==void 0?e*e:1;return i=t?i:We(i,n),i=$e(i,n),i}function Dt(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 Bt(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 Ue(i,e,t){const n=i.geometry.coordinates.map(o=>o.map(([a,u])=>[a+e,u+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 Tt(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 Xe(i,e,t,n){const s=i.geometry.coordinates.map(o=>o.map(([a,u])=>{const d=a-t,c=u-n;return[t+d*e,n+c*e]})),r={...i,geometry:{...i.geometry,coordinates:s}};return Tt(r),r}const Mt=i=>i.type==="FeatureCollection";function vt(i){return/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(i.trim())}function kt(i){return/^rgb\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*\)$/.test(i.trim())}function Lt(i){return/^rgba\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*,\s*[0-9.]+\s*\)$/.test(i.trim())}function Ee(i){return vt(i)||kt(i)||Lt(i)}function Ve(i){if(Ee(i))return i;throw new Error(`Invalid color format: ${i}`)}function je(i){if(vt(i))return i;throw new Error(`Invalid hex color format: ${i}`)}function qe(i){if(kt(i))return i;throw new Error(`Invalid RGB color format: ${i}`)}function Ke(i){if(Lt(i))return i;throw new Error(`Invalid RGBA color format: ${i}`)}class Ze{constructor(e){S(this,"previousZoom",-1);this.store=e}toggleComment(e){const t=this.store.getState().getFeature(e);if(!t||!l.isComment(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(l.isComment(r)){const o=r,a=this.getCommentZoomThreshold(o),u=e<a?l.COMMENT_MODE_COLLAPSED:l.COMMENT_MODE_EXPANDED;if(o.properties.mode===u)return;s[o.id]={properties:{...o.properties,mode:u}}}}),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))}}const Pt="ogma-annotation-link";function at(i){let e=i;for(;e;){if(e.classList&&e.classList.contains(Pt))return!0;e=e.parentElement}return!1}const Je="(https?://[^\\s<]+)";function Fe(){return new RegExp(Je,"g")}function Qe(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()}class lt extends EventTarget{constructor(t,n){super();S(this,"annotation",null);S(this,"ogma");S(this,"dragging",!1);S(this,"dragStartPoint");S(this,"hoveredHandle");S(this,"ogmaPanningOption",!1);S(this,"store");S(this,"draggingWasEnabled",!0);S(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(l.EVT_DRAG_START,{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())});S(this,"handleMouseDown",t=>{t.target instanceof HTMLTextAreaElement||at(t.target)||!this.isActive()||this.dragging||this.hoveredHandle||this.detectHandle(t,this.ogma.view.getZoom())});S(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}}})});S(this,"restorePanning",()=>{this.ogma.setOptions({interactions:{pan:{enabled:!0},drag:{enabled:!0}}})});S(this,"handleMouseUp",t=>{this.isActive()&&this.dragging&&(this.restorePanning(),this.onDragEnd(t),this.dispatchEvent(new CustomEvent(l.EVT_DRAG_END,{detail:{id:this.annotation,position:{x:t.clientX,y:t.clientY}}})))});S(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(l.cursors.default)}commitChange(){this.getAnnotation()&&this.store.getState().commitLiveUpdates()}onDrag(t){this.dispatchEvent(new Event(l.EVT_DRAG))}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=l.clientToContainerPosition(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=l.getBrowserWindow()||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=l.getBrowserWindow()||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(l.cursors.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 tn extends lt{constructor(t,n,s,r,o,a,u){super(t,n);S(this,"links");S(this,"snapping");S(this,"arrowHandler");S(this,"arrowStyle");S(this,"offsetX");S(this,"offsetY");S(this,"comment");S(this,"startX",0);S(this,"startY",0);S(this,"onArrowComplete",()=>{var y;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||!l.isArrow(s))return;const r=s.geometry.coordinates[0],o=s.geometry.coordinates[1],a=o[0]-this.startX,u=o[1]-this.startY,d=Math.sqrt(a*a+u*u);let c,h;d<5?(c=this.startX+this.offsetX,h=this.startY+this.offsetY):(c=o[0],h=o[1]);const x=this.comment;x.geometry.coordinates=[c,h],t.addFeature(x),this.store.setState({drawingFeature:x.id});const f=x.properties.height,g=t.zoom,p=f/g,m=c,A=h+p*.5;this.snapArrowStart(s,r[0],r[1]);const E=(y=s.properties.link)==null?void 0:y.start;t.updateFeature(s.id,{...s,geometry:{...s.geometry,coordinates:[[m,A],r]},properties:{...s.properties,link:{start:{side:l.SIDE_START,id:x.id,type:l.TARGET_TYPES.COMMENT,magnet:{x:0,y:.5}},end:E?{side:l.SIDE_END,id:E.id,type:E.type,magnet:E.magnet}:void 0}}}),this.links.add(s,l.SIDE_START,x.id,l.TARGET_TYPES.COMMENT,{x:0,y:.5}),E&&E.magnet&&this.links.add(s,l.SIDE_END,E.id,E.type,E.magnet),t.setSelectedFeatures([x.id]),this.store.setState({drawingFeature:null})});this.links=s,this.arrowHandler=o,this.snapping=r,this.offsetX=(u==null?void 0:u.offsetX)??100,this.offsetY=(u==null?void 0:u.offsetY)??-50,this.arrowStyle=u==null?void 0:u.arrowStyle,this.comment=a}detectHandle(t,n){}startDrawing(t,n,s){var o;this.startX=n,this.startY=s;const r=l.createArrow(n,s,n,s,{...l.defaultArrowStyle,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:l.SIDE_START,id:r.id,type:r.type,magnet:r.magnet}},this.links.add(t,l.SIDE_START,r.id,r.type,r.magnet))}}function en(i,e,t,n,s){const{width:r,height:o}=n.view.getSize(),a=8,u=16,d=a*u,c={width:150,height:50},h=c.width,x=c.height,f=Math.max(r,o),g=200,p={minX:0,minY:0,maxX:0,maxY:0},m=n.view.graphToScreenCoordinates({x:i,y:e});for(let A=0;A<d;A++){const E=A%a,y=Math.floor(A/a),D=2*Math.PI*(E/a),C=g+y/u*(f-g),F=Math.cos(D)*C,N=Math.sin(D)*C,M=m.x+F,T=m.y+N;if(p.minX=M,p.minY=T-x/2,p.maxX=M+h,p.maxY=T+x/2,F<0&&(p.minX-=h,p.maxX-=h),p.minX<0||p.maxX>r||p.minY<0||p.maxY>o)continue;const b=n.view.screenToGraphCoordinates({x:p.minX,y:p.minY}),B=n.view.screenToGraphCoordinates({x:p.maxX,y:p.maxY});if(p.minX=b.x,p.minY=b.y,p.maxX=B.x,p.maxY=B.y,!t.query(p).filter(P=>P.properties.type!=="arrow").length)return n.view.screenToGraphCoordinates({x:M,y:T})}return n.view.screenToGraphCoordinates({x:r/2,y:o/2})}const $t=160,nn={font:"IBM Plex Sans",fontSize:18,color:"#4A3B00",background:"#FFEB99",strokeWidth:0,strokeType:"plain",borderRadius:4,padding:16,fixedSize:!1,placeholder:"Quick note…"};class sn{constructor(e,t,n,s,r,o,a){S(this,"ogma");S(this,"store");S(this,"editor");S(this,"interactions");S(this,"links");S(this,"control");S(this,"index");S(this,"pendingDrawingListener",null);S(this,"placementCleanup",null);S(this,"eraseModeActive",!1);S(this,"onEraseClick",e=>{if(e.id===void 0||e.id===null)return;const t=this.store.getState().features[e.id];t&&this.control.remove(t)});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),this.disableEraseMode()}isDrawing(){return this.store.getState().drawingFeature!==null}isEraseModeActive(){return this.eraseModeActive}enableEraseMode(){return this.eraseModeActive?this.control:(this.control.unselect().cancelDrawing(),this.eraseModeActive=!0,this.control.on(l.EVT_CLICK,this.onEraseClick),this.interactions.setCursor(l.cursors.crosshair),this.control)}disableEraseMode(){return this.eraseModeActive?(this.eraseModeActive=!1,this.control.off(l.EVT_CLICK,this.onEraseClick),this.interactions.setCursor(l.cursors.default),this.control):this.control}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=l.createArrow(t,n,t,n,e);this.startArrow(t,n,s)})}enableTextDrawing(e){return this.enableDrawingMode((t,n)=>{const s=l.createText(t,n,0,0,void 0,e);this.startText(t,n,s)})}enableBoxDrawing(e){return this.enableDrawingMode((t,n)=>{const s=l.createBox(t,n,0,0,e);this.startBox(t,n,s)})}enablePolygonDrawing(e){return this.enableDrawingMode((t,n)=>{const s=l.createPolygon([[[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=en(t,n,this.index,this.ogma);s=a.x,r=a.y}const o=l.createComment(t,n,"",e==null?void 0:e.commentStyle);this.startComment(t,n,o,{...e,offsetX:s,offsetY:r})})}enableStickyNoteDrawing(e){return this.enableDrawingMode((t,n)=>{this.startStickyNote(t,n,e)})}startStickyNote(e,t,n){this.editor.getActiveHandler()&&this.editor.getActiveHandler().stopEditing(),this.control.cancelDrawing();const s=l.createText(e,t,0,0,"",{...nn,...n});return this.store.setState({drawingFeature:s.id}),this.control.add(s),this.interactions.suppressClicksTemporarily(200),this.control.select(s.id),this.editor.getActiveHandler().startDrawing(s.id,e,t,{defaultSize:{width:$t,height:$t},autoEditAfterDrag:!0}),this.control}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:u,y:d}=this.ogma.view.screenToGraphCoordinates(a),c=e.properties.width,h=e.properties.height;this.store.getState().applyLiveUpdate(e.id,{geometry:{...e.geometry,coordinates:[u,d],bbox:[u-c/2,d-h/2,u+c/2,d+h/2]}})},s=a=>{o();const{x:u,y:d}=this.ogma.view.screenToGraphCoordinates(a),c=e.properties.width,h=e.properties.height;this.store.getState().updateFeature(e.id,{geometry:{...e.geometry,coordinates:[u,d],bbox:[u-c/2,d-h/2,u+c/2,d+h/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 tn(this.ogma,this.store,this.links,this.editor.getSnapping(),this.editor.getArrowHandler(),n,s),o=a=>{var u;a.id===n.id&&(this.control.select(a.id),this.control.off(l.EVT_ADD,o),(u=this.editor.getActiveHandler())==null||u.startEditingText())};return this.control.on(l.EVT_ADD,o),r.startDrawing(n.id,e,t),this.control}startBox(e,t,n){return n||(n=l.createBox(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=l.createArrow(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=l.createText(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 rn{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 on{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 an{constructor(e){this.store=e}add(e){if(Mt(e))for(const t of e.features)this.add(t);else{const t=l.migrateBoxOrTextIfNeeded(e);this.store.getState().addFeature(t)}}remove(e){if(Mt(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(l.isArrow(r)){const a=r.geometry.coordinates.map(([u,d])=>{const c=u-n,h=d-s;return[n+c*t,s+h*t]});o.updateFeature(e,{geometry:{...r.geometry,coordinates:a}})}else if(l.isText(r)||l.isBox(r)){const[a,u]=r.geometry.coordinates,d=a-n,c=u-s,h=n+d*t,x=s+c*t,f=r.properties.width*t,g=r.properties.height*t;o.updateFeature(e,{properties:{...r.properties,width:f,height:g},geometry:{...r.geometry,coordinates:[h,x]}})}}}function Ae(i){var t,n;const e=i.properties.link;return e?((t=e.start)==null?void 0:t.type)===l.TARGET_TYPES.COMMENT||((n=e.end)==null?void 0:n.type)===l.TARGET_TYPES.COMMENT:!1}function ye(i){var e,t;return((t=(e=i.properties.link)==null?void 0:e.start)==null?void 0:t.type)!==l.TARGET_TYPES.COMMENT}function cn(i){return!0}function Ot(i,e,t,n,s=!1){const r=i.getState(),o=r.getFeature(t);if(!o)return;const a=new Set,u=new Set;let d="";if(l.isArrow(o)){const h=o;if(s){const x=h.properties.link||{};x.start&&it(x.start.type)&&a.add(x.start.id),x.end&&it(x.end.type)&&a.add(x.end.id)}d=h.id,u.add(h.id)}else a.add(o.id);const c={};for(const h of a){const x=r.getFeature(h);if(!x)continue;const f=ln(x,n);f&&(c[h]=f,e.updateLinkedArrowsDuringDrag(h,n,c))}for(const h of u){const x=r.getFeature(h);if(!x)continue;const f=x.properties.link||{},g=x.geometry.coordinates,p=[...g];(f.start&&it(f.start.type)||d===h)&&(p[0]=[g[0][0]+n.x,g[0][1]+n.y]),(f.end&&it(f.end.type)||d===h)&&(p[1]=[g[1][0]+n.x,g[1][1]+n.y]),c[h]={geometry:{...x.geometry,coordinates:p}}}r.applyLiveUpdates(c)}function it(i){return i!==l.TARGET_TYPES.NODE&&i!==l.TARGET_TYPES.EDGE}function ln(i,e){if(l.isText(i)||l.isBox(i)||l.isComment(i)){const t=l.getBoxCenter(i);return{geometry:{type:i.geometry.type,coordinates:[t.x+e.x,t.y+e.y]}}}if(l.isPolygon(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 dn extends lt{constructor(t,n,s,r){super(t,n);S(this,"snapping");S(this,"links");S(this,"snap",null);this.snapping=s,this.links=r}detectHandle(t){const n=this.getAnnotation(),s=this.clientToCanvas(t),r=l.handleDetectionThreshold,o=n.geometry.coordinates[0],a=n.geometry.coordinates[1],u=Math.sqrt(Math.pow(s.x-o[0],2)+Math.pow(s.y-o[1],2)),d=Math.sqrt(Math.pow(s.x-a[0],2)+Math.pow(s.y-a[1],2));u<r?this.grabHandle("start",o[0],o[1]):d<r?this.grabHandle("end",a[0],a[1]):l.detectArrow(n,s,r)?(this.setCursor(l.cursors.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(l.cursors.move)}onDrag(t){var c;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=((c=this.snap)==null?void 0:c.point)||o,u=new CustomEvent(l.EVT_DRAG,{detail:{point:a,annotation:this.annotation,handle:n}}),d=[...s.geometry.coordinates];if(n.type==="body"){const h=a.x-n.point.x,x=a.y-n.point.y;Ot(this.store,this.links,s.id,{x:h,y:x},!0),this.dispatchEvent(u);return}else n.type==="start"?(d[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"&&(d[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:d}}),this.dispatchEvent(u)}onDragStart(t){if(!super.onDragStart(t))return!1;const n=this.getAnnotation(),s=this.hoveredHandle;return s.type==="end"&&!1||s.type==="start"&&!ye(n)?(this.clearDragState(),!1):(this.store.getState().startLiveUpdate([this.annotation]),!0)}onDragEnd(t){var r,o,a,u;if(!super.onDragEnd(t))return!1;const n=this.getAnnotation(!0);if(this.hoveredHandle){const d=n.geometry.coordinates;if(this.hoveredHandle.type==="body"){const c=this.snapping.snap({x:d[0][0],y:d[0][1]}),h=this.snapping.snap({x:d[1][0],y:d[1][1]});c?this.links.add(n,"start",c.id,c.type,c.magnet):((o=(r=n.properties.link)==null?void 0:r.start)==null?void 0:o.type)!=="comment"&&this.links.remove(n,l.SIDE_START),h?this.links.add(n,"end",h.id,h.type,h.magnet):((u=(a=n.properties.link)==null?void 0:a.end)==null?void 0:u.type)!=="comment"&&this.links.remove(n,l.SIDE_END)}else if(this.snap){const c=this.hoveredHandle;c.type!=="body"&&this.links.add(n,c.type,this.snap.id,this.snap.type,this.snap.magnet)}else if(this.snap===null){const c=this.hoveredHandle.type;if(n.properties.link&&n.properties.link[c]){this.links.remove(n,c);const h={...n.properties.link};delete h[c],this.store.getState().applyLiveUpdate(n.id,{properties:{...n.properties,link:h}})}}}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:l.SIDE_START,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=l.getArrowSide(t,s);const o=t.properties.link||{};let a=null;if(n instanceof nt.Node)r=n.getPosition(),a=this.snapping.snapToNodes(r,n.toList());else{const u=this.store.getState().getFeature(n);if(!u)throw new Error(`Annotation with id ${n} not found`);if(l.isText(u)||l.isBox(u))r=l.getBoxCenter(u),a=this.snapping.snapToText(r,[u]);else if(l.isPolygon(u))r=Bt(u),a=this.snapping.snapToPolygon(r,[u]);else throw new Error(`Cannot link arrow to annotation of type ${u.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),l.setArrowEndPoint(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 un extends lt{constructor(t,n,s){super(t,n);S(this,"links");S(this,"isDrawingMode",!1);S(this,"simplificationTolerance",5);S(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(l.EVT_DRAG_START,{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=l.handleDetectionThreshold/n,a=s.geometry.coordinates[0];for(let u=0;u<a.length-1;u++){const[d,c]=a[u];if(Math.sqrt(Math.pow(r.x-d,2)+Math.pow(r.y-c,2))<o*2){this.grabHandle("vertex",d,c,u);return}}l.detectPolygon(s,r,o)?(this.setCursor(l.cursors.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"?l.cursors.pointer:l.cursors.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(l.cursors.grabbing),this.store.getState().startLiveUpdate([this.annotation]),!0):!1}onDrag(t){if(this.isDrawingMode&&this.dragging){const a=this.clientToCanvas(t),u=this.store.getState(),d=this.getAnnotation();if(!d)return;const c=u.liveUpdates[this.annotation],h=c?{...d,...c}:d,f=u.drawingPoints.slice(0,-1),g=[...f,[a.x,a.y],f[0]];u.setDrawingPoints(g);const p=Nt(g,this.simplificationTolerance,!1),m=[...p,p[0]];u.applyLiveUpdate(this.annotation,{...h,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")Ot(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((d,c)=>c===this.hoveredHandle.vertexIndex?[this.hoveredHandle.point.x+s,this.hoveredHandle.point.y+r]:c===o.geometry.coordinates[0].length-1&&this.hoveredHandle.vertexIndex===0?[this.hoveredHandle.point.x+s,this.hoveredHandle.point.y+r]:d),u={...o,geometry:{...o.geometry,coordinates:[a]}};Tt(u),this.store.getState().applyLiveUpdate(o.id,u),this.links.snapLinkedArrowsDuringDrag(o.id)}this.dispatchEvent(new Event(l.EVT_DRAG))}}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=Nt(r.slice(1,-1),this.simplificationTolerance,!0),a={...s,geometry:{type:"Polygon",coordinates:[o]}};l.updateBbox(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(l.EVT_COMPLETE_DRAWING,{detail:a}))}}return!0}return!this.dragging||(this.dragging=!1,this.dragStartPoint=void 0,!this.getAnnotation())?!1:(this.commitChange(),this.setCursor(l.cursors.grab),!0)}getAnnotation(){if(this.annotation)return this.store.getState().getFeature(this.annotation)}}class hn{constructor(e,t,n,s=()=>{}){S(this,"layer");S(this,"textarea");S(this,"sendButton",null);S(this,"isFocused");S(this,"unsubscribe");S(this,"fixedSize");S(this,"onFocus",()=>{this.isFocused=!0});S(this,"onBlur",()=>{this.getAnnotation()&&this.updateContent(),this.isFocused=!1});S(this,"onKeyup",e=>{e.key==="Escape"&&this.textarea.blur(),e.stopPropagation()});S(this,"onKeydown",e=>{e.stopPropagation()});S(this,"onMouseEvent",e=>{e.stopPropagation()});S(this,"onInput",()=>{this.updateContent(),this.updateStyle(),this.updatePosition(),this.layer.setSize(this.getSize()),this.updateSendButtonState()});S(this,"onSendClick",e=>{e.preventDefault(),e.stopPropagation(),!(!this.sendButton||this.sendButton.disabled)&&(this.updateContent(),this.textarea.blur(),this.onSendHandler())});S(this,"update",()=>{this.getAnnotation()&&(this.updateStyle(),this.updatePosition(),this.layer.setSize(this.getSize()))});var f,g,p,m,A;this.ogma=e,this.store=t,this.annotation=n,this.onSendHandler=s;const r=this.getAnnotation(),o=this.store.getState(),a=l.isComment(r)&&(((f=o.options)==null?void 0:f.showSendButton)??!0),u=((g=o.options)==null?void 0:g.sendButtonIcon)||"",d=((p=r.properties.style)==null?void 0:p.placeholder)||((m=o.options)==null?void 0:m.textPlaceholder)||"Enter text",c=l.isComment(r)?l.defaultCommentStyle:l.defaultTextStyle;this.fixedSize=((A=r.properties.style)==null?void 0:A.fixedSize)??c.fixedSize??!1;const h=this.getPosition(),x=this.getSize();this.layer=this.ogma.layers.addOverlay({element:`<div class="ogma-annotation-text-editor">
|
|
7
2
|
<textarea wrap="on" name="annotation-text--input" spellcheck="false" placeholder="${d}"></textarea>
|
|
8
|
-
${
|
|
9
|
-
<span class="ogma-send-button-icon">${
|
|
3
|
+
${a?`<button class="ogma-send-button" type="button" title="Send">
|
|
4
|
+
<span class="ogma-send-button-icon">${u}</span>
|
|
10
5
|
</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}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=`
|
|
6
|
+
</div>`,position:h,size:x,scaled:!this.fixedSize},l.LAYERS.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(E=>({rotation:E.rotation,zoom:E.zoom,annotation:E.features[this.annotation]}),this.update,{equalityFn:(E,y)=>E.rotation===y.rotation&&E.zoom===y.zoom&&E.annotation===y.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,s=this.store.getState().zoom,r=Ut(e),[o,a]=e.geometry.coordinates,u=e.properties.width;let d=e.properties.height;n&&(d=Math.min(d,n));const c=this.fixedSize?1/s:1;return{x:o-u*c/2+r*c,y:a-d*c/2+r*c}}getSize(){const e=this.getAnnotation();if(!e)return{width:0,height:0};const t=l.getBoxSize(e),n=Ut(e),s=e.properties.style,r=s==null?void 0:s.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 A;const e=this.getAnnotation();if(!e)return;const t=l.isComment(e)?l.defaultCommentStyle:l.defaultTextStyle,{font:n,fontSize:s=t.fontSize,borderRadius:r,color:o,background:a=t.background,padding:u=0,fixedSize:d=t.fixedSize}=e.properties.style||t,c=this.textarea,h=this.layer.element,x=1,f=parseFloat(s.toString())*x,g=u*x,p=h.style;if(p.display="grid",p.gridTemplateRows="1fr auto",p.boxSizing="border-box",p.background=a||"transparent",p.borderRadius=`${(r||0)*x}px`,p.padding=`${g}px`,p.transformOrigin="center",p.transform=`rotate(${this.store.getState().rotation}rad)`,e.properties.type==="comment"){const E=e.properties.style,y=(E==null?void 0:E.shadow)!==!1;p.boxShadow=y?"0 2px 8px rgba(0, 0, 0, 0.15)":"none"}const m=c.style;if(m.fontFamily=n||"sans-serif",m.fontSize=`${f}px`,m.lineHeight=`${f*l.TEXT_LINE_HEIGHT}px`,m.padding="0",m.border="none",m.outline="none",m.boxSizing="border-box",m.color=o||"black",m.background="transparent",m.flex="1",m.minHeight="0",m.resize="none",this.sendButton){const E=24*x,y=4*x;this.sendButton.style.width=`${E}px`,this.sendButton.style.height=`${E}px`,this.sendButton.style.padding=`${y}px`,this.sendButton.style.transform="";const D=this.sendButton.querySelector(".ogma-send-button-icon");if(D){const C=16*x;D.style.width=`${C}px`,D.style.height=`${C}px`}}if(d){const E=(A=e.properties.style)==null?void 0:A.maxHeight,y=E&&e.properties.height>=E;m.overflowY=y?"auto":"hidden",m.overflowX="hidden"}}updatePosition(){this.layer.setPosition(this.getPosition())}updateContent(){var o,a,u,d;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 c=this.textarea.style.height;this.textarea.style.height="0px";const h=this.textarea.scrollHeight;this.textarea.style.height=c;const x=((a=e.properties.style)==null?void 0:a.padding)||0,f=this.sendButton?parseFloat(this.sendButton.style.height||"0"):0,g=h+x*2+f,p=((u=e.properties.style)==null?void 0:u.minHeight)||50;t=Math.max(p,g);const m=(d=e.properties.style)==null?void 0:d.maxHeight,A=e.properties.height,E=t-A;if(!l.isComment(e)&&Math.abs(E)>1){const[D,C]=e.geometry.coordinates;if(m&&t>m){const F=m-A;t=m,Math.abs(F)>1&&(n=[D,C+F/2])}else n=[D,C+E/2]}else m&&t>m&&(t=m)}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 Ut(i){var e;return((e=i.properties.style)==null?void 0:e.strokeWidth)||0}const Xt={x:1,y:0},Vt={x:0,y:1},xn=[["top",Vt,-.5,-.5,.5,-.5],["right",Xt,.5,-.5,.5,.5],["bottom",Vt,-.5,.5,.5,.5],["left",Xt,-.5,-.5,-.5,.5]],fn={top:[0,1],right:[1,2],bottom:[2,3],left:[3,0]},jt=[[-.5,-.5],[.5,-.5],[.5,.5],[-.5,.5]],gn=[l.cursors.nwResize,l.cursors.neResize,l.cursors.seResize,l.cursors.swResize],pn=100,mn=50;class pt extends lt{constructor(t,n,s){super(t,n);S(this,"links");S(this,"textEditor",null);S(this,"justActivated",!1);S(this,"pendingDefaultSize",null);S(this,"autoEditAfterDrag",!1);S(this,"onClick",t=>{if(at(t.target??null))return;const n=this.getAnnotation();if(n){if(l.isComment(n)&&n.properties.mode===l.COMMENT_MODE_COLLAPSED){this.store.getState().updateFeature(n.id,{properties:{...n.properties,mode:l.COMMENT_MODE_EXPANDED}}),this.ogma.view.afterNextFrame(),this.justActivated=!1;return}if(this.store.getState().selectedFeatures.has(n.id)){if(l.isComment(n)&&this.justActivated){this.justActivated=!1;return}n&&(l.isText(n)||l.isComment(n))&&this.startEditingText()}}});S(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 D;const s=this.getAnnotation(),{x:r,y:o}=this.clientToCanvas(t);let{width:a,height:u}=l.getBoxSize(s);const d=5/n,c=l.getBoxCenter(s),h=this.store.getState();let{revSin:x,revCos:f}=h;(l.isBox(s)||l.isComment(s))&&(x=0,f=1),this.hoveredHandle=void 0;const g=l.handleRadius*(1/n),p=r-c.x,m=o-c.y,A=p*f-m*x,E=p*x+m*f,y=((D=s.properties.style)==null?void 0:D.fixedSize)===!0||l.isComment(s);if(y&&(a/=n,u/=n),!y){for(let C=0;C<jt.length;C++){const[F,N]=jt[C],M=a*F,T=u*N;if(A>=M-g-d&&A<=M+g+d&&E>=T-g-d&&E<=T+g+d){this.hoveredHandle={type:"corner",corner:C},this.store.setState({hoveredHandle:C,hoveredFeature:this.annotation}),this.setCursor(this.getCornerCursor(C));return}}for(const[C,F,N,M,T,b]of xn){const B=a*N,L=u*M,P=a*T,R=u*b,w=l.dot(F,{x:A-B,y:E-L});if(Math.abs(w)<d&&A>=B-d&&A<=P+d&&E>=L-d&&E<=R+d){this.hoveredHandle={type:"edge",edge:C,corner:-1},this.store.setState({hoveredHandle:fn[C][0]+4,hoveredFeature:this.annotation}),this.setCursor(this.getEdgeCursor(C));return}}}if(A>=-a/2-d&&A<=a/2+d&&E>=-u/2-d&&E<=u/2+d){this.store.setState({hoveredHandle:8,hoveredFeature:this.annotation}),this.hoveredHandle={type:"body",corner:-1},this.setCursor(l.cursors.grab);return}this.store.setState({hoveredHandle:-1,hoveredFeature:null}),this.setCursor(l.cursors.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 u=null;o.type==="corner"?u=this.dragCorner(a,r,o.corner):o.type==="edge"&&o.edge?u=this.dragEdge(a,r,o):o.type==="body"&&(Ot(this.store,this.links,n.id,r),this.textEditor&&this.textEditor.update()),u&&(this.store.getState().applyLiveUpdate(n.id,u),this.links.updateLinkedArrowsDuringDrag(n.id,r),this.textEditor&&this.textEditor.update()),this.dispatchEvent(new CustomEvent(l.EVT_DRAG,{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,u=s===2||s===3,{width:d,height:c}=l.getBoxSize(t),h=this.store.getState();let{revSin:x,revCos:f}=h;(l.isBox(t)||l.isComment(t))&&(x=0,f=1);const g=n.x*f-n.y*x,p=n.x*x+n.y*f;let m=0,A=0;o?m=-g:a&&(m=g),r?A=-p:u&&(A=p);const E=Math.max(0,d+m),y=Math.max(0,c+A),D=l.getBoxCenter(t),C=D.x+n.x/2,F=D.y+n.y/2;return{...t,properties:{...t.properties,width:E,height:y},geometry:{type:t.geometry.type,coordinates:[C,F]}}}dragEdge(t,n,s){const{width:r,height:o}=l.getBoxSize(t),a=l.getBoxCenter(t),u=this.store.getState();let{revSin:d,revCos:c}=u;(l.isBox(t)||l.isComment(t))&&(d=0,c=1);const h=n.x*c-n.y*d,x=n.x*d+n.y*c;let f=r,g=o,p=0,m=0;switch(s.edge){case"top":g=Math.max(0,o-x),m=x/2;break;case"bottom":g=Math.max(0,o+x),m=x/2;break;case"left":f=Math.max(0,r-h),p=h/2;break;case"right":f=Math.max(0,r+h),p=h/2;break}const A=p*c+m*d,E=-p*d+m*c;return{...t,properties:{...t.properties,width:f,height:g},geometry:{type:t.geometry.type,coordinates:[a.x+A,a.y+E]}}}onDragStart(t){return super.onDragStart(t)?(this.stopEditingText(),this.store.getState().startLiveUpdate([this.annotation]),!0):!1}applyDefaultSizeIfEmpty(){var u;const t=this.pendingDefaultSize;this.pendingDefaultSize=null;const n=this.getAnnotation();if(!n||!(l.isBox(n)||l.isText(n))||(u=n.properties.style)!=null&&u.fixedSize||n.properties.width>0&&n.properties.height>0)return;const s=(t==null?void 0:t.width)??pn,r=(t==null?void 0:t.height)??mn,[o,a]=n.geometry.coordinates;this.store.getState().updateFeature(n.id,{properties:{...n.properties,width:s,height:r},geometry:{...n.geometry,bbox:[o-s/2,a-r/2,o+s/2,a+r/2]}})}startEditingText(){this.textEditor===null&&(this.store.setState({editingFeature:this.annotation}),this.textEditor=new hn(this.ogma,this.store,this.annotation,this.stopEditingText))}onDragEnd(t){var u,d;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-(((u=this.dragStartPoint)==null?void 0:u.x)||0),o=s.y-(((d=this.dragStartPoint)==null?void 0:d.y)||0),a=this.autoEditAfterDrag;if(this.autoEditAfterDrag=!1,Math.abs(r)<1&&Math.abs(o)<1)this.clearDragState(),this.applyDefaultSizeIfEmpty(),this.onClick({clientX:t.clientX,clientY:t.clientY});else{this.commitChange();const c=this.getAnnotation();a&&c&&(l.isText(c)||l.isComment(c))&&this.startEditingText()}return this.hoveredHandle=void 0,this.dragStartPoint=void 0,this.dragging=!1,!0}getCornerCursor(t){return gn[t]}getEdgeCursor(t){switch(t){case"top":case"bottom":return l.cursors.nsResize;case"left":case"right":return l.cursors.ewResize;default:return l.cursors.default}}stopEditing(){super.stopEditing(),this.commitChange(),this.stopEditingText()}startDrawing(t,n,s,r){this.annotation=t,this.pendingDefaultSize=(r==null?void 0:r.defaultSize)??null,this.autoEditAfterDrag=(r==null?void 0:r.autoEditAfterDrag)??!1,this.hoveredHandle={type:"corner",corner:2},this.store.setState({hoveredHandle:2,hoveredFeature:this.annotation}),this.dragging=!0;const o=this.ogma.view.graphToScreenCoordinates({x:n,y:s});this.dragStartPoint=o,this.disablePanning(),this.onDragStart({clientX:o.x,clientY:o.y})}setAnnotation(t){t&&l.isComment(t)&&(this.justActivated=!0),super.setAnnotation(t),t&&l.isComment(t)&&t.properties.mode===l.COMMENT_MODE_COLLAPSED&&this.store.getState().updateFeature(t.id,{properties:{...t.properties,mode:l.COMMENT_MODE_EXPANDED}})}}class Sn extends EventTarget{constructor(t,n,s,r,o){super();S(this,"handlers",new Map);S(this,"activeHandler");S(this,"interaction");S(this,"ogma");S(this,"snapping");S(this,"store");this.ogma=t,this.store=n,this.snapping=s,this.interaction=o,this.handlers.set("box",new pt(this.ogma,this.store,r)),this.handlers.set("text",new pt(this.ogma,this.store,r)),this.handlers.set("comment",new pt(this.ogma,this.store,r)),this.handlers.set("arrow",new dn(this.ogma,this.store,this.snapping,r)),this.handlers.set("polygon",new un(this.ogma,this.store,r)),this.handlers.forEach(a=>{a.addEventListener("dragstart",(u=>{this.dispatchEvent(new CustomEvent(l.EVT_DRAG_START,{detail:{...u.detail}})),this.store.setState({isDragging:!0}),this.interaction.setMode("edit")})),a.addEventListener("dragend",(u=>{this.dispatchEvent(new CustomEvent(l.EVT_DRAG_END,{detail:{...u.detail}})),this.store.setState({isDragging:!1}),this.interaction.suppressClicksTemporarily()}))}),this.store.subscribe(a=>a.selectedFeatures,(a,u)=>{const d=Array.from(a.keys()).filter(h=>!u.has(h)),c=Array.from(u.keys()).filter(h=>!a.has(h));!d.length&&!c.length||(c.forEach(h=>this.stopEditingFeature(h)),d.forEach(h=>this.editFeature(h)))})}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 En=["x","y","radius"],Fn=1;function An(i,e){return e===l.TARGET_TYPES.NODE?{type:"node",center:i.x===0&&i.y===0}:e===l.TARGET_TYPES.EDGE?{type:"edge",t:i.x}:e===l.TARGET_TYPES.POLYGON?{type:"polygon",rx:i.x,ry:i.y}:{type:"box",nx:i.x,ny:i.y}}class yn{constructor(e,t,n,s){S(this,"links",new Map);S(this,"nodeToLink",new Map);S(this,"edgeToLink",new Map);S(this,"annotationToLink",new Map);S(this,"linksByArrowId",new Map);S(this,"store");S(this,"ogma");S(this,"snapping");S(this,"updatedItems",new Set);S(this,"onLinkCreated");S(this,"commitTimeout");S(this,"nodePositionTimeout");S(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())});S(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.isText(r)&&((a=r.properties.style)==null?void 0:a.fixedSize)||l.isComment(r))&&n.forEach(u=>{const d=this.links.get(u);if(!d)return;const c=d.arrow;t.set(c,this.linksByArrowId.get(c))})}),t.size>0&&this.update(t)});S(this,"throttledRefresh",l.throttle(()=>this.refresh(),20));S(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 u=this.links.get(a);if(!u)return;const d=u.arrow;n.set(d,this.linksByArrowId.get(d)),s.set(d,this.linksByArrowId.get(d))})}),s.size!==0&&this.update(s)});S(this,"commit",()=>{this.store.getState().batchUpdate(this.commitLiveUpdates),this.updatedItems.clear()});S(this,"commitLiveUpdates",()=>{this.store.getState().commitLiveUpdates(this.updatedItems)});S(this,"onAddArrow",(e,t)=>{const n=this.store.getState(),s=new Set(Object.keys(t)),r=Object.keys(e).filter(u=>!s.has(u)),o=Object.keys(t).filter(u=>!e[u]);r.forEach(u=>{var h,x;const d=n.getFeature(u);if(!d||!l.isArrow(d))return;const c=d;if((h=c.properties.link)!=null&&h.start){const f=c.properties.link.start;this.add(c,l.SIDE_START,f.id,f.type,f.magnet)}if((x=c.properties.link)!=null&&x.end){const f=c.properties.link.end;this.add(c,l.SIDE_END,f.id,f.type,f.magnet)}}),o.forEach(u=>{const d=t[u];if(l.isArrow(d)){const c=d;this.remove(c,l.SIDE_START),this.remove(c,l.SIDE_END)}else{const c=this.annotationToLink.get(u);if(!c)return;for(const h of c){const x=this.links.get(h);if(!x)continue;const f=n.getFeature(x.arrow);f?this.remove(f,x.side):this.remove(x.arrow,x.side)}}});const a=new Map;for(const u of s){const d=e[u];if(!d||!this.annotationToLink.has(u))continue;const c=t[u],h=c.geometry.coordinates!==d.geometry.coordinates,x=c.properties.width!==d.properties.width||c.properties.height!==d.properties.height;if(!h&&!x)continue;const f=this.annotationToLink.get(u);for(const g of f){const p=this.links.get(g);if(!p)continue;const m=p.arrow;this.linksByArrowId.has(m)&&a.set(m,this.linksByArrowId.get(m))}}a.size>0&&this._updateAndCommitSync(a)});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 u=this.links.get(a);if(!u)continue;const d=s.getFeature(u.arrow),c=l.getArrowSide(d,u.side),h=l.add(c,t),x={...d.geometry,coordinates:d.geometry.coordinates.map((f,g)=>u.side===l.SIDE_START&&g===0||u.side===l.SIDE_END&&g===1?[h.x,h.y]:[...f])};n?n[d.id]={geometry:x}:s.applyLiveUpdate(d.id,{geometry:x}),this.updatedItems.add(d.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 u=this.links.get(a);if(!u)continue;let d=n.getFeature(u.arrow);const c=n.liveUpdates[d.id];d=c?{...d,...c}:d;const h=d.geometry.coordinates[u.side===l.SIDE_START?0:1],x={x:h[0],y:h[1]};let f;if(l.isText(s)||l.isComment(s)||l.isBox(s)?f=this.snapping.snapToText(x,[s]):l.isPolygon(s)&&(f=this.snapping.snapToPolygon(x,[s])),!f)continue;const g=f.point,p={...d.geometry,coordinates:d.geometry.coordinates.map((m,A)=>u.side===l.SIDE_START&&A===0||u.side===l.SIDE_END&&A===1?[g.x,g.y]:[...m])};t?t[d.id]={geometry:p}:n.applyLiveUpdate(d.id,{geometry:p})}}add(e,t,n,s,r){const o=l.nanoid(),a=e.id;let u=r;if(s===l.TARGET_TYPES.POLYGON){const x=this.store.getState().getFeature(n);if(x&&l.isPolygon(x)){const f=Dt(x),g=f[2]-f[0],p=f[3]-f[1],m=r.x-f[0],A=r.y-f[1],E=g>0?m/g:.5,y=p>0?A/p:.5;u={x:E,y}}}const d={id:o,arrow:a,target:n,targetType:s,magnet:An(u,s),side:t};if(s===l.TARGET_TYPES.NODE&&!this.ogma.getNode(n)||s===l.TARGET_TYPES.EDGE&&!this.ogma.getEdge(n))return;this.remove(e,t),this.links.set(o,d);const c=s===l.TARGET_TYPES.NODE?this.nodeToLink:s===l.TARGET_TYPES.EDGE?this.edgeToLink:this.annotationToLink;return c.has(n)||c.set(n,new Set),c.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:u},this.onLinkCreated&&this.onLinkCreated(e,d),this}remove(e,t){var o,a,u,d,c;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),(u=this.nodeToLink.get(r.target))==null||u.delete(s),(d=this.edgeToLink.get(r.target))==null||d.delete(s),(c=this.annotationToLink.get(r.target))==null||c.delete(s),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(d=>{const c=this.nodeToLink.get(d);c&&c.forEach(h=>{const x=this.links.get(h);if(!x)return;const f=x.arrow;n.set(f,this.linksByArrowId.get(f))})});const s=new Map;e.getAdjacentEdges().getId().forEach(d=>{const c=this.edgeToLink.get(d);c&&c.forEach(h=>{const x=this.links.get(h);if(!x)return;const f=x.arrow;n.set(f,this.linksByArrowId.get(f)),s.set(f,this.linksByArrowId.get(f))})});const o=e.getAttributes(En),a=this.store.getState(),u={};for(let d=0;d<t.length;d++){const c=t[d],h=this.nodeToLink.get(c);if(h)for(const x of h){const f=this.links.get(x);if(!f)continue;const g=f.arrow,p=this.store.getState().getFeature(g),m=p.geometry.coordinates.slice(),A=l.getArrowSide(p,l.SIDE_END),E=l.getArrowSide(p,l.SIDE_START),y=f.side===l.SIDE_START?0:1,D=o[d],C=this._getNodeSnapPoint(D,l.mul(l.subtract(A,E),-1),this._isLinkedToCenter(f)),F=this._getRigidFollowComment(g,f);if(F){const N=m[y],M=l.subtract({x:C[0],y:C[1]},{x:N[0],y:N[1]});m[0]=[m[0][0]+M.x,m[0][1]+M.y],m[1]=[m[1][0]+M.x,m[1][1]+M.y];const[T,b]=F.geometry.coordinates,B={...F,geometry:{type:"Point",coordinates:[T+M.x,b+M.y]}};u[F.id]=B,l.updateBbox(B),this.updatedItems.add(F.id)}else m[y]=C;u[g]={...p,geometry:{coordinates:m}},this.updatedItems.add(g),l.updateBbox(u[g])}}if(a.applyLiveUpdates(u),s.size>0){this.update(s);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()),s=new Map;n.forEach((u,d)=>s.set(u,d));const o=this.ogma.getNodes(n).getAttributes(["x","y","radius"]),a={};return e.forEach((u,d)=>{const c=this.links.get(u.start),h=this.links.get(u.end),x=t.getFeature(d);let f=x.geometry.coordinates[0],g=x.geometry.coordinates[1];const p=c?c.targetType===l.TARGET_TYPES.NODE?o[s.get(c.target)]:c.targetType===l.TARGET_TYPES.EDGE?this._getEdgeSnapPoint(c.target,c.magnet.t,!0):this._getAnnotationCenter(t.getFeature(c.target)):{x:f[0],y:f[1]},m=h?h.targetType===l.TARGET_TYPES.NODE?o[s.get(h.target)]:h.targetType===l.TARGET_TYPES.EDGE?this._getEdgeSnapPoint(h.target,h.magnet.t,!0):this._getAnnotationCenter(t.getFeature(h.target)):{x:g[0],y:g[1]},A=l.subtract(m,p);if(c)if(c.targetType===l.TARGET_TYPES.NODE)f=this._getNodeSnapPoint(p,A,this._isLinkedToCenter(c));else if(c.targetType===l.TARGET_TYPES.EDGE)f=this._getEdgeSnapPoint(c.target,c.magnet.t);else{const E=t.getMergedFeature(c.target);f=this._getAnnotationSnapPoint(E,m,c,t.zoom)}if(h)if(h.targetType===l.TARGET_TYPES.NODE)g=this._getNodeSnapPoint(m,l.mul(A,-1),this._isLinkedToCenter(h));else if(h.targetType===l.TARGET_TYPES.EDGE)g=this._getEdgeSnapPoint(h.target,h.magnet.t);else{const E=t.getMergedFeature(h.target);g=this._getAnnotationSnapPoint(E,p,h,t.zoom)}a[x.id]={properties:x.properties,geometry:{coordinates:[f,g]}},l.updateBbox(a[x.id]),this.updatedItems.add(x.id)}),a}requestCommit(){clearTimeout(this.commitTimeout),this.commitTimeout=setTimeout(this.commit,Fn)}_isLinkedToCenter(e){return e.magnet.type==="node"&&e.magnet.center}_getRigidFollowComment(e,t){const n=this.linksByArrowId.get(e);if(!n)return;const s=t.side===l.SIDE_START?n.end:n.start;if(!s)return;const r=this.links.get(s);if(!r||r.targetType!==l.TARGET_TYPES.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||!l.isComment(a)))return a}_getAnnotationCenter(e){return l.isPolygon(e)?Bt(e):l.getBoxCenter(e)}_getAnnotationSnapPoint(e,t,n,s){if(l.isPolygon(e)){const r=Dt(e),o=n.magnet,a=r[0]+o.rx*(r[2]-r[0]),u=r[1]+o.ry*(r[3]-r[1]);return[a,u]}return this._getBoxSnapPoint(e,t,n,s)}_getBoxSnapPoint(e,t,n,s){var x;const r=l.getBoxCenter(e);let{width:o,height:a}=l.isComment(e)?l.getCommentSize(e):l.getBoxSize(e);(l.isText(e)&&((x=e.properties.style)==null?void 0:x.fixedSize)||l.isComment(e))&&(o/=s,a/=s);const d=n.magnet;let c=d.nx*o,h=d.ny*a;if(l.isText(e)&&!l.isBox(e)){const{sin:f,cos:g}=this.store.getState(),p=c*g-h*f,m=c*f+h*g;c=p,h=m}return[r.x+c,r.y+h]}_getNodeSnapPoint(e,t,n){if(n)return[e.x,e.y];const s=Math.sqrt(t.x*t.x+t.y*t.y),r=l.mul(t,1/s),o=s<Number(e.radius)/2?{x:e.x,y:e.y}:l.add({x:e.x,y:e.y},l.mul(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(),u=a[0],d=a[1];if(r===0||r===void 0){const x=[u.x+t*(d.x-u.x),u.y+t*(d.y-u.y)];return n?{x:x[0],y:x[1]}:x}const c=nt.geometry.getQuadraticCurveControlPoint(u.x,u.y,d.x,d.y,r),h=nt.geometry.getPointOnQuadraticCurve(t,u.x,u.y,d.x,d.y,c.x,c.y);return n?{x:h.x,y:h.y}:[h.x,h.y]}destroy(){clearTimeout(this.commitTimeout),clearTimeout(this.nodePositionTimeout),this.ogma.events.off(this.onSetMultipleAttributes)}}function Cn(i,e,t,n,s=20){let r=0,o=1/0,a=null;for(let u=0;u<=s;u++){const d=u/s,c=nt.geometry.getPointOnQuadraticCurve(d,e.x,e.y,t.x,t.y,n.x,n.y),h=l.length(l.subtract(c,i));h<o&&(o=h,a=c,r=d)}return a?{t:r,point:a,distance:o}:null}function Nn(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:l.length(l.subtract(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:l.length(l.subtract(a,i))}}function Dn(i,e,t){let n=null,s=t;const r=e.getAttribute("curvature"),a=e.getExtremities().getPosition();for(let u=0;u<e.size;u++){const d=e.get(u),c=r[u],h=a[2*u],x=a[2*u+1];let f;if(c===0||c===void 0)f=Nn(i,h,x);else{const g=nt.geometry.getQuadraticCurveControlPoint(h.x,h.y,x.x,x.y,c);f=Cn(i,h,x,g)}f&&f.distance<s&&(s=f.distance,n={point:f.point,id:d.getId(),magnet:{x:f.t,y:0},type:l.TARGET_TYPES.EDGE})}return n}function Mn(i,e,t){const n=e.getAttributes(["x","y","radius"]);for(let s=0;s<n.length;s++){const r=n[s],o=l.subtract({x:r.x,y:r.y},i),a=l.length(o);if(a>=Number(r.radius)+Number(t))continue;const u=l.mul(o,1/a),d=a<Number(r.radius)/2,c=d?{x:r.x,y:r.y}:l.add({x:r.x,y:r.y},l.mul(u,-Number(r.radius))),h=d?{x:0,y:0}:u;return{point:c,id:e.get(s).getId(),magnet:h,type:l.TARGET_TYPES.NODE}}return null}function wn(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],u=e[s][1];o>i.y!=u>i.y&&i.x<(a-r)*(i.y-o)/(u-o)+r&&(t=!t)}return t}function bn(i,e,t,n,s){const r=i*i,o=r*i,a=1-i,u=a*a,d=u*a;return{x:d*e.x+3*u*i*t.x+3*a*r*n.x+o*s.x,y:d*e.y+3*u*i*t.y+3*a*r*n.y+o*s.y}}function Bn(i,e,t,n,s){let r=1/0,o=null;const a=20;for(let u=0;u<=a;u++){const d=u/a,c=bn(d,e,t,n,s),h=l.length(l.subtract(c,i));h<r&&(r=h,o=c)}return o?{point:o,distance:r}:null}function Tn(i,e,t){const n=e.geometry.coordinates[0];for(let s=0;s<n.length-1;s++){const[r,o]=n[s];if(l.length(l.subtract({x:r,y:o},i))<t)return{point:{x:r,y:o},magnet:{x:r,y:o},type:l.TARGET_TYPES.POLYGON,id:e.id}}for(let s=0;s<n.length-1;s++){const[r,o]=n[s],[a,u]=n[s+1],d={x:r,y:o},c={x:a,y:u},h=l.subtract(c,d),x=l.length(h),f={x:h.x/x,y:h.y/x},g={x:-f.y,y:f.x},p=l.subtract(i,d),m=Math.abs(l.dot(g,p)),A=l.dot(f,p);if(A>=0&&A<=x&&m<t){const E={x:d.x+f.x*A,y:d.y+f.y*A};return{point:E,magnet:E,type:l.TARGET_TYPES.POLYGON,id:e.id}}}return null}function vn(i,e,t){for(const s of e){const o=s.geometry.coordinates[0].slice(0,-1);if(o.length<3)return Tn(i,s,t);for(let c=0;c<o.length;c++){const[h,x]=o[c];if(l.length(l.subtract({x:h,y:x},i))<t)return{point:{x:h,y:x},magnet:{x:h,y:x},type:l.TARGET_TYPES.POLYGON,id:s.id}}const a=wn(i,o);let u=null,d=a?1/0:t;for(let c=0;c<o.length;c++){const h=o[(c-1+o.length)%o.length],x=o[c],f=o[(c+1)%o.length],g=o[(c+2)%o.length],p=x[0]+(f[0]-h[0])/6*.5,m=x[1]+(f[1]-h[1])/6*.5,A=f[0]-(g[0]-x[0])/6*.5,E=f[1]-(g[1]-x[1])/6*.5,y=Bn(i,{x:x[0],y:x[1]},{x:p,y:m},{x:A,y:E},{x:f[0],y:f[1]});if(y){const D=y.distance;if(a)D<d&&(d=D,u=y.point);else if(D<t)return{point:y.point,magnet:y.point,type:l.TARGET_TYPES.POLYGON,id:s.id}}}if(a&&u)return{point:u,magnet:u,type:l.TARGET_TYPES.POLYGON,id:s.id}}return null}const Ce=[{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}],kn=[[-.5,-.5,.5,-.5],[.5,-.5,.5,.5],[.5,.5,-.5,.5],[-.5,.5,-.5,-.5]];function qt(i,e,t,n,s,r,o,a,u){const d=i*s,c=e*r;return u?{x:t+(d*o-c*a),y:n+(d*a+c*o)}:{x:t+d,y:n+c}}function Ln(i,e,t,n,s){var c;const r=l.getBoxCenter(e);let{width:o,height:a}=l.getBoxSize(e);const{sin:u,cos:d}=s.getState();(c=e.properties.style)!=null&&c.fixedSize&&(o/=t,a/=t);for(const h of Ce){let x=h.x*o,f=h.y*a;if(!l.isBox(e)){const m=x*d-f*u,A=x*u+f*d;x=m,f=A}const g={x:r.x+x,y:r.y+f};if(!(l.length(l.subtract(g,i))>=n))return{point:{x:g.x,y:g.y},type:l.TARGET_TYPES.TEXT,magnet:h,id:e.id}}return null}function Pn(i,e,t,n,s){var g;const{x:r,y:o}=l.getBoxCenter(e);let{width:a,height:u}=l.getBoxSize(e);(g=e.properties.style)!=null&&g.fixedSize&&(a/=t,u/=t);const{sin:d,cos:c}=s.getState(),h=!l.isBox(e);let x=null,f=1/0;for(let p=0;p<4;p++){const[m,A,E,y]=kn[p],D=qt(m,A,r,o,a,u,c,d,h),C=qt(E,y,r,o,a,u,c,d,h),F=l.subtract(C,D),N=l.length(F),M={x:F.x/N,y:F.y/N},T={x:-M.y,y:M.x},b=l.subtract(i,D),B=l.dot(T,b),L=l.dot(M,b);if(L>=0&&L<=N){const P=Math.abs(B);if(P<n||P<f){const R=L/N,w={point:{x:D.x+M.x*L,y:D.y+M.y*L},magnet:{x:m+(E-m)*R,y:A+(y-A)*R},type:l.TARGET_TYPES.TEXT,id:e.id};if(P<n)return w;P<f&&(f=P,x=w)}}}return x&&f<Math.max(a,u)?x:null}function On(i,e,t,n,s){for(const r of e){const o=Ln(i,r,t,n,s)||Pn(i,r,t,n,s);if(o)return o}return null}class Rn extends EventTarget{constructor(t,n,s,r){super();S(this,"ogma");S(this,"options");S(this,"spatialIndex");S(this,"hoveredNode",null);S(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(g=>l.isText(g)||l.isBox(g)),a=r.filter(g=>l.isPolygon(g)),{nodes:u,edges:d}=this.ogma.view.getElementsInside(s.minX,s.minY,s.maxX,s.maxY),c=this.snapToNodes(t,u);if(c)return c;const h=this.snapToEdges(t,d);if(h)return h;const x=this.snapToText(t,o);if(x)return x;const f=this.snapToPolygon(t,a);return f||null}snapToText(t,n){const{zoom:s}=this.store.getState();return On(t,n,s,this.options.magnetRadius,this.store)}snapToPolygon(t,n){return vn(t,n,this.options.magnetRadius)}snapToNodes(t,n){return Mn(t,n,this.options.detectMargin)}snapToEdges(t,n){return Dn(t,n,this.options.magnetRadius)}getHoveredNode(){return this.hoveredNode}clearHoveredNode(){var t;(t=this.hoveredNode)==null||t.setSelected(!1),this.hoveredNode=null}getMagnets(){return Ce}}class _n extends EventTarget{constructor(t,n,s){super();S(this,"query",{minX:1/0,minY:1/0,maxX:1/0,maxY:1/0});S(this,"suppressClickUntil",0);S(this,"mouseDownState",null);S(this,"DRAG_THRESHOLD",3);S(this,"onMouseMove",t=>{const n=l.clientToContainerPosition(t,this.ogma.getContainer()),s=this.store.getState();if(this.mouseDownState&&!s.isDragging){const c=t.clientX-this.mouseDownState.screenX,h=t.clientY-this.mouseDownState.screenY;Math.sqrt(c*c+h*h)>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),u=(a==null?void 0:a.id)??null,d=s.hoveredFeature;u!==d&&s.setHoveredFeature(u),this.setCursor(u===null?l.cursors.default:l.cursors.pointer)});S(this,"onMouseClick",()=>{Date.now()<this.suppressClickUntil});S(this,"onMouseDown",t=>{if(Date.now()<this.suppressClickUntil)return;if(at(t.target)){this.mouseDownState=null;return}const n=l.clientToContainerPosition(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]))});S(this,"onMouseUp",t=>{const n=this.store.getState();if(this.store.setState({mousePressed:!1,mousePressPoint:null}),at(t.target)){this.mouseDownState=null;return}if(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(l.EVT_CLICK,{detail:{id:(s==null?void 0:s.id)??null,position:{x:t.clientX,y:t.clientY}}}))}this.mouseDownState=null});S(this,"onWheel",t=>{var h;if(t.target instanceof HTMLTextAreaElement)return;const n=l.clientToContainerPosition(t,this.ogma.getContainer()),{x:s,y:r}=this.ogma.view.screenToGraphCoordinates(n),o=this.detect(s,r);if(!o||!l.isComment(o))return;const a=(h=o.properties.style)==null?void 0:h.maxHeight,u=o.properties.height;if(!a||u<=a)return;const d=this.ogma.getContainer(),c=d==null?void 0:d.querySelector(`[data-annotation="${o.id}"] .comment-box foreignObject div`);c&&(t.stopPropagation(),t.preventDefault(),c.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 u=this.index.query(this.query);if(u.length===0)return null;for(const d of u){const c=o.getFeature(d.id);if(l.isArrow(c)){if(l.detectArrow(c,{x:t,y:n},a)){r=c;break}}else if(l.isBox(c)){if(l.detectBox(c,{x:t,y:n},0,1,a)){r=c;break}}else if(l.isPolygon(c)){if(l.detectPolygon(c,{x:t,y:n},a)){r=c;break}}else if(l.isComment(c)){if(l.detectComment(c,{x:t,y:n},a,o.sin,o.cos,o.zoom)){r=c;break}}else if(l.isText(c)&&l.detectText(c,{x:t,y:n},a,o.revSin,o.revCos,o.zoom)){r=c;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(l.cursors.crosshair):t==="rotate"&&this.setCursor(l.cursors.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 Ne(i,e,t=0,n=i.length-1,s=Hn){for(;n>t;){if(n-t>600){const u=n-t+1,d=e-t+1,c=Math.log(u),h=.5*Math.exp(2*c/3),x=.5*Math.sqrt(c*h*(u-h)/u)*(d-u/2<0?-1:1),f=Math.max(t,Math.floor(e-d*h/u+x)),g=Math.min(n,Math.floor(e+(u-d)*h/u+x));Ne(i,e,f,g,s)}const r=i[e];let o=t,a=n;for(Z(i,t,e),s(i[n],r)>0&&Z(i,t,n);o<a;){for(Z(i,o,a),o++,a--;s(i[o],r)<0;)o++;for(;s(i[a],r)>0;)a--}s(i[t],r)===0?Z(i,t,a):(a++,Z(i,a,n)),a<=e&&(t=a+1),e<=a&&(n=a-1)}}function Z(i,e,t){const n=i[e];i[e]=i[t],i[t]=n}function Hn(i,e){return i<e?-1:i>e?1:0}class In{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(!ot(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],u=t.leaf?s(a):a;ot(e,u)&&(t.leaf?n.push(a):St(e,u)?this._all(a,n):r.push(a))}t=r.pop()}return n}collides(e){let t=this.data;if(!ot(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(ot(e,o)){if(t.leaf||St(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=K([]),this}remove(e,t){if(!e)return this;let n=this.data;const s=this.toBBox(e),r=[],o=[];let a,u,d;for(;n||r.length;){if(n||(n=r.pop(),u=r[r.length-1],a=o.pop(),d=!0),n.leaf){const c=Gn(e,n.children,t);if(c!==-1)return n.children.splice(c,1),r.push(n),this._condense(r),this}!d&&!n.leaf&&St(n,s)?(r.push(n),o.push(a),a=0,u=n,n=n.children[0]):u?(a++,n=u.children[a],d=!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=K(e.slice(t,n+1)),V(a,this.toBBox),a;s||(s=Math.ceil(Math.log(r)/Math.log(o)),o=Math.ceil(r/Math.pow(o,s-1))),a=K([]),a.leaf=!1,a.height=s;const u=Math.ceil(r/o),d=u*Math.ceil(Math.sqrt(o));Kt(e,t,n,d,this.compareMinX);for(let c=t;c<=n;c+=d){const h=Math.min(c+d-1,n);Kt(e,c,h,u,this.compareMinY);for(let x=c;x<=h;x+=u){const f=Math.min(x+u-1,h);a.children.push(this._build(e,x,f,s-1))}}return V(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 u=0;u<t.children.length;u++){const d=t.children[u],c=mt(d),h=Wn(e,d)-c;h<o?(o=h,r=c<r?c:r,a=d):h===o&&c<r&&(r=c,a=d)}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),et(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=K(n.children.splice(o,n.children.length-o));a.height=n.height,a.leaf=n.leaf,V(n,this.toBBox),V(a,this.toBBox),t?e[t-1].children.push(a):this._splitRoot(n,a)}_splitRoot(e,t){this.data=K([e,t]),this.data.height=e.height+1,this.data.leaf=!1,V(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 u=tt(e,0,a,this.toBBox),d=tt(e,a,n,this.toBBox),c=$n(u,d),h=mt(u)+mt(d);c<r?(r=c,s=a,o=h<o?h:o):c===r&&h<o&&(o=h,s=a)}return s||n-t}_chooseSplitAxis(e,t,n){const s=e.leaf?this.compareMinX:zn,r=e.leaf?this.compareMinY:Yn,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=tt(e,0,t,r),a=tt(e,n-t,n,r);let u=rt(o)+rt(a);for(let d=t;d<n-t;d++){const c=e.children[d];et(o,e.leaf?r(c):c),u+=rt(o)}for(let d=n-t-1;d>=t;d--){const c=e.children[d];et(a,e.leaf?r(c):c),u+=rt(a)}return u}_adjustParentBBoxes(e,t,n){for(let s=n;s>=0;s--)et(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():V(e[t],this.toBBox)}}function Gn(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 V(i,e){tt(i,0,i.children.length,e,i)}function tt(i,e,t,n,s){s||(s=K(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];et(s,i.leaf?n(o):o)}return s}function et(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 zn(i,e){return i.minX-e.minX}function Yn(i,e){return i.minY-e.minY}function mt(i){return(i.maxX-i.minX)*(i.maxY-i.minY)}function rt(i){return i.maxX-i.minX+(i.maxY-i.minY)}function Wn(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 $n(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 St(i,e){return i.minX<=e.minX&&i.minY<=e.minY&&e.maxX<=i.maxX&&e.maxY<=i.maxY}function ot(i,e){return e.minX<=i.maxX&&e.minY<=i.maxY&&e.maxX>=i.minX&&e.maxY>=i.minY}function K(i){return{children:i,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function Kt(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;Ne(i,o,e,t,s),r.push(e,o,o,t)}}const J={minX:0,minY:0,maxX:0,maxY:0},Zt=(i,e)=>i.id===e.id;class Un extends In{constructor(t){super();S(this,"store");S(this,"onRotationChange",()=>{const t=this.store.getState().getAllFeatures().filter(n=>l.isText(n)||l.isComment(n));for(const n of t)this.updateRotatedText(n)});S(this,"onZoomChange",()=>{const t=this.store.getState().getAllFeatures().filter(n=>{var s;return(l.isText(n)||l.isComment(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.isText(s)||l.isComment(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&&(l.updateBbox(o),l.isText(o)||l.isComment(o)?this.updateRotatedText(o):(this.remove(o,Zt),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 h;const n=this.store.getState();this.remove(t,Zt);const s=l.getBoxCenter(t);let{width:r,height:o}=l.getBoxSize(t);if(((h=t.properties.style)==null?void 0:h.fixedSize)===!0){const x=n.invZoom;r*=x,o*=x}const u=r/2,d=o/2,c=n.getRotatedBBox(s.x-u,s.y-d,s.x+u,s.y+d);this.insert({...t,geometry:{...t.geometry,bbox:c.slice()}})}compareMinX(t,n){return l.getBbox(t)[0]-l.getBbox(n)[0]}compareMinY(t,n){return l.getBbox(t)[1]-l.getBbox(n)[1]}toBBox(t){const n=l.getBbox(t);return J.minX=n[0],J.minY=n[1],J.maxX=n[2],J.maxY=n[3],J}query(t){return super.search(t)}}class De{constructor(e,t){S(this,"layer");this.ogma=e,this.store=t}destroy(){}}const Jt=[[-.5,-.5],[.5,-.5],[.5,.5],[-.5,.5]];class Xn extends De{constructor(t,n){super(t,n);S(this,"handleFill","#fff");S(this,"handleStroke","#1A70E5");S(this,"handleStrokeWidth",1.5);S(this,"handleRadius",3);S(this,"handleMagnifier",1.5);S(this,"refresh",()=>{this.layer.refresh()});S(this,"render",t=>{const n=this.store.getState(),s=1/n.zoom,{hoveredHandle:r,rotation:o,liveUpdates:a,features:u}=n,d=this.handleRadius*s;t.fillStyle=this.handleFill,t.lineWidth=this.handleStrokeWidth*s,t.strokeStyle=this.handleStroke,Object.values(u).forEach(c=>{if(!n.isSelected(c.id))return;const h=a[c.id]?{...c,...a[c.id]}:c;if(l.isArrow(h))this.renderArrowHandles(h,t,d,r);else if(l.isBox(h)||l.isText(h)){const x=l.isText(h)?o:0;this.renderOutline(h,t,x,r,n.zoom),this.renderBoxHandles(h,t,d,r,x)}else l.isPolygon(h)&&this.renderPolygonHandles(h,t,d,r,n.drawingFeature===h.id)})});this.layer=t.layers.addCanvasLayer(this.render,void 0,l.LAYERS.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,A;const a=l.isText(t)&&((m=t.properties.style)==null?void 0:m.fixedSize);let{width:u,height:d}=l.getBoxSize(t);a&&(u/=o,d/=o);const c=l.getBoxPosition(t,a,o),h=u/2,x=d/2,f=c.x+h,g=c.y+x;n.save(),n.translate(f,g),n.rotate(s);const p=(A=t.properties.style)==null?void 0:A.borderRadius;if(p&&p>0?(Qe(n,-h,-x,u,d,p),n.stroke()):n.strokeRect(-h,-x,u,d),r>=4&&r<8){let E,y,D,C;const F=p&&p>0?p:this.handleRadius/o;switch(r){case 4:E=-h+F,y=-x,D=h-F,C=-x;break;case 5:E=h,y=-x+F,D=h,C=x-F;break;case 6:E=h-F,y=x,D=-h+F,C=x;break;case 7:E=-h,y=x-F,D=-h,C=-x+F;break}n.lineWidth=this.handleStrokeWidth*this.handleMagnifier/o,n.beginPath(),n.moveTo(E,y),n.lineTo(D,C),n.stroke(),n.lineWidth=this.handleStrokeWidth}n.restore()}renderArrowHandles(t,n,s,r){var x,f,g,p;const o=l.getArrowStart(t),a=l.getArrowEnd(t),u=+(r===0),d=+(r===1),c=s*(1+(this.handleMagnifier-1)*u),h=s*(1+(this.handleMagnifier-1)*d);n.beginPath(),n.moveTo(o.x,o.y),n.lineTo(a.x,a.y),n.closePath(),n.stroke(),n.beginPath(),((f=(x=t.properties.link)==null?void 0:x.start)==null?void 0:f.type)!=="comment"&&(n.moveTo(o.x-c,o.y-c),n.rect(o.x-c,o.y-c,c*2,c*2)),((p=(g=t.properties.link)==null?void 0:g.end)==null?void 0:p.type)!=="comment"&&(n.moveTo(a.x-h,a.y-h),n.rect(a.x-h,a.y-h,h*2,h*2)),n.closePath(),n.fill(),n.stroke()}renderBoxHandles(t,n,s,r,o){var g;if(l.isText(t)&&((g=t.properties.style)!=null&&g.fixedSize))return;const{width:a,height:u}=l.getBoxSize(t),d=l.getBoxPosition(t),c=a/2,h=u/2,x=d.x+c,f=d.y+h;n.save(),n.translate(x,f),n.rotate(o),n.beginPath();for(let p=0;p<Jt.length;p++){const[m,A]=Jt[p],E=a*m,y=u*A,D=r===p?s*this.handleMagnifier:s;n.rect(E-D,y-D,D*2,D*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 u=0;u<a.length-1;u++){const[d,c]=a[u],h=r===u?s*this.handleMagnifier:s;n.moveTo(d+h,c),n.arc(d,c,h,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 u=r[(a-1+o)%o],d=r[a],c=r[(a+1)%o],h=r[(a+2)%o],x=d[0]+(c[0]-u[0])/6*s,f=d[1]+(c[1]-u[1])/6*s,g=c[0]-(h[0]-d[0])/6*s,p=c[1]-(h[1]-d[1])/6*s;a===0&&t.moveTo(d[0],d[1]),t.bezierCurveTo(x,f,g,p,c[0],c[1])}t.closePath()}renderCenterPoint(t,n){var r;const s=this.store.getState();if(l.isText(t)){const o=l.getBoxPosition(t,(r=t.properties.style)==null?void 0:r.fixedSize,s.zoom),a=l.getBoxSize(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 Vn=.5;function jn(i,e,t,n){const{start:s,end:r}=l.getArrowEndPoints(i),o=l.subtract(r,s);return Math.min(n,Math.max(2*e,l.length(o)*.01,t))}function Qt(i,e){return!i||i==="none"?0:i==="dot"?e*2:i==="halo-dot"?e*4:i==="arrow"||i==="arrow-plain"?e:0}function qn(i,e){if(!i){i=l.createSVGElement("g");const t=l.createSVGElement("path");i.classList.add("annotation-arrow"),i.setAttribute("data-annotation",`${e}`),i.setAttribute("data-annotation-type","arrow"),i.appendChild(t);const n=l.createSVGElement("g");n.classList.add("annotation-arrow-endpoints"),i.appendChild(n)}return i}function Kn(i,e,t,n,s,r){const{start:o,end:a}=l.getArrowEndPoints(e),u=e.properties.style||l.defaultArrowStyle,{tail:d,strokeWidth:c=0,head:h,strokeColor:x,strokeType:f}=u,g=l.subtract(a,o),p=Ae(e)?1/r.zoom:1,m=jn(e,c,t,n)*p,A=qn(s,e.id),E=A.firstChild,y=x||"none";E.setAttribute("stroke",y),E.setAttribute("stroke-width",`${p*c}`),E.setAttribute("fill","none"),E.setAttribute("stroke-linecap","round"),E.setAttribute("stroke-linejoin","round");const D=Qt(d,c*p),C=Qt(h,c*p),F=l.normalize(g),N=l.add(o,l.mul(F,D)),M=l.add(a,l.mul(F,-C)),T=`M ${N.x} ${N.y} L ${M.x} ${M.y}`;E.setAttribute("d",T);const b=A.children[1];return b.innerHTML="",f==="dashed"?E.setAttribute("stroke-dasharray","5,10"):E.removeAttribute("stroke-dasharray"),te(b,o,g,y,d,c,p,m),te(b,a,l.invert(g),y,h,c,p,m),A.setAttribute("transform",`rotate(${-r.rotation*(180/Math.PI)})`),i.appendChild(A),A}function te(i,e,t,n,s,r,o,a){s==="halo-dot"&&ee(i,e,Zn(n),Vn,r*o*4),(s==="dot"||s==="halo-dot")&&ee(i,e,n,1,r*o*2),(s==="arrow"||s==="arrow-plain")&&Jn(i,e,t,n,s==="arrow-plain",r*o,a)}function Zn(i){return i==="none"?"none":i}function ee(i,e,t,n,s){const r=l.createSVGElement("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 Jn(i,e,t,n,s,r,o){const a=l.mul(l.normalize(t),o),u=l.add(e,l.rotateRadians(a,Math.PI/6)),d=l.add(e,l.rotateRadians(a,-Math.PI/6)),c=l.createSVGElement("path"),h=`${e.x} ${e.y}`,x=`M ${u.x} ${u.y} L ${h} L ${d.x} ${d.y}${s?" Z":""}`;c.setAttribute("d",x),c.setAttribute("stroke",n),c.setAttribute("stroke-width",`${r}`),c.setAttribute("fill",s?n:"none"),c.setAttribute("stroke-linecap","round"),c.setAttribute("stroke-linejoin","round"),i.appendChild(c)}function Qn(i,e,t="box"){if(!i){i=l.createSVGElement("g"),i.setAttribute("data-annotation",`${e}`),i.setAttribute("data-annotation-type",t),i.classList.add(`annotation-${t}`);const n=l.createSVGElement("rect");i.appendChild(n)}return i}function Me(i,e,t,n){const s=e.id,r=`class${s}`,o=l.getBoxSize(e),a=Qn(t,s,e.properties.type),{strokeColor:u,strokeWidth:d,strokeType:c,background:h,borderRadius:x,boxShadow:f}=e.properties.style||l.defaultBoxStyle;a.classList.add("annotation-box"),a.setAttribute("fill",`${h||"transparent"}`);const g=a.firstChild;x&&(g.setAttribute("rx",`${x}`),g.setAttribute("ry",`${x}`)),c&&c!=="none"&&(g.setAttribute("stroke",u||"black"),g.setAttribute("stroke-width",`${d}`),c==="dashed"&&g.setAttribute("stroke-dasharray","5,5")),h&&h.length&&(n.hoveredFeature===e.id?g.setAttribute("fill",l.brighten(h)):g.setAttribute("fill",h));const p=l.getBoxPosition(e);return g.setAttribute("width",`${o.width}`),g.setAttribute("height",`${o.height}`),g.setAttribute("x",`${p.x}`),g.setAttribute("y",`${p.y}`),a.appendChild(g),f?a.style.filter=`drop-shadow(${f})`: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}function ts(){const i=l.createSVGElement("style");return i.textContent=`
|
|
14
7
|
/* Comment Animation Styles */
|
|
15
8
|
.comment-icon {
|
|
16
9
|
transition:
|
|
@@ -87,5 +80,7 @@
|
|
|
87
80
|
.comment-edit-button:hover {
|
|
88
81
|
opacity: 1;
|
|
89
82
|
}
|
|
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,"&").replace(/</g,"<").replace(/>/g,">");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"})}));
|
|
83
|
+
`,i}function es(i,e,t){const n={...l.defaultCommentStyle,...e.properties.style},s=n.iconSize,{iconColor:r=l.defaultCommentStyle.iconColor,iconSymbol:o=l.defaultCommentStyle.iconSymbol,iconBorderColor:a=l.defaultCommentStyle.iconBorderColor,iconBorderWidth:u=l.defaultCommentStyle.iconBorderWidth}=n;let d=i.querySelector("rect");d||(d=l.createSVGElement("rect"),d.setAttribute("x",`${-s/2}`),d.setAttribute("y",`${-s/2}`),d.setAttribute("rx",`${n.borderRadius}`),d.setAttribute("ry",`${n.borderRadius}`),i.appendChild(d)),d.setAttribute("width",`${s}`),d.setAttribute("height",`${s}`),t.hoveredFeature===e.id?d.setAttribute("fill",l.brighten(r)):d.setAttribute("fill",r),u&&u>0?(d.setAttribute("stroke",a||"#CCC"),d.setAttribute("stroke-width",`${u}`)):(d.removeAttribute("stroke"),d.removeAttribute("stroke-width"));let c=i.querySelector("text");c||(c=l.createSVGElement("text"),c.setAttribute("x","0"),c.setAttribute("y","0"),c.setAttribute("text-anchor","middle"),c.setAttribute("dominant-baseline","central"),c.setAttribute("pointer-events","none"),i.appendChild(c)),c.setAttribute("font-size",`${s*.5}`),c.textContent=o}function ns(i,e,t,n=!1){const s={...l.defaultCommentStyle,...e.properties.style},{font:r="Arial, sans-serif",fontSize:o=12,padding:a=8,background:u="#FFFACD",color:d="#333",borderRadius:c=4,strokeColor:h="#DDD",strokeWidth:x=1,maxHeight:f}=s,g=e.properties.width,p=e.properties.height,m=f?Math.min(p,f):p,A=f?p>f:!1,E=e.properties.content||"";i.innerHTML="";const y=-g/2,D=-m/2,C=l.createSVGElement("rect");C.setAttribute("x",`${y}`),C.setAttribute("y",`${D}`),C.setAttribute("width",`${g}`),C.setAttribute("height",`${m}`),C.setAttribute("rx",`${c}`),C.setAttribute("ry",`${c}`),C.setAttribute("fill",t.hoveredFeature===e.id?l.brighten(u):u),x&&x>0&&(C.setAttribute("stroke",h||"#DDD"),C.setAttribute("stroke-width",`${x}`)),i.appendChild(C);const F=l.createSVGElement("foreignObject");F.setAttribute("x",`${y}`),F.setAttribute("y",`${D}`),F.setAttribute("width",`${g}`),F.setAttribute("height",`${m}`),F.style.pointerEvents="none";const N=document.createElement("div");if(N.style.width="100%",N.style.height="100%",N.style.padding=`${a}px`,N.style.boxSizing="border-box",N.style.fontFamily=r,N.style.fontSize=`${typeof o=="number"?o:parseFloat(o)}px`,N.style.lineHeight=`${(typeof o=="number"?o:parseFloat(o))*l.TEXT_LINE_HEIGHT}px`,N.style.color=d,N.style.overflowY=A?"auto":"hidden",N.style.overflowX="hidden",N.style.overflowWrap="break-word",N.style.whiteSpace="pre-wrap",N.style.pointerEvents="none",N.innerHTML=ss(E),F.appendChild(N),i.appendChild(F),n){const b=l.createSVGElement("foreignObject");b.setAttribute("x",`${y+g-24-4}`),b.setAttribute("y",`${D+m-24-4}`),b.setAttribute("width","24"),b.setAttribute("height","24");const B=document.createElement("div");B.classList.add("ogma-send-button"),B.style.width="100%",B.style.height="100%",B.style.display="flex",B.style.alignItems="center",B.style.justifyContent="center",B.style.boxSizing="border-box",B.style.background=u,B.style.border=`1px solid ${h||"#DDD"}`,B.style.borderRadius="4px",B.style.pointerEvents="auto";const L=document.createElement("span");L.classList.add("ogma-send-button-icon"),L.innerHTML=t.options.editButtonIcon,B.appendChild(L),b.appendChild(B),i.appendChild(b)}s.shadow!==!1?i.setAttribute("filter","url(#softShadow)"):i.removeAttribute("filter")}function ss(i){if(!i)return"";let e=i.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");return e=e.replace(Fe(),`<a href="$1" class="${Pt}" target="_blank" rel="noopener noreferrer">$1</a>`),e}function is(i,e,t,n,s){const r=e.properties.mode;let o=t;o||(o=l.createSVGElement("g"),o.setAttribute("data-annotation",`${e.id}`),o.setAttribute("data-annotation-type","comment"));let a=o.querySelector(".comment-icon");a||(a=l.createSVGElement("g"),a.classList.add("comment-icon"),o.appendChild(a));let u=o.querySelector(".comment-box");u||(u=l.createSVGElement("g"),u.classList.add("comment-box"),o.appendChild(u));const d=r!==l.COMMENT_MODE_COLLAPSED&&n.selectedFeatures.has(e.id)&&n.editingFeature!==e.id&&n.options.showEditButton;es(a,e,n),ns(u,e,n,d),s?o.classList.remove("comment-no-transition"):o.classList.add("comment-no-transition"),r===l.COMMENT_MODE_COLLAPSED?(o.classList.add("comment-collapsed"),o.classList.remove("comment-expanded")):(o.classList.add("comment-expanded"),o.classList.remove("comment-collapsed"));const c=l.getBoxCenter(e);return o.setAttribute("transform",n.getScreenAlignedTransform(c.x,c.y,!1)),o.style.visibility=n.editingFeature===e.id?"hidden":"",(!o.parentNode||o.parentNode!==i)&&i.appendChild(o),o}function rs(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],u=n[o],d=n[(o+1)%s],c=n[(o+2)%s],h=u[0]+(d[0]-a[0])/6*e,x=u[1]+(d[1]-a[1])/6*e,f=d[0]-(c[0]-u[0])/6*e,g=d[1]-(c[1]-u[1])/6*e;o===0&&r.push(`M${u[0]},${u[1]}`),t&&o===s-1?r.push(`L${d[0]},${d[1]}`):r.push(`C${h},${x} ${f},${g} ${d[0]},${d[1]}`)}return r.push("Z"),r.join(" ")}const os=(i,e,t="box")=>(i||(i=l.createSVGElement("g"),i.setAttribute("data-annotation",`${e}`),i.classList.add(`annotation-${t}`)),i);function as(i,e,t,n){const s=os(t,e.id.toString(),e.properties.type);s.setAttribute("data-annotation",String(e.id));let r=s.querySelector("path");r||(r=l.createSVGElement("path"),s.appendChild(r));const{strokeColor:o=l.defaultPolygonStyle.strokeColor,strokeWidth:a=l.defaultPolygonStyle.strokeWidth,background:u=l.defaultPolygonStyle.background,strokeType:d=l.defaultPolygonStyle.strokeType}=e.properties.style||l.defaultPolygonStyle;o&&r.setAttribute("stroke",o),a!==void 0&&r.setAttribute("stroke-width",String(a)),u&&(n.hoveredFeature===e.id?r.setAttribute("fill",l.brighten(u)):r.setAttribute("fill",u)),d==="dashed"?r.setAttribute("stroke-dasharray","5,5"):r.removeAttribute("stroke-dasharray");const c=e.geometry.coordinates[0],h=rs(c,.5,n.drawingFeature===e.id);return r.setAttribute("d",h),s.setAttribute("transform",n.getRotationTransform(0,0)),i.appendChild(s),s}const cs=["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"],ne=[[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 ls(i){if(i<=255)return cs[i];let e=0,t=ne.length-1;for(;e<=t;){const n=e+t>>1,s=ne[n];if(i<s[0]){t=n-1;continue}if(i>s[1]){e=n+1;continue}return s[2]}return"L"}function ds(i){const e=i.length;if(e===0)return null;const t=new Array(e);let n=!1;for(let d=0;d<e;){const c=i.charCodeAt(d);let h=c,x=1;if(c>=55296&&c<=56319&&d+1<e){const g=i.charCodeAt(d+1);g>=56320&&g<=57343&&(h=(c-55296<<10)+(g-56320)+65536,x=2)}const f=ls(h);(f==="R"||f==="AL"||f==="AN")&&(n=!0);for(let g=0;g<x;g++)t[d+g]=f;d+=x}if(!n)return null;let s=0;for(let d=0;d<e;d++){const c=t[d];if(c==="L"){s=0;break}if(c==="R"||c==="AL"){s=1;break}}const r=new Int8Array(e);for(let d=0;d<e;d++)r[d]=s;const o=s&1?"R":"L",a=o;let u=a;for(let d=0;d<e;d++)t[d]==="NSM"?t[d]=u:u=t[d];u=a;for(let d=0;d<e;d++){const c=t[d];c==="EN"?t[d]=u==="AL"?"AN":"EN":(c==="R"||c==="L"||c==="AL")&&(u=c)}for(let d=0;d<e;d++)t[d]==="AL"&&(t[d]="R");for(let d=1;d<e-1;d++)t[d]==="ES"&&t[d-1]==="EN"&&t[d+1]==="EN"&&(t[d]="EN"),t[d]==="CS"&&(t[d-1]==="EN"||t[d-1]==="AN")&&t[d+1]===t[d-1]&&(t[d]=t[d-1]);for(let d=0;d<e;d++){if(t[d]!=="EN")continue;let c;for(c=d-1;c>=0&&t[c]==="ET";c--)t[c]="EN";for(c=d+1;c<e&&t[c]==="ET";c++)t[c]="EN"}for(let d=0;d<e;d++){const c=t[d];(c==="WS"||c==="ES"||c==="ET"||c==="CS")&&(t[d]="ON")}u=a;for(let d=0;d<e;d++){const c=t[d];c==="EN"?t[d]=u==="L"?"L":"EN":(c==="R"||c==="L")&&(u=c)}for(let d=0;d<e;d++){if(t[d]!=="ON")continue;let c=d+1;for(;c<e&&t[c]==="ON";)c++;const h=d>0?t[d-1]:a,x=c<e?t[c]:a,f=h!=="L"?"R":"L";if(f===(x!=="L"?"R":"L"))for(let p=d;p<c;p++)t[p]=f;d=c-1}for(let d=0;d<e;d++)t[d]==="ON"&&(t[d]=o);for(let d=0;d<e;d++){const c=t[d];(r[d]&1)===0?c==="R"?r[d]++:(c==="AN"||c==="EN")&&(r[d]+=2):(c==="L"||c==="AN"||c==="EN")&&r[d]++}return r}function us(i,e){const t=ds(i);if(t===null)return null;const n=new Int8Array(e.length);for(let s=0;s<e.length;s++)n[s]=t[e[s]];return n}const hs=/[ \t\n\r\f]+/g,xs=/[\t\n\r\f]| {2,}|^ | $/;function fs(i){const e=i??"normal";return e==="pre-wrap"?{mode:e,preserveOrdinarySpaces:!0,preserveHardBreaks:!0}:{mode:e,preserveOrdinarySpaces:!1,preserveHardBreaks:!1}}function gs(i){if(!xs.test(i))return i;let e=i.replace(hs," ");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 ps(i){return/[\r\f]/.test(i)?i.replace(/\r\n/g,`
|
|
84
|
+
`).replace(/[\r\f]/g,`
|
|
85
|
+
`):i}let Et=null,ms;function Ss(){return Et===null&&(Et=new Intl.Segmenter(ms,{granularity:"word"})),Et}const Es=new RegExp("\\p{Script=Arabic}","u"),X=new RegExp("\\p{M}","u"),Rt=new RegExp("\\p{Nd}","u");function se(i){return Es.test(i)}function ie(i){return i>=19968&&i<=40959||i>=13312&&i<=19903||i>=131072&&i<=173791||i>=173824&&i<=177983||i>=177984&&i<=178207||i>=178208&&i<=183983||i>=183984&&i<=191471||i>=191472&&i<=192093||i>=194560&&i<=195103||i>=196608&&i<=201551||i>=201552&&i<=205743||i>=205744&&i<=210041||i>=63744&&i<=64255||i>=12288&&i<=12351||i>=12352&&i<=12447||i>=12448&&i<=12543||i>=12592&&i<=12687||i>=44032&&i<=55215||i>=65280&&i<=65519}function z(i){for(let e=0;e<i.length;e++){const t=i.charCodeAt(e);if(!(t<12288)){if(t>=55296&&t<=56319&&e+1<i.length){const n=i.charCodeAt(e+1);if(n>=56320&&n<=57343){const s=(t-55296<<10)+(n-56320)+65536;if(ie(s))return!0;e++;continue}}if(ie(t))return!0}}return!1}function Fs(i){const e=st(i);return e!==null&&(_t.has(e)||U.has(e))}const As=new Set([" "," ","","\uFEFF"]),ys=new Set(["-","‐","–","—"]);function Cs(i){const e=st(i);return e!==null&&As.has(e)}function Ns(i){const e=st(i);return e!==null&&ys.has(e)}function Ds(i,e){return Cs(i)?!1:e?!(Fs(i)||Ns(i)):!0}const _t=new Set([",",".","!",":",";","?","、","。","・",")","〕","〉","》","」","』","】","〗","〙","〛","ー","々","〻","ゝ","ゞ","ヽ","ヾ"]),dt=new Set(['"',"(","[","{","¡","¿","“","‘","‚","„","«","‹","⸘","(","〔","〈","《","「","『","【","〖","〘","〚"]),Ht=new Set(["'","’"]),U=new Set([".",",","!","?",":",";","،","؛","؟","।","॥","၊","။","၌","၍","၏",")","]","}","%",'"',"”","’","»","›","…"]),Ms=new Set([":",".","،","؛"]),ws=new Set(["၏"]),bs=new Set(["”","’","»","›","」","』","】","》","〉","〕",")"]);function Bs(i){if(It(i))return!0;let e=!1;for(const t of i){if(U.has(t)||ht(t)){e=!0;continue}if(!(e&&X.test(t)))return!1}return e}function Ts(i){for(const e of i)if(!_t.has(e)&&!U.has(e))return!1;return i.length>0}function vs(i){if(It(i))return!0;for(const e of i)if(!dt.has(e)&&!Ht.has(e)&&!X.test(e)&&!ht(e))return!1;return i.length>0}function It(i){let e=!1;for(const t of i)if(!(t==="\\"||X.test(t))){if(dt.has(t)||U.has(t)||Ht.has(t)){e=!0;continue}return!1}return e}function ut(i,e){const t=e-1;if(t<=0)return Math.max(t,0);const n=i.charCodeAt(t);if(n<56320||n>57343)return t;const s=t-1;if(s<0)return t;const r=i.charCodeAt(s);return r>=55296&&r<=56319?s:t}function st(i){if(i.length===0)return null;const e=ut(i,i.length);return i.slice(e)}function ks(i){for(const e of i)if(!X.test(e))return e;return null}function Ls(i){for(let e=i.length;e>0;){const t=ut(i,e),n=i.slice(t,e);if(!X.test(n))return n;e=t}return null}const Ps=[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 Os(i,e){for(let t=0;t<e.length;t+=2)if(i>=e[t]&&i<=e[t+1])return!0;return!1}function ht(i){const e=i.codePointAt(0);return e!==void 0&&Os(e,Ps)}function Rs(i){const e=Ls(i);return e!==null&&ht(e)}function _s(i){const e=ks(i);return e!==null&&Rt.test(e)}function Hs(i){const e=Array.from(i);let t=e.length;for(;t>0;){const n=e[t-1];if(X.test(n)){t--;continue}if(dt.has(n)||Ht.has(n)){t--;continue}break}return t<=0||t===e.length?null:{head:e.slice(0,t).join(""),tail:e.slice(t).join("")}}function Is(i,e,t){return t==="text"&&!e&&i.length===1&&i!=="-"&&i!=="—"?i:null}function re(i,e,t,n){const s=e[n],r=i[n];if(s==null)return r;const o=t[n];if(r.length===o)return r;const a=s.repeat(o);return i[n]=a,a}function oe(i,e){return i&&e!==null&&Ms.has(e)}function Gs(i){const e=st(i);return e!==null&&ws.has(e)}function zs(i){if(i.length<2||i[0]!==" ")return null;const e=i.slice(1);return new RegExp("^\\p{M}+$","u").test(e)?{space:" ",marks:e}:null}function wt(i){let e=i.length;for(;e>0;){const t=ut(i,e),n=i.slice(t,e);if(bs.has(n))return!0;if(!U.has(n))return!1;e=t}return!1}function Ys(i,e){if(e.preserveOrdinarySpaces||e.preserveHardBreaks){if(i===" ")return"preserved-space";if(i===" ")return"tab";if(e.preserveHardBreaks&&i===`
|
|
86
|
+
`)return"hard-break"}return i===" "?"space":i===" "||i===" "||i===""||i==="\uFEFF"?"glue":i===""?"zero-width-break":i===""?"soft-hyphen":"text"}const Ws=/[\x20\t\n\xA0\xAD\u200B\u202F\u2060\uFEFF]/;function G(i){return i.length===1?i[0]:i.join("")}function $s(i,e){const t=[];for(let n=i.length-1;n>=0;n--)t.push(i[n]);return t.push(e),G(t)}function Us(i,e,t,n){if(!Ws.test(i))return[{text:i,isWordLike:e,kind:"text",start:t}];const s=[];let r=null,o=[],a=t,u=!1,d=0;for(const c of i){const h=Ys(c,n),x=h==="text"&&e;if(r!==null&&h===r&&x===u){o.push(c),d+=c.length;continue}r!==null&&s.push({text:G(o),isWordLike:u,kind:r,start:a}),r=h,o=[c],a=t+d,u=x,d+=c.length}return r!==null&&s.push({text:G(o),isWordLike:u,kind:r,start:a}),s}function bt(i){return i==="space"||i==="preserved-space"||i==="zero-width-break"||i==="hard-break"}const Xs=/^[A-Za-z][A-Za-z0-9+.-]*:$/;function Vs(i,e){const t=i.texts[e];return t.startsWith("www.")?!0:Xs.test(t)&&e+1<i.len&&i.kinds[e+1]==="text"&&i.texts[e+1]==="//"}function js(i){return i.includes("?")&&(i.includes("://")||i.startsWith("www."))}function qs(i){const e=i.texts.slice(),t=i.isWordLike.slice(),n=i.kinds.slice(),s=i.starts.slice();for(let o=0;o<i.len;o++){if(n[o]!=="text"||!Vs(i,o))continue;const a=[e[o]];let u=o+1;for(;u<i.len&&!bt(n[u]);){a.push(e[u]),t[o]=!0;const d=e[u].includes("?");if(n[u]="text",e[u]="",u++,d)break}e[o]=G(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],s[r]=s[o]),r++)}return e.length=r,t.length=r,n.length=r,s.length=r,{len:r,texts:e,isWordLike:t,kinds:n,starts:s}}function Ks(i){const e=[],t=[],n=[],s=[];for(let r=0;r<i.len;r++){const o=i.texts[r];if(e.push(o),t.push(i.isWordLike[r]),n.push(i.kinds[r]),s.push(i.starts[r]),!js(o))continue;const a=r+1;if(a>=i.len||bt(i.kinds[a]))continue;const u=[],d=i.starts[a];let c=a;for(;c<i.len&&!bt(i.kinds[c]);)u.push(i.texts[c]),c++;u.length>0&&(e.push(G(u)),t.push(!0),n.push("text"),s.push(d),r=c-1)}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:s}}const Zs=new Set([":","-","/","×",",",".","+","–","—"]),Js=new Set([".",",",":",";"]);function ae(i){for(let e=i.length;e>0;){const t=ut(i,e),n=i.slice(t,e);if(X.test(n)){e=t;continue}return Js.has(n)||ht(n)}return!1}function Qs(i,e){return e&&!z(i)}function we(i){for(const e of i)if(Rt.test(e))return!0;return!1}function ct(i){if(i.length===0)return!1;for(const e of i)if(!(Rt.test(e)||Zs.has(e)))return!1;return!0}function ti(i){const e=[],t=[],n=[],s=[];for(let r=0;r<i.len;r++){const o=i.texts[r],a=i.kinds[r];if(a==="text"&&ct(o)&&we(o)){const u=[o];let d=r+1;for(;d<i.len&&i.kinds[d]==="text"&&ct(i.texts[d]);)u.push(i.texts[d]),d++;e.push(G(u)),t.push(!0),n.push("text"),s.push(i.starts[r]),r=d-1;continue}e.push(o),t.push(i.isWordLike[r]),n.push(a),s.push(i.starts[r])}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:s}}function ei(i){const e=[],t=[],n=[],s=[];for(let r=0;r<i.len;r++){const o=i.texts[r],a=i.kinds[r],u=i.isWordLike[r];if(a==="text"&&ae(o)&&(u||Rs(o))&&!z(o)){const d=[o];let c=!0,h=r+1;for(;c&&h<i.len&&i.kinds[h]==="text"&&Qs(i.texts[h],i.isWordLike[h]);){const x=i.texts[h];d.push(x),c=ae(x),h++}e.push(G(d)),t.push(!0),n.push("text"),s.push(i.starts[r]),r=h-1;continue}e.push(o),t.push(u),n.push(a),s.push(i.starts[r])}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:s}}function ni(i){const e=[],t=[],n=[],s=[];for(let r=0;r<i.len;r++){const o=i.texts[r];if(i.kinds[r]==="text"&&o.includes("-")){const a=o.split("-");let u=a.length>1;for(let d=0;d<a.length;d++){const c=a[d];if(!u)break;(c.length===0||!we(c)||!ct(c))&&(u=!1)}if(u){let d=0;for(let c=0;c<a.length;c++){const h=a[c],x=c<a.length-1?`${h}-`:h;e.push(x),t.push(!0),n.push("text"),s.push(i.starts[r]+d),d+=x.length}continue}}e.push(o),t.push(i.isWordLike[r]),n.push(i.kinds[r]),s.push(i.starts[r])}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:s}}function si(i){const e=[],t=[],n=[],s=[];let r=0;for(;r<i.len;){const o=[i.texts[r]];let a=i.isWordLike[r],u=i.kinds[r],d=i.starts[r];if(u==="glue"){const c=[o[0]],h=d;for(r++;r<i.len&&i.kinds[r]==="glue";)c.push(i.texts[r]),r++;const x=G(c);if(r<i.len&&i.kinds[r]==="text")o[0]=x,o.push(i.texts[r]),a=i.isWordLike[r],u="text",d=h,r++;else{e.push(x),t.push(!1),n.push("glue"),s.push(h);continue}}else r++;if(u==="text")for(;r<i.len&&i.kinds[r]==="glue";){const c=[];for(;r<i.len&&i.kinds[r]==="glue";)c.push(i.texts[r]),r++;const h=G(c);if(r<i.len&&i.kinds[r]==="text"){o.push(h,i.texts[r]),a=a||i.isWordLike[r],r++;continue}o.push(h)}e.push(G(o)),t.push(a),n.push(u),s.push(d)}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:s}}function ii(i){const e=i.texts.slice(),t=i.isWordLike.slice(),n=i.kinds.slice(),s=i.starts.slice();for(let r=0;r<e.length-1;r++){if(n[r]!=="text"||n[r+1]!=="text"||!z(e[r])||!z(e[r+1]))continue;const o=Hs(e[r]);o!==null&&(e[r]=o.head,e[r+1]=o.tail+e[r+1],s[r+1]=s[r]+o.head.length)}return{len:e.length,texts:e,isWordLike:t,kinds:n,starts:s}}function ri(i,e,t){const n=Ss();let s=0;const r=[],o=[],a=[],u=[],d=[],c=[],h=[],x=[],f=[],g=[],p=[],m=[];for(const F of n.segment(i))for(const N of Us(F.segment,F.isWordLike??!1,F.index,t)){let k=function(){c[w]!==null&&(o[w]=[re(r,c,h,w)],c[w]=null),o[w].push(N.text),a[w]=a[w]||N.isWordLike,x[w]=x[w]||b,f[w]=f[w]||B,g[w]=P,p[w]=R,m[w]=oe(f[w],L)};const M=N.kind==="text",T=Is(N.text,N.isWordLike,N.kind),b=z(N.text),B=se(N.text),L=st(N.text),P=wt(N.text),R=Gs(N.text),w=s-1;e.carryCJKAfterClosingQuote&&M&&s>0&&u[w]==="text"&&b&&x[w]&&g[w]||M&&s>0&&u[w]==="text"&&Ts(N.text)&&x[w]||M&&s>0&&u[w]==="text"&&p[w]?k():M&&s>0&&u[w]==="text"&&N.isWordLike&&B&&m[w]?(k(),a[w]=!0):T!==null&&s>0&&u[w]==="text"&&c[w]===T?h[w]=(h[w]??1)+1:M&&!N.isWordLike&&s>0&&u[w]==="text"&&!x[w]&&(Bs(N.text)||N.text==="-"&&a[w])?k():(r[s]=N.text,o[s]=[N.text],a[s]=N.isWordLike,u[s]=N.kind,d[s]=N.start,c[s]=T,h[s]=T===null?0:1,x[s]=b,f[s]=B,g[s]=P,p[s]=R,m[s]=oe(B,L),s++)}for(let F=0;F<s;F++){if(c[F]!==null){r[F]=re(r,c,h,F);continue}r[F]=G(o[F])}for(let F=1;F<s;F++)u[F]==="text"&&!a[F]&&It(r[F])&&u[F-1]==="text"&&!x[F-1]&&(r[F-1]+=r[F],a[F-1]=a[F-1]||a[F],r[F]="");const A=Array.from({length:s},()=>null);let E=-1;for(let F=s-1;F>=0;F--){const N=r[F];if(N.length!==0){if(u[F]==="text"&&!a[F]&&E>=0&&u[E]==="text"&&(vs(N)||N==="-"&&_s(r[E]))){const M=A[E]??[];M.push(N),A[E]=M,d[E]=d[F],r[F]="";continue}E=F}}for(let F=0;F<s;F++){const N=A[F];N!=null&&(r[F]=$s(N,r[F]))}let y=0;for(let F=0;F<s;F++){const N=r[F];N.length!==0&&(y!==F&&(r[y]=N,a[y]=a[F],u[y]=u[F],d[y]=d[F]),y++)}r.length=y,a.length=y,u.length=y,d.length=y;const D=si({len:y,texts:r,isWordLike:a,kinds:u,starts:d}),C=ii(ei(ni(ti(Ks(qs(D))))));for(let F=0;F<C.len-1;F++){const N=zs(C.texts[F]);N!==null&&(C.kinds[F]!=="space"&&C.kinds[F]!=="preserved-space"||C.kinds[F+1]!=="text"||!se(C.texts[F+1])||(C.texts[F]=N.space,C.isWordLike[F]=!1,C.kinds[F]=C.kinds[F]==="preserved-space"?"preserved-space":"space",C.texts[F+1]=N.marks+C.texts[F+1],C.starts[F+1]=C.starts[F]+N.space.length))}return C}function oi(i,e){if(i.len===0)return[];if(!e.preserveHardBreaks)return[{startSegmentIndex:0,endSegmentIndex:i.len,consumedEndSegmentIndex:i.len}];const t=[];let n=0;for(let s=0;s<i.len;s++)i.kinds[s]==="hard-break"&&(t.push({startSegmentIndex:n,endSegmentIndex:s,consumedEndSegmentIndex:s+1}),n=s+1);return n<i.len&&t.push({startSegmentIndex:n,endSegmentIndex:i.len,consumedEndSegmentIndex:i.len}),t}function ai(i,e,t){if(e.len<=1)return e;const n=[],s=[],r=[],o=[];let a=-1,u=!1;function d(x){n.push(e.texts[x]),s.push(e.isWordLike[x]),r.push("text"),o.push(e.starts[x])}function c(x,f){let g=!1;for(let A=x;A<f;A++)g=g||e.isWordLike[A];const p=e.starts[x],m=f<e.len?e.starts[f]:i.length;n.push(i.slice(p,m)),s.push(g),r.push("text"),o.push(p)}function h(x){if(!(a<0)){if(u)a+1===x?d(a):c(a,x);else for(let f=a;f<x;f++)d(f);a=-1,u=!1}}for(let x=0;x<e.len;x++){const f=e.texts[x],g=e.kinds[x];if(g==="text"){a>=0&&!Ds(e.texts[x-1],t)&&h(x),a<0&&(a=x),u=u||z(f);continue}h(x),n.push(f),s.push(e.isWordLike[x]),r.push(g),o.push(e.starts[x])}return h(e.len),{len:n.length,texts:n,isWordLike:s,kinds:r,starts:o}}function ci(i,e,t="normal",n="normal"){const s=fs(t),r=s.mode==="pre-wrap"?ps(i):gs(i);if(r.length===0)return{normalized:r,chunks:[],len:0,texts:[],isWordLike:[],kinds:[],starts:[]};const o=ri(r,e,s),a=n==="keep-all"?ai(r,o,e.breakKeepAllAfterPunctuation):o;return{normalized:r,chunks:oi(a,s),...a}}let j=null;const ce=new Map;let q=null;const li=96,di=new RegExp("\\p{Emoji_Presentation}","u"),ui=/[\p{Emoji_Presentation}\p{Extended_Pictographic}\p{Regional_Indicator}\uFE0F\u20E3]/u;let Ft=null;const le=new Map;function Gt(){if(j!==null)return j;if(typeof OffscreenCanvas<"u")return j=new OffscreenCanvas(1,1).getContext("2d"),j;if(typeof document<"u")return j=document.createElement("canvas").getContext("2d"),j;throw new Error("Text measurement requires OffscreenCanvas or a DOM canvas context.")}function hi(i){let e=ce.get(i);return e||(e=new Map,ce.set(i,e)),e}function W(i,e){let t=e.get(i);return t===void 0&&(t={width:Gt().measureText(i).width,containsCJK:z(i)},e.set(i,t)),t}function xt(){if(q!==null)return q;if(typeof navigator>"u")return q={lineFitEpsilon:.005,carryCJKAfterClosingQuote:!1,breakKeepAllAfterPunctuation:!0,preferPrefixWidthsForBreakableRuns:!1,preferEarlySoftHyphenBreak:!1},q;const i=navigator.userAgent,t=navigator.vendor==="Apple Computer, Inc."&&i.includes("Safari/")&&!i.includes("Chrome/")&&!i.includes("Chromium/")&&!i.includes("CriOS/")&&!i.includes("FxiOS/")&&!i.includes("EdgiOS/"),n=i.includes("Chrome/")||i.includes("Chromium/")||i.includes("CriOS/")||i.includes("Edg/");return q={lineFitEpsilon:t?1/64:.005,carryCJKAfterClosingQuote:n,breakKeepAllAfterPunctuation:!t,preferPrefixWidthsForBreakableRuns:t,preferEarlySoftHyphenBreak:t},q}function xi(i){const e=i.match(/(\d+(?:\.\d+)?)\s*px/);return e?parseFloat(e[1]):16}function be(){return Ft===null&&(Ft=new Intl.Segmenter(void 0,{granularity:"grapheme"})),Ft}function fi(i){return di.test(i)||i.includes("️")}function gi(i){return ui.test(i)}function pi(i,e){let t=le.get(i);if(t!==void 0)return t;const n=Gt();n.font=i;const s=n.measureText("😀").width;if(t=0,s>e+.5&&typeof document<"u"&&document.body!==null){const r=document.createElement("span");r.style.font=i,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),s-o>.5&&(t=s-o)}return le.set(i,t),t}function mi(i){let e=0;const t=be();for(const n of t.segment(i))fi(n.segment)&&e++;return e}function Si(i,e){return e.emojiCount===void 0&&(e.emojiCount=mi(i)),e.emojiCount}function $(i,e,t){return t===0?e.width:e.width-Si(i,e)*t}function Ei(i,e,t,n,s){if(e.breakableFitAdvances!==void 0&&e.breakableFitMode===s)return e.breakableFitAdvances;e.breakableFitMode=s;const r=be(),o=[];for(const c of r.segment(i))o.push(c.segment);if(o.length<=1)return e.breakableFitAdvances=null,e.breakableFitAdvances;if(s==="sum-graphemes"){const c=[];for(const h of o){const x=W(h,t);c.push($(h,x,n))}return e.breakableFitAdvances=c,e.breakableFitAdvances}if(s==="pair-context"||o.length>li){const c=[];let h=null,x=0;for(const f of o){const g=W(f,t),p=$(f,g,n);if(h===null)c.push(p);else{const m=h+f,A=W(m,t);c.push($(m,A,n)-x)}h=f,x=p}return e.breakableFitAdvances=c,e.breakableFitAdvances}const a=[];let u="",d=0;for(const c of o){u+=c;const h=W(u,t),x=$(u,h,n);a.push(x-d),d=x}return e.breakableFitAdvances=a,e.breakableFitAdvances}function Fi(i,e){const t=Gt();t.font=i;const n=hi(i),s=xi(i),r=e?pi(i,s):0;return{cache:n,fontSize:s,emojiCorrection:r}}function Ai(i){return i==="space"||i==="zero-width-break"||i==="soft-hyphen"}function Be(i){return i==="space"||i==="preserved-space"||i==="tab"||i==="zero-width-break"||i==="soft-hyphen"}function Te(i,e,t=i.widths.length){for(;e<t;){const n=i.kinds[e];if(!Ai(n))break;e++}return e}function yi(i,e){if(e<=0)return 0;const t=i%e;return Math.abs(t)<=1e-6?e:e-t}function Ci(i,e,t){return i.letterSpacing!==0&&e&&i.spacingGraphemeCounts[t]>0?i.letterSpacing:0}function zt(i,e){return e===0?0:i+e}function Ni(i,e){return i.letterSpacing!==0&&i.spacingGraphemeCounts[e]>0?i.letterSpacing:0}function Di(i,e,t,n,s){const r=e==="tab"?s+Ni(i,t):i.lineEndFitAdvances[t];return zt(n,r)}function de(i,e,t,n){const s=e==="tab"?0:i.lineEndFitAdvances[t];return zt(n,s)}function ue(i,e,t,n,s){const r=e==="tab"?s:i.lineEndPaintAdvances[t];return zt(n,r)}function Mi(i,e,t){return i.letterSpacing!==0&&e?t+i.letterSpacing:t}function wi(i,e){return i.letterSpacing===0?e:e+i.letterSpacing}function bi(i,e,t,n,s){if(i.letterSpacing===0)return 0;if(s>0)return i.spacingGraphemeCounts[n]>0?i.letterSpacing:0;for(let r=n-1;r>=e;r--){const o=i.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||i.spacingGraphemeCounts[r]>0?i.letterSpacing:0}}return 0}function Bi(i,e,t,n,s,r){return e+bi(i,t,n,s,r)}function Ti(i,e,t){const{widths:n,kinds:s,breakableFitAdvances:r}=i;if(n.length===0)return 0;const a=xt().lineFitEpsilon,u=e+a;let d=0,c=0,h=!1,x=0,f=0,g=0,p=0,m=-1,A=0;function E(){m=-1,A=0}function y(T=g,b=p,B=c){d++,t==null||t(B,x,f,T,b),c=0,h=!1,E()}function D(T,b){h=!0,x=T,f=0,g=T+1,p=0,c=b}function C(T,b,B){h=!0,x=T,f=b,g=T,p=b+1,c=B}function F(T,b){if(!h){D(T,b);return}c+=b,g=T+1,p=0}function N(T,b){const B=r[T];for(let L=b;L<B.length;L++){const P=B[L];h?c+P>u?(y(),C(T,L,P)):(c+=P,g=T,p=L+1):C(T,L,P)}h&&g===T&&p===B.length&&(g=T+1,p=0)}let M=0;for(;M<n.length&&!(!h&&(M=Te(i,M),M>=n.length));){const T=n[M],b=s[M],B=Be(b);if(!h){T>u&&r[M]!==null?N(M,0):D(M,T),B&&(m=M+1,A=c-T),M++;continue}if(c+T>u){if(B){F(M,T),y(M+1,0,c-T),M++;continue}if(m>=0){if(g>m||g===m&&p>0){y();continue}y(m,0,A);continue}if(T>u&&r[M]!==null){y(),N(M,0),M++;continue}y();continue}F(M,T),B&&(m=M+1,A=c-T),M++}return h&&y(),d}function vi(i,e,t){if(i.simpleLineWalkFastPath)return Ti(i,e,t);const{widths:n,kinds:s,breakableFitAdvances:r,discretionaryHyphenWidth:o,chunks:a}=i;if(n.length===0||a.length===0)return 0;const u=xt(),d=u.lineFitEpsilon,c=e+d;let h=0,x=0,f=!1,g=0,p=0,m=0,A=0,E=-1,y=0,D=0,C=null;function F(){E=-1,y=0,D=0,C=null}function N(){return C==="soft-hyphen"&&E===m&&A===0?D:x}function M(w=m,k=A,v){h++,t!==void 0&&t(Bi(i,v??N(),g,p,w,k),g,p,w,k),x=0,f=!1,F()}function T(w,k){f=!0,g=w,p=0,m=w+1,A=0,x=k}function b(w,k,v){f=!0,g=w,p=k,m=w,A=k+1,x=v}function B(w,k){if(!f){T(w,k);return}x+=k,m=w+1,A=0}function L(w,k,v,O,_,I){if(!k)return;const H=de(i,w,v,_),Y=ue(i,w,v,_,O);E=v+1,y=x-I+H,D=x-I+Y,C=w}function P(w,k){const v=r[w];for(let O=k;O<v.length;O++){const _=v[O];if(!f)b(w,O,_);else{const I=Mi(i,!0,_),H=x+I;wi(i,H)>c?(M(),b(w,O,_)):(x=H,m=w,A=O+1)}}f&&m===w&&A===v.length&&(m=w+1,A=0)}function R(w){h++,t==null||t(0,w.startSegmentIndex,0,w.consumedEndSegmentIndex,0),F()}for(let w=0;w<a.length;w++){const k=a[w];if(k.startSegmentIndex===k.endSegmentIndex){R(k);continue}f=!1,x=0,g=k.startSegmentIndex,p=0,m=k.startSegmentIndex,A=0,F();let v=k.startSegmentIndex;for(;v<k.endSegmentIndex&&!(!f&&(v=Te(i,v,k.endSegmentIndex),v>=k.endSegmentIndex));){const O=s[v],_=Be(O),I=Ci(i,f,v),H=O==="tab"?yi(x+I,i.tabStopAdvance):n[v],Y=I+H,ft=Di(i,O,v,I,H);if(O==="soft-hyphen"){f&&(m=v+1,A=0,E=v+1,y=x+o,D=x+o,C=O),v++;continue}if(!f){ft>c&&r[v]!==null?P(v,0):T(v,H),L(O,_,v,H,I,Y),v++;continue}if(x+ft>c){const Le=x+de(i,O,v,I),Pe=x+ue(i,O,v,I,H);if(C==="soft-hyphen"&&u.preferEarlySoftHyphenBreak&&y<=c){M(E,0,D);continue}if(_&&Le<=c){B(v,Y),M(v+1,0,Pe),v++;continue}if(E>=0&&y<=c){if(m>E||m===E&&A>0){M();continue}const Yt=E;M(Yt,0,D),v=Yt;continue}if(ft>c&&r[v]!==null){M(),P(v,0),v++;continue}M();continue}B(v,Y),L(O,_,v,H,I,Y),v++}if(f){const O=E===k.consumedEndSegmentIndex?D:x;M(k.consumedEndSegmentIndex,0,O)}}return h}let At=null,he=new WeakMap;function ki(){return At===null&&(At=new Intl.Segmenter(void 0,{granularity:"grapheme"})),At}function xe(i,e,t){let n=t.get(i);if(n!==void 0)return n;n=[];const s=ki();for(const r of s.segment(e[i]))n.push(r.segment);return t.set(i,n),n}function Li(i,e,t){return t>e&&i[t-1]==="soft-hyphen"}function fe(i,e,t,n){for(let s=t;s<n;s++)i+=e[s];return i}function Pi(i){let e=he.get(i);return e!==void 0||(e=new Map,he.set(i,e)),e}function Oi(i,e,t,n,s,r){let o="";const a=Li(i.kinds,t,s);for(let u=t;u<s;u++)if(!(i.kinds[u]==="soft-hyphen"||i.kinds[u]==="hard-break"))if(u===t&&n>0){const d=xe(u,i.segments,e);o=fe(o,d,n,d.length)}else o+=i.segments[u];if(r>0){a&&(o+="-");const u=xe(s,i.segments,e);o=fe(o,u,t===s?n:0,r)}else a&&(o+="-");return o}let yt=null;function ve(){return yt===null&&(yt=new Intl.Segmenter(void 0,{granularity:"grapheme"})),yt}function Ri(i){return{widths:[],lineEndFitAdvances:[],lineEndPaintAdvances:[],kinds:[],simpleLineWalkFastPath:!0,segLevels:null,breakableFitAdvances:[],letterSpacing:0,spacingGraphemeCounts:[],discretionaryHyphenWidth:0,tabStopAdvance:0,chunks:[],segments:[]}}function _i(i,e){const t=[];let n=[],s=0,r=!1,o=!1,a=!1;function u(){n.length!==0&&(t.push({text:n.length===1?n[0]:n.join(""),start:s}),n=[],r=!1,o=!1,a=!1)}function d(h,x,f){n=[h],s=x,r=f,o=wt(h),a=dt.has(h)}function c(h,x){n.push(h),r=r||x;const f=wt(h);h.length===1&&U.has(h)?o=o||f:o=f,a=!1}for(const h of ve().segment(i)){const x=h.segment,f=z(x);if(n.length===0){d(x,h.index,f);continue}if(a||_t.has(x)||U.has(x)||e.carryCJKAfterClosingQuote&&f&&o){c(x,f);continue}if(!r&&!f){c(x,f);continue}u(),d(x,h.index,f)}return u(),t}function ge(i,e){if(e==="zero-width-break"||e==="soft-hyphen"||e==="hard-break")return 0;if(e==="tab")return 1;let t=0;const n=ve();for(const s of n.segment(i))t++;return t}function Hi(i,e,t){return e>1?i+(e-1)*t:i}function Ii(i,e,t,n,s){const r=xt(),{cache:o,emojiCorrection:a}=Fi(e,gi(i.normalized)),u=$("-",W("-",o),a)+(s===0?0:s*2),c=$(" ",W(" ",o),a)*8,h=s!==0;if(i.len===0)return Ri();const x=[],f=[],g=[],p=[];let m=i.chunks.length<=1&&!h;const A=t?[]:null,E=[],y=[],D=t?[]:null,C=Array.from({length:i.len});function F(b,B,L,P,R,w,k,v){R!=="text"&&R!=="space"&&R!=="zero-width-break"&&(m=!1),x.push(B),f.push(L),g.push(P),p.push(R),A==null||A.push(w),E.push(k),h&&y.push(v),D!==null&&D.push(b)}function N(b,B,L,P,R){const w=W(b,o),k=h?ge(b,B):0,v=Hi($(b,w,a),k,s),O=B==="space"||B==="preserved-space"||B==="zero-width-break"?0:v,_=O===0?0:O+(k>0?s:0),I=B==="space"||B==="zero-width-break"?0:v;if(R&&P&&b.length>1){let H="sum-graphemes";s!==0?H="segment-prefixes":ct(b)?H="pair-context":r.preferPrefixWidthsForBreakableRuns&&(H="segment-prefixes");const Y=Ei(b,w,o,a,H);F(b,v,_,I,B,L,Y,k);return}F(b,v,_,I,B,L,null,k)}for(let b=0;b<i.len;b++){C[b]=x.length;const B=i.texts[b],L=i.isWordLike[b],P=i.kinds[b],R=i.starts[b];if(P==="soft-hyphen"){F(B,0,u,u,P,R,null,0);continue}if(P==="hard-break"){F(B,0,0,0,P,R,null,0);continue}if(P==="tab"){F(B,0,0,0,P,R,null,h?ge(B,P):0);continue}const w=W(B,o);if(P==="text"&&w.containsCJK){const v=_i(B,r);for(let O=0;O<v.length;O++){const _=v[O];N(_.text,"text",R+_.start,L,!z(_.text))}continue}N(B,P,R,L,!0)}const M=Gi(i.chunks,C,x.length),T=A===null?null:us(i.normalized,A);return D!==null?{widths:x,lineEndFitAdvances:f,lineEndPaintAdvances:g,kinds:p,simpleLineWalkFastPath:m,segLevels:T,breakableFitAdvances:E,letterSpacing:s,spacingGraphemeCounts:y,discretionaryHyphenWidth:u,tabStopAdvance:c,chunks:M,segments:D}:{widths:x,lineEndFitAdvances:f,lineEndPaintAdvances:g,kinds:p,simpleLineWalkFastPath:m,segLevels:T,breakableFitAdvances:E,letterSpacing:s,spacingGraphemeCounts:y,discretionaryHyphenWidth:u,tabStopAdvance:c,chunks:M}}function Gi(i,e,t){const n=[];for(let s=0;s<i.length;s++){const r=i[s],o=r.startSegmentIndex<e.length?e[r.startSegmentIndex]:t,a=r.endSegmentIndex<e.length?e[r.endSegmentIndex]:t,u=r.consumedEndSegmentIndex<e.length?e[r.consumedEndSegmentIndex]:t;n.push({startSegmentIndex:o,endSegmentIndex:a,consumedEndSegmentIndex:u})}return n}function zi(i,e,t,n){const s=n==null?void 0:n.wordBreak,r=(n==null?void 0:n.letterSpacing)??0,o=ci(i,xt(),n==null?void 0:n.whiteSpace,s);return Ii(o,e,t,s,r)}function Yi(i,e,t){return zi(i,e,!0,t)}function Wi(i,e,t,n,s,r,o){return{text:Oi(i,e,n,s,r,o),width:t,start:{segmentIndex:n,graphemeIndex:s},end:{segmentIndex:r,graphemeIndex:o}}}function $i(i,e,t){const n=[];if(i.widths.length===0)return{lineCount:0,height:0,lines:n};const s=Pi(i),r=vi(i,e,(o,a,u,d,c)=>{n.push(Wi(i,s,o,a,u,d,c))});return{lineCount:r,height:r*t,lines:n}}function Ui(i,e,t,n){const{width:s,height:r}=l.getBoxSize(e),{color:o=l.defaultTextStyle.color,strokeColor:a=l.defaultTextStyle.strokeColor,strokeWidth:u=l.defaultTextStyle.strokeWidth,strokeType:d=l.defaultTextStyle.strokeType,background:c=l.defaultTextStyle.background,borderRadius:h=l.defaultTextStyle.borderRadius,fixedSize:x=l.defaultTextStyle.fixedSize}=e.properties.style||l.defaultTextStyle,f=Me(i,e,t,n);f.setAttribute("data-annotation-type",e.properties.type),f.classList.add("annotation-text"),f.setAttribute("fill",`${o}`);let g=f.firstChild;for(;g;){const y=g.nextSibling;g.nodeType===1&&g.tagName!=="rect"&&f.removeChild(g),g=y}let p=f.firstChild;p||(p=l.createSVGElement("rect"),f.appendChild(p));const m=-s/2,A=-r/2;h&&(p.setAttribute("rx",`${h}`),p.setAttribute("ry",`${h}`)),d&&d!=="none"&&(p.setAttribute("stroke",a||"black"),p.setAttribute("stroke-width",`${u}`),d==="dashed"&&p.setAttribute("stroke-dasharray","5,5")),c&&c.length&&(n.hoveredFeature===e.id?p.setAttribute("fill",l.brighten(c)):p.setAttribute("fill",c)),p.setAttribute("width",`${s}`),p.setAttribute("height",`${r}`);const E=l.getBoxCenter(e);return p.setAttribute("x",`${m}`),p.setAttribute("y",`${A}`),Vi(e,f,m,A),f.setAttribute("transform",n.getScreenAlignedTransform(E.x,E.y,!x)),i.appendChild(f),f}let Q=null;const pe=new Map;function Xi(i,e){const t=`${i}|${e}`,n=pe.get(t);if(n!=null)return n;try{const s=document.createElement("div"),r=document.createElement("span");s.style.cssText=`font:${i};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;",s.appendChild(r),document.body.appendChild(s);const o=r.getBoundingClientRect().bottom-s.getBoundingClientRect().top;if(document.body.removeChild(s),o>0&&o<=e)return pe.set(t,o),o}catch{}try{if(Q||(Q=document.createElement("canvas").getContext("2d")),Q){Q.font=i;const s=Q.measureText("M"),r=s.fontBoundingBoxAscent,o=s.fontBoundingBoxDescent;if(r!=null&&o!=null)return Math.max(0,(e-r-o)/2)+r}}catch{}return e}function Vi(i,e,t=0,n=0){const{width:s,height:r}=l.getBoxSize(i),{fontSize:o=l.defaultTextStyle.fontSize,font:a=l.defaultTextStyle.font,padding:u=0}=i.properties.style||{};if(s===r&&s===0)return;const d=parseFloat(o.toString())*l.TEXT_LINE_HEIGHT,c=`${o}px ${a}`.replace(/(px)+/g,"px"),h=s-u*2,x=r-u,f=i.properties.content||"";if(f.length===0)return;const g=Yi(f,c,{whiteSpace:"pre-wrap",wordBreak:"normal"}),{lines:p}=$i(g,h,d),m=Math.max(1,Math.floor(x/d)),A=p.slice(0,m);if(p.length>m&&A.length>0){const D=A[A.length-1];A[A.length-1]={...D,text:D.text.trimEnd()+"…"}}const E=l.createSVGElement("text");E.setAttribute("font-size",`${parseFloat(o.toString())}`),E.setAttribute("font-family",`${a}`),E.setAttribute("transform",`translate(${t+u}, ${n+u})`);const y=Xi(c,d);A.forEach((D,C)=>{const F=l.createSVGElement("tspan");F.setAttribute("x","0"),F.setAttribute("dy",`${C===0?y:d}`);let N=0,M;const T=Fe();for(;(M=T.exec(D.text))!==null;){M.index>N&&F.appendChild(document.createTextNode(D.text.slice(N,M.index)));const b=document.createElementNS("http://www.w3.org/2000/svg","a");b.setAttribute("href",M[0]),b.setAttribute("target","_blank"),b.setAttribute("rel","noopener noreferrer"),b.setAttribute("class",Pt),b.textContent=M[0],F.appendChild(b),N=M.index+M[0].length}N<D.text.length&&F.appendChild(document.createTextNode(D.text.slice(N))),E.appendChild(F)}),e.appendChild(E)}class ji extends De{constructor(t,n){super(t,n);S(this,"features",new Map);S(this,"arrowsRoot",null);S(this,"shapesRoot",null);S(this,"commentsRoot",null);S(this,"annotationsRoot",null);S(this,"underLayer");S(this,"underGraphRoot",null);S(this,"visibleFeatures",new Set);S(this,"isExporting",!1);S(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=l.createSVGElement("g"),this.commentsRoot=l.createSVGElement("g"),this.annotationsRoot=l.createSVGElement("g"),this.shapesRoot=l.createSVGElement("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,u=this.annotationsRoot,d=this.commentsRoot,c=this.shapesRoot,h=this.store.getState(),x=this.getViewportBounds();this.removeFeatures(n);const f=new Set;for(let g of Object.values(n)){if(o[g.id]&&(g={...g,...o[g.id]}),!this.isExporting&&!this.isFeatureVisible(g,x)||(f.add(g.id),l.isBox(g)||l.isPolygon(g)))continue;let p=this.features.get(g.id);l.isText(g)?p=Ui(c,g,p,h):l.isComment(g)?p=is(d,g,p,h,this.visibleFeatures.has(g.id)):l.isArrow(g)&&(p=Kn(a,g,h.options.minArrowHeight,h.options.maxArrowHeight,p,h)),p&&this.features.set(g.id,p)}this.applyStateClasses(u,s,r),t.appendChild(u),this.visibleFeatures.clear(),this.visibleFeatures=f});S(this,"renderUnderGraph",t=>{if(!t)return;const{features:n,liveUpdates:s,hoveredFeature:r,selectedFeatures:o}=this.store.getState();(!this.underGraphRoot||!t.contains(this.underGraphRoot))&&(t.innerHTML="",this.underGraphRoot=l.createSVGElement("g"),t.appendChild(this.underGraphRoot)),t.removeChild(this.underGraphRoot);const a=this.underGraphRoot,u=this.store.getState(),d=this.getViewportBounds();for(let c of Object.values(n)){if(!(l.isBox(c)||l.isPolygon(c))||(s[c.id]&&(c={...c,...s[c.id]}),!this.isExporting&&!this.isFeatureVisible(c,d)))continue;let h=this.features.get(c.id);l.isBox(c)?h=Me(a,c,h,u):l.isPolygon(c)&&(h=as(a,c,h,u)),h&&this.features.set(c.id,h)}this.applyStateClasses(a,r,o),t.appendChild(a)});S(this,"throttleRender",l.throttle(()=>{this.render(this.layer.element),this.renderUnderGraph(this.underLayer.element)},16,!0));S(this,"refresh",()=>{this.layer.refresh(),this.underLayer.refresh()});S(this,"onExportStart",()=>{this.isExporting=!0});S(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},l.LAYERS.SHAPES),this.underLayer=this.ogma.layers.addSVGLayer({draw:this.renderUnderGraph}),this.underLayer.moveToBottom(),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}),u=t.view.screenToGraphCoordinates({x:s*o,y:0}),d=t.view.screenToGraphCoordinates({x:0,y:r*o}),c=t.view.screenToGraphCoordinates({x:s*o,y:r*o});return[Math.min(a.x,u.x,d.x,c.x),Math.min(a.y,u.y,d.y,c.y),Math.max(a.x,u.x,d.x,c.x),Math.max(a.y,u.y,d.y,c.y)]}isFeatureVisible(t,n){const s=t.geometry.bbox;if(!s)return!0;const[r,o,a,u]=s;return!(a<n[0]||r>n[2]||u<n[1]||o>n[3])}getDefs(){const t=l.createSVGElement("defs");t.appendChild(ts());const n=l.createSVGElement("filter");n.setAttribute("id","softShadow"),n.setAttribute("x","-50%"),n.setAttribute("y","-50%"),n.setAttribute("width","200%"),n.setAttribute("height","200%");const s=l.createSVGElement("feGaussianBlur");s.setAttribute("in","SourceAlpha"),s.setAttribute("stdDeviation","2"),s.setAttribute("result","blur");const r=l.createSVGElement("feOffset");r.setAttribute("in","blur"),r.setAttribute("dx","0"),r.setAttribute("dy","1"),r.setAttribute("result","offsetBlur");const o=l.createSVGElement("feComponentTransfer");o.setAttribute("in","offsetBlur"),o.setAttribute("result","shadow");const a=l.createSVGElement("feFuncA");a.setAttribute("type","linear"),a.setAttribute("slope","0.25"),o.appendChild(a);const u=l.createSVGElement("feMerge"),d=l.createSVGElement("feMergeNode");d.setAttribute("in","shadow");const c=l.createSVGElement("feMergeNode");return c.setAttribute("in","SourceGraphic"),u.appendChild(d),u.appendChild(c),n.appendChild(s),n.appendChild(r),n.appendChild(o),n.appendChild(u),t.appendChild(n),t}removeFeatures(t){for(const n of this.features.keys())if(!(n in t)){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.underLayer.destroy(),this.ogma.events.off(this.onExportStart),this.ogma.events.off(this.onExportEnd),super.destroy()}}const me=i=>{let e;const t=new Set,n=(d,c)=>{const h=typeof d=="function"?d(e):d;if(!Object.is(h,e)){const x=e;e=c??(typeof h!="object"||h===null)?h:Object.assign({},e,h),t.forEach(f=>f(e,x))}},s=()=>e,a={setState:n,getState:s,getInitialState:()=>u,subscribe:d=>(t.add(d),()=>t.delete(d))},u=e=i(n,s,a);return a},ke=i=>i?me(i):me;var Se=(i,e,t)=>(s,r)=>({pastStates:(t==null?void 0:t.pastStates)||[],futureStates:(t==null?void 0:t.futureStates)||[],undo:(o=1)=>{var a,u;if(r().pastStates.length){const d=((a=t==null?void 0:t.partialize)==null?void 0:a.call(t,e()))||e(),c=r().pastStates.splice(-o,o),h=c.shift();i(h),s({pastStates:r().pastStates,futureStates:r().futureStates.concat(((u=t==null?void 0:t.diff)==null?void 0:u.call(t,d,h))||d,c.reverse())})}},redo:(o=1)=>{var a,u;if(r().futureStates.length){const d=((a=t==null?void 0:t.partialize)==null?void 0:a.call(t,e()))||e(),c=r().futureStates.splice(-o,o),h=c.shift();i(h),s({pastStates:r().pastStates.concat(((u=t==null?void 0:t.diff)==null?void 0:u.call(t,d,h))||d,c.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,u,d)=>{var c,h;t!=null&&t.limit&&r().pastStates.length>=(t==null?void 0:t.limit)&&r().pastStates.shift(),(h=(c=r())._onSave)==null||h.call(c,o,u),s({pastStates:r().pastStates.concat(d||o),futureStates:[]})}}),qi=(i,e)=>(n,s,r)=>{var d,c;r.temporal=ke(((d=e==null?void 0:e.wrapTemporal)==null?void 0:d.call(e,Se(n,s,e)))||Se(n,s,e));const o=((c=e==null?void 0:e.handleSet)==null?void 0:c.call(e,r.temporal.getState()._handleSet))||r.temporal.getState()._handleSet,a=h=>{var g,p,m;if(!r.temporal.getState().isTracking)return;const x=((g=e==null?void 0:e.partialize)==null?void 0:g.call(e,s()))||s(),f=(p=e==null?void 0:e.diff)==null?void 0:p.call(e,h,x);f===null||(m=e==null?void 0:e.equality)!=null&&m.call(e,h,x)||o(h,void 0,x,f)},u=r.setState;return r.setState=(...h)=>{var f;const x=((f=e==null?void 0:e.partialize)==null?void 0:f.call(e,s()))||s();u(...h),a(x)},i((...h)=>{var f;const x=((f=e==null?void 0:e.partialize)==null?void 0:f.call(e,s()))||s();n(...h),a(x)},s,r)};const Ki=i=>(e,t,n)=>{const s=n.subscribe;return n.subscribe=(o,a,u)=>{let d=o;if(a){const c=(u==null?void 0:u.equalityFn)||Object.is;let h=o(n.getState());d=x=>{const f=o(x);if(!c(h,f)){const g=h;a(h=f,g)}},u!=null&&u.fireImmediately&&a(h,h)}return s(d)},i(e,t,n)},Zi=Ki,Ji=[0,0,0,0];function Qi(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,u=o.geometry;if(a.coordinates!==u.coordinates||r.properties!==o.properties||r.properties.style!==o.properties.style||a!==u)return!1}return i.drawingFeature===e.drawingFeature}const tr=i=>{const e=ke()(Zi(qi((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)??l.DEFAULT_SEND_ICON,showEditButton:(i==null?void 0:i.showEditButton)??!0,editButtonIcon:(i==null?void 0:i.editButtonIcon)??l.DEFAULT_EDIT_ICON,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 x,f,g,p;const o=r.features[s];if(!o)return r;const{features:a,liveUpdates:u}=r,d=new Set([s]);if((l.isComment(o)||l.isText(o))&&Object.values(a).forEach(m=>{var A,E,y,D;l.isArrow(m)&&(((E=(A=m.properties.link)==null?void 0:A.end)==null?void 0:E.id)===s||((D=(y=m.properties.link)==null?void 0:y.start)==null?void 0:D.id)===s)&&d.add(m.id)}),l.isArrow(o)){const m=((f=(x=o.properties.link)==null?void 0:x.end)==null?void 0:f.type)==="comment"?o.properties.link.end.id:((p=(g=o.properties.link)==null?void 0:g.start)==null?void 0:p.type)==="comment"?o.properties.link.start.id:null;if(m){let A=0;if(Object.values(r.features).forEach(E=>{var y,D,C,F;l.isArrow(E)&&E.id!==s&&(((D=(y=E.properties.link)==null?void 0:y.end)==null?void 0:D.id)===m||((F=(C=E.properties.link)==null?void 0:C.start)==null?void 0:F.id)===m)&&A++}),A===0)return console.error("Cannot delete last arrow attached to comment. Delete the comment instead."),r}}const c={...a},h={...u};return d.forEach(m=>{delete c[m],delete h[m]}),{features:c,liveUpdates:h}}),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},u=[],d=Object.keys(o);s||(s=new Set(d)),d.forEach(c=>{const h=o[c];a[c]&&Object.keys(h).length>0&&(a[c]={...a[c],...h},u.push(c))}),t({features:a,liveUpdates:{},isDragging:!1,lastChangedFeatures:u})},cancelLiveUpdates:()=>t({liveUpdates:{},isDragging:!1}),updateFeature:(s,r)=>t(o=>{const a={...o.features[s],...r},u={...o.liveUpdates};return delete u[s],{features:{...o.features,[s]:a},liveUpdates:u}}),updateFeatures:s=>t(r=>{const o={...r.features};return Object.entries(s).forEach(([a,u])=>{o[a]&&(o[a]={...o[a],...u})}),{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 u=r[o];return u?{...a,...u}: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,u=this.revCos,d=s*u-r*a,c=s*a+r*u,h=o?1:this.invZoom;return`matrix(${h}, 0, 0, ${h}, ${d}, ${c})`},getRotationTransform(s,r){const o=this.revSin,a=this.revCos,u=s*a-r*o,d=s*o+r*a;return`matrix(${a}, ${o}, ${-o}, ${a}, ${-u}, ${-d})`},getRotatedBBox(s,r,o,a){return l.getAABB(s,r,o-s,a-r,this.sin,this.cos,s+(o-s)/2,r+(a-r)/2,Ji)},setDrawingPoints:s=>t({drawingPoints:s})}),{limit:250,partialize:t=>({drawingFeature:t.drawingFeature,isDragging:t.isDragging,features:t.features,lastChangedFeatures:t.lastChangedFeatures}),equality:Qi,handleSet:t=>n=>{n.drawingFeature===null&&t(n)}})));return e},er={detectMargin:2,magnetHandleRadius:5,magnetRadius:10,textPlaceholder:"Type here",showSendButton:!0,sendButtonIcon:l.DEFAULT_SEND_ICON,showEditButton:!0,editButtonIcon:l.DEFAULT_EDIT_ICON,minArrowHeight:20,maxArrowHeight:30};class nr extends Ge{constructor(t,n={}){super();S(this,"ogma");S(this,"store");S(this,"renderers",{});S(this,"interactions");S(this,"editor");S(this,"links");S(this,"index");S(this,"drawing");S(this,"snapping");S(this,"selectionManager");S(this,"historyManager");S(this,"updateManager");S(this,"commentManager");S(this,"onRotate",()=>this.store.getState().setRotation(this.ogma.view.getAngle()));S(this,"onZoom",()=>{const t=this.ogma.view.getZoom();this.store.getState().setZoom(t),this.commentManager.updateCommentModesForZoom(t)});S(this,"onLayout",()=>{this.links.update()});this.ogma=t;const s={...er,...n};this.store=tr(s),this.index=new Un(this.store),this.snapping=new Rn(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 yn(this.ogma,this.snapping,this.store,(r,o)=>{this.emit(l.EVT_LINK,{arrow:r,link:o})}),this.interactions=new _n(this.ogma,this.store,this.index),this.editor=new Sn(this.ogma,this.store,this.snapping,this.links,this.interactions),this.drawing=new sn(this.ogma,this.store,this.editor,this.interactions,this.links,this,this.index),this.selectionManager=new on(this.store),this.historyManager=new rn(this.store,this.links),this.updateManager=new an(this.store),this.commentManager=new Ze(this.store),this.initializeRenderers(),this.setupEvents()}initializeRenderers(){this.renderers.shapes=new ji(this.ogma,this.store),this.renderers.handles=new Xn(this.ogma,this.store)}setupEvents(){this.ogma.events.on("rotate",this.onRotate).on("zoom",this.onZoom).on("layoutEnd",this.onLayout),this.editor.addEventListener(l.EVT_DRAG_START,t=>this.emit(l.EVT_DRAG_START,{id:t.detail.id,position:t.detail.position})),this.editor.addEventListener(l.EVT_DRAG_END,t=>this.emit(l.EVT_DRAG_END,{id:t.detail.id,position:t.detail.position})),this.interactions.addEventListener(l.EVT_CLICK,(t=>this.emit(l.EVT_CLICK,{id:t.detail.id,position:t.detail.position}))),this.store.temporal.subscribe(t=>{this.emit(l.EVT_HISTORY,{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(l.EVT_SELECT,{ids:s}),n){const r=Array.from(n).filter(o=>!t.has(o));r.length>0&&this.emit(l.EVT_UNSELECT,{ids:r})}}),this.store.subscribe(t=>t.drawingFeature,(t,n)=>{t===null&&n!==null&&this.emit(l.EVT_COMPLETE_DRAWING,{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(l.EVT_UPDATE,t[s]):this.emit(l.EVT_ADD,{id:s});for(const s of Object.keys(n))t[s]||this.emit(l.EVT_REMOVE,{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(l.EVT_CANCEL_DRAWING),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}enableStickyNoteDrawing(t){return this.drawing.enableStickyNoteDrawing(t),this}enableEraseMode(){return this.drawing.enableEraseMode(),this}disableEraseMode(){return this.drawing.disableEraseMode(),this}isEraseModeActive(){return this.drawing.isEraseModeActive()}enablePlacement(t){return this.drawing.enablePlacement(t),this}startComment(t,n,s,r){return this.drawing.startComment(t,n,s,r),this}startStickyNote(t,n,s){return this.drawing.startStickyNote(t,n,s),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=l.SIDE_END){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()}}exports.COMMENT_MODE_COLLAPSED=l.COMMENT_MODE_COLLAPSED;exports.COMMENT_MODE_EXPANDED=l.COMMENT_MODE_EXPANDED;exports.DATA_ATTR=l.DATA_ATTR;exports.DEFAULT_EDIT_ICON=l.DEFAULT_EDIT_ICON;exports.DEFAULT_SEND_ICON=l.DEFAULT_SEND_ICON;exports.EVT_ADD=l.EVT_ADD;exports.EVT_CANCEL_DRAWING=l.EVT_CANCEL_DRAWING;exports.EVT_CLICK=l.EVT_CLICK;exports.EVT_COMPLETE_DRAWING=l.EVT_COMPLETE_DRAWING;exports.EVT_DRAG=l.EVT_DRAG;exports.EVT_DRAG_END=l.EVT_DRAG_END;exports.EVT_DRAG_START=l.EVT_DRAG_START;exports.EVT_HISTORY=l.EVT_HISTORY;exports.EVT_HOVER=l.EVT_HOVER;exports.EVT_LINK=l.EVT_LINK;exports.EVT_REMOVE=l.EVT_REMOVE;exports.EVT_SELECT=l.EVT_SELECT;exports.EVT_UNHOVER=l.EVT_UNHOVER;exports.EVT_UNSELECT=l.EVT_UNSELECT;exports.EVT_UPDATE=l.EVT_UPDATE;exports.HL_BRIGHTEN=l.HL_BRIGHTEN;exports.LAYERS=l.LAYERS;exports.NONE=l.NONE;exports.SIDE_END=l.SIDE_END;exports.SIDE_START=l.SIDE_START;exports.TARGET_TYPES=l.TARGET_TYPES;exports.TEXT_LINE_HEIGHT=l.TEXT_LINE_HEIGHT;exports.adjustColorBrightness=l.adjustColorBrightness;exports.brighten=l.brighten;exports.calculateCommentZoomThreshold=l.calculateCommentZoomThreshold;exports.clientToContainerPosition=l.clientToContainerPosition;exports.colorToRgba=l.colorToRgba;exports.createArrow=l.createArrow;exports.createBox=l.createBox;exports.createComment=l.createComment;exports.createCommentWithArrow=l.createCommentWithArrow;exports.createPolygon=l.createPolygon;exports.createSVGElement=l.createSVGElement;exports.createText=l.createText;exports.cursors=l.cursors;exports.darken=l.darken;exports.debounce=l.debounce;exports.debounceTail=l.debounceTail;exports.defaultArrowOptions=l.defaultArrowOptions;exports.defaultArrowStyle=l.defaultArrowStyle;exports.defaultBoxOptions=l.defaultBoxOptions;exports.defaultBoxStyle=l.defaultBoxStyle;exports.defaultCommentOptions=l.defaultCommentOptions;exports.defaultCommentStyle=l.defaultCommentStyle;exports.defaultPolygonProperties=l.defaultPolygonProperties;exports.defaultPolygonStyle=l.defaultPolygonStyle;exports.defaultTextOptions=l.defaultTextOptions;exports.defaultTextStyle=l.defaultTextStyle;exports.detectArrow=l.detectArrow;exports.detectBox=l.detectBox;exports.detectComment=l.detectComment;exports.detectPolygon=l.detectPolygon;exports.detectText=l.detectText;exports.getAnnotationsBounds=l.getAnnotationsBounds;exports.getArrowEnd=l.getArrowEnd;exports.getArrowEndPoints=l.getArrowEndPoints;exports.getArrowSide=l.getArrowSide;exports.getArrowStart=l.getArrowStart;exports.getAttachmentPointOnNode=l.getAttachmentPointOnNode;exports.getBbox=l.getBbox;exports.getBoxCenter=l.getBoxCenter;exports.getBoxPosition=l.getBoxPosition;exports.getBoxSize=l.getBoxSize;exports.getBrowserWindow=l.getBrowserWindow;exports.getCommentPosition=l.getCommentPosition;exports.getCommentSize=l.getCommentSize;exports.getCommentZoomThreshold=l.getCommentZoomThreshold;exports.getCoordinates=l.getCoordinates;exports.getHandleId=l.getHandleId;exports.getTextBbox=l.getBbox;exports.getTextPosition=l.getBoxPosition;exports.getTextSize=l.getBoxSize;exports.handleDetectionThreshold=l.handleDetectionThreshold;exports.handleRadius=l.handleRadius;exports.hexShortToLong=l.hexShortToLong;exports.hexToRgba=l.hexToRgba;exports.isArrow=l.isArrow;exports.isBox=l.isBox;exports.isComment=l.isComment;exports.isPolygon=l.isPolygon;exports.isText=l.isText;exports.migrateBoxOrTextIfNeeded=l.migrateBoxOrTextIfNeeded;exports.parseColor=l.parseColor;exports.rgbToRgba=l.rgbToRgba;exports.scaleGeometry=l.scaleGeometry;exports.setArrowEnd=l.setArrowEnd;exports.setArrowEndPoint=l.setArrowEndPoint;exports.setArrowStart=l.setArrowStart;exports.setBbox=l.setBbox;exports.setTextBbox=l.setBbox;exports.throttle=l.throttle;exports.toggleCommentMode=l.toggleCommentMode;exports.updateBbox=l.updateBbox;exports.updateTextBbox=l.updateBbox;exports.Control=nr;exports.asColor=Ve;exports.asHexColor=je;exports.asRgbColor=qe;exports.asRgbaColor=Ke;exports.canDetachArrowEnd=cn;exports.canDetachArrowStart=ye;exports.getPolygonBounds=Dt;exports.getPolygonCenter=Bt;exports.isAnnotationCollection=Mt;exports.isColor=Ee;exports.isCommentArrow=Ae;exports.isHexColor=vt;exports.isRgbColor=kt;exports.isRgbaColor=Lt;exports.scalePolygon=Xe;exports.simplifyPolygon=Nt;exports.translatePolygon=Ue;exports.updatePolygonBbox=Tt;
|