vue-maplibre-compare 1.0.2

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.
@@ -0,0 +1 @@
1
+ (function(U,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("vue"),require("maplibre-gl")):typeof define=="function"&&define.amd?define(["exports","vue","maplibre-gl"],d):(U=typeof globalThis<"u"?globalThis:U||self,d(U.VueMaplibreCompare={},U.Vue,U.maplibregl))})(this,(function(U,d,X){"use strict";var x=Uint8Array,R=Uint16Array,Ve=Int32Array,pe=new x([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),ve=new x([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Ke=new x([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ge=function(e,r){for(var t=new R(31),n=0;n<31;++n)t[n]=r+=1<<e[n-1];for(var o=new Ve(t[30]),n=1;n<30;++n)for(var i=t[n];i<t[n+1];++i)o[i]=i-t[n]<<5|n;return{b:t,r:o}},ye=ge(pe,2),we=ye.b,qe=ye.r;we[28]=258,qe[258]=28;for(var We=ge(ve,0),Ge=We.b,Y=new R(32768),w=0;w<32768;++w){var $=(w&43690)>>1|(w&21845)<<1;$=($&52428)>>2|($&13107)<<2,$=($&61680)>>4|($&3855)<<4,Y[w]=(($&65280)>>8|($&255)<<8)>>1}for(var j=(function(e,r,t){for(var n=e.length,o=0,i=new R(r);o<n;++o)e[o]&&++i[e[o]-1];var a=new R(r);for(o=1;o<r;++o)a[o]=a[o-1]+i[o-1]<<1;var s;if(t){s=new R(1<<r);var l=15-r;for(o=0;o<n;++o)if(e[o])for(var c=o<<4|e[o],h=r-e[o],u=a[e[o]-1]++<<h,f=u|(1<<h)-1;u<=f;++u)s[Y[u]>>l]=c}else for(s=new R(n),o=0;o<n;++o)e[o]&&(s[o]=Y[a[e[o]-1]++]>>15-e[o]);return s}),_=new x(288),w=0;w<144;++w)_[w]=8;for(var w=144;w<256;++w)_[w]=9;for(var w=256;w<280;++w)_[w]=7;for(var w=280;w<288;++w)_[w]=8;for(var be=new x(32),w=0;w<32;++w)be[w]=5;var Je=j(_,9,1),Xe=j(be,5,1),Q=function(e){for(var r=e[0],t=1;t<e.length;++t)e[t]>r&&(r=e[t]);return r},k=function(e,r,t){var n=r/8|0;return(e[n]|e[n+1]<<8)>>(r&7)&t},ee=function(e,r){var t=r/8|0;return(e[t]|e[t+1]<<8|e[t+2]<<16)>>(r&7)},Ye=function(e){return(e+7)/8|0},Qe=function(e,r,t){return(t==null||t>e.length)&&(t=e.length),new x(e.subarray(r,t))},et=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],T=function(e,r,t){var n=new Error(r||et[e]);if(n.code=e,Error.captureStackTrace&&Error.captureStackTrace(n,T),!t)throw n;return n},te=function(e,r,t,n){var o=e.length,i=0;if(!o||r.f&&!r.l)return t||new x(0);var a=!t,s=a||r.i!=2,l=r.i;a&&(t=new x(o*3));var c=function(je){var _e=t.length;if(je>_e){var Fe=new x(Math.max(_e*2,je));Fe.set(t),t=Fe}},h=r.f||0,u=r.p||0,f=r.b||0,v=r.l,y=r.d,m=r.m,z=r.n,E=o*8;do{if(!v){h=k(e,u,1);var B=k(e,u+1,3);if(u+=3,B)if(B==1)v=Je,y=Xe,m=9,z=5;else if(B==2){var q=k(e,u,31)+257,ce=k(e,u+10,15)+4,p=q+k(e,u+5,31)+1;u+=14;for(var b=new x(p),M=new x(19),S=0;S<ce;++S)M[Ke[S]]=k(e,u+S*3,7);u+=ce*3;for(var W=Q(M),ue=(1<<W)-1,he=j(M,W,1),S=0;S<p;){var G=he[k(e,u,ue)];u+=G&15;var O=G>>4;if(O<16)b[S++]=O;else{var Z=0,J=0;for(O==16?(J=3+k(e,u,3),u+=2,Z=b[S-1]):O==17?(J=3+k(e,u,7),u+=3):O==18&&(J=11+k(e,u,127),u+=7);J--;)b[S++]=Z}}var He=b.subarray(0,q),D=b.subarray(q);m=Q(He),z=Q(D),v=j(He,m,1),y=j(D,z,1)}else T(1);else{var O=Ye(u)+4,I=e[O-4]|e[O-3]<<8,P=O+I;if(P>o){l&&T(0);break}s&&c(f+I),t.set(e.subarray(O,P),f),r.b=f+=I,r.p=u=P*8,r.f=h;continue}if(u>E){l&&T(0);break}}s&&c(f+131072);for(var Rt=(1<<m)-1,Ht=(1<<z)-1,fe=u;;fe=u){var Z=v[ee(e,u)&Rt],N=Z>>4;if(u+=Z&15,u>E){l&&T(0);break}if(Z||T(2),N<256)t[f++]=N;else if(N==256){fe=u,v=null;break}else{var Ie=N-254;if(N>264){var S=N-257,V=pe[S];Ie=k(e,u,(1<<V)-1)+we[S],u+=V}var de=y[ee(e,u)&Ht],me=de>>4;de||T(3),u+=de&15;var D=Ge[me];if(me>3){var V=ve[me];D+=ee(e,u)&(1<<V)-1,u+=V}if(u>E){l&&T(0);break}s&&c(f+131072);var Ze=f+Ie;if(f<D){var Ne=i-D,It=Math.min(D,Ze);for(Ne+f<0&&T(3);f<It;++f)t[f]=n[Ne+f]}for(;f<Ze;++f)t[f]=t[f-D]}}r.l=v,r.p=fe,r.b=f,r.f=h,v&&(h=1,r.m=m,r.d=y,r.n=z)}while(!h);return f!=t.length&&a?Qe(t,0,f):t.subarray(0,f)},tt=new x(0),rt=function(e){(e[0]!=31||e[1]!=139||e[2]!=8)&&T(6,"invalid gzip data");var r=e[3],t=10;r&4&&(t+=(e[10]|e[11]<<8)+2);for(var n=(r>>3&1)+(r>>4&1);n>0;n-=!e[t++]);return t+(r&2)},nt=function(e){var r=e.length;return(e[r-4]|e[r-3]<<8|e[r-2]<<16|e[r-1]<<24)>>>0},ot=function(e,r){return((e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31)&&T(6,"invalid zlib data"),(e[1]>>5&1)==1&&T(6,"invalid zlib data: "+(e[1]&32?"need":"unexpected")+" dictionary"),(e[1]>>3&4)+2};function it(e,r){return te(e,{i:2},r,r)}function at(e,r){var t=rt(e);return t+8>e.length&&T(6,"invalid gzip data"),te(e.subarray(t,-8),{i:2},new x(nt(e)),r)}function st(e,r){return te(e.subarray(ot(e),-4),{i:2},r,r)}function lt(e,r){return e[0]==31&&e[1]==139&&e[2]==8?at(e,r):(e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31?it(e,r):st(e,r)}var ct=typeof TextDecoder<"u"&&new TextDecoder,ut=0;try{ct.decode(tt,{stream:!0}),ut=1}catch{}var ht=Object.defineProperty,F=Math.pow,g=(e,r)=>ht(e,"name",{value:r,configurable:!0}),C=(e,r,t)=>new Promise((n,o)=>{var i=l=>{try{s(t.next(l))}catch(c){o(c)}},a=l=>{try{s(t.throw(l))}catch(c){o(c)}},s=l=>l.done?n(l.value):Promise.resolve(l.value).then(i,a);s((t=t.apply(e,r)).next())});g((e,r)=>{let t=!1,n="",o=L.GridLayer.extend({createTile:g((i,a)=>{let s=document.createElement("img"),l=new AbortController,c=l.signal;return s.cancel=()=>{l.abort()},t||(e.getHeader().then(h=>{h.tileType===1?console.error("Error: archive contains MVT vector tiles, but leafletRasterLayer is for displaying raster tiles. See https://github.com/protomaps/PMTiles/tree/main/js for details."):h.tileType===2?n="image/png":h.tileType===3?n="image/jpeg":h.tileType===4?n="image/webp":h.tileType===5&&(n="image/avif")}),t=!0),e.getZxy(i.z,i.x,i.y,c).then(h=>{if(h){let u=new Blob([h.data],{type:n}),f=window.URL.createObjectURL(u);s.src=f,s.cancel=void 0,a(void 0,s)}}).catch(h=>{if(h.name!=="AbortError")throw h}),s},"createTile"),_removeTile:g(function(i){let a=this._tiles[i];a&&(a.el.cancel&&a.el.cancel(),a.el.width=0,a.el.height=0,a.el.deleted=!0,L.DomUtil.remove(a.el),delete this._tiles[i],this.fire("tileunload",{tile:a.el,coords:this._keyToTileCoords(i)}))},"_removeTile")});return new o(r)},"leafletRasterLayer");var ft=g(e=>(r,t)=>{if(t instanceof AbortController)return e(r,t);let n=new AbortController;return e(r,n).then(o=>t(void 0,o.data,o.cacheControl||"",o.expires||""),o=>t(o)).catch(o=>t(o)),{cancel:g(()=>n.abort(),"cancel")}},"v3compat"),Ce=class{constructor(r){this.tilev4=g((t,n)=>C(this,null,function*(){if(t.type==="json"){let v=t.url.substr(10),y=this.tiles.get(v);if(y||(y=new $e(v),this.tiles.set(v,y)),this.metadata)return{data:yield y.getTileJson(t.url)};let m=yield y.getHeader();return(m.minLon>=m.maxLon||m.minLat>=m.maxLat)&&console.error(`Bounds of PMTiles archive ${m.minLon},${m.minLat},${m.maxLon},${m.maxLat} are not valid.`),{data:{tiles:[`${t.url}/{z}/{x}/{y}`],minzoom:m.minZoom,maxzoom:m.maxZoom,bounds:[m.minLon,m.minLat,m.maxLon,m.maxLat]}}}let o=new RegExp(/pmtiles:\/\/(.+)\/(\d+)\/(\d+)\/(\d+)/),i=t.url.match(o);if(!i)throw new Error("Invalid PMTiles protocol URL");let a=i[1],s=this.tiles.get(a);s||(s=new $e(a),this.tiles.set(a,s));let l=i[2],c=i[3],h=i[4],u=yield s.getHeader(),f=yield s?.getZxy(+l,+c,+h,n.signal);if(f)return{data:new Uint8Array(f.data),cacheControl:f.cacheControl,expires:f.expires};if(u.tileType===1){if(this.errorOnMissingTile)throw new Error("Tile not found.");return{data:new Uint8Array}}return{data:null}}),"tilev4"),this.tile=ft(this.tilev4),this.tiles=new Map,this.metadata=r?.metadata||!1,this.errorOnMissingTile=r?.errorOnMissingTile||!1}add(r){this.tiles.set(r.source.getKey(),r)}get(r){return this.tiles.get(r)}};g(Ce,"Protocol");var dt=Ce;function Le(e,r){return(r>>>0)*4294967296+(e>>>0)}g(Le,"toNum");function Ee(e,r){let t=r.buf,n=t[r.pos++],o=(n&112)>>4;if(n<128||(n=t[r.pos++],o|=(n&127)<<3,n<128)||(n=t[r.pos++],o|=(n&127)<<10,n<128)||(n=t[r.pos++],o|=(n&127)<<17,n<128)||(n=t[r.pos++],o|=(n&127)<<24,n<128)||(n=t[r.pos++],o|=(n&1)<<31,n<128))return Le(e,o);throw new Error("Expected varint not more than 10 bytes")}g(Ee,"readVarintRemainder");function H(e){let r=e.buf,t=r[e.pos++],n=t&127;return t<128||(t=r[e.pos++],n|=(t&127)<<7,t<128)||(t=r[e.pos++],n|=(t&127)<<14,t<128)||(t=r[e.pos++],n|=(t&127)<<21,t<128)?n:(t=r[e.pos],n|=(t&15)<<28,Ee(n,e))}g(H,"readVarint");function re(e,r,t,n){if(n===0){t===1&&(r[0]=e-1-r[0],r[1]=e-1-r[1]);let o=r[0];r[0]=r[1],r[1]=o}}g(re,"rotate");function Me(e,r){let t=F(2,e),n=r,o=r,i=r,a=[0,0],s=1;for(;s<t;)n=1&i/2,o=1&(i^n),re(s,a,n,o),a[0]+=s*n,a[1]+=s*o,i=i/4,s*=2;return[e,a[0],a[1]]}g(Me,"idOnLevel");var mt=[0,1,5,21,85,341,1365,5461,21845,87381,349525,1398101,5592405,22369621,89478485,357913941,1431655765,5726623061,22906492245,91625968981,366503875925,1466015503701,5864062014805,23456248059221,93824992236885,375299968947541,0x5555555555555];function Se(e,r,t){if(e>26)throw new Error("Tile zoom level exceeds max safe number limit (26)");if(r>F(2,e)-1||t>F(2,e)-1)throw new Error("tile x/y outside zoom level bounds");let n=mt[e],o=F(2,e),i=0,a=0,s=0,l=[r,t],c=o/2;for(;c>0;)i=(l[0]&c)>0?1:0,a=(l[1]&c)>0?1:0,s+=c*c*(3*i^a),re(c,l,i,a),c=c/2;return n+s}g(Se,"zxyToTileId");function pt(e){let r=0;for(let t=0;t<27;t++){let n=(1<<t)*(1<<t);if(r+n>e)return Me(t,e-r);r+=n}throw new Error("Tile zoom level exceeds max safe number limit (26)")}g(pt,"tileIdToZxy");var vt=(e=>(e[e.Unknown=0]="Unknown",e[e.None=1]="None",e[e.Gzip=2]="Gzip",e[e.Brotli=3]="Brotli",e[e.Zstd=4]="Zstd",e))(vt||{});function K(e,r){return C(this,null,function*(){if(r===1||r===0)return e;if(r===2){if(typeof globalThis.DecompressionStream>"u")return lt(new Uint8Array(e));let t=new Response(e).body;if(!t)throw new Error("Failed to read response stream");let n=t.pipeThrough(new globalThis.DecompressionStream("gzip"));return new Response(n).arrayBuffer()}throw new Error("Compression method not supported")})}g(K,"defaultDecompress");var gt=(e=>(e[e.Unknown=0]="Unknown",e[e.Mvt=1]="Mvt",e[e.Png=2]="Png",e[e.Jpeg=3]="Jpeg",e[e.Webp=4]="Webp",e[e.Avif=5]="Avif",e))(gt||{});function xe(e){return e===1?".mvt":e===2?".png":e===3?".jpg":e===4?".webp":e===5?".avif":""}g(xe,"tileTypeExt");var yt=127;function Te(e,r){let t=0,n=e.length-1;for(;t<=n;){let o=n+t>>1,i=r-e[o].tileId;if(i>0)t=o+1;else if(i<0)n=o-1;else return e[o]}return n>=0&&(e[n].runLength===0||r-e[n].tileId<e[n].runLength)?e[n]:null}g(Te,"findTile");var wt=class{constructor(r){this.file=r}getKey(){return this.file.name}getBytes(r,t){return C(this,null,function*(){return{data:yield this.file.slice(r,r+t).arrayBuffer()}})}};g(wt,"FileSource");var ze=class{constructor(r,t=new Headers){this.url=r,this.customHeaders=t,this.mustReload=!1;let n="";"navigator"in globalThis&&(n=globalThis.navigator.userAgent||"");let o=n.indexOf("Windows")>-1,i=/Chrome|Chromium|Edg|OPR|Brave/.test(n);this.chromeWindowsNoCache=!1,o&&i&&(this.chromeWindowsNoCache=!0)}getKey(){return this.url}setHeaders(r){this.customHeaders=r}getBytes(r,t,n,o){return C(this,null,function*(){let i,a;n?a=n:(i=new AbortController,a=i.signal);let s=new Headers(this.customHeaders);s.set("range",`bytes=${r}-${r+t-1}`);let l;this.mustReload?l="reload":this.chromeWindowsNoCache&&(l="no-store");let c=yield fetch(this.url,{signal:a,cache:l,headers:s});if(r===0&&c.status===416){let f=c.headers.get("Content-Range");if(!f||!f.startsWith("bytes */"))throw new Error("Missing content-length on 416 response");let v=+f.substr(8);c=yield fetch(this.url,{signal:a,cache:"reload",headers:{range:`bytes=0-${v-1}`}})}let h=c.headers.get("Etag");if(h!=null&&h.startsWith("W/")&&(h=null),c.status===416||o&&h&&h!==o)throw this.mustReload=!0,new oe(`Server returned non-matching ETag ${o} after one retry. Check browser extensions and servers for issues that may affect correct ETag headers.`);if(c.status>=300)throw new Error(`Bad response code: ${c.status}`);let u=c.headers.get("Content-Length");if(c.status===200&&(!u||+u>t))throw i&&i.abort(),new Error("Server returned no content-length header or content-length exceeding request. Check that your storage backend supports HTTP Byte Serving.");return{data:yield c.arrayBuffer(),etag:h||void 0,cacheControl:c.headers.get("Cache-Control")||void 0,expires:c.headers.get("Expires")||void 0}})}};g(ze,"FetchSource");var bt=ze;function A(e,r){let t=e.getUint32(r+4,!0),n=e.getUint32(r+0,!0);return t*F(2,32)+n}g(A,"getUint64");function Oe(e,r){let t=new DataView(e),n=t.getUint8(7);if(n>3)throw new Error(`Archive is spec version ${n} but this library supports up to spec version 3`);return{specVersion:n,rootDirectoryOffset:A(t,8),rootDirectoryLength:A(t,16),jsonMetadataOffset:A(t,24),jsonMetadataLength:A(t,32),leafDirectoryOffset:A(t,40),leafDirectoryLength:A(t,48),tileDataOffset:A(t,56),tileDataLength:A(t,64),numAddressedTiles:A(t,72),numTileEntries:A(t,80),numTileContents:A(t,88),clustered:t.getUint8(96)===1,internalCompression:t.getUint8(97),tileCompression:t.getUint8(98),tileType:t.getUint8(99),minZoom:t.getUint8(100),maxZoom:t.getUint8(101),minLon:t.getInt32(102,!0)/1e7,minLat:t.getInt32(106,!0)/1e7,maxLon:t.getInt32(110,!0)/1e7,maxLat:t.getInt32(114,!0)/1e7,centerZoom:t.getUint8(118),centerLon:t.getInt32(119,!0)/1e7,centerLat:t.getInt32(123,!0)/1e7,etag:r}}g(Oe,"bytesToHeader");function ne(e){let r={buf:new Uint8Array(e),pos:0},t=H(r),n=[],o=0;for(let i=0;i<t;i++){let a=H(r);n.push({tileId:o+a,offset:0,length:0,runLength:1}),o+=a}for(let i=0;i<t;i++)n[i].runLength=H(r);for(let i=0;i<t;i++)n[i].length=H(r);for(let i=0;i<t;i++){let a=H(r);a===0&&i>0?n[i].offset=n[i-1].offset+n[i-1].length:n[i].offset=a-1}return n}g(ne,"deserializeIndex");var Ae=class extends Error{};g(Ae,"EtagMismatch");var oe=Ae;function ie(e,r){return C(this,null,function*(){let t=yield e.getBytes(0,16384);if(new DataView(t.data).getUint16(0,!0)!==19792)throw new Error("Wrong magic number for PMTiles archive");let n=t.data.slice(0,yt),o=Oe(n,t.etag),i=t.data.slice(o.rootDirectoryOffset,o.rootDirectoryOffset+o.rootDirectoryLength),a=`${e.getKey()}|${o.etag||""}|${o.rootDirectoryOffset}|${o.rootDirectoryLength}`,s=ne(yield r(i,o.internalCompression));return[o,[a,s.length,s]]})}g(ie,"getHeaderAndRoot");function ae(e,r,t,n,o){return C(this,null,function*(){let i=yield e.getBytes(t,n,void 0,o.etag),a=yield r(i.data,o.internalCompression),s=ne(a);if(s.length===0)throw new Error("Empty directory is invalid");return s})}g(ae,"getDirectory");var Ct=class{constructor(r=100,t=!0,n=K){this.cache=new Map,this.maxCacheEntries=r,this.counter=1,this.decompress=n}getHeader(r){return C(this,null,function*(){let t=r.getKey(),n=this.cache.get(t);if(n)return n.lastUsed=this.counter++,n.data;let o=yield ie(r,this.decompress);return o[1]&&this.cache.set(o[1][0],{lastUsed:this.counter++,data:o[1][2]}),this.cache.set(t,{lastUsed:this.counter++,data:o[0]}),this.prune(),o[0]})}getDirectory(r,t,n,o){return C(this,null,function*(){let i=`${r.getKey()}|${o.etag||""}|${t}|${n}`,a=this.cache.get(i);if(a)return a.lastUsed=this.counter++,a.data;let s=yield ae(r,this.decompress,t,n,o);return this.cache.set(i,{lastUsed:this.counter++,data:s}),this.prune(),s})}prune(){if(this.cache.size>this.maxCacheEntries){let r=1/0,t;this.cache.forEach((n,o)=>{n.lastUsed<r&&(r=n.lastUsed,t=o)}),t&&this.cache.delete(t)}}invalidate(r){return C(this,null,function*(){this.cache.delete(r.getKey())})}};g(Ct,"ResolvedValueCache");var Ue=class{constructor(r=100,t=!0,n=K){this.cache=new Map,this.invalidations=new Map,this.maxCacheEntries=r,this.counter=1,this.decompress=n}getHeader(r){return C(this,null,function*(){let t=r.getKey(),n=this.cache.get(t);if(n)return n.lastUsed=this.counter++,yield n.data;let o=new Promise((i,a)=>{ie(r,this.decompress).then(s=>{s[1]&&this.cache.set(s[1][0],{lastUsed:this.counter++,data:Promise.resolve(s[1][2])}),i(s[0]),this.prune()}).catch(s=>{a(s)})});return this.cache.set(t,{lastUsed:this.counter++,data:o}),o})}getDirectory(r,t,n,o){return C(this,null,function*(){let i=`${r.getKey()}|${o.etag||""}|${t}|${n}`,a=this.cache.get(i);if(a)return a.lastUsed=this.counter++,yield a.data;let s=new Promise((l,c)=>{ae(r,this.decompress,t,n,o).then(h=>{l(h),this.prune()}).catch(h=>{c(h)})});return this.cache.set(i,{lastUsed:this.counter++,data:s}),s})}prune(){if(this.cache.size>=this.maxCacheEntries){let r=1/0,t;this.cache.forEach((n,o)=>{n.lastUsed<r&&(r=n.lastUsed,t=o)}),t&&this.cache.delete(t)}}invalidate(r){return C(this,null,function*(){let t=r.getKey();if(this.invalidations.get(t))return yield this.invalidations.get(t);this.cache.delete(r.getKey());let n=new Promise((o,i)=>{this.getHeader(r).then(a=>{o(),this.invalidations.delete(t)}).catch(a=>{i(a)})});this.invalidations.set(t,n)})}};g(Ue,"SharedPromiseCache");var Lt=Ue,ke=class{constructor(r,t,n){typeof r=="string"?this.source=new bt(r):this.source=r,n?this.decompress=n:this.decompress=K,t?this.cache=t:this.cache=new Lt}getHeader(){return C(this,null,function*(){return yield this.cache.getHeader(this.source)})}getZxyAttempt(r,t,n,o){return C(this,null,function*(){let i=Se(r,t,n),a=yield this.cache.getHeader(this.source);if(r<a.minZoom||r>a.maxZoom)return;let s=a.rootDirectoryOffset,l=a.rootDirectoryLength;for(let c=0;c<=3;c++){let h=yield this.cache.getDirectory(this.source,s,l,a),u=Te(h,i);if(u){if(u.runLength>0){let f=yield this.source.getBytes(a.tileDataOffset+u.offset,u.length,o,a.etag);return{data:yield this.decompress(f.data,a.tileCompression),cacheControl:f.cacheControl,expires:f.expires}}s=a.leafDirectoryOffset+u.offset,l=u.length}else return}throw new Error("Maximum directory depth exceeded")})}getZxy(r,t,n,o){return C(this,null,function*(){try{return yield this.getZxyAttempt(r,t,n,o)}catch(i){if(i instanceof oe)return this.cache.invalidate(this.source),yield this.getZxyAttempt(r,t,n,o);throw i}})}getMetadataAttempt(){return C(this,null,function*(){let r=yield this.cache.getHeader(this.source),t=yield this.source.getBytes(r.jsonMetadataOffset,r.jsonMetadataLength,void 0,r.etag),n=yield this.decompress(t.data,r.internalCompression),o=new TextDecoder("utf-8");return JSON.parse(o.decode(n))})}getMetadata(){return C(this,null,function*(){try{return yield this.getMetadataAttempt()}catch(r){if(r instanceof oe)return this.cache.invalidate(this.source),yield this.getMetadataAttempt();throw r}})}getTileJson(r){return C(this,null,function*(){let t=yield this.getHeader(),n=yield this.getMetadata(),o=xe(t.tileType);return{tilejson:"3.0.0",scheme:"xyz",tiles:[`${r}/{z}/{x}/{y}${o}`],vector_layers:n.vector_layers,attribution:n.attribution,description:n.description,name:n.name,version:n.version,bounds:[t.minLon,t.minLat,t.maxLon,t.maxLat],center:[t.centerLon,t.centerLat,t.centerZoom],minzoom:t.minZoom,maxzoom:t.maxZoom}})}};g(ke,"PMTiles");var $e=ke;function Et(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var se,Be;function Mt(){if(Be)return se;Be=1;function e(t,n){var o=t.getCenter(),i=t.getZoom(),a=t.getBearing(),s=t.getPitch();n.forEach(function(l){l.jumpTo({center:o,zoom:i,bearing:a,pitch:s})})}function r(){var t,n=arguments.length;if(n===1)t=arguments[0];else{t=[];for(var o=0;o<n;o++)t.push(arguments[o])}var i=[];t.forEach(function(c,h){i[h]=l.bind(null,c,t.filter(function(u,f){return f!==h}))});function a(){t.forEach(function(c,h){c.on("move",i[h])})}function s(){t.forEach(function(c,h){c.off("move",i[h])})}function l(c,h){s(),e(c,h),a()}return a(),function(){s(),i=[],t=[]}}return se=r,se}var St=Mt();const xt=Et(St);class Tt{events=new Map;on(r,t){const n=this.events.get(r)||[];n.push(t),this.events.set(r,n)}off(r,t){const n=this.events.get(r);if(n){const o=n.indexOf(t);o>-1&&(n.splice(o,1),n.length===0?this.events.delete(r):this.events.set(r,n))}}emit(r,...t){const n=this.events.get(r);n&&n.forEach(o=>o(...t))}}function zt(e,r,t,n={}){const o={orientation:"vertical",mousemove:!1,...n},i=o.orientation==="horizontal",a=d.ref(null),s=d.ref(null),l=d.ref(null),c=d.ref(null),h=new Tt;let u=null,f=null,v=!1;const y=p=>{if(!l.value||!s.value)return;const b=i?l.value.height:l.value.width,M=Math.min(p,b),S=i?`translate(0, ${M}px)`:`translate(${M}px, 0)`;s.value.style.transform=S;const W=i?`rect(0, 999em, ${M}px, 0)`:`rect(0, ${M}px, ${l.value.height}px, 0)`,ue=i?`rect(${M}px, 999em, ${l.value.height}px, 0)`:`rect(0, 999em, ${l.value.height}px, ${M}px)`,he=e.getContainer(),G=r.getContainer();he.style.clip=W,G.style.clip=ue,c.value=M},m=p=>{const M=(p.touches?p.touches[0]:p).clientX-(l.value?.left??0);return Math.min(Math.max(M,0),l.value?.width??0)},z=p=>{const M=(p.touches?p.touches[0]:p).clientY-(l.value?.top??0);return Math.min(Math.max(M,0),l.value?.height??0)},E=p=>{p.preventDefault(),o.mousemove&&(s.value.style.pointerEvents=p.touches?"auto":"none",a.value.style.pointerEvents=p.touches?"auto":"none"),y(i?z(p):m(p))},B=()=>{document.body.style.userSelect="",document.body.style.webkitUserSelect="",document.body.style.mozUserSelect="",document.body.style.msUserSelect=""},O=()=>{document.removeEventListener("mousemove",E),document.removeEventListener("mouseup",O),B(),h.emit("slideend",{currentPosition:c.value})},I=()=>{document.removeEventListener("touchmove",E),document.removeEventListener("touchend",I),B(),h.emit("slideend",{currentPosition:c.value})},P=p=>{p.preventDefault(),document.body.style.userSelect="none",document.body.style.webkitUserSelect="none",document.body.style.mozUserSelect="none",document.body.style.msUserSelect="none",p.touches?(document.addEventListener("touchmove",E,{passive:!1}),document.addEventListener("touchend",I)):(document.addEventListener("mousemove",E),document.addEventListener("mouseup",O))};return{initialize:()=>{if(v||!t)return;const p=typeof t=="string"?document.querySelector(t):t;if(!p)throw new Error("Invalid container element for map compare.");v=!0,s.value=document.createElement("div"),s.value.className=i?"maplibre-compare maplibre-compare-horizontal":"maplibre-compare",a.value=document.createElement("div"),a.value.className=i?"compare-swiper-horizontal":"compare-swiper-vertical",s.value.appendChild(a.value),p.appendChild(s.value),l.value=r.getContainer().getBoundingClientRect();const b=(i?l.value.height:l.value.width)/2;y(b),u=xt(e,r),f=()=>{l.value=r.getContainer().getBoundingClientRect(),c.value&&y(c.value)},r.on("resize",f),o.mousemove&&(e.getContainer().addEventListener("mousemove",E),r.getContainer().addEventListener("mousemove",E)),a.value.addEventListener("mousedown",P),a.value.addEventListener("touchstart",P)},unmount:()=>{if(!v)return;v=!1,u?.(),f&&r.off("resize",f);const p=e.getContainer(),b=r.getContainer();p&&(p.style.clip="",p.removeEventListener("mousemove",E)),b&&(b.style.clip="",b.removeEventListener("mousemove",E)),a.value?.removeEventListener("mousedown",P),a.value?.removeEventListener("touchstart",P),s.value?.remove(),a.value=null,s.value=null,l.value=null,c.value=null},setSlider:p=>y(p),on:(p,b)=>{h.on(p,b)},off:(p,b)=>{h.off(p,b)}}}const Ot=new dt;X.addProtocol("pmtiles",Ot.tile);const At=d.defineComponent({name:"MapCompare",props:{mapStyleA:{type:[String,Object],required:!0},mapStyleB:{type:[String,Object],required:!0},mapLayersA:{type:Array,default:()=>[]},mapLayersB:{type:Array,default:()=>[]},center:{type:Array,default:()=>[0,0]},zoom:{type:Number,default:1},bearing:{type:Number,default:0},pitch:{type:Number,default:0},swiperOptions:{type:Object,default:()=>({thickness:4,orientation:"vertical",grabThickness:20,handleSize:40,lineColor:"white",handleColor:"white",handleShadowColor:"rgba(0, 0, 0, 0.3)",arrowColor:"#666",darkMode:!1})}},setup(e,{slots:r}){const t=d.ref(),n=d.ref(),o=d.ref(),i=d.ref(null);let a=null,s=null,l=null;const c=v=>{const y=v==="A"?a:s,m=v==="A"?e.mapLayersA:e.mapLayersB;if(!y||!y.isStyleLoaded())return;const z=y.getStyle();!z||!z.layers||m&&m.length>0&&z.layers.forEach(E=>{m.includes(E.id)?y.setLayoutProperty(E.id,"visibility","visible"):y.setLayoutProperty(E.id,"visibility","none")})},h=()=>{if(!a||!s||!t.value)return;l&&(l.unmount(),l=null),l=zt(a,s,t.value,{orientation:e.swiperOptions?.orientation??"vertical",mousemove:!1}),l.initialize();const y=(e.swiperOptions?.orientation??"vertical")==="horizontal"?".compare-swiper-horizontal":".compare-swiper-vertical",m=t.value.querySelector(y);m&&(i.value=m,r.icon&&i.value.classList.add("has-custom-icon"))},u=async()=>{!n.value||!o.value||!t.value||(a=new X.Map({container:n.value,style:e.mapStyleA,center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),s=new X.Map({container:o.value,style:e.mapStyleB,center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),await Promise.all([new Promise(v=>{a.loaded()?v():a.on("load",()=>v())}),new Promise(v=>{s.loaded()?v():s.on("load",()=>v())})]),h(),c("A"),c("B"))};d.watch(()=>e.mapLayersA,()=>{c("A")},{deep:!0}),d.watch(()=>e.mapLayersB,()=>{c("B")},{deep:!0}),d.watch(()=>e.mapStyleA,()=>{a?.setStyle(e.mapStyleA)},{deep:!0}),d.watch(()=>e.mapStyleB,()=>{s?.setStyle(e.mapStyleB)},{deep:!0}),d.watch(()=>e.swiperOptions?.orientation,()=>{a&&s&&a.loaded()&&s.loaded()&&h()}),d.onMounted(()=>{u()}),d.onBeforeUnmount(()=>{l?.unmount(),l=null,a&&(a.remove(),a=null),s&&(s.remove(),s=null)});const f=d.computed(()=>{const v=e.swiperOptions?.darkMode??!1,y={dark:{lineColor:"#333",handleColor:"#333",handleShadowColor:"rgba(0, 0, 0, 0.3)",arrowColor:"#999"},light:{lineColor:"white",handleColor:"white",handleShadowColor:"rgba(0, 0, 0, 0.3)",arrowColor:"#666"}},m=v?y.dark:y.light,z=e.swiperOptions?.lineColor??m.lineColor,E=e.swiperOptions?.handleColor??m.handleColor,B=e.swiperOptions?.arrowColor??m.arrowColor;return{thickness:e.swiperOptions?.thickness??4,grabThickness:e.swiperOptions?.grabThickness??4,handleSize:e.swiperOptions?.handleSize??40,lineColor:z,handleColor:E,handleShadowColor:m.handleShadowColor,arrowColor:B}});return{containerRef:t,mapARef:n,mapBRef:o,swiperRef:i,hasIconSlot:!!r.icon,swiperOpts:f}}}),Pe=(e,r)=>{const t=e.__vccOpts||e;for(const[n,o]of r)t[n]=o;return t},Ut={ref:"mapARef",class:"map map-a"},kt={ref:"mapBRef",class:"map map-b"},$t={class:"custom-swiper-icon"};function Bt(e,r,t,n,o,i){return d.openBlock(),d.createElementBlock("div",{ref:"containerRef",class:"map-compare-container",style:d.normalizeStyle({"--swiper-thickness":`${e.swiperOpts.thickness}px`,"--swiper-grab-thickness":`${Math.max(e.swiperOpts.grabThickness,e.swiperOpts.thickness)}px`,"--swiper-handle-size":`${e.swiperOpts.handleSize}px`,"--swiper-line-color":e.swiperOpts.lineColor,"--swiper-handle-color":e.swiperOpts.handleColor,"--swiper-handle-shadow-color":e.swiperOpts.handleShadowColor,"--swiper-arrow-color":e.swiperOpts.arrowColor})},[d.createElementVNode("div",Ut,null,512),d.createElementVNode("div",kt,null,512),e.swiperRef&&e.hasIconSlot?(d.openBlock(),d.createBlock(d.Teleport,{key:0,to:e.swiperRef},[d.createElementVNode("div",$t,[d.renderSlot(e.$slots,"icon",{},void 0,!0)])],8,["to"])):d.createCommentVNode("",!0)],4)}const le=Pe(At,[["render",Bt],["__scopeId","data-v-cfcdf130"]]),Pt=d.defineComponent({name:"LayerCompare",components:{MapCompare:le},props:{mapStyle:{type:[String,Object],required:!0},mapLayersA:{type:Array,default:()=>[]},mapLayersB:{type:Array,default:()=>[]},center:{type:Array,default:()=>[0,0]},zoom:{type:Number,default:1},bearing:{type:Number,default:0},pitch:{type:Number,default:0},swiperOptions:{type:Object,default:()=>({thickness:4,grabThickness:20,orientation:"vertical",handleSize:40,lineColor:"white",handleColor:"white",handleShadowColor:"rgba(0, 0, 0, 0.3)",arrowColor:"#666"})}},setup(){return{}}});function Dt(e,r,t,n,o,i){const a=d.resolveComponent("MapCompare");return d.openBlock(),d.createBlock(a,{"map-style-a":e.mapStyle,"map-style-b":e.mapStyle,"swiper-options":e.swiperOptions,"map-layers-a":e.mapLayersA,"map-layers-b":e.mapLayersB,center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch},null,8,["map-style-a","map-style-b","swiper-options","map-layers-a","map-layers-b","center","zoom","bearing","pitch"])}const De=Pe(Pt,[["render",Dt]]),Re={install(e){e.component("MapCompare",le),e.component("LayerCompare",De)}};U.LayerCompare=De,U.MapCompare=le,U.MapComparePlugin=Re,U.default=Re,Object.defineProperties(U,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "vue-maplibre-compare",
3
+ "version": "1.0.2",
4
+ "description": "A Vue 3 component for comparing MapLibre maps side-by-side with a slider",
5
+ "type": "module",
6
+ "main": "./dist/vue-maplibre-compare.umd.js",
7
+ "module": "./dist/vue-maplibre-compare.es.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/vue-maplibre-compare.es.js",
13
+ "require": "./dist/vue-maplibre-compare.umd.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "dev": "vite --config vite.config.demo.ts",
21
+ "build": "vite build",
22
+ "build:demo": "vite build --config vite.config.demo.ts",
23
+ "preview": "vite preview --config vite.config.demo.ts",
24
+ "lint": "eslint . --ext .js,.ts,.vue",
25
+ "format": "eslint . --ext .js,.ts,.vue --fix",
26
+ "test": "vitest run",
27
+ "test:watch": "vitest",
28
+ "test:coverage": "vitest run --coverage",
29
+ "version": "standard-version",
30
+ "version:minor": "standard-version --release-as minor",
31
+ "version:major": "standard-version --release-as major",
32
+ "version:patch": "standard-version --release-as patch",
33
+ "release": "npm run build && npm run version && git push --follow-tags"
34
+ },
35
+ "keywords": [
36
+ "vue",
37
+ "vue3",
38
+ "maplibre",
39
+ "map",
40
+ "compare",
41
+ "slider",
42
+ "comparison"
43
+ ],
44
+ "author": "",
45
+ "license": "MIT",
46
+ "peerDependencies": {
47
+ "maplibre-gl": "^4.0.0 || ^5.0.0",
48
+ "vue": "^3.0.0"
49
+ },
50
+ "devDependencies": {
51
+ "@types/mapbox-gl": "^3.4.1",
52
+ "@types/node": "^24.10.1",
53
+ "@typescript-eslint/eslint-plugin": "^7.18.0",
54
+ "@typescript-eslint/parser": "^7.18.0",
55
+ "@vitejs/plugin-vue": "^6.0.2",
56
+ "@vue/test-utils": "^2.4.6",
57
+ "@vitest/coverage-v8": "^2.1.8",
58
+ "eslint": "^8.57.1",
59
+ "eslint-config-airbnb-base": "^15.0.0",
60
+ "eslint-config-airbnb-typescript": "^18.0.0",
61
+ "eslint-import-resolver-typescript": "^4.4.4",
62
+ "eslint-plugin-import": "^2.32.0",
63
+ "eslint-plugin-vue": "^9.33.0",
64
+ "happy-dom": "^15.11.7",
65
+ "typescript": "^5.9.3",
66
+ "standard-version": "^9.5.0",
67
+ "vite": "^7.2.2",
68
+ "vite-plugin-dts": "^4.5.4",
69
+ "vitest": "^2.1.8",
70
+ "vue": "^3.5.24",
71
+ "vue-tsc": "^2.2.12"
72
+ },
73
+ "dependencies": {
74
+ "@mapbox/mapbox-gl-sync-move": "^0.3.1",
75
+ "maplibre-gl": "^4.0.0 || ^5.0.0",
76
+ "pmtiles": "^4.3.0"
77
+ }
78
+ }