maplibre-gl-layer 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  A layer control for [MapLibre GL JS](https://maplibre.org/maplibre-gl-js/docs/).
4
4
 
5
+ ![maplibre-gl-layer](./docs/image.png)
6
+
5
7
  ## Installation
6
8
 
7
9
  ```sh
@@ -14,6 +16,7 @@ npm install maplibre-gl-layer
14
16
  import { Map } from "maplibre-gl";
15
17
  import "maplibre-gl/dist/maplibre-gl.css";
16
18
  import { LayerControl } from "maplibre-gl-layer";
19
+ import 'maplibre-gl-layer/style.css'
17
20
 
18
21
  const map = new Map({
19
22
  /* YOUR_MAP_OPTIONS */
@@ -22,12 +25,12 @@ const map = new Map({
22
25
  map.addControl(new LayerControl({
23
26
  layers: [
24
27
  {
25
- name: 'light',
26
- style: 'https://api.protomaps.com/styles/v4/white/ja.json',
28
+ name: 'STYLE 1',
29
+ style: YOUR_AWESOME_STYLE
27
30
  },
28
31
  {
29
- name: 'dark',
30
- style: 'https://api.protomaps.com/styles/v4/black/ja.json',
32
+ name: 'STYLE 2',
33
+ style: YOUR_AWESOME_STYLE,
31
34
  }
32
35
  ]
33
36
  }))
@@ -1 +1 @@
1
- .maplibregl-ctrl button.maplibregl-ctrl-layers .maplibregl-ctrl-icon{background-image:url(./layers.svg)}.maplibregl-ctrl-layers-dialog{position:absolute;margin:0;padding:0;background-color:transparent;border:none;box-shadow:0 0 0 2px #0000001a;border-radius:5px}.maplibregl-ctrl-layers-dialog .maplibregl-ctrl-layers-dialog-content{padding:6px 14px;background-color:#fff}.maplibregl-ctrl-layers-dialog::backdrop{background:#fff3}.maplibregl-ctrl-layers-dialog-item{margin:6px 0}.maplibregl-ctrl-layers-dialog-item label{display:flex;align-items:center;font-size:14px;color:#333}.maplibregl-ctrl-layers-dialog-item input{margin:0 8px 0 0}
1
+ .maplibregl-ctrl button.maplibregl-ctrl-layer .maplibregl-ctrl-icon{background-image:url(./layer.svg)}.maplibregl-ctrl-layer-dialog{position:absolute;margin:0;padding:0;background-color:transparent;border:none;box-shadow:0 0 0 2px #0000001a;border-radius:5px}.maplibregl-ctrl-layer-dialog .maplibregl-ctrl-layer-dialog-content{padding:6px 14px;background-color:#fff}.maplibregl-ctrl-layer-dialog::backdrop{background:#fff3}.maplibregl-ctrl-layer-dialog-item{margin:6px 0}.maplibregl-ctrl-layer-dialog-item label{display:flex;align-items:center;font-size:14px;color:#333}.maplibregl-ctrl-layer-dialog-item input{margin:0 8px 0 0}
@@ -1,30 +1,30 @@
1
1
  var u = Object.defineProperty;
2
2
  var g = (c, e, t) => e in c ? u(c, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : c[e] = t;
3
- var a = (c, e, t) => g(c, typeof e != "symbol" ? e + "" : e, t);
3
+ var l = (c, e, t) => g(c, typeof e != "symbol" ? e + "" : e, t);
4
4
  class m {
5
5
  constructor(e, t) {
6
- a(this, "dialog");
7
- a(this, "options");
8
- a(this, "layerChangeCallback", () => {
6
+ l(this, "dialog");
7
+ l(this, "options");
8
+ l(this, "layerChangeCallback", () => {
9
9
  });
10
- this.options = e, this.dialog = document.createElement("dialog"), this.dialog.classList.add("maplibregl-ctrl-layers-dialog"), document.body.appendChild(this.dialog), this.dialog.addEventListener("click", () => {
10
+ this.options = e, this.dialog = document.createElement("dialog"), this.dialog.classList.add("maplibregl-ctrl-layer-dialog"), document.body.appendChild(this.dialog), this.dialog.addEventListener("click", () => {
11
11
  this.dialog.close();
12
12
  });
13
13
  const i = document.createElement("div");
14
- i.classList.add("maplibregl-ctrl-layers-dialog-content"), i.addEventListener("click", (s) => {
15
- s.stopPropagation();
16
- }), this.dialog.appendChild(i), this.options.layers.forEach((s) => {
17
- const l = document.createElement("div");
18
- l.classList.add("maplibregl-ctrl-layers-dialog-item");
14
+ i.classList.add("maplibregl-ctrl-layer-dialog-content"), i.addEventListener("click", (r) => {
15
+ r.stopPropagation();
16
+ }), this.dialog.appendChild(i), this.options.layers.forEach((r) => {
17
+ const a = document.createElement("div");
18
+ a.classList.add("maplibregl-ctrl-layer-dialog-item");
19
19
  const d = document.createElement("label");
20
- l.appendChild(d);
20
+ a.appendChild(d);
21
21
  const n = document.createElement("input");
22
- n.setAttribute("type", "radio"), n.setAttribute("name", "layer"), t.name === s.name && n.setAttribute("checked", "checked"), n.addEventListener("change", () => {
22
+ n.setAttribute("type", "radio"), n.setAttribute("name", "layer"), t.name === r.name && n.setAttribute("checked", "checked"), n.addEventListener("change", () => {
23
23
  var p;
24
- (p = this.layerChangeCallback) == null || p.call(this, s);
24
+ (p = this.layerChangeCallback) == null || p.call(this, r);
25
25
  }), d.appendChild(n);
26
26
  const h = document.createElement("span");
27
- h.textContent = s.name, d.appendChild(h), i.appendChild(l);
27
+ h.textContent = r.name, d.appendChild(h), i.appendChild(a);
28
28
  });
29
29
  }
30
30
  open(e, t = null) {
@@ -38,20 +38,20 @@ class m {
38
38
  }
39
39
  setPosition(e, t) {
40
40
  const i = e.getBoundingClientRect();
41
- let s = "", l = "";
42
- t === "top-right" ? (s = `${i.y}px`, l = `${i.x - this.dialog.clientWidth - 12}px`) : t === "top-left" ? (s = `${i.y}px`, l = `${i.x + i.width + 12}px`) : t === "bottom-right" ? (s = `${i.y - this.dialog.clientHeight + i.height}px`, l = `${i.x - this.dialog.clientWidth - 12}px`) : t === "bottom-left" && (s = `${i.y - this.dialog.clientHeight + i.height}px`, l = `${i.x + i.width + 12}px`), this.dialog.style.setProperty("top", s), this.dialog.style.setProperty("left", l);
41
+ let r = "", a = "";
42
+ t === "top-right" ? (r = `${i.y}px`, a = `${i.x - this.dialog.clientWidth - 12}px`) : t === "top-left" ? (r = `${i.y}px`, a = `${i.x + i.width + 12}px`) : t === "bottom-right" ? (r = `${i.y - this.dialog.clientHeight + i.height}px`, a = `${i.x - this.dialog.clientWidth - 12}px`) : t === "bottom-left" && (r = `${i.y - this.dialog.clientHeight + i.height}px`, a = `${i.x + i.width + 12}px`), this.dialog.style.setProperty("top", r), this.dialog.style.setProperty("left", a);
43
43
  }
44
44
  }
45
45
  class f {
46
46
  constructor(e) {
47
- a(this, "map", null);
48
- a(this, "options");
49
- a(this, "container");
50
- a(this, "currentLayer");
51
- a(this, "currentInitStyle", null);
52
- a(this, "addedSources", {});
53
- a(this, "addedLayers", []);
54
- a(this, "layerDialog");
47
+ l(this, "map", null);
48
+ l(this, "options");
49
+ l(this, "container");
50
+ l(this, "currentLayer");
51
+ l(this, "currentInitStyle", null);
52
+ l(this, "addedSources", {});
53
+ l(this, "addedLayers", []);
54
+ l(this, "layerDialog");
55
55
  this.options = e, this.container = document.createElement("div"), this.container.classList.add("maplibregl-ctrl", "maplibregl-ctrl-group"), this.currentLayer = e.layers[0], this.layerDialog = new m(this.options, this.currentLayer), this.layerDialog.on("layerchange", (t) => {
56
56
  this.changeLayer(t), this.layerDialog.close();
57
57
  });
@@ -72,35 +72,35 @@ class f {
72
72
  getPosition() {
73
73
  if (!this.map) return null;
74
74
  const e = this.map._controlPositions;
75
- return e["top-left"].querySelector(".maplibregl-ctrl-layers") ? "top-left" : e["top-right"].querySelector(".maplibregl-ctrl-layers") ? "top-right" : e["bottom-left"].querySelector(".maplibregl-ctrl-layers") ? "bottom-left" : e["bottom-right"].querySelector(".maplibregl-ctrl-layers") ? "bottom-right" : null;
75
+ return e["top-left"].querySelector(".maplibregl-ctrl-layer") ? "top-left" : e["top-right"].querySelector(".maplibregl-ctrl-layer") ? "top-right" : e["bottom-left"].querySelector(".maplibregl-ctrl-layer") ? "bottom-left" : e["bottom-right"].querySelector(".maplibregl-ctrl-layer") ? "bottom-right" : null;
76
76
  }
77
77
  createButton() {
78
78
  const e = document.createElement("button");
79
- e.classList.add("maplibregl-ctrl-layers"), e.setAttribute("title", "Change map style"), e.setAttribute("aria-label", "Change map style");
79
+ e.classList.add("maplibregl-ctrl-layer"), e.setAttribute("title", "Change map style"), e.setAttribute("aria-label", "Change map style");
80
80
  const t = document.createElement("i");
81
81
  return t.classList.add("maplibregl-ctrl-icon"), e.appendChild(t), e;
82
82
  }
83
83
  changeLayer(e) {
84
84
  if (!this.map) return;
85
- const t = this.currentInitStyle.layers, i = this.map.getStyle().layers, s = i.filter(
86
- (r) => !t.some((o) => o.id === r.id)
85
+ const t = this.currentInitStyle.layers, i = this.map.getStyle().layers, r = i.filter(
86
+ (s) => !t.some((o) => o.id === s.id)
87
87
  );
88
- this.addedLayers = [...this.addedLayers, ...s];
89
- const l = t.filter(
90
- (r) => !i.some((o) => o.id === r.id)
88
+ this.addedLayers = [...this.addedLayers, ...r];
89
+ const a = t.filter(
90
+ (s) => !i.some((o) => o.id === s.id)
91
91
  );
92
92
  this.addedLayers = this.addedLayers.filter(
93
- (r) => !l.some((o) => o.id === r.id)
93
+ (s) => !a.some((o) => o.id === s.id)
94
94
  );
95
95
  const d = this.currentInitStyle.sources, n = this.map.getStyle().sources, h = {};
96
- Object.entries(n).forEach(([r, o]) => {
97
- Object.keys(d).includes(r) || (h[r] = o);
96
+ Object.entries(n).forEach(([s, o]) => {
97
+ Object.keys(d).includes(s) || (h[s] = o);
98
98
  }), this.addedSources = { ...this.addedSources, ...h }, Object.keys(d).filter(
99
- (r) => !Object.keys(n).includes(r)
100
- ).forEach((r) => {
101
- delete this.addedSources[r];
99
+ (s) => !Object.keys(n).includes(s)
100
+ ).forEach((s) => {
101
+ delete this.addedSources[s];
102
102
  }), this.map.setStyle(e.style, {
103
- transformStyle: (r, o) => {
103
+ transformStyle: (s, o) => {
104
104
  const y = {
105
105
  ...o,
106
106
  sources: { ...o.sources, ...this.addedSources },
@@ -1 +1 @@
1
- (function(a,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(a=typeof globalThis<"u"?globalThis:a||self,s(a["maplibre-gl-layer"]={}))})(this,function(a){"use strict";var f=Object.defineProperty;var b=(a,s,h)=>s in a?f(a,s,{enumerable:!0,configurable:!0,writable:!0,value:h}):a[s]=h;var o=(a,s,h)=>b(a,typeof s!="symbol"?s+"":s,h);class s{constructor(e,t){o(this,"dialog");o(this,"options");o(this,"layerChangeCallback",()=>{});this.options=e,this.dialog=document.createElement("dialog"),this.dialog.classList.add("maplibregl-ctrl-layers-dialog"),document.body.appendChild(this.dialog),this.dialog.addEventListener("click",()=>{this.dialog.close()});const i=document.createElement("div");i.classList.add("maplibregl-ctrl-layers-dialog-content"),i.addEventListener("click",r=>{r.stopPropagation()}),this.dialog.appendChild(i),this.options.layers.forEach(r=>{const n=document.createElement("div");n.classList.add("maplibregl-ctrl-layers-dialog-item");const p=document.createElement("label");n.appendChild(p);const c=document.createElement("input");c.setAttribute("type","radio"),c.setAttribute("name","layer"),t.name===r.name&&c.setAttribute("checked","checked"),c.addEventListener("change",()=>{var y;(y=this.layerChangeCallback)==null||y.call(this,r)}),p.appendChild(c);const u=document.createElement("span");u.textContent=r.name,p.appendChild(u),i.appendChild(n)})}open(e,t=null){this.dialog.showModal(),this.setPosition(e,t)}close(){this.dialog.close()}on(e,t){e==="layerchange"&&(this.layerChangeCallback=t)}setPosition(e,t){const i=e.getBoundingClientRect();let r="",n="";t==="top-right"?(r=`${i.y}px`,n=`${i.x-this.dialog.clientWidth-12}px`):t==="top-left"?(r=`${i.y}px`,n=`${i.x+i.width+12}px`):t==="bottom-right"?(r=`${i.y-this.dialog.clientHeight+i.height}px`,n=`${i.x-this.dialog.clientWidth-12}px`):t==="bottom-left"&&(r=`${i.y-this.dialog.clientHeight+i.height}px`,n=`${i.x+i.width+12}px`),this.dialog.style.setProperty("top",r),this.dialog.style.setProperty("left",n)}}class h{constructor(e){o(this,"map",null);o(this,"options");o(this,"container");o(this,"currentLayer");o(this,"currentInitStyle",null);o(this,"addedSources",{});o(this,"addedLayers",[]);o(this,"layerDialog");this.options=e,this.container=document.createElement("div"),this.container.classList.add("maplibregl-ctrl","maplibregl-ctrl-group"),this.currentLayer=e.layers[0],this.layerDialog=new s(this.options,this.currentLayer),this.layerDialog.on("layerchange",t=>{this.changeLayer(t),this.layerDialog.close()})}onAdd(e){this.map=e,this.map.setStyle(this.currentLayer.style),this.map.once("style.load",()=>{this.map&&(this.currentInitStyle=this.map.getStyle())});const t=this.createButton();return t.addEventListener("click",()=>{this.layerDialog.open(t,this.getPosition())}),this.container.appendChild(t),this.container}onRemove(){var e;(e=this.container.parentNode)==null||e.removeChild(this.container)}getPosition(){if(!this.map)return null;const e=this.map._controlPositions;return e["top-left"].querySelector(".maplibregl-ctrl-layers")?"top-left":e["top-right"].querySelector(".maplibregl-ctrl-layers")?"top-right":e["bottom-left"].querySelector(".maplibregl-ctrl-layers")?"bottom-left":e["bottom-right"].querySelector(".maplibregl-ctrl-layers")?"bottom-right":null}createButton(){const e=document.createElement("button");e.classList.add("maplibregl-ctrl-layers"),e.setAttribute("title","Change map style"),e.setAttribute("aria-label","Change map style");const t=document.createElement("i");return t.classList.add("maplibregl-ctrl-icon"),e.appendChild(t),e}changeLayer(e){if(!this.map)return;const t=this.currentInitStyle.layers,i=this.map.getStyle().layers,r=i.filter(l=>!t.some(d=>d.id===l.id));this.addedLayers=[...this.addedLayers,...r];const n=t.filter(l=>!i.some(d=>d.id===l.id));this.addedLayers=this.addedLayers.filter(l=>!n.some(d=>d.id===l.id));const p=this.currentInitStyle.sources,c=this.map.getStyle().sources,u={};Object.entries(c).forEach(([l,d])=>{Object.keys(p).includes(l)||(u[l]=d)}),this.addedSources={...this.addedSources,...u},Object.keys(p).filter(l=>!Object.keys(c).includes(l)).forEach(l=>{delete this.addedSources[l]}),this.map.setStyle(e.style,{transformStyle:(l,d)=>{const g={...d,sources:{...d.sources,...this.addedSources},layers:d.layers.concat(this.addedLayers)};return this.currentInitStyle=g,g}})}}a.LayerControl=h,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})});
1
+ (function(a,r){typeof exports=="object"&&typeof module<"u"?r(exports):typeof define=="function"&&define.amd?define(["exports"],r):(a=typeof globalThis<"u"?globalThis:a||self,r(a["maplibre-gl-layer"]={}))})(this,function(a){"use strict";var f=Object.defineProperty;var b=(a,r,h)=>r in a?f(a,r,{enumerable:!0,configurable:!0,writable:!0,value:h}):a[r]=h;var o=(a,r,h)=>b(a,typeof r!="symbol"?r+"":r,h);class r{constructor(e,t){o(this,"dialog");o(this,"options");o(this,"layerChangeCallback",()=>{});this.options=e,this.dialog=document.createElement("dialog"),this.dialog.classList.add("maplibregl-ctrl-layer-dialog"),document.body.appendChild(this.dialog),this.dialog.addEventListener("click",()=>{this.dialog.close()});const i=document.createElement("div");i.classList.add("maplibregl-ctrl-layer-dialog-content"),i.addEventListener("click",s=>{s.stopPropagation()}),this.dialog.appendChild(i),this.options.layers.forEach(s=>{const n=document.createElement("div");n.classList.add("maplibregl-ctrl-layer-dialog-item");const p=document.createElement("label");n.appendChild(p);const c=document.createElement("input");c.setAttribute("type","radio"),c.setAttribute("name","layer"),t.name===s.name&&c.setAttribute("checked","checked"),c.addEventListener("change",()=>{var y;(y=this.layerChangeCallback)==null||y.call(this,s)}),p.appendChild(c);const u=document.createElement("span");u.textContent=s.name,p.appendChild(u),i.appendChild(n)})}open(e,t=null){this.dialog.showModal(),this.setPosition(e,t)}close(){this.dialog.close()}on(e,t){e==="layerchange"&&(this.layerChangeCallback=t)}setPosition(e,t){const i=e.getBoundingClientRect();let s="",n="";t==="top-right"?(s=`${i.y}px`,n=`${i.x-this.dialog.clientWidth-12}px`):t==="top-left"?(s=`${i.y}px`,n=`${i.x+i.width+12}px`):t==="bottom-right"?(s=`${i.y-this.dialog.clientHeight+i.height}px`,n=`${i.x-this.dialog.clientWidth-12}px`):t==="bottom-left"&&(s=`${i.y-this.dialog.clientHeight+i.height}px`,n=`${i.x+i.width+12}px`),this.dialog.style.setProperty("top",s),this.dialog.style.setProperty("left",n)}}class h{constructor(e){o(this,"map",null);o(this,"options");o(this,"container");o(this,"currentLayer");o(this,"currentInitStyle",null);o(this,"addedSources",{});o(this,"addedLayers",[]);o(this,"layerDialog");this.options=e,this.container=document.createElement("div"),this.container.classList.add("maplibregl-ctrl","maplibregl-ctrl-group"),this.currentLayer=e.layers[0],this.layerDialog=new r(this.options,this.currentLayer),this.layerDialog.on("layerchange",t=>{this.changeLayer(t),this.layerDialog.close()})}onAdd(e){this.map=e,this.map.setStyle(this.currentLayer.style),this.map.once("style.load",()=>{this.map&&(this.currentInitStyle=this.map.getStyle())});const t=this.createButton();return t.addEventListener("click",()=>{this.layerDialog.open(t,this.getPosition())}),this.container.appendChild(t),this.container}onRemove(){var e;(e=this.container.parentNode)==null||e.removeChild(this.container)}getPosition(){if(!this.map)return null;const e=this.map._controlPositions;return e["top-left"].querySelector(".maplibregl-ctrl-layer")?"top-left":e["top-right"].querySelector(".maplibregl-ctrl-layer")?"top-right":e["bottom-left"].querySelector(".maplibregl-ctrl-layer")?"bottom-left":e["bottom-right"].querySelector(".maplibregl-ctrl-layer")?"bottom-right":null}createButton(){const e=document.createElement("button");e.classList.add("maplibregl-ctrl-layer"),e.setAttribute("title","Change map style"),e.setAttribute("aria-label","Change map style");const t=document.createElement("i");return t.classList.add("maplibregl-ctrl-icon"),e.appendChild(t),e}changeLayer(e){if(!this.map)return;const t=this.currentInitStyle.layers,i=this.map.getStyle().layers,s=i.filter(l=>!t.some(d=>d.id===l.id));this.addedLayers=[...this.addedLayers,...s];const n=t.filter(l=>!i.some(d=>d.id===l.id));this.addedLayers=this.addedLayers.filter(l=>!n.some(d=>d.id===l.id));const p=this.currentInitStyle.sources,c=this.map.getStyle().sources,u={};Object.entries(c).forEach(([l,d])=>{Object.keys(p).includes(l)||(u[l]=d)}),this.addedSources={...this.addedSources,...u},Object.keys(p).filter(l=>!Object.keys(c).includes(l)).forEach(l=>{delete this.addedSources[l]}),this.map.setStyle(e.style,{transformStyle:(l,d)=>{const g={...d,sources:{...d.sources,...this.addedSources},layers:d.layers.concat(this.addedLayers)};return this.currentInitStyle=g,g}})}}a.LayerControl=h,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maplibre-gl-layer",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "A layer control for MapLibre GL JS",
5
5
  "type": "module",
6
6
  "files": [
File without changes