leaflet-tual 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -45
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +57 -59
- package/dist/index.d.ts +57 -59
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +2 -2
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +92 -95
- package/dist/react.d.ts +92 -95
- package/dist/react.js +2 -2
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Me={name:"leaflet-tual",version:"0.1.0",description:"Framework-agnostic interactive canvas and annotation toolkit for Leaflet maps \u2014 draw arrows, shapes, freehand sketches, rulers, notes, and text pinned to geo-coordinates. Optional React bindings.",type:"module",sideEffects:!1,main:"./dist/index.cjs",module:"./dist/index.js",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:{types:"./dist/index.d.ts",default:"./dist/index.js"},require:{types:"./dist/index.d.cts",default:"./dist/index.cjs"},default:"./dist/index.js"},"./core":{types:"./dist/index.d.ts",import:{types:"./dist/index.d.ts",default:"./dist/index.js"},require:{types:"./dist/index.d.cts",default:"./dist/index.cjs"},default:"./dist/index.js"},"./react":{types:"./dist/react.d.ts",import:{types:"./dist/react.d.ts",default:"./dist/react.js"},require:{types:"./dist/react.d.cts",default:"./dist/react.cjs"},default:"./dist/react.js"},"./package.json":"./package.json"},files:["dist","README.md"],author:"Yusuf Arslan",license:"MIT",repository:{type:"git",url:"git+https://github.com/yusufarsln98/leaflet-tual.git",directory:"packages/leaflet-tual"},bugs:{url:"https://github.com/yusufarsln98/leaflet-tual/issues"},publishConfig:{access:"public",registry:"https://registry.npmjs.org/"},keywords:["leaflet","leaflet-tual","tual","tuval","canvas","annotation","map-tools","arrows","notes","gis","overlay","framework-agnostic","vanilla-js","react","react-leaflet"],scripts:{build:"tsup",dev:"tsup --watch",lint:"eslint src --ext ts,tsx",typecheck:"tsc --noEmit",format:'prettier --write "src/**/*.{ts,tsx}"',"format:check":'prettier --check "src/**/*.{ts,tsx}"',test:"vitest run","test:watch":"vitest",version:"changeset version",release:"npm run build && changeset publish"},peerDependencies:{leaflet:"^1.9.0",react:"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-leaflet":"^4.0.0 || ^5.0.0"},peerDependenciesMeta:{react:{optional:!0},"react-dom":{optional:!0},"react-leaflet":{optional:!0}},devDependencies:{"@changesets/cli":"^2.27.1","@testing-library/dom":"^10.4.0","@testing-library/react":"^16.2.0","@types/leaflet":"^1.9.16","@types/node":"^22.13.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0",eslint:"^9.20.0","eslint-plugin-react-hooks":"^5.1.0",jsdom:"^26.0.0",leaflet:"^1.9.4",prettier:"^3.5.0",react:"^19.0.0","react-dom":"^19.0.0","react-leaflet":"^5.0.0",tsup:"^8.5.1",typescript:"^5.7.0","typescript-eslint":"^8.24.0",vitest:"^3.0.0"}};var Ie={"arrow-linear":"linear","arrow-curved":"curved","arrow-bi":"bi","arrow-elbow":"elbow","arrow-s-curve":"s-curve"},ft=["#000000","#4b5563","#2563eb","#dc2626","#16a34a","#d97706","#9333ea","#0891b2"],q=[{name:"Amber",bg:"#fef9c3",border:"#fde047",header:"#fef08a",text:"#422006"},{name:"Sky",bg:"#e0f2fe",border:"#7dd3fc",header:"#bae6fd",text:"#0c4a6e"},{name:"Emerald",bg:"#dcfce7",border:"#86efac",header:"#bbf7d0",text:"#064e3b"},{name:"Rose",bg:"#ffe4e6",border:"#fda4af",header:"#fecdd3",text:"#881337"},{name:"Violet",bg:"#f3e8ff",border:"#d8b4fe",header:"#e9d5ff",text:"#3b0764"},{name:"Dark Slate",bg:"#1e293b",border:"#334155",header:"#0f172a",text:"#f8fafc"},{name:"Midnight",bg:"#111827",border:"#374151",header:"#030712",text:"#f9fafb"}],De="#000000",Ae=2,st=[1,2,3,4,5,6,8,10,12],ht=st,Ee="#fef9c3",mt="#422006",Re=16,lt=[10,12,14,16,18,20,24,28,32,36,40,48],yt=lt,pt={selectionGlowColor:"rgba(0, 0, 0, 0.2)",selectionGlowWidth:6,guideLineDash:[4,4],guideLineColor:"rgba(100, 100, 100, 0.6)",guideLineWidth:1.2,endpointHandleColor:"#4f4f4f",controlHandleColor:"#4f4f4f",handleFillColor:"#ffffff",handleRadius:5,handleStrokeWidth:2,shadowColor:"rgba(0, 0, 0, 0.2)",shadowBlur:3,shadowOffsetY:1.5,labelBackgroundColor:"#ffffff",labelTextColor:"#000000",labelFont:"12px system-ui, -apple-system, sans-serif",labelBorderWidth:1,labelBorderRadius:2,labelPaddingX:6,labelPaddingY:18,shapeDefaultFillOpacity:.16,shapeBorderRadius:0};var ke=0;function K(e="rlc"){ke+=1;let t=Math.random().toString(36).slice(2,8);return`${e}-${Date.now().toString(36)}-${ke}-${t}`}function W(e,t){let n=e.latLngToContainerPoint([t.lat,t.lng]);return{x:n.x,y:n.y}}function L(e,t){let n=e.containerPointToLatLng([t.x,t.y]);return{lat:n.lat,lng:n.lng}}function oe(e,t,n=1){let o=n>0?n:1,r=t.x-e.x,a=t.y-e.y,s=Math.abs(r),l=Math.abs(a),i=r>=0?1:-1,d=a>=0?1:-1;return s/o>=l?{x:e.x+i*s,y:e.y+d*(s/o)}:{x:e.x+i*(l*o),y:e.y+d*l}}function B(e,t){let n=t.x-e.x,o=t.y-e.y,r=Math.hypot(n,o);if(r===0)return t;let a=Math.atan2(o,n),s=Math.PI/4,l=Math.round(a/s)*s;return{x:e.x+Math.cos(l)*r,y:e.y+Math.sin(l)*r}}function se(e,t,n=.25){let o=(e.lat+t.lat)/2,r=(e.lng+t.lng)/2,a=t.lat-e.lat,s=t.lng-e.lng;return{lat:o+s*n,lng:r-a*n}}function ye(e,t,n,o){let r=1-o;return{x:r*r*e.x+2*r*o*t.x+o*o*n.x,y:r*r*e.y+2*r*o*t.y+o*o*n.y}}function le(e,t,n){let o=n.x-t.x,r=n.y-t.y;return Math.hypot(o,r)<.001?Math.atan2(n.y-e.y,n.x-e.x):Math.atan2(r,o)}function j(e,t,n){let o=(n.x-t.x)**2+(n.y-t.y)**2;if(o===0)return Math.hypot(e.x-t.x,e.y-t.y);let r=((e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y))/o;r=Math.max(0,Math.min(1,r));let a=t.x+r*(n.x-t.x),s=t.y+r*(n.y-t.y);return Math.hypot(e.x-a,e.y-s)}function Oe(e,t,n,o,r=24){let a=1/0,s=t;for(let l=1;l<=r;l+=1){let i=ye(t,n,o,l/r),d=j(e,s,i);d<a&&(a=d),s=i}return a}function de(e){if(!e)return null;try{let t=e.getSize?.();if(t&&t.x>0&&t.y>0)return{width:t.x,height:t.y}}catch{}try{let t=e.getContainer?.()?.getBoundingClientRect?.();if(t&&t.width>0&&t.height>0)return{width:t.width,height:t.height}}catch{}return null}function We(e,t,n){if(!t||n<=0)return"";if(e.measureText(t).width<=n)return t;let o="\u2026";if(e.measureText(o).width>=n)return"";let r=0,a=t.length,s="";for(;r<=a;){let l=Math.floor((r+a)/2),i=t.slice(0,l)+o;e.measureText(i).width<=n?(s=i,r=l+1):a=l-1}return s||o}function St(e=16,t,n=14,o){if(t===null||typeof t!="number")return e;let r=o?.scaleFactor??1.22,a=o?.min??9,s=o?.max??72,l=e*Math.pow(r,t-n);return Math.round(Math.max(a,Math.min(s,l)))}function pe(e,t){let o=(t.lat-e.lat)*Math.PI/180,r=(t.lng-e.lng)*Math.PI/180,a=e.lat*Math.PI/180,s=t.lat*Math.PI/180,l=Math.sin(o/2),i=Math.sin(r/2),d=l*l+Math.cos(a)*Math.cos(s)*i*i;return 6371e3*(2*Math.atan2(Math.sqrt(d),Math.sqrt(1-d)))}function Fe(e,t="metric"){if(t==="imperial"){let o=e*3.28084;if(o<1e3)return`${Math.round(o)} ft`;let r=o/5280;return`${r>=10?r.toFixed(1):r.toFixed(2)} mi`}if(e<1e3)return`${Math.round(e)} m`;let n=e/1e3;return`${n>=10?n.toFixed(1):n.toFixed(2)} km`}function wt(e){let t=0;for(let n=0;n<e.length-1;n+=1)t+=pe(e[n],e[n+1]);return t}function X(e,t,n,o,r,a=2){e.save(),e.beginPath(),e.arc(t.x,t.y,r,0,Math.PI*2),e.fillStyle=o,e.fill(),e.lineWidth=a,e.strokeStyle=n,e.stroke(),e.restore()}function ee(e,t,n,o,r,a,s){e.save(),e.font=s?.labelFont??"12px system-ui, -apple-system, sans-serif";let l=s?.labelPaddingX??6,i=Math.max(10,a-l*2),d=We(e,t,i);if(d){let u=e.measureText(d),p=Math.round(u.width+l*2),h=s?.labelPaddingY??18,m=Math.round(n-p/2),f=Math.round(o-h/2),y=s?.labelBorderRadius??2;s?.labelShadowColor&&(e.shadowColor=s.labelShadowColor,e.shadowBlur=s.labelShadowBlur??3),e.fillStyle=s?.labelBackgroundColor??"#ffffff",e.strokeStyle=s?.labelBorderColor??r,e.lineWidth=s?.labelBorderWidth??1,e.beginPath(),typeof e.roundRect=="function"?e.roundRect(m,f,p,h,y):e.rect(m,f,p,h),e.fill(),e.stroke(),e.fillStyle=s?.labelTextColor??"#000000",e.textAlign="center",e.textBaseline="middle",e.fillText(d,n,o)}e.restore()}function ge(e,t,n,o,r,a=!0){let s=Math.PI/6.5,l=t.x-o*Math.cos(n-s),i=t.y-o*Math.sin(n-s),d=t.x-o*Math.cos(n+s),u=t.y-o*Math.sin(n+s);e.save(),e.setLineDash([]),e.beginPath(),e.moveTo(t.x,t.y),e.lineTo(l,i),a?(e.lineTo(d,u),e.closePath(),e.fillStyle=r,e.fill()):(e.moveTo(t.x,t.y),e.lineTo(d,u),e.strokeStyle=r,e.lineWidth=Math.max(2,o/4.5),e.lineCap="round",e.stroke()),e.restore()}function Se(e,t,n){let{start:o,end:r,control:a}=t;if(e.moveTo(o.x,o.y),n==="curved")e.quadraticCurveTo(a.x,a.y,r.x,r.y);else if(n==="elbow")e.lineTo(a.x,o.y),e.lineTo(a.x,r.y),e.lineTo(r.x,r.y);else if(n==="s-curve"){let s=r.x-o.x,l=r.y-o.y;e.bezierCurveTo(o.x+s*.5,o.y,o.x+s*.5,o.y+l,r.x,r.y)}else e.lineTo(r.x,r.y)}function te(e,t){let n=W(e,t.start),o=W(e,t.end),r=t.arrowStyle==="curved"||t.arrowStyle==="s-curve",a=t.controlPoint?t.controlPoint:r?se(t.start,t.end):{lat:(t.start.lat+t.end.lat)/2,lng:(t.start.lng+t.end.lng)/2},s=W(e,a);return{start:n,end:o,control:s}}function we(e,t,n,o={}){let{start:r,end:a,control:s}=t,l=Math.hypot(a.x-r.x,a.y-r.y);if(l<2)return;let i=o.theme,d=Math.max(12,n.strokeWidth*3.8),u=Math.atan2(a.y-r.y,a.x-r.x),p=Math.atan2(r.y-a.y,r.x-a.x);if(n.arrowStyle==="curved")u=le(r,s,a),p=le(a,s,r);else if(n.arrowStyle==="elbow"){let f=a.x-s.x,y=a.y-r.y;u=Math.abs(f)>1?Math.atan2(0,f):Math.atan2(y,0);let w=r.x-s.x;p=Math.abs(w)>1?Math.atan2(0,w):Math.atan2(-y,0)}else if(n.arrowStyle==="s-curve"){let f=a.x-r.x;u=le(r,{x:r.x+f*.5,y:a.y},a)}e.save(),o.isPreview&&(e.globalAlpha=.85),o.isSelected&&(e.save(),e.beginPath(),Se(e,t,n.arrowStyle),e.strokeStyle=i?.selectionGlowColor??"rgba(0, 0, 0, 0.2)",e.lineWidth=n.strokeWidth+(i?.selectionGlowWidth??6),e.lineCap="round",e.lineJoin="round",e.stroke(),e.restore()),e.save(),e.shadowColor=i?.shadowColor??"rgba(0, 0, 0, 0.2)",e.shadowBlur=i?.shadowBlur??3,e.shadowOffsetY=i?.shadowOffsetY??1.5,e.beginPath(),Se(e,t,n.arrowStyle),e.strokeStyle=n.color,e.lineWidth=n.strokeWidth,e.lineCap="round",e.lineJoin="round";let h=!!(n.dashed||n.arrowStyle==="dashed");e.setLineDash(h?[n.strokeWidth*3,n.strokeWidth*2]:[]),e.stroke();let m=n.headStyle??(n.arrowStyle==="bi"?"both":"triangle");if(m!=="none"&&(ge(e,a,u,d,n.color,m!=="open"),m==="both"&&ge(e,r,p,d,n.color,!0)),e.restore(),n.label){let f=typeof i?.labelMinShapeSize=="number"?i.labelMinShapeSize:24;if(f<=0||l>=f){let y=n.arrowStyle==="curved"?ye(r,s,a,.5):n.arrowStyle==="elbow"?{x:s.x,y:(r.y+a.y)/2}:{x:(r.x+a.x)/2,y:(r.y+a.y)/2},w=i?.fitLabelsToShape!==!1,b=i?.labelMaxTextWidth??(w?Math.max(48,Math.min(280,l*1.6)):1/0);ee(e,n.label,Math.round(y.x),Math.round(y.y),n.color,b,i)}}if(o.isSelected){let f=i?.handleRadius??5,y=i?.handleFillColor??"#ffffff",w=i?.endpointHandleColor??"#4f4f4f",b=i?.controlHandleColor??"#767676",M=i?.handleStrokeWidth??2;(n.arrowStyle==="curved"||n.arrowStyle==="elbow")&&(e.save(),e.beginPath(),e.setLineDash(i?.guideLineDash?[...i.guideLineDash]:[4,4]),e.moveTo(r.x,r.y),e.lineTo(s.x,s.y),e.lineTo(a.x,a.y),e.strokeStyle=i?.guideLineColor??"rgba(100, 100, 100, 0.6)",e.lineWidth=i?.guideLineWidth??1.2,e.stroke(),e.restore(),X(e,s,b,y,f+.5,M)),X(e,r,w,y,f,M),X(e,a,w,y,f,M)}e.restore()}function He(e,t,n,o=11){return Math.hypot(e.x-t.end.x,e.y-t.end.y)<=o?"end":Math.hypot(e.x-t.start.x,e.y-t.start.y)<=o?"start":(n.arrowStyle==="curved"||n.arrowStyle==="elbow")&&Math.hypot(e.x-t.control.x,e.y-t.control.y)<=o?"control":null}function _e(e,t,n,o=9){let r=Math.max(o,n.strokeWidth/2+6);if(n.arrowStyle==="curved")return Oe(e,t.start,t.control,t.end)<=r;if(n.arrowStyle==="elbow"){let a={x:t.control.x,y:t.start.y},s={x:t.control.x,y:t.end.y};return j(e,t.start,a)<=r||j(e,a,s)<=r||j(e,s,t.end)<=r}return j(e,t.start,t.end)<=r}function ce(e,t){return t.points.map(n=>W(e,n))}function Be(e,t){if(t.length===0)return;if(e.moveTo(t[0].x,t[0].y),t.length===1){e.lineTo(t[0].x+.5,t[0].y+.5);return}if(t.length===2){e.lineTo(t[1].x,t[1].y);return}for(let o=1;o<t.length-1;o+=1){let r=(t[o].x+t[o+1].x)/2,a=(t[o].y+t[o+1].y)/2;e.quadraticCurveTo(t[o].x,t[o].y,r,a)}let n=t[t.length-1];e.lineTo(n.x,n.y)}function ve(e,t,n,o={}){if(t.length===0)return;let r=o.theme;e.save(),o.isPreview&&(e.globalAlpha=.9),o.isSelected&&(e.save(),e.beginPath(),Be(e,t),e.strokeStyle=r?.selectionGlowColor??"rgba(0, 0, 0, 0.2)",e.lineWidth=n.strokeWidth+(r?.selectionGlowWidth??6),e.lineCap="round",e.lineJoin="round",e.stroke(),e.restore()),e.save(),e.shadowColor=r?.shadowColor??"rgba(0, 0, 0, 0.2)",e.shadowBlur=r?.shadowBlur??3,e.shadowOffsetY=r?.shadowOffsetY??1,e.beginPath(),Be(e,t),e.strokeStyle=n.color,e.lineWidth=n.strokeWidth,e.lineCap="round",e.lineJoin="round",n.dashed?e.setLineDash([n.strokeWidth*3,n.strokeWidth*2]):e.setLineDash([]),e.stroke(),e.restore(),e.restore()}function Ge(e,t,n,o=9){if(t.length===0)return!1;let r=Math.max(o,n.strokeWidth/2+6);if(t.length===1)return Math.hypot(e.x-t[0].x,e.y-t[0].y)<=r;let a=1/0,s=1/0,l=-1/0,i=-1/0;for(let d=0;d<t.length;d+=1){let u=t[d];u.x<a&&(a=u.x),u.y<s&&(s=u.y),u.x>l&&(l=u.x),u.y>i&&(i=u.y)}if(e.x<a-r||e.x>l+r||e.y<s-r||e.y>i+r)return!1;for(let d=0;d<t.length-1;d+=1)if(j(e,t[d],t[d+1])<=r)return!0;return!1}function be(e,t,n,o){let{minX:r,minY:a,maxX:s,maxY:l,width:i,height:d,cx:u,cy:p}=t;if(n==="square"){let h=o?.shapeBorderRadius??0;h>0&&typeof e.roundRect=="function"?e.roundRect(r,a,i,d,h):e.rect(r,a,i,d);return}if(n==="circle"){e.ellipse(u,p,i/2,d/2,0,0,Math.PI*2);return}if(n==="triangle"){e.moveTo(u,a),e.lineTo(s,l),e.lineTo(r,l),e.closePath();return}if(n==="diamond"){e.moveTo(u,a),e.lineTo(s,p),e.lineTo(u,l),e.lineTo(r,p),e.closePath();return}if(n==="hexagon"){let h=i/2,m=d/2;for(let f=0;f<6;f+=1){let y=Math.PI/3*f-Math.PI/6,w=u+h*Math.cos(y),b=p+m*Math.sin(y);f===0?e.moveTo(w,b):e.lineTo(w,b)}e.closePath();return}if(n==="star"){let m=i/2,f=d/2,y=m*.42,w=f*.42;for(let b=0;b<10;b+=1){let M=b%2===0?m:y,x=b%2===0?f:w,A=b*Math.PI/5-Math.PI/2,F=u+M*Math.cos(A),O=p+x*Math.sin(A);b===0?e.moveTo(F,O):e.lineTo(F,O)}e.closePath();return}if(n==="marker"||n==="cloud"){let h=i/2,m=d*.36,f=a+m;e.moveTo(u,l),e.bezierCurveTo(r+i*.05,a+d*.7,r,a+d*.5,r,f),e.ellipse(u,f,h,m,0,Math.PI,0,!1),e.bezierCurveTo(s,a+d*.5,s-i*.05,a+d*.7,u,l),e.closePath();let y=h*.35,w=m*.35;y>=2.5&&w>=2.5&&(e.moveTo(u+y,f),e.ellipse(u,f,y,w,0,Math.PI*2,0,!0),e.closePath());return}if(n==="actor"){let h=Math.min(i,d)*.16,m=a+h+d*.04,f=m+h,y=a+d*.64,w=a+d*.42,b=i*.36,M=i*.32;e.moveTo(u+h,m),e.arc(u,m,h,0,Math.PI*2),e.closePath(),e.moveTo(u,f),e.lineTo(u,y),e.moveTo(u-b,w),e.lineTo(u+b,w),e.moveTo(u,y),e.lineTo(u-M,l),e.moveTo(u,y),e.lineTo(u+M,l)}}function ne(e,t){let n=W(e,t.start),o=W(e,t.end),r=Math.min(n.x,o.x),a=Math.min(n.y,o.y),s=Math.max(n.x,o.x),l=Math.max(n.y,o.y),i=Math.max(4,s-r),d=Math.max(4,l-a);return{start:n,end:o,minX:r,minY:a,maxX:s,maxY:l,width:i,height:d,cx:r+i/2,cy:a+d/2}}function Pe(e,t,n,o={}){if(t.width<4&&t.height<4)return;let r=o.theme;if(e.save(),o.isPreview&&(e.globalAlpha=.85),o.isSelected&&(e.save(),e.beginPath(),be(e,t,n.shape,r),e.strokeStyle=r?.selectionGlowColor??"rgba(0, 0, 0, 0.2)",e.lineWidth=n.strokeWidth+(r?.selectionGlowWidth??6),e.lineCap="round",e.lineJoin="round",e.stroke(),e.restore()),e.save(),e.shadowColor=r?.shadowColor??"rgba(0, 0, 0, 0.2)",e.shadowBlur=r?.shadowBlur??3,e.shadowOffsetY=r?.shadowOffsetY??1.5,e.beginPath(),be(e,t,n.shape,r),n.filled){let a=r?.shapeDefaultFillOpacity??.16,s=Math.round(Math.min(1,Math.max(0,a))*255).toString(16).padStart(2,"0");e.fillStyle=n.fillColor??`${n.color}${s}`,e.fill()}if(e.strokeStyle=n.color,e.lineWidth=n.strokeWidth,e.lineCap="round",e.lineJoin="round",e.setLineDash(n.dashed?[n.strokeWidth*3,n.strokeWidth*2]:[]),e.stroke(),e.restore(),n.label){let a=typeof r?.labelMinShapeSize=="number"?r.labelMinShapeSize:18;if(a<=0||Math.max(t.width,t.height)>=a&&t.width>=8&&t.height>=8){let s=n.shape==="actor"?t.maxY+14:t.cy,l=r?.fitLabelsToShape!==!1,i=r?.labelMaxTextWidth??(l?Math.max(48,Math.min(280,t.width*2.2)):1/0);ee(e,n.label,Math.round(t.cx),Math.round(s),n.color,i,r)}}if(o.isSelected){let a=r?.handleRadius??5,s=r?.handleFillColor??"#ffffff",l=r?.endpointHandleColor??"#4f4f4f",i=r?.handleStrokeWidth??2;e.save(),e.setLineDash(r?.guideLineDash?[...r.guideLineDash]:[4,4]),e.strokeStyle=r?.guideLineColor??"rgba(100, 100, 100, 0.6)",e.lineWidth=r?.guideLineWidth??1.2,e.strokeRect(t.minX,t.minY,t.width,t.height),e.restore(),X(e,t.start,l,s,a,i),X(e,t.end,l,s,a,i)}e.restore()}function Ne(e,t,n=11){return Math.hypot(e.x-t.end.x,e.y-t.end.y)<=n?"end":Math.hypot(e.x-t.start.x,e.y-t.start.y)<=n?"start":null}function Ye(e,t,n=8){return e.x>=t.minX-n&&e.x<=t.maxX+n&&e.y>=t.minY-n&&e.y<=t.maxY+n}function re(e,t){let n=W(e,t.start),o=W(e,t.end),r={x:(n.x+o.x)/2,y:(n.y+o.y)/2},a=Math.hypot(o.x-n.x,o.y-n.y),s=Math.atan2(o.y-n.y,o.x-n.x);return{start:n,end:o,mid:r,lengthPx:a,angle:s}}function xe(e,t,n,o={}){let{start:r,end:a,mid:s,lengthPx:l,angle:i}=t;if(l<2)return;let d=o.theme;e.save(),o.isPreview&&(e.globalAlpha=.9),o.isSelected&&(e.save(),e.beginPath(),e.moveTo(r.x,r.y),e.lineTo(a.x,a.y),e.strokeStyle=d?.selectionGlowColor??"rgba(0, 0, 0, 0.2)",e.lineWidth=n.strokeWidth+(d?.selectionGlowWidth??6),e.lineCap="round",e.stroke(),e.restore()),e.save(),e.shadowColor=d?.shadowColor??"rgba(0, 0, 0, 0.2)",e.shadowBlur=d?.shadowBlur??3,e.shadowOffsetY=d?.shadowOffsetY??1.5,e.beginPath(),e.moveTo(r.x,r.y),e.lineTo(a.x,a.y),e.strokeStyle=n.color,e.lineWidth=n.strokeWidth,e.lineCap="round",n.dashed?e.setLineDash([n.strokeWidth*3,n.strokeWidth*2]):e.setLineDash([]),e.stroke();let u=i+Math.PI/2,p=Math.max(7,n.strokeWidth*3.2),h=Math.cos(u)*p,m=Math.sin(u)*p;e.beginPath(),e.setLineDash([]),e.moveTo(r.x-h,r.y-m),e.lineTo(r.x+h,r.y+m),e.moveTo(a.x-h,a.y-m),e.lineTo(a.x+h,a.y+m),e.stroke(),e.restore();let f=pe(n.start,n.end),y=n.label?n.label:Fe(f,n.unit);if(y){let w=d?.fitLabelsToShape!==!1,b=d?.labelMaxTextWidth??(w?Math.max(50,Math.min(300,l*1.5)):1/0);ee(e,y,Math.round(s.x),Math.round(s.y),n.color,b,d)}if(o.isSelected){let w=d?.handleRadius??5,b=d?.handleFillColor??"#ffffff",M=d?.endpointHandleColor??"#4f4f4f",x=d?.handleStrokeWidth??2;X(e,r,M,b,w,x),X(e,a,M,b,w,x)}e.restore()}function je(e,t,n=11){return Math.hypot(e.x-t.end.x,e.y-t.end.y)<=n?"end":Math.hypot(e.x-t.start.x,e.y-t.start.y)<=n?"start":null}function Xe(e,t,n,o=9){let r=Math.max(o,n.strokeWidth/2+6);return j(e,t.start,t.end)<=r}function Gt(e){let t=q.find(o=>o.bg===e);if(t)return t;let n=e?.startsWith("#")&&e.length===7&&parseInt(e.slice(1),16)<8947848||e==="#111827"||e==="#1e293b"||e==="#0f172a";return{name:"Custom",bg:e,border:n?"rgba(255, 255, 255, 0.16)":"rgba(0, 0, 0, 0.12)",header:n?"rgba(255, 255, 255, 0.08)":"rgba(0, 0, 0, 0.06)",text:n?"#f8fafc":"#0f172a"}}function Nt(e,t,n,o,r,a=!0){let s=a!==!1?de(e):null;if(!s||r||!(t.x>=-120&&t.x<=s.width+120&&t.y>=-120&&t.y<=s.height+120))return t;let i=o?95:n.width??230,d=o?22:n.height??100,u=8,p=16+u,h=Math.max(p,s.width-i+16-u),m=12+u,f=Math.max(m,s.height-d+12-u);return{x:Math.max(p,Math.min(h,t.x)),y:Math.max(m,Math.min(f,t.y))}}function Xt(e,t,n,o,r,a,s=!0){let l=s!==!1?de(e):null;if(!l||a||!(t.x>=-100&&t.x<=l.width+100&&t.y>=-100&&t.y<=l.height+100))return t;let d=r?35:Math.max(24,(n.text||"Text").length*o/3.6),u=r?11:o/2+4,p=8,h=d+p,m=Math.max(h,l.width-d-p),f=u+p,y=Math.max(f,l.height-u-p);return{x:Math.max(h,Math.min(m,t.x)),y:Math.max(f,Math.min(y,t.y))}}function Te(e,t,n,o,r,a,s,l,i,d,u,p){l.current={screenPoints:[n],geoPoints:[o]},e.dragging.disable(),d();let h=f=>{if(!l.current)return;let y=t.getBoundingClientRect(),w={x:f.clientX-y.left,y:f.clientY-y.top},b=l.current.screenPoints,M=b[b.length-1];Math.hypot(w.x-M.x,w.y-M.y)<2.5||(b.push(w),l.current.geoPoints.push(L(e,w)),i.current===null&&(i.current=window.requestAnimationFrame(()=>{i.current=null,d()})))},m=f=>{window.removeEventListener("pointermove",h),window.removeEventListener("pointerup",m),e.dragging.enable(),i.current!==null&&(window.cancelAnimationFrame(i.current),i.current=null);let y=l.current;l.current=null,y&&y.geoPoints.length>=1?(u({id:K("freedraw"),type:"freedraw",points:y.geoPoints,color:r,strokeWidth:a,dashed:s,createdAt:Date.now()}),f.shiftKey||p("select")):d()};window.addEventListener("pointermove",h),window.addEventListener("pointerup",m)}function ze(e,t,n="Field Note"){let o=q.find(r=>r.bg===t)??q[0];return{id:K("note"),type:"note",position:e,title:n,text:"",backgroundColor:o.bg,textColor:o.text,width:230,createdAt:Date.now()}}function Ke(e,t,n,o,r){return{id:K("text"),type:"text",position:e,text:"",color:t,initialFontSize:n,baseZoom:r,fontWeight:o,createdAt:Date.now()}}function Ue(e,t,n,o,r,a,s,l,i,d,u,p){d({shape:r,startGeo:o,currentGeo:o}),e.dragging.disable();let h=f=>{let y=t.getBoundingClientRect(),w={x:f.clientX-y.left,y:f.clientY-y.top},b=f.shiftKey?oe(n,w,1):w;d({shape:r,startGeo:o,currentGeo:L(e,b)})},m=f=>{window.removeEventListener("pointermove",h),window.removeEventListener("pointerup",m),e.dragging.enable();let y=t.getBoundingClientRect(),w={x:f.clientX-y.left,y:f.clientY-y.top},b=f.shiftKey?oe(n,w,1):w,M=Math.hypot(w.x-n.x,w.y-n.y),x=M>=10?o:L(e,{x:n.x-45,y:n.y-45}),A=M>=10?L(e,b):L(e,{x:n.x+45,y:n.y+45});u({id:K("shape"),type:"shape",shape:r,start:x,end:A,color:a,filled:s,strokeWidth:l,dashed:i,createdAt:Date.now()}),d(null),p("select")};window.addEventListener("pointermove",h),window.addEventListener("pointerup",m)}function Ce(e,t,n,o,r,a){return{id:K("arrow"),type:"arrow",arrowStyle:e,start:t,end:n,controlPoint:e==="curved"?se(t,n):e==="elbow"?{lat:(t.lat+n.lat)/2,lng:(t.lng+n.lng)/2}:void 0,color:o,strokeWidth:r,dashed:a,headStyle:e==="bi"?"both":"triangle",createdAt:Date.now()}}function Je(e,t,n,o,r,a,s,l,i,d,u){i({arrowStyle:r,startGeo:o,currentGeo:o}),e.dragging.disable();let p=m=>{let f=t.getBoundingClientRect(),y={x:m.clientX-f.left,y:m.clientY-f.top},w=m.shiftKey?B(n,y):y;i({arrowStyle:r,startGeo:o,currentGeo:L(e,w)})},h=m=>{window.removeEventListener("pointermove",p),window.removeEventListener("pointerup",h),e.dragging.enable();let f=t.getBoundingClientRect(),y={x:m.clientX-f.left,y:m.clientY-f.top},w=m.shiftKey?B(n,y):y;Math.hypot(y.x-n.x,y.y-n.y)>=8&&(d(Ce(r,o,L(e,w),a,s,l)),i(null),u("select"))};window.addEventListener("pointermove",p),window.addEventListener("pointerup",h)}function dt(e,t,n,o,r){return{id:K("ruler"),type:"ruler",start:e,end:t,color:n,strokeWidth:o,dashed:r,unit:"metric",createdAt:Date.now()}}function $e(e,t,n,o,r,a,s,l,i,d){l({startGeo:o,currentGeo:o}),e.dragging.disable();let u=h=>{let m=t.getBoundingClientRect(),f={x:h.clientX-m.left,y:h.clientY-m.top},y=h.shiftKey?B(n,f):f;l({startGeo:o,currentGeo:L(e,y)})},p=h=>{window.removeEventListener("pointermove",u),window.removeEventListener("pointerup",p),e.dragging.enable();let m=t.getBoundingClientRect(),f={x:h.clientX-m.left,y:h.clientY-m.top},y=h.shiftKey?B(n,f):f;Math.hypot(f.x-n.x,f.y-n.y)>=8&&(i(dt(o,L(e,y),r,a,s)),l(null),d("select"))};window.addEventListener("pointermove",u),window.addEventListener("pointerup",p)}function Z(e,t){e.dragging.disable();let n=()=>{e.dragging.enable(),window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",n)};window.addEventListener("pointermove",t),window.addEventListener("pointerup",n)}function qe(e,t,n,o,r,a){Z(e,s=>{let l=r(s),i=s.shiftKey;if(o==="start"){let d=i?B(n.end,l):l;a(t.id,{start:L(e,d)})}else if(o==="end"){let d=i?B(n.start,l):l;a(t.id,{end:L(e,d)})}else o==="control"&&a(t.id,{controlPoint:L(e,l)})})}function Ze(e,t,n,o,r,a){let s=o==="start"?n.end:n.start,l=n.width>4&&n.height>4?n.width/n.height:1;Z(e,i=>{let d=r(i),u=i.shiftKey?oe(s,d,l):d,p=L(e,u);a(t.id,o==="start"?{start:p}:{end:p})})}function Ve(e,t,n,o,r,a){let s=n.start,l=n.end,i=n.control,d=!!t.controlPoint;Z(e,u=>{let p=r(u),h=p.x-o.x,m=p.y-o.y,f={start:L(e,{x:s.x+h,y:s.y+m}),end:L(e,{x:l.x+h,y:l.y+m})};(t.arrowStyle==="curved"||t.arrowStyle==="elbow")&&d&&(f.controlPoint=L(e,{x:i.x+h,y:i.y+m})),a(t.id,f)})}function Qe(e,t,n,o,r,a){let s=n.start,l=n.end;Z(e,i=>{let d=r(i),u=d.x-o.x,p=d.y-o.y;a(t.id,{start:L(e,{x:s.x+u,y:s.y+p}),end:L(e,{x:l.x+u,y:l.y+p})})})}function et(e,t,n,o,r,a){Z(e,s=>{let l=r(s),i=l.x-o.x,d=l.y-o.y;a(t.id,{points:n.map(u=>L(e,{x:u.x+i,y:u.y+d}))})})}function tt(e,t,n,o,r,a){Z(e,s=>{let l=r(s),i=s.shiftKey;if(o==="start"){let d=i?B(n.end,l):l;a(t.id,{start:L(e,d)})}else if(o==="end"){let d=i?B(n.start,l):l;a(t.id,{end:L(e,d)})}})}function nt(e,t,n,o,r,a){let s=n.start,l=n.end;Z(e,i=>{let d=r(i),u=d.x-o.x,p=d.y-o.y;a(t.id,{start:L(e,{x:s.x+u,y:s.y+p}),end:L(e,{x:l.x+u,y:l.y+p})})})}function rt({map:e,canvas:t,width:n,height:o,arrowItems:r,shapeItems:a,freeDrawItems:s,rulerItems:l,selectedId:i,draftShape:d,draftArrow:u,draftRuler:p,draftFreeDraw:h,activeColor:m,strokeWidth:f,dashed:y,shapeFilled:w,annotationTheme:b,arrowTheme:M,isReadOnly:x}){if(!e||!t||n===0||o===0)return;let A=b??M,F=typeof window<"u"&&window.devicePixelRatio||1,O=Math.round(n*F),Y=Math.round(o*F);t.width!==O&&(t.width=O),t.height!==Y&&(t.height=Y);let C=t.getContext("2d");if(C){C.save(),typeof C.scale=="function"&&C.scale(F,F),C.clearRect(0,0,n,o);for(let P of s){let E=ce(e,P);ve(C,E,P,{isSelected:!x&&P.id===i,theme:A})}for(let P of a){let E=ne(e,P);Pe(C,E,P,{isSelected:!x&&P.id===i,theme:A})}for(let P of r){let E=te(e,P);we(C,E,P,{isSelected:!x&&P.id===i,theme:A})}for(let P of l){let E=re(e,P);xe(C,E,P,{isSelected:!x&&P.id===i,theme:A})}if(!x&&h&&h.screenPoints.length>0&&ve(C,h.screenPoints,{color:m,strokeWidth:f,dashed:y},{isPreview:!0,theme:A}),!x&&d){let P={id:"draft-shape",type:"shape",shape:d.shape,start:d.startGeo,end:d.currentGeo,color:m,filled:w,strokeWidth:f,dashed:y,createdAt:0},E=ne(e,P);Pe(C,E,P,{isPreview:!0,isSelected:!0,theme:A})}if(!x&&u){let P={id:"draft-arrow",type:"arrow",arrowStyle:u.arrowStyle,start:u.startGeo,end:u.currentGeo,color:m,strokeWidth:f,dashed:y,createdAt:0},E=te(e,P);we(C,E,P,{isPreview:!0,isSelected:!0,theme:A})}if(!x&&p){let P={id:"draft-ruler",type:"ruler",start:p.startGeo,end:p.currentGeo,color:m,strokeWidth:f,dashed:y,unit:"metric",createdAt:0},E=re(e,P);xe(C,E,P,{isPreview:!0,isSelected:!0,theme:A})}C.restore()}}function ot(e,t){let n=()=>{let o=e.getSize();t({width:o.x,height:o.y})};return n(),e.on("move",n),e.on("zoom",n),e.on("zoomanim",n),e.on("viewreset",n),e.on("resize",n),()=>{e.off("move",n),e.off("zoom",n),e.off("zoomanim",n),e.off("viewreset",n),e.off("resize",n)}}function it(e){let t=e.getContainer();if(!t)return()=>{};let n=r=>{let a=r.target;if(!a?.closest?.("[data-rlc-overlay], input, textarea, select, button, .rlc-overlay"))return;let s=Object.prototype.hasOwnProperty.call(a,"_leaflet_disable_events"),l=a._leaflet_disable_events;a._leaflet_disable_events=!0;let i=!!e.doubleClickZoom?.enabled?.();i&&e.doubleClickZoom.disable(),setTimeout(()=>{s?a._leaflet_disable_events=l:delete a._leaflet_disable_events,i&&e.doubleClickZoom.enable()},0)},o=r=>{if(r.target?.closest?.("textarea, input, select, button, [data-rlc-note-resize], .rlc-note-resize-handle")&&e.dragging?.enabled?.()){e.dragging.disable();let s=()=>{e.dragging.enable(),window.removeEventListener("mouseup",s,!0),window.removeEventListener("touchend",s,!0),window.removeEventListener("pointerup",s,!0)};window.addEventListener("mouseup",s,{capture:!0,once:!0}),window.addEventListener("touchend",s,{capture:!0,once:!0}),window.addEventListener("pointerup",s,{capture:!0,once:!0})}};return t.addEventListener("dblclick",n,!0),t.addEventListener("mousedown",o,!0),t.addEventListener("touchstart",o,!0),()=>{t.removeEventListener("dblclick",n,!0),t.removeEventListener("mousedown",o,!0),t.removeEventListener("touchstart",o,!0)}}function Le(e={}){let t=Math.max(0,(e.maxHistory??50)-1),n=[],o=e.items??e.initialItems??[],r=[],a=o,s=e.initialTool??"select",l=!!(e.readOnly??!1),i=null,d=!1,u=e.defaultShape??"square",p=!0,h=e.defaultColor??De,m=e.defaultStrokeWidth??Ae,f=!1,y=e.defaultNoteColor??Ee,w=e.defaultFontSize??Re,b="bold",M=new Set,x=()=>{for(let c of M)c(T)},A=c=>{e.onItemsChange?.(c),e.onChange?.(c)},F=(c,g)=>{e.onItemsChangeComplete?.(c,g),e.onChangeComplete?.(c,g),e.onEditEnd?.(c,g),e.onEditComplete?.(c,g),g&&e.onItemChangeComplete?.(g)},O=c=>{let g=c(o);return o=g,A(g),x(),g},Y=c=>{if(o===a)return;let g=a;a=o,n=[...n,g].slice(-t),r=[],F(o,c),x()},C=c=>{if(i!==c){let g=i;i=c,d=!1,g!==null&&c===null&&Y(),e.onItemSelect?.(o.find(R=>R.id===c)??null),x()}},P=c=>{l&&c!=="select"||(s=c,e.onToolChange?.(c),x())},E=c=>{l=!!c,l&&s!=="select"&&(s="select"),x()},G=(c,g)=>{i&&O(R=>R.map(z=>z.id===i&&c(z)?g(z):z))},ie=c=>{l||(u=c,G(g=>g.type==="shape",g=>({...g,shape:c})),x())},ae=c=>{l||(p=c,G(g=>g.type==="shape",g=>({...g,filled:c})),x())},ue=c=>{l||(h=c,G(g=>g.type!=="note",g=>({...g,color:c})),x())},fe=c=>{l||(m=c,G(g=>g.type==="arrow"||g.type==="freedraw"||g.type==="shape"||g.type==="ruler",g=>({...g,strokeWidth:c})),x())},he=c=>{l||(f=c,G(g=>g.type==="arrow"||g.type==="freedraw"||g.type==="shape"||g.type==="ruler",g=>({...g,dashed:c})),x())},S=c=>{if(l)return;y=c;let g=q.find(R=>R.bg===c);G(R=>R.type==="note",R=>({...R,backgroundColor:c,textColor:g?.text??R.textColor})),x()},I=c=>{l||(w=c,G(g=>g.type==="text",g=>({...g,initialFontSize:c})),x())},D=c=>{l||(b=c,G(g=>g.type==="text",g=>({...g,fontWeight:c})),x())},k=c=>{d=c,x()},U=c=>{l||(O(g=>[...g,c]),C(c.id),e.onItemCreate?.(c))},J=(c,g)=>{if(l){let z=Object.keys(g);if(z.length!==1||z[0]!=="minimized")return}let R;O(z=>z.map(me=>me.id===c?(R={...me,...g},R):me)),R&&e.onItemChange?.(R)},H=c=>{l||(O(g=>g.filter(R=>R.id!==c)),i===c&&C(null),e.onItemDelete?.(c),Y())},N=()=>{!l&&i&&H(i)},_=()=>{l||(O(()=>[]),C(null),Y())},T={get items(){return o},get activeTool(){return s},setActiveTool:P,get readOnly(){return l},setReadOnly:E,get activeShape(){return u},setActiveShape:ie,get shapeFilled(){return p},setShapeFilled:ae,get selectedId(){return i},setSelectedId:C,get selectedItem(){return o.find(c=>c.id===i)??null},get isEditingLabel(){return d},setEditingLabel:k,get labelEditMode(){return d},setLabelEditMode:k,get activeColor(){return h},setActiveColor:ue,get strokeWidth(){return m},setStrokeWidth:fe,get dashed(){return f},setDashed:he,get noteColor(){return y},setNoteColor:S,get fontSize(){return w},setFontSize:I,get fontWeight(){return b},setFontWeight:D,addItem:U,updateItem:J,removeItem:H,deleteSelected:N,clearAll:_,clear:_,deleteItem:H,setTool:P,selectItem:C,undo:()=>{if(l||n.length===0)return;let c=n[n.length-1];r=[o,...r],n=n.slice(0,-1),o=c,a=c,A(c),F(c,null),x()},redo:()=>{if(l||r.length===0)return;let c=r[0];n=[...n,o],r=r.slice(1),o=c,a=c,A(c),F(c,null),x()},get canUndo(){return!l&&n.length>0},get canRedo(){return!l&&r.length>0},notifyChangeComplete:Y,exportJSON:()=>JSON.stringify(o,null,2),importJSON:c=>{if(l)return!1;try{let g=JSON.parse(c);return Array.isArray(g)?(O(()=>g),C(null),Y(),!0):!1}catch{return!1}},subscribe(c){return M.add(c),()=>{M.delete(c)}},getState(){return T},destroy(){M.clear()}};return T}var rn=Le;function ct(e,t={}){let{controller:n,annotationTheme:o,arrowTheme:r,labels:a,zIndex:s=650,...l}=t,i=n??Le(l),d=e.getContainer(),u=document.createElement("div");u.setAttribute("data-rlc-overlay","true"),u.style.position="absolute",u.style.inset="0",u.style.pointerEvents="none",u.style.zIndex=String(s),u.style.overflow="hidden";let p=document.createElement("canvas");p.style.position="absolute",p.style.top="0",p.style.left="0",p.style.pointerEvents="none";let h=document.createElement("div");h.style.position="absolute",h.style.inset="0",h.style.pointerEvents="none",u.appendChild(p),u.appendChild(h),d.appendChild(u);let m={width:0,height:0},f=null,y=null,w=null,b={current:null},M={current:null},x=S=>{f=S,C()},A=S=>{y=S,C()},F=S=>{w=S,C()},O=()=>{b.current=null,M.current!==null&&typeof window<"u"&&(window.cancelAnimationFrame(M.current),M.current=null)},Y=()=>{let S=!i.readOnly&&i.activeTool!=="select";h.style.pointerEvents=S?"auto":"none",h.style.cursor=S?"crosshair":"default",p.style.width=`${m.width}px`,p.style.height=`${m.height}px`},C=()=>{Y();let S=i.items;rt({map:e,canvas:p,width:m.width,height:m.height,arrowItems:S.filter(I=>I.type==="arrow"),shapeItems:S.filter(I=>I.type==="shape"),freeDrawItems:S.filter(I=>I.type==="freedraw"),rulerItems:S.filter(I=>I.type==="ruler"),selectedId:i.selectedId,draftShape:y,draftArrow:f,draftRuler:w,draftFreeDraw:b.current,activeColor:i.activeColor,strokeWidth:i.strokeWidth,dashed:i.dashed,shapeFilled:i.shapeFilled,annotationTheme:o,arrowTheme:r,isReadOnly:i.readOnly})},P=S=>{let I=d.getBoundingClientRect();return{x:S.clientX-I.left,y:S.clientY-I.top}},E=S=>{if(S.button!==0||i.readOnly)return;S.stopPropagation(),S.preventDefault();let I=P(S),D=L(e,I),{activeTool:k,activeShape:U,shapeFilled:J,activeColor:H,strokeWidth:N,dashed:_,noteColor:$,fontSize:V,fontWeight:Q}=i;if(k==="freedraw"){Te(e,d,I,D,H,N,_,b,M,C,i.addItem,i.setActiveTool);return}if(k==="shape"){Ue(e,d,I,D,U,H,J,N,_,A,i.addItem,i.setActiveTool);return}if(k==="note"){i.addItem(ze(D,$,a?.noteDefaultTitle??"Field Note")),i.setActiveTool("select");return}if(k==="text"){i.addItem(Ke(D,H,V,Q,e.getZoom?.()??14)),i.setActiveTool("select");return}if(k==="ruler"){$e(e,d,I,D,H,N,_,F,i.addItem,i.setActiveTool);return}let v=Ie[k];if(v)if(!f)Je(e,d,I,D,v,H,N,_,x,i.addItem,i.setActiveTool);else{let T=W(e,f.startGeo),c=S.shiftKey?B(T,I):I;Math.hypot(c.x-T.x,c.y-T.y)>=4&&i.addItem(Ce(f.arrowStyle,f.startGeo,L(e,c),H,N,_)),x(null),i.setActiveTool("select")}},G=S=>{if(!f)return;let I=P(S),D=W(e,f.startGeo),k=S.shiftKey?B(D,I):I;x({...f,currentGeo:L(e,k)})},ie=S=>{if(S.button!==0||i.readOnly||i.activeTool!=="select"||S.target?.closest("[data-rlc-toolbar], [data-rlc-note], [data-rlc-text], .leaflet-control"))return;let D=P(S),k=i.items,U=k.filter(v=>v.type==="arrow"),J=k.filter(v=>v.type==="shape"),H=k.filter(v=>v.type==="freedraw"),N=k.filter(v=>v.type==="ruler"),_=i.selectedId,$=U.find(v=>v.id===_);if($){let v=te(e,$),T=He(D,v,$);if(T){S.stopPropagation(),S.preventDefault(),qe(e,$,v,T,P,i.updateItem);return}}let V=J.find(v=>v.id===_);if(V){let v=ne(e,V),T=Ne(D,v);if(T){S.stopPropagation(),S.preventDefault(),Ze(e,V,v,T,P,i.updateItem);return}}let Q=N.find(v=>v.id===_);if(Q){let v=re(e,Q),T=je(D,v);if(T){S.stopPropagation(),S.preventDefault(),tt(e,Q,v,T,P,i.updateItem);return}}for(let v=U.length-1;v>=0;v-=1){let T=U[v],c=te(e,T);if(_e(D,c,T)){S.stopPropagation(),S.preventDefault(),i.setSelectedId(T.id),Ve(e,T,c,D,P,i.updateItem);return}}for(let v=J.length-1;v>=0;v-=1){let T=J[v],c=ne(e,T);if(Ye(D,c)){S.stopPropagation(),S.preventDefault(),i.setSelectedId(T.id),Qe(e,T,c,D,P,i.updateItem);return}}for(let v=H.length-1;v>=0;v-=1){let T=H[v],c=ce(e,T);if(Ge(D,c,T)){S.stopPropagation(),S.preventDefault(),i.setSelectedId(T.id),et(e,T,c,D,P,i.updateItem);return}}for(let v=N.length-1;v>=0;v-=1){let T=N[v],c=re(e,T);if(Xe(D,c,T)){S.stopPropagation(),S.preventDefault(),i.setSelectedId(T.id),nt(e,T,c,D,P,i.updateItem);return}}_&&(i.setSelectedId(null),i.notifyChangeComplete())},ae=S=>{if(i.readOnly)return;let I=S.target;I&&(I.tagName==="INPUT"||I.tagName==="TEXTAREA"||I.isContentEditable)||(S.key==="Escape"?(f=null,y=null,w=null,O(),i.setSelectedId(null),i.setActiveTool("select"),i.notifyChangeComplete(),C()):(S.key==="Delete"||S.key==="Backspace")&&i.selectedId&&(S.preventDefault(),i.deleteSelected()))};h.addEventListener("pointerdown",E),h.addEventListener("pointermove",G),d.addEventListener("pointerdown",ie,{capture:!0}),typeof window<"u"&&window.addEventListener("keydown",ae);let ue=ot(e,S=>{m=S,C()}),fe=it(e),he=i.subscribe(()=>{C()});return C(),{controller:i,container:u,canvas:p,repaint:C,destroy(){h.removeEventListener("pointerdown",E),h.removeEventListener("pointermove",G),d.removeEventListener("pointerdown",ie,{capture:!0}),typeof window<"u"&&window.removeEventListener("keydown",ae),O(),ue(),fe(),he(),n||i.destroy(),u.remove()}}}var hn=ct;var pn=Me.version;export{pt as DEFAULT_ANNOTATION_THEME,Re as DEFAULT_FONT_SIZE,lt as DEFAULT_FONT_SIZE_OPTIONS,Ee as DEFAULT_NOTE_BG,mt as DEFAULT_NOTE_TEXT,De as DEFAULT_STROKE_COLOR,Ae as DEFAULT_STROKE_WIDTH,st as DEFAULT_STROKE_WIDTH_OPTIONS,yt as FONT_SIZE_OPTIONS,q as NOTE_COLOR_THEMES,ft as STROKE_COLORS,ht as STROKE_WIDTH_OPTIONS,Ie as TOOL_TO_ARROW_STYLE,pn as VERSION,it as bindBlockMapDblClick,ot as bindLeafletSync,Ce as buildArrowItem,dt as buildRulerItem,pe as calculateGeodesicDistance,wt as calculateLineDistance,St as calculateZoomFontSize,Nt as clampNotePosition,Xt as clampTextPosition,se as computeDefaultControlGeoPoint,B as constrainAngleTo45Degrees,oe as constrainToAspectRatio,ze as createDraftNote,Ke as createDraftText,K as createId,ct as createLeafletCanvas,Le as createLeafletCanvasController,hn as createLeafletTual,rn as createLeafletTualController,Oe as distanceToQuadraticBezier,j as distanceToSegment,ge as drawArrowHead,X as drawCanvasHandle,ee as drawCanvasLabelPill,Fe as formatRealWorldDistance,W as geoToScreen,de as getMapDimensions,ye as getQuadraticBezierPoint,le as getQuadraticEndAngle,_e as hitTestArrow,He as hitTestArrowHandle,Ge as hitTestFreeDraw,Xe as hitTestRuler,je as hitTestRulerHandle,Ye as hitTestShape,Ne as hitTestShapeHandle,rt as paintLeafletCanvas,te as projectArrow,ce as projectFreeDraw,re as projectRuler,ne as projectShape,we as renderArrowOnCanvas,ve as renderFreeDrawOnCanvas,xe as renderRulerOnCanvas,Pe as renderShapeOnCanvas,Gt as resolveNoteTheme,L as screenToGeo,Ve as startArrowBodyDrag,Je as startArrowDrag,qe as startArrowHandleDrag,et as startFreeDrawBodyDrag,Te as startFreeDrawDrag,nt as startRulerBodyDrag,$e as startRulerDrag,tt as startRulerHandleDrag,Qe as startShapeBodyDrag,Ue as startShapeDrag,Ze as startShapeHandleDrag,Se as traceArrowPath,be as tracePolygonShape,We as truncateCanvasText};
|
|
1
|
+
var Le={name:"leaflet-tual",version:"1.0.0",description:"Framework-agnostic interactive canvas and annotation toolkit for Leaflet maps \u2014 draw arrows, shapes, freehand sketches, rulers, notes, and text pinned to geo-coordinates. Optional React bindings.",type:"module",sideEffects:!1,main:"./dist/index.cjs",module:"./dist/index.js",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:{types:"./dist/index.d.ts",default:"./dist/index.js"},require:{types:"./dist/index.d.cts",default:"./dist/index.cjs"},default:"./dist/index.js"},"./core":{types:"./dist/index.d.ts",import:{types:"./dist/index.d.ts",default:"./dist/index.js"},require:{types:"./dist/index.d.cts",default:"./dist/index.cjs"},default:"./dist/index.js"},"./react":{types:"./dist/react.d.ts",import:{types:"./dist/react.d.ts",default:"./dist/react.js"},require:{types:"./dist/react.d.cts",default:"./dist/react.cjs"},default:"./dist/react.js"},"./package.json":"./package.json"},files:["dist","README.md"],author:"Yusuf Arslan",license:"MIT",repository:{type:"git",url:"git+https://github.com/yusufarsln98/leaflet-tual.git",directory:"packages/leaflet-tual"},bugs:{url:"https://github.com/yusufarsln98/leaflet-tual/issues"},publishConfig:{access:"public",registry:"https://registry.npmjs.org/"},keywords:["leaflet","leaflet-tual","tual","tuval","canvas","annotation","map-tools","arrows","notes","gis","overlay","framework-agnostic","vanilla-js","react","react-leaflet"],scripts:{build:"tsup",dev:"tsup --watch",lint:"eslint src --ext ts,tsx",typecheck:"tsc --noEmit",format:'prettier --write "src/**/*.{ts,tsx}"',"format:check":'prettier --check "src/**/*.{ts,tsx}"',test:"vitest run","test:watch":"vitest",version:"changeset version",release:"npm run build && changeset publish"},peerDependencies:{leaflet:"^1.9.0",react:"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-leaflet":"^4.0.0 || ^5.0.0"},peerDependenciesMeta:{react:{optional:!0},"react-dom":{optional:!0},"react-leaflet":{optional:!0}},devDependencies:{"@changesets/cli":"^2.27.1","@testing-library/dom":"^10.4.0","@testing-library/react":"^16.2.0","@types/leaflet":"^1.9.16","@types/node":"^22.13.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0",eslint:"^9.20.0","eslint-plugin-react-hooks":"^5.1.0",jsdom:"^26.0.0",leaflet:"^1.9.4",prettier:"^3.5.0",react:"^19.0.0","react-dom":"^19.0.0","react-leaflet":"^5.0.0",tsup:"^8.5.1",typescript:"^5.7.0","typescript-eslint":"^8.24.0",vitest:"^3.0.0"}};var Ie={"arrow-linear":"linear","arrow-curved":"curved","arrow-bi":"bi","arrow-elbow":"elbow","arrow-s-curve":"s-curve"},ut=["#000000","#4b5563","#2563eb","#dc2626","#16a34a","#d97706","#9333ea","#0891b2"],q=[{name:"Amber",bg:"#fef9c3",border:"#fde047",header:"#fef08a",text:"#422006"},{name:"Sky",bg:"#e0f2fe",border:"#7dd3fc",header:"#bae6fd",text:"#0c4a6e"},{name:"Emerald",bg:"#dcfce7",border:"#86efac",header:"#bbf7d0",text:"#064e3b"},{name:"Rose",bg:"#ffe4e6",border:"#fda4af",header:"#fecdd3",text:"#881337"},{name:"Violet",bg:"#f3e8ff",border:"#d8b4fe",header:"#e9d5ff",text:"#3b0764"},{name:"Dark Slate",bg:"#1e293b",border:"#334155",header:"#0f172a",text:"#f8fafc"},{name:"Midnight",bg:"#111827",border:"#374151",header:"#030712",text:"#f9fafb"}],De="#000000",Ce=2,lt=[1,2,3,4,5,6,8,10,12],ft=lt,Ae="#fef9c3",ht="#422006",Ee=16,st=[10,12,14,16,18,20,24,28,32,36,40,48],mt=st,yt={selectionGlowColor:"rgba(0, 0, 0, 0.2)",selectionGlowWidth:6,guideLineDash:[4,4],guideLineColor:"rgba(100, 100, 100, 0.6)",guideLineWidth:1.2,endpointHandleColor:"#4f4f4f",controlHandleColor:"#4f4f4f",handleFillColor:"#ffffff",handleRadius:5,handleStrokeWidth:2,shadowColor:"rgba(0, 0, 0, 0.2)",shadowBlur:3,shadowOffsetY:1.5,labelBackgroundColor:"#ffffff",labelTextColor:"#000000",labelFont:"12px system-ui, -apple-system, sans-serif",labelBorderWidth:1,labelBorderRadius:2,labelPaddingX:6,labelPaddingY:18,shapeDefaultFillOpacity:.16,shapeBorderRadius:0};var Re=0;function K(e="rlc"){Re+=1;let t=Math.random().toString(36).slice(2,8);return`${e}-${Date.now().toString(36)}-${Re}-${t}`}function W(e,t){let n=e.latLngToContainerPoint([t.lat,t.lng]);return{x:n.x,y:n.y}}function L(e,t){let n=e.containerPointToLatLng([t.x,t.y]);return{lat:n.lat,lng:n.lng}}function re(e,t,n=1){let r=n>0?n:1,o=t.x-e.x,a=t.y-e.y,l=Math.abs(o),s=Math.abs(a),i=o>=0?1:-1,d=a>=0?1:-1;return l/r>=s?{x:e.x+i*l,y:e.y+d*(l/r)}:{x:e.x+i*(s*r),y:e.y+d*s}}function B(e,t){let n=t.x-e.x,r=t.y-e.y,o=Math.hypot(n,r);if(o===0)return t;let a=Math.atan2(r,n),l=Math.PI/4,s=Math.round(a/l)*l;return{x:e.x+Math.cos(s)*o,y:e.y+Math.sin(s)*o}}function le(e,t,n=.25){let r=(e.lat+t.lat)/2,o=(e.lng+t.lng)/2,a=t.lat-e.lat,l=t.lng-e.lng;return{lat:r+l*n,lng:o-a*n}}function ye(e,t,n,r){let o=1-r;return{x:o*o*e.x+2*o*r*t.x+r*r*n.x,y:o*o*e.y+2*o*r*t.y+r*r*n.y}}function se(e,t,n){let r=n.x-t.x,o=n.y-t.y;return Math.hypot(r,o)<.001?Math.atan2(n.y-e.y,n.x-e.x):Math.atan2(o,r)}function j(e,t,n){let r=(n.x-t.x)**2+(n.y-t.y)**2;if(r===0)return Math.hypot(e.x-t.x,e.y-t.y);let o=((e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y))/r;o=Math.max(0,Math.min(1,o));let a=t.x+o*(n.x-t.x),l=t.y+o*(n.y-t.y);return Math.hypot(e.x-a,e.y-l)}function ke(e,t,n,r,o=24){let a=1/0,l=t;for(let s=1;s<=o;s+=1){let i=ye(t,n,r,s/o),d=j(e,l,i);d<a&&(a=d),l=i}return a}function de(e){if(!e)return null;try{let t=e.getSize?.();if(t&&t.x>0&&t.y>0)return{width:t.x,height:t.y}}catch{}try{let t=e.getContainer?.()?.getBoundingClientRect?.();if(t&&t.width>0&&t.height>0)return{width:t.width,height:t.height}}catch{}return null}function Oe(e,t,n){if(!t||n<=0)return"";if(e.measureText(t).width<=n)return t;let r="\u2026";if(e.measureText(r).width>=n)return"";let o=0,a=t.length,l="";for(;o<=a;){let s=Math.floor((o+a)/2),i=t.slice(0,s)+r;e.measureText(i).width<=n?(l=i,o=s+1):a=s-1}return l||r}function gt(e=16,t,n=14,r){if(t===null||typeof t!="number")return e;let o=r?.scaleFactor??1.22,a=r?.min??9,l=r?.max??72,s=e*Math.pow(o,t-n);return Math.round(Math.max(a,Math.min(l,s)))}function pe(e,t){let r=(t.lat-e.lat)*Math.PI/180,o=(t.lng-e.lng)*Math.PI/180,a=e.lat*Math.PI/180,l=t.lat*Math.PI/180,s=Math.sin(r/2),i=Math.sin(o/2),d=s*s+Math.cos(a)*Math.cos(l)*i*i;return 6371e3*(2*Math.atan2(Math.sqrt(d),Math.sqrt(1-d)))}function We(e,t="metric"){if(t==="imperial"){let r=e*3.28084;if(r<1e3)return`${Math.round(r)} ft`;let o=r/5280;return`${o>=10?o.toFixed(1):o.toFixed(2)} mi`}if(e<1e3)return`${Math.round(e)} m`;let n=e/1e3;return`${n>=10?n.toFixed(1):n.toFixed(2)} km`}function St(e){let t=0;for(let n=0;n<e.length-1;n+=1)t+=pe(e[n],e[n+1]);return t}function X(e,t,n,r,o,a=2){e.save(),e.beginPath(),e.arc(t.x,t.y,o,0,Math.PI*2),e.fillStyle=r,e.fill(),e.lineWidth=a,e.strokeStyle=n,e.stroke(),e.restore()}function ee(e,t,n,r,o,a,l){e.save(),e.font=l?.labelFont??"12px system-ui, -apple-system, sans-serif";let s=l?.labelPaddingX??6,i=Math.max(10,a-s*2),d=Oe(e,t,i);if(d){let u=e.measureText(d),p=Math.round(u.width+s*2),h=l?.labelPaddingY??18,m=Math.round(n-p/2),f=Math.round(r-h/2),y=l?.labelBorderRadius??2;l?.labelShadowColor&&(e.shadowColor=l.labelShadowColor,e.shadowBlur=l.labelShadowBlur??3),e.fillStyle=l?.labelBackgroundColor??"#ffffff",e.strokeStyle=l?.labelBorderColor??o,e.lineWidth=l?.labelBorderWidth??1,e.beginPath(),typeof e.roundRect=="function"?e.roundRect(m,f,p,h,y):e.rect(m,f,p,h),e.fill(),e.stroke(),e.fillStyle=l?.labelTextColor??"#000000",e.textAlign="center",e.textBaseline="middle",e.fillText(d,n,r)}e.restore()}function ge(e,t,n,r,o,a=!0){let l=Math.PI/6.5,s=t.x-r*Math.cos(n-l),i=t.y-r*Math.sin(n-l),d=t.x-r*Math.cos(n+l),u=t.y-r*Math.sin(n+l);e.save(),e.setLineDash([]),e.beginPath(),e.moveTo(t.x,t.y),e.lineTo(s,i),a?(e.lineTo(d,u),e.closePath(),e.fillStyle=o,e.fill()):(e.moveTo(t.x,t.y),e.lineTo(d,u),e.strokeStyle=o,e.lineWidth=Math.max(2,r/4.5),e.lineCap="round",e.stroke()),e.restore()}function Se(e,t,n){let{start:r,end:o,control:a}=t;if(e.moveTo(r.x,r.y),n==="curved")e.quadraticCurveTo(a.x,a.y,o.x,o.y);else if(n==="elbow")e.lineTo(a.x,r.y),e.lineTo(a.x,o.y),e.lineTo(o.x,o.y);else if(n==="s-curve"){let l=o.x-r.x,s=o.y-r.y;e.bezierCurveTo(r.x+l*.5,r.y,r.x+l*.5,r.y+s,o.x,o.y)}else e.lineTo(o.x,o.y)}function te(e,t){let n=W(e,t.start),r=W(e,t.end),o=t.arrowStyle==="curved"||t.arrowStyle==="s-curve",a=t.controlPoint?t.controlPoint:o?le(t.start,t.end):{lat:(t.start.lat+t.end.lat)/2,lng:(t.start.lng+t.end.lng)/2},l=W(e,a);return{start:n,end:r,control:l}}function we(e,t,n,r={}){let{start:o,end:a,control:l}=t,s=Math.hypot(a.x-o.x,a.y-o.y);if(s<2)return;let i=r.theme,d=Math.max(12,n.strokeWidth*3.8),u=Math.atan2(a.y-o.y,a.x-o.x),p=Math.atan2(o.y-a.y,o.x-a.x);if(n.arrowStyle==="curved")u=se(o,l,a),p=se(a,l,o);else if(n.arrowStyle==="elbow"){let f=a.x-l.x,y=a.y-o.y;u=Math.abs(f)>1?Math.atan2(0,f):Math.atan2(y,0);let w=o.x-l.x;p=Math.abs(w)>1?Math.atan2(0,w):Math.atan2(-y,0)}else if(n.arrowStyle==="s-curve"){let f=a.x-o.x;u=se(o,{x:o.x+f*.5,y:a.y},a)}e.save(),r.isPreview&&(e.globalAlpha=.85),r.isSelected&&(e.save(),e.beginPath(),Se(e,t,n.arrowStyle),e.strokeStyle=i?.selectionGlowColor??"rgba(0, 0, 0, 0.2)",e.lineWidth=n.strokeWidth+(i?.selectionGlowWidth??6),e.lineCap="round",e.lineJoin="round",e.stroke(),e.restore()),e.save(),e.shadowColor=i?.shadowColor??"rgba(0, 0, 0, 0.2)",e.shadowBlur=i?.shadowBlur??3,e.shadowOffsetY=i?.shadowOffsetY??1.5,e.beginPath(),Se(e,t,n.arrowStyle),e.strokeStyle=n.color,e.lineWidth=n.strokeWidth,e.lineCap="round",e.lineJoin="round";let h=!!(n.dashed||n.arrowStyle==="dashed");e.setLineDash(h?[n.strokeWidth*3,n.strokeWidth*2]:[]),e.stroke();let m=n.headStyle??(n.arrowStyle==="bi"?"both":"triangle");if(m!=="none"&&(ge(e,a,u,d,n.color,m!=="open"),m==="both"&&ge(e,o,p,d,n.color,!0)),e.restore(),n.label){let f=typeof i?.labelMinShapeSize=="number"?i.labelMinShapeSize:24;if(f<=0||s>=f){let y=n.arrowStyle==="curved"?ye(o,l,a,.5):n.arrowStyle==="elbow"?{x:l.x,y:(o.y+a.y)/2}:{x:(o.x+a.x)/2,y:(o.y+a.y)/2},w=i?.fitLabelsToShape!==!1,b=i?.labelMaxTextWidth??(w?Math.max(48,Math.min(280,s*1.6)):1/0);ee(e,n.label,Math.round(y.x),Math.round(y.y),n.color,b,i)}}if(r.isSelected){let f=i?.handleRadius??5,y=i?.handleFillColor??"#ffffff",w=i?.endpointHandleColor??"#4f4f4f",b=i?.controlHandleColor??"#767676",I=i?.handleStrokeWidth??2;(n.arrowStyle==="curved"||n.arrowStyle==="elbow")&&(e.save(),e.beginPath(),e.setLineDash(i?.guideLineDash?[...i.guideLineDash]:[4,4]),e.moveTo(o.x,o.y),e.lineTo(l.x,l.y),e.lineTo(a.x,a.y),e.strokeStyle=i?.guideLineColor??"rgba(100, 100, 100, 0.6)",e.lineWidth=i?.guideLineWidth??1.2,e.stroke(),e.restore(),X(e,l,b,y,f+.5,I)),X(e,o,w,y,f,I),X(e,a,w,y,f,I)}e.restore()}function Fe(e,t,n,r=11){return Math.hypot(e.x-t.end.x,e.y-t.end.y)<=r?"end":Math.hypot(e.x-t.start.x,e.y-t.start.y)<=r?"start":(n.arrowStyle==="curved"||n.arrowStyle==="elbow")&&Math.hypot(e.x-t.control.x,e.y-t.control.y)<=r?"control":null}function He(e,t,n,r=9){let o=Math.max(r,n.strokeWidth/2+6);if(n.arrowStyle==="curved")return ke(e,t.start,t.control,t.end)<=o;if(n.arrowStyle==="elbow"){let a={x:t.control.x,y:t.start.y},l={x:t.control.x,y:t.end.y};return j(e,t.start,a)<=o||j(e,a,l)<=o||j(e,l,t.end)<=o}return j(e,t.start,t.end)<=o}function ce(e,t){return t.points.map(n=>W(e,n))}function _e(e,t){if(t.length===0)return;if(e.moveTo(t[0].x,t[0].y),t.length===1){e.lineTo(t[0].x+.5,t[0].y+.5);return}if(t.length===2){e.lineTo(t[1].x,t[1].y);return}for(let r=1;r<t.length-1;r+=1){let o=(t[r].x+t[r+1].x)/2,a=(t[r].y+t[r+1].y)/2;e.quadraticCurveTo(t[r].x,t[r].y,o,a)}let n=t[t.length-1];e.lineTo(n.x,n.y)}function Te(e,t,n,r={}){if(t.length===0)return;let o=r.theme;e.save(),r.isPreview&&(e.globalAlpha=.9),r.isSelected&&(e.save(),e.beginPath(),_e(e,t),e.strokeStyle=o?.selectionGlowColor??"rgba(0, 0, 0, 0.2)",e.lineWidth=n.strokeWidth+(o?.selectionGlowWidth??6),e.lineCap="round",e.lineJoin="round",e.stroke(),e.restore()),e.save(),e.shadowColor=o?.shadowColor??"rgba(0, 0, 0, 0.2)",e.shadowBlur=o?.shadowBlur??3,e.shadowOffsetY=o?.shadowOffsetY??1,e.beginPath(),_e(e,t),e.strokeStyle=n.color,e.lineWidth=n.strokeWidth,e.lineCap="round",e.lineJoin="round",n.dashed?e.setLineDash([n.strokeWidth*3,n.strokeWidth*2]):e.setLineDash([]),e.stroke(),e.restore(),e.restore()}function Be(e,t,n,r=9){if(t.length===0)return!1;let o=Math.max(r,n.strokeWidth/2+6);if(t.length===1)return Math.hypot(e.x-t[0].x,e.y-t[0].y)<=o;let a=1/0,l=1/0,s=-1/0,i=-1/0;for(let d=0;d<t.length;d+=1){let u=t[d];u.x<a&&(a=u.x),u.y<l&&(l=u.y),u.x>s&&(s=u.x),u.y>i&&(i=u.y)}if(e.x<a-o||e.x>s+o||e.y<l-o||e.y>i+o)return!1;for(let d=0;d<t.length-1;d+=1)if(j(e,t[d],t[d+1])<=o)return!0;return!1}function be(e,t,n,r){let{minX:o,minY:a,maxX:l,maxY:s,width:i,height:d,cx:u,cy:p}=t;if(n==="square"){let h=r?.shapeBorderRadius??0;h>0&&typeof e.roundRect=="function"?e.roundRect(o,a,i,d,h):e.rect(o,a,i,d);return}if(n==="circle"){e.ellipse(u,p,i/2,d/2,0,0,Math.PI*2);return}if(n==="triangle"){e.moveTo(u,a),e.lineTo(l,s),e.lineTo(o,s),e.closePath();return}if(n==="diamond"){e.moveTo(u,a),e.lineTo(l,p),e.lineTo(u,s),e.lineTo(o,p),e.closePath();return}if(n==="hexagon"){let h=i/2,m=d/2;for(let f=0;f<6;f+=1){let y=Math.PI/3*f-Math.PI/6,w=u+h*Math.cos(y),b=p+m*Math.sin(y);f===0?e.moveTo(w,b):e.lineTo(w,b)}e.closePath();return}if(n==="star"){let m=i/2,f=d/2,y=m*.42,w=f*.42;for(let b=0;b<10;b+=1){let I=b%2===0?m:y,x=b%2===0?f:w,A=b*Math.PI/5-Math.PI/2,F=u+I*Math.cos(A),O=p+x*Math.sin(A);b===0?e.moveTo(F,O):e.lineTo(F,O)}e.closePath();return}if(n==="marker"||n==="cloud"){let h=i/2,m=d*.36,f=a+m;e.moveTo(u,s),e.bezierCurveTo(o+i*.05,a+d*.7,o,a+d*.5,o,f),e.ellipse(u,f,h,m,0,Math.PI,0,!1),e.bezierCurveTo(l,a+d*.5,l-i*.05,a+d*.7,u,s),e.closePath();let y=h*.35,w=m*.35;y>=2.5&&w>=2.5&&(e.moveTo(u+y,f),e.ellipse(u,f,y,w,0,Math.PI*2,0,!0),e.closePath());return}if(n==="actor"){let h=Math.min(i,d)*.16,m=a+h+d*.04,f=m+h,y=a+d*.64,w=a+d*.42,b=i*.36,I=i*.32;e.moveTo(u+h,m),e.arc(u,m,h,0,Math.PI*2),e.closePath(),e.moveTo(u,f),e.lineTo(u,y),e.moveTo(u-b,w),e.lineTo(u+b,w),e.moveTo(u,y),e.lineTo(u-I,s),e.moveTo(u,y),e.lineTo(u+I,s)}}function ne(e,t){let n=W(e,t.start),r=W(e,t.end),o=Math.min(n.x,r.x),a=Math.min(n.y,r.y),l=Math.max(n.x,r.x),s=Math.max(n.y,r.y),i=Math.max(4,l-o),d=Math.max(4,s-a);return{start:n,end:r,minX:o,minY:a,maxX:l,maxY:s,width:i,height:d,cx:o+i/2,cy:a+d/2}}function Pe(e,t,n,r={}){if(t.width<4&&t.height<4)return;let o=r.theme;if(e.save(),r.isPreview&&(e.globalAlpha=.85),r.isSelected&&(e.save(),e.beginPath(),be(e,t,n.shape,o),e.strokeStyle=o?.selectionGlowColor??"rgba(0, 0, 0, 0.2)",e.lineWidth=n.strokeWidth+(o?.selectionGlowWidth??6),e.lineCap="round",e.lineJoin="round",e.stroke(),e.restore()),e.save(),e.shadowColor=o?.shadowColor??"rgba(0, 0, 0, 0.2)",e.shadowBlur=o?.shadowBlur??3,e.shadowOffsetY=o?.shadowOffsetY??1.5,e.beginPath(),be(e,t,n.shape,o),n.filled){let a=o?.shapeDefaultFillOpacity??.16,l=Math.round(Math.min(1,Math.max(0,a))*255).toString(16).padStart(2,"0");e.fillStyle=n.fillColor??`${n.color}${l}`,e.fill()}if(e.strokeStyle=n.color,e.lineWidth=n.strokeWidth,e.lineCap="round",e.lineJoin="round",e.setLineDash(n.dashed?[n.strokeWidth*3,n.strokeWidth*2]:[]),e.stroke(),e.restore(),n.label){let a=typeof o?.labelMinShapeSize=="number"?o.labelMinShapeSize:18;if(a<=0||Math.max(t.width,t.height)>=a&&t.width>=8&&t.height>=8){let l=n.shape==="actor"?t.maxY+14:t.cy,s=o?.fitLabelsToShape!==!1,i=o?.labelMaxTextWidth??(s?Math.max(48,Math.min(280,t.width*2.2)):1/0);ee(e,n.label,Math.round(t.cx),Math.round(l),n.color,i,o)}}if(r.isSelected){let a=o?.handleRadius??5,l=o?.handleFillColor??"#ffffff",s=o?.endpointHandleColor??"#4f4f4f",i=o?.handleStrokeWidth??2;e.save(),e.setLineDash(o?.guideLineDash?[...o.guideLineDash]:[4,4]),e.strokeStyle=o?.guideLineColor??"rgba(100, 100, 100, 0.6)",e.lineWidth=o?.guideLineWidth??1.2,e.strokeRect(t.minX,t.minY,t.width,t.height),e.restore(),X(e,t.start,s,l,a,i),X(e,t.end,s,l,a,i)}e.restore()}function Ge(e,t,n=11){return Math.hypot(e.x-t.end.x,e.y-t.end.y)<=n?"end":Math.hypot(e.x-t.start.x,e.y-t.start.y)<=n?"start":null}function Ne(e,t,n=8){return e.x>=t.minX-n&&e.x<=t.maxX+n&&e.y>=t.minY-n&&e.y<=t.maxY+n}function oe(e,t){let n=W(e,t.start),r=W(e,t.end),o={x:(n.x+r.x)/2,y:(n.y+r.y)/2},a=Math.hypot(r.x-n.x,r.y-n.y),l=Math.atan2(r.y-n.y,r.x-n.x);return{start:n,end:r,mid:o,lengthPx:a,angle:l}}function xe(e,t,n,r={}){let{start:o,end:a,mid:l,lengthPx:s,angle:i}=t;if(s<2)return;let d=r.theme;e.save(),r.isPreview&&(e.globalAlpha=.9),r.isSelected&&(e.save(),e.beginPath(),e.moveTo(o.x,o.y),e.lineTo(a.x,a.y),e.strokeStyle=d?.selectionGlowColor??"rgba(0, 0, 0, 0.2)",e.lineWidth=n.strokeWidth+(d?.selectionGlowWidth??6),e.lineCap="round",e.stroke(),e.restore()),e.save(),e.shadowColor=d?.shadowColor??"rgba(0, 0, 0, 0.2)",e.shadowBlur=d?.shadowBlur??3,e.shadowOffsetY=d?.shadowOffsetY??1.5,e.beginPath(),e.moveTo(o.x,o.y),e.lineTo(a.x,a.y),e.strokeStyle=n.color,e.lineWidth=n.strokeWidth,e.lineCap="round",n.dashed?e.setLineDash([n.strokeWidth*3,n.strokeWidth*2]):e.setLineDash([]),e.stroke();let u=i+Math.PI/2,p=Math.max(7,n.strokeWidth*3.2),h=Math.cos(u)*p,m=Math.sin(u)*p;e.beginPath(),e.setLineDash([]),e.moveTo(o.x-h,o.y-m),e.lineTo(o.x+h,o.y+m),e.moveTo(a.x-h,a.y-m),e.lineTo(a.x+h,a.y+m),e.stroke(),e.restore();let f=pe(n.start,n.end),y=n.label?n.label:We(f,n.unit);if(y){let w=d?.fitLabelsToShape!==!1,b=d?.labelMaxTextWidth??(w?Math.max(50,Math.min(300,s*1.5)):1/0);ee(e,y,Math.round(l.x),Math.round(l.y),n.color,b,d)}if(r.isSelected){let w=d?.handleRadius??5,b=d?.handleFillColor??"#ffffff",I=d?.endpointHandleColor??"#4f4f4f",x=d?.handleStrokeWidth??2;X(e,o,I,b,w,x),X(e,a,I,b,w,x)}e.restore()}function Ye(e,t,n=11){return Math.hypot(e.x-t.end.x,e.y-t.end.y)<=n?"end":Math.hypot(e.x-t.start.x,e.y-t.start.y)<=n?"start":null}function je(e,t,n,r=9){let o=Math.max(r,n.strokeWidth/2+6);return j(e,t.start,t.end)<=o}function Bt(e){let t=q.find(r=>r.bg===e);if(t)return t;let n=e?.startsWith("#")&&e.length===7&&parseInt(e.slice(1),16)<8947848||e==="#111827"||e==="#1e293b"||e==="#0f172a";return{name:"Custom",bg:e,border:n?"rgba(255, 255, 255, 0.16)":"rgba(0, 0, 0, 0.12)",header:n?"rgba(255, 255, 255, 0.08)":"rgba(0, 0, 0, 0.06)",text:n?"#f8fafc":"#0f172a"}}function Gt(e,t,n,r,o,a=!0){let l=a!==!1?de(e):null;if(!l||o||!(t.x>=-120&&t.x<=l.width+120&&t.y>=-120&&t.y<=l.height+120))return t;let i=r?95:n.width??230,d=r?22:n.height??100,u=8,p=16+u,h=Math.max(p,l.width-i+16-u),m=12+u,f=Math.max(m,l.height-d+12-u);return{x:Math.max(p,Math.min(h,t.x)),y:Math.max(m,Math.min(f,t.y))}}function jt(e,t,n,r,o,a,l=!0){let s=l!==!1?de(e):null;if(!s||a||!(t.x>=-100&&t.x<=s.width+100&&t.y>=-100&&t.y<=s.height+100))return t;let d=o?35:Math.max(24,(n.text||"Text").length*r/3.6),u=o?11:r/2+4,p=8,h=d+p,m=Math.max(h,s.width-d-p),f=u+p,y=Math.max(f,s.height-u-p);return{x:Math.max(h,Math.min(m,t.x)),y:Math.max(f,Math.min(y,t.y))}}function ve(e,t,n,r,o,a,l,s,i,d,u,p){s.current={screenPoints:[n],geoPoints:[r]},e.dragging.disable(),d();let h=f=>{if(!s.current)return;let y=t.getBoundingClientRect(),w={x:f.clientX-y.left,y:f.clientY-y.top},b=s.current.screenPoints,I=b[b.length-1];Math.hypot(w.x-I.x,w.y-I.y)<2.5||(b.push(w),s.current.geoPoints.push(L(e,w)),i.current===null&&(i.current=window.requestAnimationFrame(()=>{i.current=null,d()})))},m=f=>{window.removeEventListener("pointermove",h),window.removeEventListener("pointerup",m),e.dragging.enable(),i.current!==null&&(window.cancelAnimationFrame(i.current),i.current=null);let y=s.current;s.current=null,y&&y.geoPoints.length>=1?(u({id:K("freedraw"),type:"freedraw",points:y.geoPoints,color:o,strokeWidth:a,dashed:l,createdAt:Date.now()}),f.shiftKey||p("select")):d()};window.addEventListener("pointermove",h),window.addEventListener("pointerup",m)}function Xe(e,t,n="Field Note"){let r=q.find(o=>o.bg===t)??q[0];return{id:K("note"),type:"note",position:e,title:n,text:"",backgroundColor:r.bg,textColor:r.text,width:230,createdAt:Date.now()}}function ze(e,t,n,r,o){return{id:K("text"),type:"text",position:e,text:"",color:t,initialFontSize:n,baseZoom:o,fontWeight:r,createdAt:Date.now()}}function Ke(e,t,n,r,o,a,l,s,i,d,u,p){d({shape:o,startGeo:r,currentGeo:r}),e.dragging.disable();let h=f=>{let y=t.getBoundingClientRect(),w={x:f.clientX-y.left,y:f.clientY-y.top},b=f.shiftKey?re(n,w,1):w;d({shape:o,startGeo:r,currentGeo:L(e,b)})},m=f=>{window.removeEventListener("pointermove",h),window.removeEventListener("pointerup",m),e.dragging.enable();let y=t.getBoundingClientRect(),w={x:f.clientX-y.left,y:f.clientY-y.top},b=f.shiftKey?re(n,w,1):w,I=Math.hypot(w.x-n.x,w.y-n.y),x=I>=10?r:L(e,{x:n.x-45,y:n.y-45}),A=I>=10?L(e,b):L(e,{x:n.x+45,y:n.y+45});u({id:K("shape"),type:"shape",shape:o,start:x,end:A,color:a,filled:l,strokeWidth:s,dashed:i,createdAt:Date.now()}),d(null),p("select")};window.addEventListener("pointermove",h),window.addEventListener("pointerup",m)}function Me(e,t,n,r,o,a){return{id:K("arrow"),type:"arrow",arrowStyle:e,start:t,end:n,controlPoint:e==="curved"?le(t,n):e==="elbow"?{lat:(t.lat+n.lat)/2,lng:(t.lng+n.lng)/2}:void 0,color:r,strokeWidth:o,dashed:a,headStyle:e==="bi"?"both":"triangle",createdAt:Date.now()}}function Ue(e,t,n,r,o,a,l,s,i,d,u){i({arrowStyle:o,startGeo:r,currentGeo:r}),e.dragging.disable();let p=m=>{let f=t.getBoundingClientRect(),y={x:m.clientX-f.left,y:m.clientY-f.top},w=m.shiftKey?B(n,y):y;i({arrowStyle:o,startGeo:r,currentGeo:L(e,w)})},h=m=>{window.removeEventListener("pointermove",p),window.removeEventListener("pointerup",h),e.dragging.enable();let f=t.getBoundingClientRect(),y={x:m.clientX-f.left,y:m.clientY-f.top},w=m.shiftKey?B(n,y):y;Math.hypot(y.x-n.x,y.y-n.y)>=8&&(d(Me(o,r,L(e,w),a,l,s)),i(null),u("select"))};window.addEventListener("pointermove",p),window.addEventListener("pointerup",h)}function dt(e,t,n,r,o){return{id:K("ruler"),type:"ruler",start:e,end:t,color:n,strokeWidth:r,dashed:o,unit:"metric",createdAt:Date.now()}}function Je(e,t,n,r,o,a,l,s,i,d){s({startGeo:r,currentGeo:r}),e.dragging.disable();let u=h=>{let m=t.getBoundingClientRect(),f={x:h.clientX-m.left,y:h.clientY-m.top},y=h.shiftKey?B(n,f):f;s({startGeo:r,currentGeo:L(e,y)})},p=h=>{window.removeEventListener("pointermove",u),window.removeEventListener("pointerup",p),e.dragging.enable();let m=t.getBoundingClientRect(),f={x:h.clientX-m.left,y:h.clientY-m.top},y=h.shiftKey?B(n,f):f;Math.hypot(f.x-n.x,f.y-n.y)>=8&&(i(dt(r,L(e,y),o,a,l)),s(null),d("select"))};window.addEventListener("pointermove",u),window.addEventListener("pointerup",p)}function Z(e,t){e.dragging.disable();let n=()=>{e.dragging.enable(),window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",n)};window.addEventListener("pointermove",t),window.addEventListener("pointerup",n)}function $e(e,t,n,r,o,a){Z(e,l=>{let s=o(l),i=l.shiftKey;if(r==="start"){let d=i?B(n.end,s):s;a(t.id,{start:L(e,d)})}else if(r==="end"){let d=i?B(n.start,s):s;a(t.id,{end:L(e,d)})}else r==="control"&&a(t.id,{controlPoint:L(e,s)})})}function qe(e,t,n,r,o,a){let l=r==="start"?n.end:n.start,s=n.width>4&&n.height>4?n.width/n.height:1;Z(e,i=>{let d=o(i),u=i.shiftKey?re(l,d,s):d,p=L(e,u);a(t.id,r==="start"?{start:p}:{end:p})})}function Ze(e,t,n,r,o,a){let l=n.start,s=n.end,i=n.control,d=!!t.controlPoint;Z(e,u=>{let p=o(u),h=p.x-r.x,m=p.y-r.y,f={start:L(e,{x:l.x+h,y:l.y+m}),end:L(e,{x:s.x+h,y:s.y+m})};(t.arrowStyle==="curved"||t.arrowStyle==="elbow")&&d&&(f.controlPoint=L(e,{x:i.x+h,y:i.y+m})),a(t.id,f)})}function Ve(e,t,n,r,o,a){let l=n.start,s=n.end;Z(e,i=>{let d=o(i),u=d.x-r.x,p=d.y-r.y;a(t.id,{start:L(e,{x:l.x+u,y:l.y+p}),end:L(e,{x:s.x+u,y:s.y+p})})})}function Qe(e,t,n,r,o,a){Z(e,l=>{let s=o(l),i=s.x-r.x,d=s.y-r.y;a(t.id,{points:n.map(u=>L(e,{x:u.x+i,y:u.y+d}))})})}function et(e,t,n,r,o,a){Z(e,l=>{let s=o(l),i=l.shiftKey;if(r==="start"){let d=i?B(n.end,s):s;a(t.id,{start:L(e,d)})}else if(r==="end"){let d=i?B(n.start,s):s;a(t.id,{end:L(e,d)})}})}function tt(e,t,n,r,o,a){let l=n.start,s=n.end;Z(e,i=>{let d=o(i),u=d.x-r.x,p=d.y-r.y;a(t.id,{start:L(e,{x:l.x+u,y:l.y+p}),end:L(e,{x:s.x+u,y:s.y+p})})})}function nt({map:e,canvas:t,width:n,height:r,arrowItems:o,shapeItems:a,freeDrawItems:l,rulerItems:s,selectedId:i,draftShape:d,draftArrow:u,draftRuler:p,draftFreeDraw:h,activeColor:m,strokeWidth:f,dashed:y,shapeFilled:w,annotationTheme:b,arrowTheme:I,isReadOnly:x}){if(!e||!t||n===0||r===0)return;let A=b??I,F=typeof window<"u"&&window.devicePixelRatio||1,O=Math.round(n*F),Y=Math.round(r*F);t.width!==O&&(t.width=O),t.height!==Y&&(t.height=Y);let M=t.getContext("2d");if(M){M.save(),typeof M.scale=="function"&&M.scale(F,F),M.clearRect(0,0,n,r);for(let P of l){let E=ce(e,P);Te(M,E,P,{isSelected:!x&&P.id===i,theme:A})}for(let P of a){let E=ne(e,P);Pe(M,E,P,{isSelected:!x&&P.id===i,theme:A})}for(let P of o){let E=te(e,P);we(M,E,P,{isSelected:!x&&P.id===i,theme:A})}for(let P of s){let E=oe(e,P);xe(M,E,P,{isSelected:!x&&P.id===i,theme:A})}if(!x&&h&&h.screenPoints.length>0&&Te(M,h.screenPoints,{color:m,strokeWidth:f,dashed:y},{isPreview:!0,theme:A}),!x&&d){let P={id:"draft-shape",type:"shape",shape:d.shape,start:d.startGeo,end:d.currentGeo,color:m,filled:w,strokeWidth:f,dashed:y,createdAt:0},E=ne(e,P);Pe(M,E,P,{isPreview:!0,isSelected:!0,theme:A})}if(!x&&u){let P={id:"draft-arrow",type:"arrow",arrowStyle:u.arrowStyle,start:u.startGeo,end:u.currentGeo,color:m,strokeWidth:f,dashed:y,createdAt:0},E=te(e,P);we(M,E,P,{isPreview:!0,isSelected:!0,theme:A})}if(!x&&p){let P={id:"draft-ruler",type:"ruler",start:p.startGeo,end:p.currentGeo,color:m,strokeWidth:f,dashed:y,unit:"metric",createdAt:0},E=oe(e,P);xe(M,E,P,{isPreview:!0,isSelected:!0,theme:A})}M.restore()}}function ot(e,t){let n=()=>{let r=e.getSize();t({width:r.x,height:r.y})};return n(),e.on("move",n),e.on("zoom",n),e.on("zoomanim",n),e.on("viewreset",n),e.on("resize",n),()=>{e.off("move",n),e.off("zoom",n),e.off("zoomanim",n),e.off("viewreset",n),e.off("resize",n)}}function rt(e){let t=e.getContainer();if(!t)return()=>{};let n=o=>{let a=o.target;if(!a?.closest?.("[data-tual-overlay], input, textarea, select, button, .rlc-overlay"))return;let l=Object.prototype.hasOwnProperty.call(a,"_leaflet_disable_events"),s=a._leaflet_disable_events;a._leaflet_disable_events=!0;let i=!!e.doubleClickZoom?.enabled?.();i&&e.doubleClickZoom.disable(),setTimeout(()=>{l?a._leaflet_disable_events=s:delete a._leaflet_disable_events,i&&e.doubleClickZoom.enable()},0)},r=o=>{if(o.target?.closest?.("textarea, input, select, button, [data-tual-note-resize], .rlc-note-resize-handle")&&e.dragging?.enabled?.()){e.dragging.disable();let l=()=>{e.dragging.enable(),window.removeEventListener("mouseup",l,!0),window.removeEventListener("touchend",l,!0),window.removeEventListener("pointerup",l,!0)};window.addEventListener("mouseup",l,{capture:!0,once:!0}),window.addEventListener("touchend",l,{capture:!0,once:!0}),window.addEventListener("pointerup",l,{capture:!0,once:!0})}};return t.addEventListener("dblclick",n,!0),t.addEventListener("mousedown",r,!0),t.addEventListener("touchstart",r,!0),()=>{t.removeEventListener("dblclick",n,!0),t.removeEventListener("mousedown",r,!0),t.removeEventListener("touchstart",r,!0)}}function it(e={}){let t=Math.max(0,(e.maxHistory??50)-1),n=[],r=e.items??e.initialItems??[],o=[],a=r,l=e.initialTool??"select",s=!!(e.readOnly??!1),i=null,d=!1,u=e.defaultShape??"square",p=!0,h=e.defaultColor??De,m=e.defaultStrokeWidth??Ce,f=!1,y=e.defaultNoteColor??Ae,w=e.defaultFontSize??Ee,b="bold",I=new Set,x=()=>{for(let c of I)c(v)},A=c=>{e.onItemsChange?.(c),e.onChange?.(c)},F=(c,g)=>{e.onItemsChangeComplete?.(c,g),e.onChangeComplete?.(c,g),e.onEditEnd?.(c,g),e.onEditComplete?.(c,g),g&&e.onItemChangeComplete?.(g)},O=c=>{let g=c(r);return r=g,A(g),x(),g},Y=c=>{if(r===a)return;let g=a;a=r,n=[...n,g].slice(-t),o=[],F(r,c),x()},M=c=>{if(i!==c){let g=i;i=c,d=!1,g!==null&&c===null&&Y(),e.onItemSelect?.(r.find(R=>R.id===c)??null),x()}},P=c=>{s&&c!=="select"||(l=c,e.onToolChange?.(c),x())},E=c=>{s=!!c,s&&l!=="select"&&(l="select"),x()},G=(c,g)=>{i&&O(R=>R.map(z=>z.id===i&&c(z)?g(z):z))},ie=c=>{s||(u=c,G(g=>g.type==="shape",g=>({...g,shape:c})),x())},ae=c=>{s||(p=c,G(g=>g.type==="shape",g=>({...g,filled:c})),x())},ue=c=>{s||(h=c,G(g=>g.type!=="note",g=>({...g,color:c})),x())},fe=c=>{s||(m=c,G(g=>g.type==="arrow"||g.type==="freedraw"||g.type==="shape"||g.type==="ruler",g=>({...g,strokeWidth:c})),x())},he=c=>{s||(f=c,G(g=>g.type==="arrow"||g.type==="freedraw"||g.type==="shape"||g.type==="ruler",g=>({...g,dashed:c})),x())},S=c=>{if(s)return;y=c;let g=q.find(R=>R.bg===c);G(R=>R.type==="note",R=>({...R,backgroundColor:c,textColor:g?.text??R.textColor})),x()},D=c=>{s||(w=c,G(g=>g.type==="text",g=>({...g,initialFontSize:c})),x())},C=c=>{s||(b=c,G(g=>g.type==="text",g=>({...g,fontWeight:c})),x())},k=c=>{d=c,x()},U=c=>{s||(O(g=>[...g,c]),M(c.id),e.onItemCreate?.(c))},J=(c,g)=>{if(s){let z=Object.keys(g);if(z.length!==1||z[0]!=="minimized")return}let R;O(z=>z.map(me=>me.id===c?(R={...me,...g},R):me)),R&&e.onItemChange?.(R)},H=c=>{s||(O(g=>g.filter(R=>R.id!==c)),i===c&&M(null),e.onItemDelete?.(c),Y())},N=()=>{!s&&i&&H(i)},_=()=>{s||(O(()=>[]),M(null),Y())},v={get items(){return r},get activeTool(){return l},setActiveTool:P,get readOnly(){return s},setReadOnly:E,get activeShape(){return u},setActiveShape:ie,get shapeFilled(){return p},setShapeFilled:ae,get selectedId(){return i},setSelectedId:M,get selectedItem(){return r.find(c=>c.id===i)??null},get isEditingLabel(){return d},setEditingLabel:k,get labelEditMode(){return d},setLabelEditMode:k,get activeColor(){return h},setActiveColor:ue,get strokeWidth(){return m},setStrokeWidth:fe,get dashed(){return f},setDashed:he,get noteColor(){return y},setNoteColor:S,get fontSize(){return w},setFontSize:D,get fontWeight(){return b},setFontWeight:C,addItem:U,updateItem:J,removeItem:H,deleteSelected:N,clearAll:_,clear:_,deleteItem:H,setTool:P,selectItem:M,undo:()=>{if(s||n.length===0)return;let c=n[n.length-1];o=[r,...o],n=n.slice(0,-1),r=c,a=c,A(c),F(c,null),x()},redo:()=>{if(s||o.length===0)return;let c=o[0];n=[...n,r],o=o.slice(1),r=c,a=c,A(c),F(c,null),x()},get canUndo(){return!s&&n.length>0},get canRedo(){return!s&&o.length>0},notifyChangeComplete:Y,exportJSON:()=>JSON.stringify(r,null,2),importJSON:c=>{if(s)return!1;try{let g=JSON.parse(c);return Array.isArray(g)?(O(()=>g),M(null),Y(),!0):!1}catch{return!1}},subscribe(c){return I.add(c),()=>{I.delete(c)}},getState(){return v},destroy(){I.clear()}};return v}function un(e,t={}){let{controller:n,annotationTheme:r,arrowTheme:o,labels:a,zIndex:l=650,...s}=t,i=n??it(s),d=e.getContainer(),u=document.createElement("div");u.setAttribute("data-tual-overlay","true"),u.style.position="absolute",u.style.inset="0",u.style.pointerEvents="none",u.style.zIndex=String(l),u.style.overflow="hidden";let p=document.createElement("canvas");p.style.position="absolute",p.style.top="0",p.style.left="0",p.style.pointerEvents="none";let h=document.createElement("div");h.style.position="absolute",h.style.inset="0",h.style.pointerEvents="none",u.appendChild(p),u.appendChild(h),d.appendChild(u);let m={width:0,height:0},f=null,y=null,w=null,b={current:null},I={current:null},x=S=>{f=S,M()},A=S=>{y=S,M()},F=S=>{w=S,M()},O=()=>{b.current=null,I.current!==null&&typeof window<"u"&&(window.cancelAnimationFrame(I.current),I.current=null)},Y=()=>{let S=!i.readOnly&&i.activeTool!=="select";h.style.pointerEvents=S?"auto":"none",h.style.cursor=S?"crosshair":"default",p.style.width=`${m.width}px`,p.style.height=`${m.height}px`},M=()=>{Y();let S=i.items;nt({map:e,canvas:p,width:m.width,height:m.height,arrowItems:S.filter(D=>D.type==="arrow"),shapeItems:S.filter(D=>D.type==="shape"),freeDrawItems:S.filter(D=>D.type==="freedraw"),rulerItems:S.filter(D=>D.type==="ruler"),selectedId:i.selectedId,draftShape:y,draftArrow:f,draftRuler:w,draftFreeDraw:b.current,activeColor:i.activeColor,strokeWidth:i.strokeWidth,dashed:i.dashed,shapeFilled:i.shapeFilled,annotationTheme:r,arrowTheme:o,isReadOnly:i.readOnly})},P=S=>{let D=d.getBoundingClientRect();return{x:S.clientX-D.left,y:S.clientY-D.top}},E=S=>{if(S.button!==0||i.readOnly)return;S.stopPropagation(),S.preventDefault();let D=P(S),C=L(e,D),{activeTool:k,activeShape:U,shapeFilled:J,activeColor:H,strokeWidth:N,dashed:_,noteColor:$,fontSize:V,fontWeight:Q}=i;if(k==="freedraw"){ve(e,d,D,C,H,N,_,b,I,M,i.addItem,i.setActiveTool);return}if(k==="shape"){Ke(e,d,D,C,U,H,J,N,_,A,i.addItem,i.setActiveTool);return}if(k==="note"){i.addItem(Xe(C,$,a?.noteDefaultTitle??"Field Note")),i.setActiveTool("select");return}if(k==="text"){i.addItem(ze(C,H,V,Q,e.getZoom?.()??14)),i.setActiveTool("select");return}if(k==="ruler"){Je(e,d,D,C,H,N,_,F,i.addItem,i.setActiveTool);return}let T=Ie[k];if(T)if(!f)Ue(e,d,D,C,T,H,N,_,x,i.addItem,i.setActiveTool);else{let v=W(e,f.startGeo),c=S.shiftKey?B(v,D):D;Math.hypot(c.x-v.x,c.y-v.y)>=4&&i.addItem(Me(f.arrowStyle,f.startGeo,L(e,c),H,N,_)),x(null),i.setActiveTool("select")}},G=S=>{if(!f)return;let D=P(S),C=W(e,f.startGeo),k=S.shiftKey?B(C,D):D;x({...f,currentGeo:L(e,k)})},ie=S=>{if(S.button!==0||i.readOnly||i.activeTool!=="select"||S.target?.closest("[data-tual-toolbar], [data-tual-note], [data-tual-text], .leaflet-control"))return;let C=P(S),k=i.items,U=k.filter(T=>T.type==="arrow"),J=k.filter(T=>T.type==="shape"),H=k.filter(T=>T.type==="freedraw"),N=k.filter(T=>T.type==="ruler"),_=i.selectedId,$=U.find(T=>T.id===_);if($){let T=te(e,$),v=Fe(C,T,$);if(v){S.stopPropagation(),S.preventDefault(),$e(e,$,T,v,P,i.updateItem);return}}let V=J.find(T=>T.id===_);if(V){let T=ne(e,V),v=Ge(C,T);if(v){S.stopPropagation(),S.preventDefault(),qe(e,V,T,v,P,i.updateItem);return}}let Q=N.find(T=>T.id===_);if(Q){let T=oe(e,Q),v=Ye(C,T);if(v){S.stopPropagation(),S.preventDefault(),et(e,Q,T,v,P,i.updateItem);return}}for(let T=U.length-1;T>=0;T-=1){let v=U[T],c=te(e,v);if(He(C,c,v)){S.stopPropagation(),S.preventDefault(),i.setSelectedId(v.id),Ze(e,v,c,C,P,i.updateItem);return}}for(let T=J.length-1;T>=0;T-=1){let v=J[T],c=ne(e,v);if(Ne(C,c)){S.stopPropagation(),S.preventDefault(),i.setSelectedId(v.id),Ve(e,v,c,C,P,i.updateItem);return}}for(let T=H.length-1;T>=0;T-=1){let v=H[T],c=ce(e,v);if(Be(C,c,v)){S.stopPropagation(),S.preventDefault(),i.setSelectedId(v.id),Qe(e,v,c,C,P,i.updateItem);return}}for(let T=N.length-1;T>=0;T-=1){let v=N[T],c=oe(e,v);if(je(C,c,v)){S.stopPropagation(),S.preventDefault(),i.setSelectedId(v.id),tt(e,v,c,C,P,i.updateItem);return}}_&&(i.setSelectedId(null),i.notifyChangeComplete())},ae=S=>{if(i.readOnly)return;let D=S.target;D&&(D.tagName==="INPUT"||D.tagName==="TEXTAREA"||D.isContentEditable)||(S.key==="Escape"?(f=null,y=null,w=null,O(),i.setSelectedId(null),i.setActiveTool("select"),i.notifyChangeComplete(),M()):(S.key==="Delete"||S.key==="Backspace")&&i.selectedId&&(S.preventDefault(),i.deleteSelected()))};h.addEventListener("pointerdown",E),h.addEventListener("pointermove",G),d.addEventListener("pointerdown",ie,{capture:!0}),typeof window<"u"&&window.addEventListener("keydown",ae);let ue=ot(e,S=>{m=S,M()}),fe=rt(e),he=i.subscribe(()=>{M()});return M(),{controller:i,container:u,canvas:p,repaint:M,destroy(){h.removeEventListener("pointerdown",E),h.removeEventListener("pointermove",G),d.removeEventListener("pointerdown",ie,{capture:!0}),typeof window<"u"&&window.removeEventListener("keydown",ae),O(),ue(),fe(),he(),n||i.destroy(),u.remove()}}}var mn=Le.version;export{yt as DEFAULT_ANNOTATION_THEME,Ee as DEFAULT_FONT_SIZE,st as DEFAULT_FONT_SIZE_OPTIONS,Ae as DEFAULT_NOTE_BG,ht as DEFAULT_NOTE_TEXT,De as DEFAULT_STROKE_COLOR,Ce as DEFAULT_STROKE_WIDTH,lt as DEFAULT_STROKE_WIDTH_OPTIONS,mt as FONT_SIZE_OPTIONS,q as NOTE_COLOR_THEMES,ut as STROKE_COLORS,ft as STROKE_WIDTH_OPTIONS,Ie as TOOL_TO_ARROW_STYLE,mn as VERSION,rt as bindBlockMapDblClick,ot as bindLeafletSync,Me as buildArrowItem,dt as buildRulerItem,pe as calculateGeodesicDistance,St as calculateLineDistance,gt as calculateZoomFontSize,Gt as clampNotePosition,jt as clampTextPosition,le as computeDefaultControlGeoPoint,B as constrainAngleTo45Degrees,re as constrainToAspectRatio,Xe as createDraftNote,ze as createDraftText,K as createId,un as createLeafletTual,it as createLeafletTualController,ke as distanceToQuadraticBezier,j as distanceToSegment,ge as drawArrowHead,X as drawTualHandle,ee as drawTualLabelPill,We as formatRealWorldDistance,W as geoToScreen,de as getMapDimensions,ye as getQuadraticBezierPoint,se as getQuadraticEndAngle,He as hitTestArrow,Fe as hitTestArrowHandle,Be as hitTestFreeDraw,je as hitTestRuler,Ye as hitTestRulerHandle,Ne as hitTestShape,Ge as hitTestShapeHandle,nt as paintLeafletTual,te as projectArrow,ce as projectFreeDraw,oe as projectRuler,ne as projectShape,we as renderArrowOnCanvas,Te as renderFreeDrawOnCanvas,xe as renderRulerOnCanvas,Pe as renderShapeOnCanvas,Bt as resolveNoteTheme,L as screenToGeo,Ze as startArrowBodyDrag,Ue as startArrowDrag,$e as startArrowHandleDrag,Qe as startFreeDrawBodyDrag,ve as startFreeDrawDrag,tt as startRulerBodyDrag,Je as startRulerDrag,et as startRulerHandleDrag,Ve as startShapeBodyDrag,Ke as startShapeDrag,qe as startShapeHandleDrag,Se as traceArrowPath,be as tracePolygonShape,Oe as truncateTualText};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|