From 84a6d572c9acc9bfaf069a4f2d95dbc7812d04cc Mon Sep 17 00:00:00 2001 From: Terncode Date: Thu, 6 Feb 2025 22:46:04 +0100 Subject: [PATCH] Fix screenshot bug --- dist/user-script.user.js | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- src/lib/canvashot.tsx | 4 +++- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/dist/user-script.user.js b/dist/user-script.user.js index bdeffdb..a105d91 100644 --- a/dist/user-script.user.js +++ b/dist/user-script.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Pixel canvas overlay // @namespace http://tampermonkey.net/ -// @version 2024-07-30 +// @version 2025-02-07 // @description Scripts renders pixelated overlays over the tile map! // @author 0xa663, Terncode // @match https://pixelcanvas.io/* @@ -78,7 +78,7 @@ Error generating stack: `+s.message+` background-color: rgba(158, 158, 158, 0.75); } transition: background-color 250ms; -`,x1=class e{static _ref;static active;static root;static alert(c,r){return new Promise(n=>{e.clear();let i=()=>{n(),this.active=void 0,this.clear()};this.active=i,e.renderContent(G2.default.createElement("div",null,G2.default.createElement("h5",null,r||`${location.host} says`),G2.default.createElement(O9,null,c),G2.default.createElement(z8,{onClick:()=>i()},"OK")))})}static async confirm(c,r){return new Promise(n=>{e.clear();let i=s=>{n(s),this.active=void 0,this.clear()};this.active=()=>i(!1),e.renderContent(G2.default.createElement("div",null,G2.default.createElement("h5",null,r||`${location.host} says`),G2.default.createElement(O9,null,c),G2.default.createElement(F9,null,G2.default.createElement(z8,{onClick:()=>i(!0)},"OK"),G2.default.createElement(z8,{onClick:()=>i(!1)},"Cancel"))))})}static async prompt(c,r,n){return new Promise(i=>{e.clear();let s=u=>{i(u),this.active=void 0,this.clear()};this.active=()=>s("");let l=(0,G2.createRef)();e.renderContent(G2.default.createElement("div",null,G2.default.createElement("h5",null,n||`${location.host} says`),G2.default.createElement(O9,null,c),G2.default.createElement(Nw,{ref:l,type:"text"}),G2.default.createElement(F9,null,G2.default.createElement(z8,{onClick:()=>s(l.current&&l.current.value)},"OK"),G2.default.createElement(z8,{onClick:()=>s(null)},"Cancel")))),l.current&&(l.current.focus(),l.current.value=r||"",l.current.addEventListener("keyup",u=>{u.key.toLowerCase()==="enter"&&l.current&&s(l.current.value)}))})}static custom(c,r){return new Promise(n=>{e.clear();let i=()=>{this.active=void 0,n(),this.clear()};this.active=()=>i(),e.renderContent(G2.default.createElement("div",null,c,G2.default.createElement(F9,null,r?r.map((s,l)=>G2.default.createElement(z8,{key:l,onClick:async u=>{let p=s.click(u),h;p instanceof Promise?h=await p:h=p,h||(this.active=void 0,this.clear(),n())}},s.content)):null)))})}static close(){this.clear()}static clear(){this.root&&(this.root.unmount(),this.root=void 0);let c=e.ref.style;c.pointerEvents="none",c.touchAction="none",c.backgroundColor="rgba(0, 0, 0, 0)",this.active&&this.active(),this.active=void 0}static renderContent(c){let r=e.createBase(c);this.root=(0,_m.createRoot)(e.ref),this.root.render(r);let n=e.ref.style;n.pointerEvents="all",n.touchAction="auto",n.backgroundColor="rgba(0, 0, 0, 0.5)"}static createBase(c){return G2.default.createElement(Sw,null,c)}static get ref(){if(e._ref)return e._ref;let c=document.createElement("div");document.body.appendChild(c),e._ref=c;let r=c.style;return r.position="fixed",r.zIndex=`${Number.MAX_SAFE_INTEGER}`,r.width="100%",r.height="100%",r.pointerEvents="none",r.touchAction="none",r.backgroundColor="rgba(0, 0, 0, 0)",r.transition="background-color 1s",r.overflowY="auto",r.overflowX="hidden",c}};var Rm=N2(f1());function bw(){return new Promise(e=>{let c=document.createElement("div"),r=document.createElement("div"),n=c.style;n.position="fixed",n.zIndex="100000",n.left=n.top="0",n.width=`${window.innerWidth}px`,n.height=`${window.innerHeight}px`,document.body.appendChild(c),n.backgroundColor="rgba(0, 0, 0, 0.50)";let i=r.style;i.position="fixed",i.zIndex="100001",i.width="5px",i.height="5px",i.border="2px solid white";let s,l=(W,g,H,C)=>{s={x:W,y:g,xOff:H,yOff:C}},u=W=>{l(W.clientX,W.clientY,W.offsetX,W.offsetY)},p=W=>{let g=W.touches[W.touches.length-1],H=W.target,{x:C,y:b,width:D,height:U}=H.getBoundingClientRect(),B=(g.clientX-C)/D*H.offsetWidth,Z=(g.clientY-b)/U*H.offsetHeight;l(g.clientX,g.clientY,B,Z)},h=(W,g)=>{if(!s)return{x:W,y:g,width:0,height:0};let H=Math.min(W,s.x),C=Math.max(W,s.x),b=Math.min(g,s.y),D=Math.max(g,s.y),U=C-H,B=D-b;return{x:Math.floor(H),y:Math.floor(b),width:Math.ceil(U),height:Math.ceil(B)}},z=(W,g)=>{if(!s)return;document.body.contains(r)||document.body.appendChild(r);let H=h(W,g),C=r.style;C.width=`${H.width}px`,C.height=`${H.height}px`,C.left=`${H.x}px`,C.top=`${H.y}px`},V=W=>{if(!s||!(W instanceof MouseEvent))return;let{clientX:g,clientY:H}=W;z(g,H)},L=W=>{if(!s||!(W instanceof TouchEvent)||!W.isTrusted)return;let g=W.touches[0];if(i.borderWidth="6px",g){let{clientX:H,clientY:C}=g;z(H,C)}},S=(W,g)=>{if(s){let H=h(W,g);s=void 0,window.removeEventListener("mousedown",T),window.removeEventListener("touchend",P),window.removeEventListener("mousedown",u),window.removeEventListener("touchstart",p),window.removeEventListener("mouseup",V),window.removeEventListener("touchmove",L),document.body.removeChild(c),document.body.contains(r)&&document.body.removeChild(r),e(H)}},P=W=>{let g=W.touches[0]||W.changedTouches[0];if(g){let{clientX:H,clientY:C}=g;S(H,C)}},T=W=>{S(W.clientX,W.clientY)};window.addEventListener("mouseup",T),window.addEventListener("touchend",P),window.addEventListener("mousedown",u),window.addEventListener("touchstart",p),window.addEventListener("mousemove",V),window.addEventListener("touchmove",L)})}async function B9(e,c,r,n,i=0){let s=H8();s.width=r/Math.pow(2,i),s.height=n/Math.pow(2,i);let l=s.getContext("2d"),u=Math.floor(e%O2),p=Math.floor(c%O2),h=[];for(let z=0;z{Om(e+z,c+V).then(T=>{let W=e>0?-u:-(O2+u)%O2,g=c>0?-p:-(O2+p)%O2;l.drawImage(T,z+W,V+g),S()}).catch(P)});h.push(L)}return await Promise.all(h),s}async function Dm(e){let c=await bw(),r=e.screenToGrid(c.x,c.y),n=e.screenToGrid(c.x+c.width,c.height+c.y);if(!(!r||!n))try{let i=await B9(r.x,r.y,c.height,c.width,e.uScale),s=i.toDataURL();x1.custom(Rm.default.createElement("img",{style:{border:"1px solid black"},src:s}),[{content:"Download",click:()=>{i.toBlob(l=>{let u=Math.floor(r.x+c.width/2),p=Math.floor(r.x+c.height/2);l&&(0,Tm.default)(l,`${u}:${p}:${new Date().toLocaleDateString()}.png`)})}},{content:"Cancel",click:()=>{}}])}catch{x1.alert("Something went wrong while trying to capture screenshot")}}var O2=512;function Ic(e,c){return e.indexOf(c)===-1?(e.push(c),!0):!1}function Z5(e,c){let r=e.indexOf(c);return r!==-1?(e.splice(r,1),!0):!1}function Uc(e,c,r){return{r:e,g:c,b:r}}function kw(e,c){let r=[];for(let s of c){let l=p4(e.r,s.r),u=p4(e.g,s.g),p=p4(e.b,s.b);r.push(l+u+p)}let n=Math.min(...r);return r.indexOf(n)}function p4(e,c){return e>c?e-c:c-e}function I9(e,c=2){return e.toString(16).padStart(c,"0")}function Bm(e,c,r){return"#"+I9(e)+I9(c)+I9(r)}function Wc(){return new Promise(e=>requestAnimationFrame(e))}function W9(e){let c=e.lastIndexOf(".");return c===-1?{text:e,ex:""}:{text:e.slice(0,c),ex:e.slice(c+1)}}function Im(e){return new Promise((c,r)=>{let n=new FileReader;n.addEventListener("load",()=>{c(n.result)}),n.addEventListener("error",i=>{r(i)}),n.readAsText(e)})}function Um(e){return new Promise((c,r)=>{let n=new FileReader;n.addEventListener("load",()=>{c(n.result)}),n.addEventListener("error",i=>{r(i)}),n.readAsDataURL(e)})}function Wm(e,c){return new Promise((r,n)=>{let i=new Image;i.alt=e,i.addEventListener("load",()=>r(i)),i.addEventListener("error",s=>{n(s)}),c.startsWith("data:image")||c.startsWith("blob")?i.src=c:i.src=`data:image/${W9(e)};base64,${c}`})}function V8(e){return e.length}function M8(e){return e[0]&&e[0].length||0}function l0(e){return V8(e.pixels)}function f0(e){return M8(e.pixels)}function Gm(e,c,r){let n=H8();n.width=c,n.height=r;let i=n.getContext("2d");return i.imageSmoothingEnabled=!1,i.drawImage(e,0,0,c,r),Aw(n,e.alt)}function Aw(e,c){return new Promise((r,n)=>{let i=e.toDataURL("image/png"),s=new Image;s.addEventListener("load",()=>r(s)),s.addEventListener("error",l=>n(l)),c&&(s.alt=c),s.src=i})}function G9(e){if(typeof e=="object"){let c=(0,g8.clone)(e);if(Array.isArray(c))throw new Error("Should not be an array");{if(typeof c.x!="number")throw new Error("x is not a number");if(typeof c.y!="number")throw new Error("y is not a number");if(!(0,g8.isInteger)(c.x))throw new Error("x is not an integer");if(!(0,g8.isInteger)(c.y))throw new Error("y is not an integer");if(typeof c.name!="string")throw new Error("Missing name");if(c.name.length<=1)throw new Error("Name to short");if(c.name.length>=64)throw new Error("Name to long");if(typeof c.pixels!="object")throw new Error("Pixels are not an object");if(!Array.isArray(c.pixels))throw new Error("Pixels are not an array");let r=0;for(let s=0;s2e3)throw new Error("Height to big");if(i>2e3)throw new Error("Width to big")}}else throw new Error("Not an object")}function Gc(e){return e.getContext("2d").getImageData(0,0,e.width,e.height)}async function qm(e,c){let r=f0(e),n=l0(e),s=(await B9(e.x,e.y,r,n)).getContext("2d")?.getImageData(0,0,r,n),l=e.pixels.flat(),u=0,p=0,h=0;if(s){for(let z=0,V=0;z=0){let L=s.data[z+0],S=s.data[z+1],P=s.data[z+2],T=Uc(L,S,P);u++,kw(T,c)===l[V]?h++:p++}}return{total:u,good:h,bad:p}}function q9(e,c){let{height:r,width:n}=e,i=[];for(let s=0;s-1){p++;let S=r[L];if(!S)throw new Error(`Unknown color at ${L}`);i.fillStyle=S,i.fillRect(h*n,z*n,n,n)}}return p}function H8(){let e=document.createElement("canvas");return e.setAttribute("overlay","true"),e}function Fm(e){return Math.floor(e/O2)*O2}function ee(e,c){let r=document.createElement("canvas");r.width=M8(e),r.height=V8(e);let n=j9(r,e,c);return{canvas:r,pixels:n}}var U9;try{let e=navigator.language||navigator.userLanguage;U9=new Intl.NumberFormat(e)}catch{}function ce(e){return U9?U9.format(e):e.toString()}function C8(e,c){e.preventDefault(),e.stopPropagation(),e.target.value===""?c(0):e.target.value==="-"?c(-1):c(parseInt(e.target.value,10))}async function Om(e,c){let r=`/tile/${Fm(e)}/${Fm(c)}.png`,i=await(await fetch(r)).blob(),s=URL.createObjectURL(i),l=new Image;return l.src=s,new Promise((u,p)=>{l.addEventListener("load",()=>{URL.revokeObjectURL(s),u(l)}),l.addEventListener("error",()=>{URL.revokeObjectURL(s),p(new Error("Unable to load image"))})})}var C6=class{listeners=new Map;on(c,r){let n=this.listeners.get(c)||[];Ic(n,r),this.listeners.set(c,n)}off(c,r){let n=this.listeners.get(c)||[];Z5(n,r),n.length||this.listeners.delete(c)}emit(c,...r){let n=this.listeners.get(c);if(n)for(let i=0;ir.textContent&&r.textContent.match(/^\(\s*-?\d+\s*,\s*-?\d+\s*\)$/));for(let r of c)r.children.length===0&&(this.cords=r,this.frame=requestAnimationFrame(this.observe));await Wc()}}stop(){this.frame&&cancelAnimationFrame(this.frame)}get centerCanvas(){let c=window.innerWidth/2,r=window.innerHeight/2,n=[...document.getElementsByTagName("canvas")].filter(i=>i.classList.contains("leaflet-tile")).map(i=>{let s=i.getBoundingClientRect();return{canvas:i,bounds:{width:s.width,height:s.height,top:s.top,bottom:s.bottom,left:s.left,right:s.right}}}).find(i=>c>i.bounds.left&&ci.bounds.top&&rs&&rs&&r>l?n.bounds.left+=p:(n.bounds.left+=u,n.bounds.top+=p)),n.bounds.bottom=n.bounds.top+u,n.bounds.right=n.bounds.left+p,null}n.bounds.width/=i,n.bounds.height/=i,n.bounds.right=n.bounds.left+n.bounds.width,n.bounds.bottom=n.bounds.bottom+n.bounds.height}return n}get pixelSize(){return Math.pow(2,this.uScale)}screenToGrid(c,r){let n=this.centerCanvas;if(!n)return null;this.getCordsFromUrl();let i=Math.floor(this.ux/O2)*O2,s=Math.floor(this.uy/O2)*O2,l=(c-n.bounds.left)/this.pixelSize+i,u=(r-n.bounds.top)/this.pixelSize+s;return{x:l,y:u}}gridToScreen(c,r){let n=this.centerCanvas;if(!n)return null;let i=Math.floor(this.ux/O2)*O2,s=Math.floor(this.uy/O2)*O2,l=c-i,u=r-s,p=n.bounds.left+l*this.pixelSize,h=n.bounds.top+u*this.pixelSize;return{x:p,y:h}}getCordsFromUrl(){let r=location.pathname.split("/").filter(n=>n)[0];if(r){let n=r.match(/-?\d+/g).map(i=>parseInt(i));if(typeof n[0]=="number"&&typeof n[1]=="number"&&typeof n[2]=="number")return this._ux=n[0],this._uy=n[1],this._uScale=n[2],n}return null}parse(){let c=this.cords.textContent.match(/-?\d+/g).map(r=>parseInt(r));this._x=c[0],this._y=c[1]}observe=()=>{let c=this._x,r=this._y;this.parse(),(c!==this._x||r!==this._y)&&this.emitter.emit(0,this._x,this._y);let n=this._ux,i=this._uy,s=this._uScale;this.getCordsFromUrl(),(n!==this._ux||i!==this._uy||s!==this._uScale)&&this.emitter.emit(1,this._ux,this._uy,this._uScale),this.frame=requestAnimationFrame(this.observe)};get x(){return this._x}get y(){return this._y}get ux(){return this._ux}get uy(){return this._uy}get uScale(){return this._uScale}};var jc=class{buttons=[];palette=[];hex=[];init(){let c=[...document.getElementsByTagName("button")].filter(h=>h.style.backgroundColor);if(c.length<2)return null;let r=new Map,n=new Map,i=c.map(h=>{let{width:z,height:V}=h.getBoundingClientRect(),L=r.get(z)||0,S=n.get(V)||0;return L++,S++,r.set(z,L),n.set(V,S),{btn:h,width:z,height:V}}),s=Array.from(r).sort((h,z)=>h[1]h[1]h.width===s&&h.height===l);this.buttons=u.map(h=>h.btn),this.buttons[0].parentElement.parentElement.style.zIndex="10";let p=u.map(h=>{let z=h.btn.style.backgroundColor.match(/\d+/g);return{r:parseInt(z[0]),g:parseInt(z[1]),b:parseInt(z[2])}});return this.palette=p,this.hex=p.map(h=>Bm(h.r,h.g,h.b)),p}};var wi=N2(f1());var t3=N2(f1());var Xc=class{constructor(c,r){this.storage=c;this.palette=r}STORAGE_KEY_MURAL="_murals";STORAGE_KEY_SELECTED="_mural";_murals=[];_selected;emitter=new C6;_overlayIndices=[];_phantomOverlay=-1;_overlayModify;async load(){this._murals=await this.storage.getItem(this.STORAGE_KEY_MURAL)||[];for(let r of this._murals){let{canvas:n,pixels:i}=ee(r.pixels,this.palette.hex);r.ref=n,r.pixelCount=i}let c=await this.storage.getItem(this.STORAGE_KEY_SELECTED)??-1;this.select(this._murals[c])}updateMural(c){this.save(),this.emit(3)}unload(){this.save()}add(c){let r=c,{canvas:n,pixels:i}=ee(c.pixels,this.palette.hex);r.ref=n,r.pixelCount=i,this._murals.push(r),this.emit(7),this.save()}remove(c){this._overlayIndices=[],this._overlayModify=void 0,this._phantomOverlay=-1,this._selected&&this._selected?.m===c&&(this._selected=void 0),Z5(this._murals,c),this.emit(2),this.save()}addOverlay(c){let r=this._murals.indexOf(c);r!==-1&&(Ic(this._overlayIndices,r),this._phantomOverlay===r&&(this._phantomOverlay=-1)),this.emit(5),this.save()}removeOverlay(c){let r=this._murals.indexOf(c);r!==-1&&Z5(this._overlayIndices,r),this.emit(5),this.save()}setOverlayModify(c){this._overlayModify=c;let r=c.cb;c.cb=(n,i,s,l)=>{r(n,i,s,l),this._overlayModify=void 0,this.emit(5)},this.emit(5)}hasOverlay(c){let r=this._murals.indexOf(c);return this._overlayIndices.includes(r)}select(c){c?this._selected={m:c,h:l0(c),w:f0(c)}:this._selected=void 0,this.emit(4),this.save()}async save(){await this.storage.setItem(this.STORAGE_KEY_MURAL,this._murals.map(r=>({name:r.name,pixels:r.pixels,x:r.x,y:r.y})));let c=this._selected?.m?this._murals.indexOf(this._selected?.m):-1;await this.storage.setItem(this.STORAGE_KEY_SELECTED,c)}addPhantomOverlay(c){let r=this._murals.indexOf(c);r!==this._phantomOverlay&&!this._overlayIndices.includes(r)&&(this._phantomOverlay=r,this.emit(6))}removePhantomOverlay(){this._phantomOverlay!==-1&&(this._phantomOverlay=-1,this.emit(6))}get murals(){return this._murals}get overlays(){return this._overlayIndices}get phantomOverlay(){return this._phantomOverlay}get overlayModify(){return this._overlayModify}get selected(){return this._selected}on(c,r){this.emitter.on(c,r)}off(c,r){this.emitter.off(c,r)}emit(c){this.emitter.emit(c,this),this.emitter.emit(7,this)}};var Xm={prefix:"fas",iconName:"pen-to-square",icon:[512,512,["edit"],"f044","M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z"]};var Ym={prefix:"fas",iconName:"caret-up",icon:[320,512,[],"f0d8","M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z"]};var Pw={prefix:"fas",iconName:"arrows-rotate",icon:[512,512,[128472,"refresh","sync"],"f021","M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H352c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V80c0-17.7-14.3-32-32-32s-32 14.3-32 32v35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V432c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H160c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"]},Km=Pw;var Qm={prefix:"fas",iconName:"layer-group",icon:[576,512,[],"f5fd","M264.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 149.8C37.4 145.8 32 137.3 32 128s5.4-17.9 13.9-21.8L264.5 5.2zM476.9 209.6l53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 277.8C37.4 273.8 32 265.3 32 256s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0l152-70.2zm-152 198.2l152-70.2 53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 405.8C37.4 401.8 32 393.3 32 384s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0z"]};var $m={prefix:"fas",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96z"]};var _w={prefix:"fas",iconName:"location-crosshairs",icon:[512,512,["location"],"f601","M256 0c17.7 0 32 14.3 32 32V66.7C368.4 80.1 431.9 143.6 445.3 224H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H445.3C431.9 368.4 368.4 431.9 288 445.3V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V445.3C143.6 431.9 80.1 368.4 66.7 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H66.7C80.1 143.6 143.6 80.1 224 66.7V32c0-17.7 14.3-32 32-32zM128 256a128 128 0 1 0 256 0 128 128 0 1 0 -256 0zm128-80a80 80 0 1 1 0 160 80 80 0 1 1 0-160z"]},Jm=_w;var Zm={prefix:"fas",iconName:"trash",icon:[448,512,[],"f1f8","M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"]};var eh={prefix:"fas",iconName:"camera",icon:[512,512,[62258,"camera-alt"],"f030","M149.1 64.8L138.7 96H64C28.7 96 0 124.7 0 160V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H373.3L362.9 64.8C356.4 45.2 338.1 32 317.4 32H194.6c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z"]};var ch={prefix:"fas",iconName:"crosshairs",icon:[512,512,[],"f05b","M256 0c17.7 0 32 14.3 32 32V42.4c93.7 13.9 167.7 88 181.6 181.6H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H469.6c-13.9 93.7-88 167.7-181.6 181.6V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V469.6C130.3 455.7 56.3 381.7 42.4 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H42.4C56.3 130.3 130.3 56.3 224 42.4V32c0-17.7 14.3-32 32-32zM107.4 288c12.5 58.3 58.4 104.1 116.6 116.6V384c0-17.7 14.3-32 32-32s32 14.3 32 32v20.6c58.3-12.5 104.1-58.4 116.6-116.6H384c-17.7 0-32-14.3-32-32s14.3-32 32-32h20.6C392.1 165.7 346.3 119.9 288 107.4V128c0 17.7-14.3 32-32 32s-32-14.3-32-32V107.4C165.7 119.9 119.9 165.7 107.4 224H128c17.7 0 32 14.3 32 32s-14.3 32-32 32H107.4zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"]};var rh={prefix:"fas",iconName:"caret-down",icon:[320,512,[],"f0d7","M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"]};var ah={prefix:"fas",iconName:"download",icon:[512,512,[],"f019","M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"]};var nh={prefix:"fas",iconName:"upload",icon:[512,512,[],"f093","M288 109.3V352c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3l-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0l128 128c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L288 109.3zM64 352H192c0 35.3 28.7 64 64 64s64-28.7 64-64H448c35.3 0 64 28.7 64 64v32c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V416c0-35.3 28.7-64 64-64zM432 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z"]};var th={prefix:"fas",iconName:"magnifying-glass-plus",icon:[512,512,["search-plus"],"f00e","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24V232h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H232V120c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z"]};var ih={prefix:"fas",iconName:"magnifying-glass-minus",icon:[512,512,["search-minus"],"f010","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24H280c13.3 0 24-10.7 24-24s-10.7-24-24-24H136z"]};function sh(e,c){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);c&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $(e){for(var c=1;ce.length)&&(c=e.length);for(var r=0,n=new Array(c);r{e.clear();let i=()=>{n(),this.active=void 0,this.clear()};this.active=i,e.renderContent(G2.default.createElement("div",null,G2.default.createElement("h5",null,r||`${location.host} says`),G2.default.createElement(O9,null,c),G2.default.createElement(z8,{onClick:()=>i()},"OK")))})}static async confirm(c,r){return new Promise(n=>{e.clear();let i=s=>{n(s),this.active=void 0,this.clear()};this.active=()=>i(!1),e.renderContent(G2.default.createElement("div",null,G2.default.createElement("h5",null,r||`${location.host} says`),G2.default.createElement(O9,null,c),G2.default.createElement(F9,null,G2.default.createElement(z8,{onClick:()=>i(!0)},"OK"),G2.default.createElement(z8,{onClick:()=>i(!1)},"Cancel"))))})}static async prompt(c,r,n){return new Promise(i=>{e.clear();let s=u=>{i(u),this.active=void 0,this.clear()};this.active=()=>s("");let l=(0,G2.createRef)();e.renderContent(G2.default.createElement("div",null,G2.default.createElement("h5",null,n||`${location.host} says`),G2.default.createElement(O9,null,c),G2.default.createElement(Nw,{ref:l,type:"text"}),G2.default.createElement(F9,null,G2.default.createElement(z8,{onClick:()=>s(l.current&&l.current.value)},"OK"),G2.default.createElement(z8,{onClick:()=>s(null)},"Cancel")))),l.current&&(l.current.focus(),l.current.value=r||"",l.current.addEventListener("keyup",u=>{u.key.toLowerCase()==="enter"&&l.current&&s(l.current.value)}))})}static custom(c,r){return new Promise(n=>{e.clear();let i=()=>{this.active=void 0,n(),this.clear()};this.active=()=>i(),e.renderContent(G2.default.createElement("div",null,c,G2.default.createElement(F9,null,r?r.map((s,l)=>G2.default.createElement(z8,{key:l,onClick:async u=>{let p=s.click(u),h;p instanceof Promise?h=await p:h=p,h||(this.active=void 0,this.clear(),n())}},s.content)):null)))})}static close(){this.clear()}static clear(){this.root&&(this.root.unmount(),this.root=void 0);let c=e.ref.style;c.pointerEvents="none",c.touchAction="none",c.backgroundColor="rgba(0, 0, 0, 0)",this.active&&this.active(),this.active=void 0}static renderContent(c){let r=e.createBase(c);this.root=(0,_m.createRoot)(e.ref),this.root.render(r);let n=e.ref.style;n.pointerEvents="all",n.touchAction="auto",n.backgroundColor="rgba(0, 0, 0, 0.5)"}static createBase(c){return G2.default.createElement(Sw,null,c)}static get ref(){if(e._ref)return e._ref;let c=document.createElement("div");document.body.appendChild(c),e._ref=c;let r=c.style;return r.position="fixed",r.zIndex=`${Number.MAX_SAFE_INTEGER}`,r.width="100%",r.height="100%",r.pointerEvents="none",r.touchAction="none",r.backgroundColor="rgba(0, 0, 0, 0)",r.transition="background-color 1s",r.overflowY="auto",r.overflowX="hidden",c}};var Rm=N2(f1());function bw(){return new Promise(e=>{let c=document.createElement("div"),r=document.createElement("div"),n=c.style;n.position="fixed",n.zIndex="100000",n.left=n.top="0",n.width=`${window.innerWidth}px`,n.height=`${window.innerHeight}px`,document.body.appendChild(c),n.backgroundColor="rgba(0, 0, 0, 0.50)";let i=r.style;i.position="fixed",i.zIndex="100001",i.width="5px",i.height="5px",i.border="2px solid white";let s,l=(W,g,H,C)=>{s={x:W,y:g,xOff:H,yOff:C}},u=W=>{l(W.clientX,W.clientY,W.offsetX,W.offsetY)},p=W=>{let g=W.touches[W.touches.length-1],H=W.target,{x:C,y:b,width:D,height:U}=H.getBoundingClientRect(),B=(g.clientX-C)/D*H.offsetWidth,Z=(g.clientY-b)/U*H.offsetHeight;l(g.clientX,g.clientY,B,Z)},h=(W,g)=>{if(!s)return{x:W,y:g,width:0,height:0};let H=Math.min(W,s.x),C=Math.max(W,s.x),b=Math.min(g,s.y),D=Math.max(g,s.y),U=C-H,B=D-b;return{x:Math.floor(H),y:Math.floor(b),width:Math.ceil(U),height:Math.ceil(B)}},z=(W,g)=>{if(!s)return;document.body.contains(r)||document.body.appendChild(r);let H=h(W,g),C=r.style;C.width=`${H.width}px`,C.height=`${H.height}px`,C.left=`${H.x}px`,C.top=`${H.y}px`},V=W=>{if(!s||!(W instanceof MouseEvent))return;let{clientX:g,clientY:H}=W;z(g,H)},L=W=>{if(!s||!(W instanceof TouchEvent)||!W.isTrusted)return;let g=W.touches[0];if(i.borderWidth="6px",g){let{clientX:H,clientY:C}=g;z(H,C)}},S=(W,g)=>{if(s){let H=h(W,g);s=void 0,window.removeEventListener("mousedown",T),window.removeEventListener("touchend",P),window.removeEventListener("mousedown",u),window.removeEventListener("touchstart",p),window.removeEventListener("mouseup",V),window.removeEventListener("touchmove",L),document.body.removeChild(c),document.body.contains(r)&&document.body.removeChild(r),e(H)}},P=W=>{let g=W.touches[0]||W.changedTouches[0];if(g){let{clientX:H,clientY:C}=g;S(H,C)}},T=W=>{S(W.clientX,W.clientY)};window.addEventListener("mouseup",T),window.addEventListener("touchend",P),window.addEventListener("mousedown",u),window.addEventListener("touchstart",p),window.addEventListener("mousemove",V),window.addEventListener("touchmove",L)})}async function B9(e,c,r,n,i=0){let s=H8();s.width=r/Math.pow(2,i),s.height=n/Math.pow(2,i);let l=s.getContext("2d"),u=Math.floor(e%O2),p=Math.floor(c%O2),h=[];for(let z=0;z{Om(e+z,c+V).then(T=>{let W=e>0?-u:-(O2+u)%O2,g=c>0?-p:-(O2+p)%O2;l.drawImage(T,z+W,V+g),S()}).catch(P)});h.push(L)}return await Promise.all(h),s}async function Dm(e){let c=await bw(),r=e.screenToGrid(c.x,c.y),n=e.screenToGrid(c.x+c.width,c.height+c.y);if(!(!r||!n))try{let i=await B9(r.x,r.y,c.width,c.height,e.uScale),s=i.toDataURL();x1.custom(Rm.default.createElement("img",{style:{border:"1px solid black"},src:s}),[{content:"Download",click:()=>{i.toBlob(l=>{let u=Math.floor(r.x+c.width/2),p=Math.floor(r.x+c.height/2);l&&(0,Tm.default)(l,`${u}:${p}:${new Date().toLocaleDateString()}.png`)})}},{content:"Cancel",click:()=>{}}])}catch{x1.alert("Something went wrong while trying to capture screenshot")}}var O2=512;function Ic(e,c){return e.indexOf(c)===-1?(e.push(c),!0):!1}function Z5(e,c){let r=e.indexOf(c);return r!==-1?(e.splice(r,1),!0):!1}function Uc(e,c,r){return{r:e,g:c,b:r}}function kw(e,c){let r=[];for(let s of c){let l=p4(e.r,s.r),u=p4(e.g,s.g),p=p4(e.b,s.b);r.push(l+u+p)}let n=Math.min(...r);return r.indexOf(n)}function p4(e,c){return e>c?e-c:c-e}function I9(e,c=2){return e.toString(16).padStart(c,"0")}function Bm(e,c,r){return"#"+I9(e)+I9(c)+I9(r)}function Wc(){return new Promise(e=>requestAnimationFrame(e))}function W9(e){let c=e.lastIndexOf(".");return c===-1?{text:e,ex:""}:{text:e.slice(0,c),ex:e.slice(c+1)}}function Im(e){return new Promise((c,r)=>{let n=new FileReader;n.addEventListener("load",()=>{c(n.result)}),n.addEventListener("error",i=>{r(i)}),n.readAsText(e)})}function Um(e){return new Promise((c,r)=>{let n=new FileReader;n.addEventListener("load",()=>{c(n.result)}),n.addEventListener("error",i=>{r(i)}),n.readAsDataURL(e)})}function Wm(e,c){return new Promise((r,n)=>{let i=new Image;i.alt=e,i.addEventListener("load",()=>r(i)),i.addEventListener("error",s=>{n(s)}),c.startsWith("data:image")||c.startsWith("blob")?i.src=c:i.src=`data:image/${W9(e)};base64,${c}`})}function V8(e){return e.length}function M8(e){return e[0]&&e[0].length||0}function l0(e){return V8(e.pixels)}function f0(e){return M8(e.pixels)}function Gm(e,c,r){let n=H8();n.width=c,n.height=r;let i=n.getContext("2d");return i.imageSmoothingEnabled=!1,i.drawImage(e,0,0,c,r),Aw(n,e.alt)}function Aw(e,c){return new Promise((r,n)=>{let i=e.toDataURL("image/png"),s=new Image;s.addEventListener("load",()=>r(s)),s.addEventListener("error",l=>n(l)),c&&(s.alt=c),s.src=i})}function G9(e){if(typeof e=="object"){let c=(0,g8.clone)(e);if(Array.isArray(c))throw new Error("Should not be an array");{if(typeof c.x!="number")throw new Error("x is not a number");if(typeof c.y!="number")throw new Error("y is not a number");if(!(0,g8.isInteger)(c.x))throw new Error("x is not an integer");if(!(0,g8.isInteger)(c.y))throw new Error("y is not an integer");if(typeof c.name!="string")throw new Error("Missing name");if(c.name.length<=1)throw new Error("Name to short");if(c.name.length>=64)throw new Error("Name to long");if(typeof c.pixels!="object")throw new Error("Pixels are not an object");if(!Array.isArray(c.pixels))throw new Error("Pixels are not an array");let r=0;for(let s=0;s2e3)throw new Error("Height to big");if(i>2e3)throw new Error("Width to big")}}else throw new Error("Not an object")}function Gc(e){return e.getContext("2d").getImageData(0,0,e.width,e.height)}async function qm(e,c){let r=f0(e),n=l0(e),s=(await B9(e.x,e.y,r,n)).getContext("2d")?.getImageData(0,0,r,n),l=e.pixels.flat(),u=0,p=0,h=0;if(s){for(let z=0,V=0;z=0){let L=s.data[z+0],S=s.data[z+1],P=s.data[z+2],T=Uc(L,S,P);u++,kw(T,c)===l[V]?h++:p++}}return{total:u,good:h,bad:p}}function q9(e,c){let{height:r,width:n}=e,i=[];for(let s=0;s-1){p++;let S=r[L];if(!S)throw new Error(`Unknown color at ${L}`);i.fillStyle=S,i.fillRect(h*n,z*n,n,n)}}return p}function H8(){let e=document.createElement("canvas");return e.setAttribute("overlay","true"),e}function Fm(e){return Math.floor(e/O2)*O2}function ee(e,c){let r=document.createElement("canvas");r.width=M8(e),r.height=V8(e);let n=j9(r,e,c);return{canvas:r,pixels:n}}var U9;try{let e=navigator.language||navigator.userLanguage;U9=new Intl.NumberFormat(e)}catch{}function ce(e){return U9?U9.format(e):e.toString()}function C8(e,c){e.preventDefault(),e.stopPropagation(),e.target.value===""?c(0):e.target.value==="-"?c(-1):c(parseInt(e.target.value,10))}async function Om(e,c){let r=`/tile/${Fm(e)}/${Fm(c)}.png`,i=await(await fetch(r)).blob(),s=URL.createObjectURL(i),l=new Image;return l.src=s,new Promise((u,p)=>{l.addEventListener("load",()=>{URL.revokeObjectURL(s),u(l)}),l.addEventListener("error",()=>{URL.revokeObjectURL(s),p(new Error("Unable to load image"))})})}var C6=class{listeners=new Map;on(c,r){let n=this.listeners.get(c)||[];Ic(n,r),this.listeners.set(c,n)}off(c,r){let n=this.listeners.get(c)||[];Z5(n,r),n.length||this.listeners.delete(c)}emit(c,...r){let n=this.listeners.get(c);if(n)for(let i=0;ir.textContent&&r.textContent.match(/^\(\s*-?\d+\s*,\s*-?\d+\s*\)$/));for(let r of c)r.children.length===0&&(this.cords=r,this.frame=requestAnimationFrame(this.observe));await Wc()}}stop(){this.frame&&cancelAnimationFrame(this.frame)}get centerCanvas(){let c=window.innerWidth/2,r=window.innerHeight/2,n=[...document.getElementsByTagName("canvas")].filter(i=>i.classList.contains("leaflet-tile")).map(i=>{let s=i.getBoundingClientRect();return{canvas:i,bounds:{width:s.width,height:s.height,top:s.top,bottom:s.bottom,left:s.left,right:s.right}}}).find(i=>c>i.bounds.left&&ci.bounds.top&&rs&&rs&&r>l?n.bounds.left+=p:(n.bounds.left+=u,n.bounds.top+=p)),n.bounds.bottom=n.bounds.top+u,n.bounds.right=n.bounds.left+p,null}n.bounds.width/=i,n.bounds.height/=i,n.bounds.right=n.bounds.left+n.bounds.width,n.bounds.bottom=n.bounds.bottom+n.bounds.height}return n}get pixelSize(){return Math.pow(2,this.uScale)}screenToGrid(c,r){let n=this.centerCanvas;if(!n)return null;this.getCordsFromUrl();let i=Math.floor(this.ux/O2)*O2,s=Math.floor(this.uy/O2)*O2,l=(c-n.bounds.left)/this.pixelSize+i,u=(r-n.bounds.top)/this.pixelSize+s;return{x:l,y:u}}gridToScreen(c,r){let n=this.centerCanvas;if(!n)return null;let i=Math.floor(this.ux/O2)*O2,s=Math.floor(this.uy/O2)*O2,l=c-i,u=r-s,p=n.bounds.left+l*this.pixelSize,h=n.bounds.top+u*this.pixelSize;return{x:p,y:h}}getCordsFromUrl(){let r=location.pathname.split("/").filter(n=>n)[0];if(r){let n=r.match(/-?\d+/g).map(i=>parseInt(i));if(typeof n[0]=="number"&&typeof n[1]=="number"&&typeof n[2]=="number")return this._ux=n[0],this._uy=n[1],this._uScale=n[2],n}return null}parse(){let c=this.cords.textContent.match(/-?\d+/g).map(r=>parseInt(r));this._x=c[0],this._y=c[1]}observe=()=>{let c=this._x,r=this._y;this.parse(),(c!==this._x||r!==this._y)&&this.emitter.emit(0,this._x,this._y);let n=this._ux,i=this._uy,s=this._uScale;this.getCordsFromUrl(),(n!==this._ux||i!==this._uy||s!==this._uScale)&&this.emitter.emit(1,this._ux,this._uy,this._uScale),this.frame=requestAnimationFrame(this.observe)};get x(){return this._x}get y(){return this._y}get ux(){return this._ux}get uy(){return this._uy}get uScale(){return this._uScale}};var jc=class{buttons=[];palette=[];hex=[];init(){let c=[...document.getElementsByTagName("button")].filter(h=>h.style.backgroundColor);if(c.length<2)return null;let r=new Map,n=new Map,i=c.map(h=>{let{width:z,height:V}=h.getBoundingClientRect(),L=r.get(z)||0,S=n.get(V)||0;return L++,S++,r.set(z,L),n.set(V,S),{btn:h,width:z,height:V}}),s=Array.from(r).sort((h,z)=>h[1]h[1]h.width===s&&h.height===l);this.buttons=u.map(h=>h.btn),this.buttons[0].parentElement.parentElement.style.zIndex="10";let p=u.map(h=>{let z=h.btn.style.backgroundColor.match(/\d+/g);return{r:parseInt(z[0]),g:parseInt(z[1]),b:parseInt(z[2])}});return this.palette=p,this.hex=p.map(h=>Bm(h.r,h.g,h.b)),p}};var wi=N2(f1());var t3=N2(f1());var Xc=class{constructor(c,r){this.storage=c;this.palette=r}STORAGE_KEY_MURAL="_murals";STORAGE_KEY_SELECTED="_mural";_murals=[];_selected;emitter=new C6;_overlayIndices=[];_phantomOverlay=-1;_overlayModify;async load(){this._murals=await this.storage.getItem(this.STORAGE_KEY_MURAL)||[];for(let r of this._murals){let{canvas:n,pixels:i}=ee(r.pixels,this.palette.hex);r.ref=n,r.pixelCount=i}let c=await this.storage.getItem(this.STORAGE_KEY_SELECTED)??-1;this.select(this._murals[c])}updateMural(c){this.save(),this.emit(3)}unload(){this.save()}add(c){let r=c,{canvas:n,pixels:i}=ee(c.pixels,this.palette.hex);r.ref=n,r.pixelCount=i,this._murals.push(r),this.emit(7),this.save()}remove(c){this._overlayIndices=[],this._overlayModify=void 0,this._phantomOverlay=-1,this._selected&&this._selected?.m===c&&(this._selected=void 0),Z5(this._murals,c),this.emit(2),this.save()}addOverlay(c){let r=this._murals.indexOf(c);r!==-1&&(Ic(this._overlayIndices,r),this._phantomOverlay===r&&(this._phantomOverlay=-1)),this.emit(5),this.save()}removeOverlay(c){let r=this._murals.indexOf(c);r!==-1&&Z5(this._overlayIndices,r),this.emit(5),this.save()}setOverlayModify(c){this._overlayModify=c;let r=c.cb;c.cb=(n,i,s,l)=>{r(n,i,s,l),this._overlayModify=void 0,this.emit(5)},this.emit(5)}hasOverlay(c){let r=this._murals.indexOf(c);return this._overlayIndices.includes(r)}select(c){c?this._selected={m:c,h:l0(c),w:f0(c)}:this._selected=void 0,this.emit(4),this.save()}async save(){await this.storage.setItem(this.STORAGE_KEY_MURAL,this._murals.map(r=>({name:r.name,pixels:r.pixels,x:r.x,y:r.y})));let c=this._selected?.m?this._murals.indexOf(this._selected?.m):-1;await this.storage.setItem(this.STORAGE_KEY_SELECTED,c)}addPhantomOverlay(c){let r=this._murals.indexOf(c);r!==this._phantomOverlay&&!this._overlayIndices.includes(r)&&(this._phantomOverlay=r,this.emit(6))}removePhantomOverlay(){this._phantomOverlay!==-1&&(this._phantomOverlay=-1,this.emit(6))}get murals(){return this._murals}get overlays(){return this._overlayIndices}get phantomOverlay(){return this._phantomOverlay}get overlayModify(){return this._overlayModify}get selected(){return this._selected}on(c,r){this.emitter.on(c,r)}off(c,r){this.emitter.off(c,r)}emit(c){this.emitter.emit(c,this),this.emitter.emit(7,this)}};var Xm={prefix:"fas",iconName:"pen-to-square",icon:[512,512,["edit"],"f044","M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z"]};var Ym={prefix:"fas",iconName:"caret-up",icon:[320,512,[],"f0d8","M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z"]};var Pw={prefix:"fas",iconName:"arrows-rotate",icon:[512,512,[128472,"refresh","sync"],"f021","M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H352c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V80c0-17.7-14.3-32-32-32s-32 14.3-32 32v35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V432c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H160c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"]},Km=Pw;var Qm={prefix:"fas",iconName:"layer-group",icon:[576,512,[],"f5fd","M264.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 149.8C37.4 145.8 32 137.3 32 128s5.4-17.9 13.9-21.8L264.5 5.2zM476.9 209.6l53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 277.8C37.4 273.8 32 265.3 32 256s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0l152-70.2zm-152 198.2l152-70.2 53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 405.8C37.4 401.8 32 393.3 32 384s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0z"]};var $m={prefix:"fas",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96z"]};var _w={prefix:"fas",iconName:"location-crosshairs",icon:[512,512,["location"],"f601","M256 0c17.7 0 32 14.3 32 32V66.7C368.4 80.1 431.9 143.6 445.3 224H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H445.3C431.9 368.4 368.4 431.9 288 445.3V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V445.3C143.6 431.9 80.1 368.4 66.7 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H66.7C80.1 143.6 143.6 80.1 224 66.7V32c0-17.7 14.3-32 32-32zM128 256a128 128 0 1 0 256 0 128 128 0 1 0 -256 0zm128-80a80 80 0 1 1 0 160 80 80 0 1 1 0-160z"]},Jm=_w;var Zm={prefix:"fas",iconName:"trash",icon:[448,512,[],"f1f8","M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"]};var eh={prefix:"fas",iconName:"camera",icon:[512,512,[62258,"camera-alt"],"f030","M149.1 64.8L138.7 96H64C28.7 96 0 124.7 0 160V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H373.3L362.9 64.8C356.4 45.2 338.1 32 317.4 32H194.6c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z"]};var ch={prefix:"fas",iconName:"crosshairs",icon:[512,512,[],"f05b","M256 0c17.7 0 32 14.3 32 32V42.4c93.7 13.9 167.7 88 181.6 181.6H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H469.6c-13.9 93.7-88 167.7-181.6 181.6V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V469.6C130.3 455.7 56.3 381.7 42.4 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H42.4C56.3 130.3 130.3 56.3 224 42.4V32c0-17.7 14.3-32 32-32zM107.4 288c12.5 58.3 58.4 104.1 116.6 116.6V384c0-17.7 14.3-32 32-32s32 14.3 32 32v20.6c58.3-12.5 104.1-58.4 116.6-116.6H384c-17.7 0-32-14.3-32-32s14.3-32 32-32h20.6C392.1 165.7 346.3 119.9 288 107.4V128c0 17.7-14.3 32-32 32s-32-14.3-32-32V107.4C165.7 119.9 119.9 165.7 107.4 224H128c17.7 0 32 14.3 32 32s-14.3 32-32 32H107.4zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"]};var rh={prefix:"fas",iconName:"caret-down",icon:[320,512,[],"f0d7","M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"]};var ah={prefix:"fas",iconName:"download",icon:[512,512,[],"f019","M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"]};var nh={prefix:"fas",iconName:"upload",icon:[512,512,[],"f093","M288 109.3V352c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3l-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0l128 128c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L288 109.3zM64 352H192c0 35.3 28.7 64 64 64s64-28.7 64-64H448c35.3 0 64 28.7 64 64v32c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V416c0-35.3 28.7-64 64-64zM432 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z"]};var th={prefix:"fas",iconName:"magnifying-glass-plus",icon:[512,512,["search-plus"],"f00e","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24V232h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H232V120c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z"]};var ih={prefix:"fas",iconName:"magnifying-glass-minus",icon:[512,512,["search-minus"],"f010","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24H280c13.3 0 24-10.7 24-24s-10.7-24-24-24H136z"]};function sh(e,c){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);c&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $(e){for(var c=1;ce.length)&&(c=e.length);for(var r=0,n=new Array(c);r-1;i--){var s=r[i],l=(s.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(l)>-1&&(n=s)}return B2.head.insertBefore(c,n),e}}var nS="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function le(){for(var e=12,c="";e-- >0;)c+=nS[Math.random()*62|0];return c}function S8(e){for(var c=[],r=(e||[]).length>>>0;r--;)c[r]=e[r];return c}function mi(e){return e.classList?S8(e.classList):(e.getAttribute("class")||"").split(" ").filter(function(c){return c})}function Gh(e){return"".concat(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function tS(e){return Object.keys(e||{}).reduce(function(c,r){return c+"".concat(r,'="').concat(Gh(e[r]),'" ')},"").trim()}function or(e){return Object.keys(e||{}).reduce(function(c,r){return c+"".concat(r,": ").concat(e[r].trim(),";")},"")}function hi(e){return e.size!==m4.size||e.x!==m4.x||e.y!==m4.y||e.rotate!==m4.rotate||e.flipX||e.flipY}function iS(e){var c=e.transform,r=e.containerWidth,n=e.iconWidth,i={transform:"translate(".concat(r/2," 256)")},s="translate(".concat(c.x*32,", ").concat(c.y*32,") "),l="scale(".concat(c.size/16*(c.flipX?-1:1),", ").concat(c.size/16*(c.flipY?-1:1),") "),u="rotate(".concat(c.rotate," 0 0)"),p={transform:"".concat(s," ").concat(l," ").concat(u)},h={transform:"translate(".concat(n/2*-1," -256)")};return{outer:i,inner:p,path:h}}function sS(e){var c=e.transform,r=e.width,n=r===void 0?J9:r,i=e.height,s=i===void 0?J9:i,l=e.startCentered,u=l===void 0?!1:l,p="";return u&&Dh?p+="translate(".concat(c.x/L6-n/2,"em, ").concat(c.y/L6-s/2,"em) "):u?p+="translate(calc(-50% + ".concat(c.x/L6,"em), calc(-50% + ").concat(c.y/L6,"em)) "):p+="translate(".concat(c.x/L6,"em, ").concat(c.y/L6,"em) "),p+="scale(".concat(c.size/L6*(c.flipX?-1:1),", ").concat(c.size/L6*(c.flipY?-1:1),") "),p+="rotate(".concat(c.rotate,"deg) "),p}var oS=`:root, :host { --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Solid"; diff --git a/package-lock.json b/package-lock.json index 1ef4b1a..da8bdb9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pixelcanvas-overlay", - "version": "1.0.3", + "version": "1.0.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "pixelcanvas-overlay", - "version": "1.0.3", + "version": "1.0.4", "license": "MIT", "dependencies": { "@fortawesome/fontawesome-free": "^6.5.1", diff --git a/package.json b/package.json index b4f995d..72a48db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pixelcanvas-overlay", - "version": "1.0.4", + "version": "1.0.5", "description": "Pixel canvas overlay", "main": "index.js", "scripts": { diff --git a/src/lib/canvashot.tsx b/src/lib/canvashot.tsx index d721c50..2d37dde 100644 --- a/src/lib/canvashot.tsx +++ b/src/lib/canvashot.tsx @@ -175,7 +175,9 @@ export async function takeCanvasShot(coordinates: Coordinates) { } try { - const canvas = await fetchCombineTiledImage(cords.x, cords.y, rect.height, rect.width, coordinates.uScale); + const canvas = await fetchCombineTiledImage( + cords.x, cords.y, rect.width, rect.height, coordinates.uScale + ); const url = canvas.toDataURL(); Popup.custom(, [{