leaflet-html 0.7.4 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -219,6 +219,25 @@ and inspect the `CustomEvent` detail property to access the Leaflet Event.
219
219
  </script>
220
220
  ```
221
221
 
222
+ ### CustomEvents
223
+
224
+ Leaflet HTML wires up a Leaflet JS application by firing and listening to CustomEvents.
225
+ These events can be observed to add additional functionality to an application.
226
+
227
+ | Key | Description |
228
+ | -- | -- |
229
+ | l:layer:connected | Triggered when a layer is connected to the DOM |
230
+ | l:layer:removed | Triggered when a layer is removed from the DOM but before the disconnectedCallback fires |
231
+ | l:popup:connected | Triggered when a popup element is connected to the DOM. Used to bind popup to parent marker |
232
+ | l:icon:connected | Triggered when a icon element is connected to the DOM. Used to bind icon to parent marker |
233
+ | l:tooltip:connected | Triggered when a tooltip element is connected to the DOM |
234
+ | l:latlngbounds:connected | Triggered when a lat-lng-bounds element is connected to the DOM |
235
+ | l:latlngbounds:changed | Triggered when a lat-lng-bounds element attribute changed |
236
+
237
+ > [!NOTE]
238
+ > At present, only the event keys needed to connect core functionality have been exposed.
239
+ > Future releases may add additional events based on user needs.
240
+
222
241
  ## Realistic example
223
242
 
224
243
  The HTML in `example/index.html` is a simple demonstration of the API.
@@ -1,2 +1,2 @@
1
- import*as t from"leaflet";import{control as e,layerGroup as n,tileLayer as r,imageOverlay as a,videoOverlay as i,geoJSON as o,icon as l,tooltip as s,Circle as u,Rectangle as c,Polygon as f,Polyline as p,circle as b,polyline as v,polygon as d,rectangle as h}from"leaflet";function y(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function m(){return m=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},m.apply(null,arguments)}function g(t){return g=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},g(t)}function E(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,L(t,e)}function C(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(C=function(){return!!t})()}function L(t,e){return L=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},L(t,e)}function w(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}function O(t){var e="function"==typeof Map?new Map:void 0;return O=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return function(t,e,n){if(C())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,e);var a=new(t.bind.apply(t,r));return n&&L(a,n.prototype),a}(t,arguments,g(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),L(n,t)},O(t)}var A="map:addTo",k="popup:add",S=/*#__PURE__*/function(t){function e(){return t.call(this)||this}return E(e,t),e.prototype.connectedCallback=function(){this.addEventListener(A,function(t){t.detail.type="base"})},e}(/*#__PURE__*/O(HTMLElement)),N=/*#__PURE__*/function(t){function n(){return t.call(this)||this}return E(n,t),n.prototype.connectedCallback=function(){var t=e.layers({},{});this.addEventListener(A,function(e){var n=e.detail,r=n.type,a=n.name,i=n.layer;"overlay"===r?t.addOverlay(i,a):"base"===r&&t.addBaseLayer(i,a),e.preventDefault()});var n=new CustomEvent(A,{cancelable:!0,bubbles:!0,detail:{layer:t}});this.dispatchEvent(n)},n}(/*#__PURE__*/O(HTMLElement)),T=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).layer=null,e}return E(e,t),e}(/*#__PURE__*/O(HTMLElement)),j=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).layer=null,e}return E(e,t),e.prototype.connectedCallback=function(){var t=this.getAttribute("name"),e=n();this.layer=e;var r=new CustomEvent(A,{cancelable:!0,bubbles:!0,detail:{layer:e,name:t}});this.dispatchEvent(r),this.addEventListener(A,function(t){t.stopPropagation(),e.addLayer(t.detail.layer)}),new MutationObserver(function(t){t.forEach(function(t){t.removedNodes.forEach(function(t){if(t instanceof HTMLElement){var n=t.getAttribute("leaflet-id");if(null!==n){var r=e.getLayer(parseInt(n));void 0!==r&&e.removeLayer(r)}}})})}).observe(this,{childList:!0})},e}(T),J=/*#__PURE__*/function(t){function e(e){var n;return(n=t.call(this)||this).issues=[],n.name="LeafletHTMLError",n.issues=e,n}return E(e,t),n=e,(r=[{key:"message",get:function(){return JSON.stringify(this.issues,null,2)}}])&&function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,w(r.key),r)}}(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(/*#__PURE__*/O(Error)),M=function(t,e){var n=t(function(t){return{status:"clean",issues:[],value:t}}(e));if("clean"!==n.status)throw new J(n.issues);return n.value},P=function(t){return function(e){for(var n=e.issues,r="clean",a={},i=0,o=Object.keys(t);i<o.length;i++){var l=o[i],s=t[l](e);"clean"!==s.status&&(r=s.status),null===s.value&&"clean"===s.status||(n=[].concat(n,s.issues),a[l]=s.value)}return{status:r,issues:n,value:a}}},H=function(){var t=[].slice.call(arguments);return function(e){for(var n=0;n<t.length&&"abort"!==(e=t[n](e)).status;n++);return e}},_=function(){var t=[].slice.call(arguments);return function(e){for(var n=0;n<t.length;n++)e=t[n](e);return e}},I=function(t){return function(e){return null===e.value?e:t(e)}},F=function(t){return function(e){return null===(e=t(e)).value?{status:"clean",issues:[],value:null}:e}},z=function(t){return function(e){var n=e.value,r=n.getAttribute(t);return null===r?{status:"abort",issues:[].concat(e.issues,[R(n,t)]),value:null}:m({},e,{value:r})}},B=function(){return function(t){var e;try{e=JSON.parse(t.value)}catch(e){return{status:"abort",issues:[].concat(t.issues,[x(e)]),value:null}}return m({},t,{value:e})}},U=function(t){return H.apply(void 0,[z(t)].concat([].slice.call(arguments,1)))},x=function(t){return{code:"parse_json",message:t.message}},R=function(t,e){return{code:"missing_attribute",message:t.tagName.toLowerCase()+" missing attribute '"+e+"'"}},V=/*#__PURE__*/function(e){function n(){var t;return(t=e.call(this)||this).map=null,t.addEventListener("map:bounds",function(e){var n=e.detail;null!==t.map&&t.map[n.method](n.bounds)}),new MutationObserver(function(t){t.forEach(function(t){if(t.target instanceof n){var e=t.target;t.removedNodes.forEach(function(t){t instanceof T&&null!==e.map&&null!==t.layer&&e.map.removeLayer(t.layer)})}})}).observe(t,{childList:!0}),t}E(n,e);var r=n.prototype;return r.connectedCallback=function(){var e,n=this;if(this.map=t.map(this),this.map.whenReady(function(){n.dispatchEvent(new CustomEvent("ready",{bubbles:!0,cancelable:!0,detail:n.map}))}),this.hasAttribute("on")){var r=this.getAttribute("on");null!==r&&r.split(/\s+/).forEach(function(t){null!==n.map&&n.map.on(t,function(e){n.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:e}))})})}if(this.hasAttribute("fit-world"))this.map.fitWorld();else{var a=(e={zoom:U("zoom",function(t){var e,n=parseInt(t.value);return isNaN(n)?{status:"abort",issues:[].concat(t.issues,[(e=t.value,{code:"parse_int",message:'could not parse int given: "'+e+'"'})]),value:n}:m({},t,{value:n})}),center:U("center",B())},function(t){for(var n=t.status,r=t.issues,a={},i=0,o=Object.keys(e);i<o.length;i++){var l=o[i],s=e[l](t);"abort"===s.status&&(n="abort",r=[].concat(r,s.issues)),a[l]=s.value}return{status:n,issues:r,value:a}}),i=M(a,this);this.map.setView(i.center,i.zoom)}if(this.hasAttribute("locate")){var o=U("locate",B());this.map.locate(M(o,this))}this.addEventListener(A,function(t){t.detail.layer.addTo(n.map)}),this.addEventListener("layer:remove",function(t){null!==n.map&&n.map.removeLayer(t.detail.layer)})},r.attributeChangedCallback=function(t,e,n){null!==this.map&&("zoom"===t?this.map.setZoom(parseInt(n)):"center"===t&&this.map.setView(JSON.parse(n)))},n}(/*#__PURE__*/O(HTMLElement));V.observedAttributes=["zoom","center"];var D=/*#__PURE__*/function(e){function n(){var t;return(t=e.call(this)||this).layer=null,t.addEventListener("icon:add",function(e){e.stopPropagation(),t.layer.setIcon(e.detail.icon)}),t}E(n,e);var r=n.prototype;return r.connectedCallback=function(){var e=this,n=M(U("lat-lng",B()),this),r=M(P({opacity:_(F(z("opacity")),I(function(t){var e,n=parseFloat(t.value);return isNaN(n)?{status:"abort",issues:[].concat(t.issues,[(e=t.value,{code:"parse_float",message:'could not parse float given: "'+e+'"'})]),value:n}:m({},t,{value:n})}))}),this);if(this.layer=t.marker(n,r),this.hasAttribute("icon")){var a=t.icon(JSON.parse(this.getAttribute("icon")));this.layer.setIcon(a)}this.setAttribute("leaflet-id",t.stamp(this.layer)),this.addEventListener(k,function(t){var n=t.detail,r=n.openPopup,a=e.layer.bindPopup(n.content);r&&a.openPopup()});var i=new CustomEvent(A,{cancelable:!0,bubbles:!0,detail:{layer:this.layer}});this.dispatchEvent(i)},r.attributeChangedCallback=function(e,n,r){null!==this.layer&&("lat-lng"===e&&this.layer.setLatLng(JSON.parse(r)),"opacity"===e&&this.layer.setOpacity(parseFloat(r)),"icon"===e&&this.layer.setIcon(t.icon(JSON.parse(r))))},n}(T);D.observedAttributes=["lat-lng","opacity","icon"];var W=/*#__PURE__*/function(t){function e(){return t.call(this)||this}return E(e,t),e.prototype.connectedCallback=function(){this.addEventListener(A,function(t){t.detail.type="overlay"})},e}(/*#__PURE__*/O(HTMLElement)),Z=/*#__PURE__*/function(t){function e(){return t.call(this)||this}return E(e,t),e.prototype.connectedCallback=function(){var t=this.getAttribute("content"),e=!1,n=this.getAttribute("open-popup");null!==n&&(e="false"!==n);var r=new CustomEvent(k,{cancelable:!0,bubbles:!0,detail:{content:t,openPopup:e}});this.dispatchEvent(r)},e}(/*#__PURE__*/O(HTMLElement)),$=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).layer=null,e}return E(e,t),e.prototype.connectedCallback=function(){for(var t,n=M(z("url-template"),this),a={},i=function(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return y(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(t,e):void 0}}(t))){n&&(t=n);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e.parseTemplateAttributes(n));!(t=i()).done;){var o=t.value,l=this.getAttribute(o);null!==l&&(a[o]=l)}var s=this.getAttribute("name"),u=P({attribution:F(z("attribution")),errorTileUrl:F(z("error-tile-url"))}),c=M(u,this);this.layer=r(n,m({},a,c));var f=new CustomEvent(A,{detail:{name:s,layer:this.layer},bubbles:!0});this.dispatchEvent(f)},e.parseTemplateAttributes=function(t){return[].concat(t.matchAll(/{(.*?)}/g)).map(function(t){return t[1]})},e}(T),q=/*#__PURE__*/function(t){function e(){return t.call(this)||this}E(e,t);var n=e.prototype;return n.connectedCallback=function(){var t=this.getAttribute("bounds");null!==t&&this.dispatchEvent(this.getEvent(JSON.parse(t)))},n.attributeChangedCallback=function(t,e,n){this.dispatchEvent(this.getEvent(JSON.parse(n)))},n.getEvent=function(t){return new CustomEvent("map:bounds",{bubbles:!0,detail:{bounds:t,method:this.getAttribute("method")||"fitBounds"}})},e}(/*#__PURE__*/O(HTMLElement));q.observedAttributes=["bounds"];var G=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).layer=null,e}E(e,t);var n=e.prototype;return n.connectedCallback=function(){var t=this.getAttribute("url");if(null!==t){var e=this.getAttribute("bounds");if(null!==e){var n={opacity:parseFloat(this.getAttribute("opacity")||"1.0"),alt:this.getAttribute("alt")||""};this.layer=a(t,JSON.parse(e),n),this.dispatchEvent(new CustomEvent(A,{cancelable:!0,bubbles:!0,detail:{layer:this.layer}}))}else console.warn("attribute 'bounds' not set")}else console.warn("attribute 'url' not set")},n.disconnectedCallback=function(){var t;null==(t=this.layer)||t.remove()},n.attributeChangedCallback=function(t,e,n){null!==this.layer&&("url"===t?this.layer.setUrl(n):"bounds"===t?this.layer.setBounds(JSON.parse(n)):"opacity"===t&&this.layer.setOpacity(parseFloat(n)))},e}(T);G.observedAttributes=["url","bounds","opacity"];var K=/*#__PURE__*/function(t){function e(){return t.call(this)||this}return E(e,t),e.prototype.connectedCallback=function(){var t=JSON.parse(this.getAttribute("url")),e=JSON.parse(this.getAttribute("bounds")),n={opacity:parseFloat(this.getAttribute("opacity")||"1.0"),alt:this.getAttribute("alt")||"",autoplay:!0,muted:!0,playsInline:!0},r=i(t,e,n);this.dispatchEvent(new CustomEvent(A,{cancelable:!0,bubbles:!0,detail:{layer:r}}))},e}(T),Q=/*#__PURE__*/function(t){function e(){return t.call(this)||this}return E(e,t),e.prototype.connectedCallback=function(){var t=this.getAttribute("geojson");if(null!==t){var e=o(JSON.parse(t));this.dispatchEvent(new CustomEvent(A,{bubbles:!0,cancelable:!0,detail:{layer:e}}))}},e}(/*#__PURE__*/O(HTMLElement)),X=function(t){return t.replace(/-./g,function(t){return t[1].toUpperCase()})},Y=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).icon=null,e}return E(e,t),e.prototype.connectedCallback=function(){var t={};["icon-url","icon-retina-url","shadow-url","shadow-retina-url","class-name"].forEach(function(e){t[X(e)]=F(z(e))}),["icon-anchor","icon-size","shadow-anchor","shadow-size","tooltip-anchor","popup-anchor"].forEach(function(e){t[X(e)]=_(F(z(e)),I(B()))}),t.crossOrigin=_(F(z("cross-origin")),I(function(t){return m({},t,{value:"true"===t.value.toLowerCase()})}));var e=P(t),n=M(e,this);this.icon=l(n);var r=new CustomEvent("icon:add",{cancelable:!0,bubbles:!0,detail:{icon:this.icon}});this.dispatchEvent(r)},e}(/*#__PURE__*/O(HTMLElement)),tt=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).tooltip=s(),e}E(e,t);var n=e.prototype;return n.connectedCallback=function(){var t=new CustomEvent("bindTooltip",{cancelable:!0,bubbles:!0,detail:{tooltip:this.tooltip}});this.dispatchEvent(t)},n.attributeChangedCallback=function(t,e,n){"content"===t&&this.tooltip.setContent(n)},e}(/*#__PURE__*/O(HTMLElement));tt.observedAttributes=["content"];var et=function(t){switch(t){case"circle":return[nt("latLng","latlng",null)];case"rectangle":return[nt("latLngBounds","latlngbounds",null)];case"polygon":case"polyline":return[nt("latLngs","latlng",null)]}},nt=function(t,e,n){return{camel:t,kebab:(r=t,r.split("").map(function(t,e){return t.toUpperCase()===t?(0!==e?"-":"")+t.toLowerCase():t}).join("")),parser:rt(e),defaultValue:n};var r},rt=function(t){switch(t.toLowerCase()){case"boolean":return function(t){return"true"===t};case"number":return parseFloat;case"latlng":case"latlngbounds":return JSON.parse;default:return function(t){return t}}},at=function(t){var e={circle:[nt("radius","number",null)],path:[nt("stroke","boolean",!0),nt("color","string","#3388ff"),nt("weight","number",3),nt("opacity","number",1),nt("lineCap","string","round"),nt("lineJoin","string","round"),nt("dashArray","string",null),nt("dashOffset","string",null),nt("fill","boolean",!0),nt("fillColor","string","#3388ff"),nt("fillOpacity","number",.2)],polyline:[nt("smoothFactor","number",1),nt("noClip","boolean",!1)],polygon:[],rectangle:[],interactiveLayer:[nt("interactive","boolean",!0)]};return ot(t).flatMap(function(t){return e[t]})},it={circle:["path"],polyline:["path"],polygon:["polyline"],rectangle:["polygon"],path:["interactiveLayer"],interactiveLayer:[]},ot=function(t){for(var e=t,n=[t];it[e].length>0;){var r=it[e][0];n.push(r),e=r}return n},lt=function(t,e){var n={};return at(e).forEach(function(e){t.hasAttribute(e.kebab)&&(n[e.camel]=e.parser(t.getAttribute(e.kebab)))}),n},st=function(t,e){var n=/*#__PURE__*/function(n){function r(){var t;return(t=n.call(this)||this).layer=null,t.addEventListener("bindTooltip",function(e){null!==t.layer&&t.layer.bindTooltip(e.detail.tooltip)}),t}E(r,n);var a=r.prototype;return a.connectedCallback=function(){var n=function(t,e){return et(e).map(function(e){var n=z(e.kebab),r=M(n,t);return e.parser(r)})}(this,e),r=lt(this,e);this.layer=t.apply(void 0,n.concat([r]));var a=new CustomEvent("map:addTo",{cancelable:!0,bubbles:!0,detail:{layer:this.layer}});this.dispatchEvent(a)},a.attributeChangedCallback=function(t,n,r){null!==this.layer&&function(t,e,n,r){var a=[].concat(et(e),at(e)).find(function(t){return t.kebab===n});if(void 0!==a){var i=a.parser(r);if(t instanceof u)switch(n){case"lat-lng":t.setLatLng(JSON.parse(r));break;case"radius":t.setRadius(parseFloat(r))}else if(t instanceof c)switch(n){case"lat-lngs":t.setLatLngs(JSON.parse(r));break;case"lat-lng-bounds":t.setBounds(JSON.parse(r))}else t instanceof f?"lat-lngs"===n&&t.setLatLngs(JSON.parse(r)):t instanceof p&&"lat-lngs"===n&&t.setLatLngs(JSON.parse(r));var o,l=at("polyline").find(function(t){return t.kebab===n});void 0!==l&&t.setStyle(((o={})[l.camel]=i,o))}}(this.layer,e,t,r)},r}(/*#__PURE__*/O(HTMLElement));return n.observedAttributes=function(t){var e=et(t).map(function(t){return t.kebab}),n=at(t).map(function(t){return t.kebab});return[].concat(e,n)}(e),n},ut=(customElements.define("l-map",V),customElements.define("l-control-layers",N),customElements.define("l-base-layers",S),customElements.define("l-overlay-layers",W),customElements.define("l-layer-group",j),customElements.define("l-tile-layer",$),customElements.define("l-marker",D),customElements.define("l-popup",Z),customElements.define("l-lat-lng-bounds",q),customElements.define("l-image-overlay",G),customElements.define("l-video-overlay",K),customElements.define("l-geojson",Q),customElements.define("l-icon",Y),customElements.define("l-circle",st(b,"circle")),customElements.define("l-polyline",st(v,"polyline")),customElements.define("l-polygon",st(d,"polygon")),customElements.define("l-rectangle",st(h,"rectangle")),void customElements.define("l-tooltip",tt));export{ut as default};
1
+ import*as t from"leaflet";import{control as e,layerGroup as n,tileLayer as r,imageOverlay as a,videoOverlay as i,geoJSON as o,icon as l,tooltip as s,Circle as u,Rectangle as c,Polygon as f,Polyline as p,circle as b,polyline as v,polygon as h,rectangle as d}from"leaflet";function y(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function m(){return m=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},m.apply(null,arguments)}function g(t){return g=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},g(t)}function E(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,L(t,e)}function C(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(C=function(){return!!t})()}function L(t,e){return L=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},L(t,e)}function w(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}function O(t){var e="function"==typeof Map?new Map:void 0;return O=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return function(t,e,n){if(C())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,e);var a=new(t.bind.apply(t,r));return n&&L(a,n.prototype),a}(t,arguments,g(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),L(n,t)},O(t)}var A="l:layer:connected",k="l:popup:connected",S="l:icon:connected",N="l:layer:removed",j="l:latlngbounds:connected",T="l:latlngbounds:changed",J="l:tooltip:connected",M=/*#__PURE__*/function(t){function e(){return t.call(this)||this}return E(e,t),e.prototype.connectedCallback=function(){this.addEventListener(A,function(t){t.detail.type="base"})},e}(/*#__PURE__*/O(HTMLElement)),P=/*#__PURE__*/function(t){function n(){return t.call(this)||this}return E(n,t),n.prototype.connectedCallback=function(){var t=e.layers({},{});this.addEventListener(A,function(e){var n=e.detail,r=n.type,a=n.name,i=n.layer;"overlay"===r?t.addOverlay(i,a):"base"===r&&t.addBaseLayer(i,a),e.preventDefault()});var n=new CustomEvent(A,{cancelable:!0,bubbles:!0,detail:{layer:t}});this.dispatchEvent(n)},n}(/*#__PURE__*/O(HTMLElement)),H=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).layer=null,e}return E(e,t),e}(/*#__PURE__*/O(HTMLElement)),_=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).layer=null,e}return E(e,t),e.prototype.connectedCallback=function(){var t=this.getAttribute("name"),e=n();this.layer=e;var r=new CustomEvent(A,{cancelable:!0,bubbles:!0,detail:{layer:e,name:t}});this.dispatchEvent(r),this.addEventListener(A,function(t){t.stopPropagation(),e.addLayer(t.detail.layer)}),new MutationObserver(function(t){t.forEach(function(t){t.removedNodes.forEach(function(t){if(t instanceof HTMLElement){var n=t.getAttribute("leaflet-id");if(null!==n){var r=e.getLayer(parseInt(n));void 0!==r&&e.removeLayer(r)}}})})}).observe(this,{childList:!0})},e}(H),z=/*#__PURE__*/function(t){function e(e){var n;return(n=t.call(this)||this).issues=[],n.name="LeafletHTMLError",n.issues=e,n}return E(e,t),n=e,(r=[{key:"message",get:function(){return JSON.stringify(this.issues,null,2)}}])&&function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,w(r.key),r)}}(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(/*#__PURE__*/O(Error)),I=function(t,e){var n=t(function(t){return{status:"clean",issues:[],value:t}}(e));if("clean"!==n.status)throw new z(n.issues);return n.value},F=function(t){return function(e){for(var n=e.issues,r="clean",a={},i=0,o=Object.keys(t);i<o.length;i++){var l=o[i],s=t[l](e);"clean"!==s.status&&(r=s.status),null===s.value&&"clean"===s.status||(n=[].concat(n,s.issues),a[l]=s.value)}return{status:r,issues:n,value:a}}},B=function(){var t=[].slice.call(arguments);return function(e){for(var n=0;n<t.length&&"abort"!==(e=t[n](e)).status;n++);return e}},U=function(){var t=[].slice.call(arguments);return function(e){for(var n=0;n<t.length;n++)e=t[n](e);return e}},x=function(t){return function(e){return null===e.value?e:t(e)}},R=function(t){return function(e){return null===(e=t(e)).value?{status:"clean",issues:[],value:null}:e}},V=function(t){return function(e){var n=e.value,r=n.getAttribute(t);return null===r?{status:"abort",issues:[].concat(e.issues,[$(n,t)]),value:null}:m({},e,{value:r})}},D=function(){return function(t){var e;try{e=JSON.parse(t.value)}catch(e){return{status:"abort",issues:[].concat(t.issues,[Z(e)]),value:null}}return m({},t,{value:e})}},W=function(t){return B.apply(void 0,[V(t)].concat([].slice.call(arguments,1)))},Z=function(t){return{code:"parse_json",message:t.message}},$=function(t,e){return{code:"missing_attribute",message:t.tagName.toLowerCase()+" missing attribute '"+e+"'"}},q=/*#__PURE__*/function(e){function n(){var t;(t=e.call(this)||this).map=null;var r=function(e){var n=e.detail;null!==t.map&&t.map[n.method](n.bounds)};return t.addEventListener(j,r),t.addEventListener(T,r),new MutationObserver(function(t){t.forEach(function(t){if(t.target instanceof n){var e=t.target;t.removedNodes.forEach(function(t){t instanceof H&&null!==e.map&&null!==t.layer&&(e.dispatchEvent(new CustomEvent(N,{bubbles:!0,detail:{layer:t.layer}})),e.map.removeLayer(t.layer))})}})}).observe(t,{childList:!0}),t}E(n,e);var r=n.prototype;return r.connectedCallback=function(){var e,n=this;if(this.map=t.map(this,{zoomControl:this.hasAttribute("zoom-control")}),this.map.whenReady(function(){n.dispatchEvent(new CustomEvent("ready",{bubbles:!0,cancelable:!0,detail:n.map}))}),this.hasAttribute("on")){var r=this.getAttribute("on");null!==r&&r.split(/\s+/).forEach(function(t){null!==n.map&&n.map.on(t,function(e){n.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:e}))})})}if(this.hasAttribute("fit-world"))this.map.fitWorld();else{var a=(e={zoom:W("zoom",function(t){var e,n=parseInt(t.value);return isNaN(n)?{status:"abort",issues:[].concat(t.issues,[(e=t.value,{code:"parse_int",message:'could not parse int given: "'+e+'"'})]),value:n}:m({},t,{value:n})}),center:W("center",D())},function(t){for(var n=t.status,r=t.issues,a={},i=0,o=Object.keys(e);i<o.length;i++){var l=o[i],s=e[l](t);"abort"===s.status&&(n="abort",r=[].concat(r,s.issues)),a[l]=s.value}return{status:n,issues:r,value:a}}),i=I(a,this);this.map.setView(i.center,i.zoom)}if(this.hasAttribute("locate")){var o=W("locate",D());this.map.locate(I(o,this))}this.addEventListener(A,function(t){t.detail.layer.addTo(n.map)}),this.addEventListener(N,function(t){null!==n.map&&n.map.removeLayer(t.detail.layer)})},r.attributeChangedCallback=function(t,e,n){null!==this.map&&("zoom"===t?this.map.setZoom(parseInt(n)):"center"===t&&this.map.setView(JSON.parse(n)))},n}(/*#__PURE__*/O(HTMLElement));q.observedAttributes=["zoom","center","zoom-control"];var G=/*#__PURE__*/function(e){function n(){var t;return(t=e.call(this)||this).layer=null,t.addEventListener(S,function(e){e.stopPropagation(),t.layer.setIcon(e.detail.icon)}),t}E(n,e);var r=n.prototype;return r.connectedCallback=function(){var e=this,n=I(W("lat-lng",D()),this),r=I(F({opacity:U(R(V("opacity")),x(function(t){var e,n=parseFloat(t.value);return isNaN(n)?{status:"abort",issues:[].concat(t.issues,[(e=t.value,{code:"parse_float",message:'could not parse float given: "'+e+'"'})]),value:n}:m({},t,{value:n})}))}),this);if(this.layer=t.marker(n,r),this.hasAttribute("icon")){var a=t.icon(JSON.parse(this.getAttribute("icon")));this.layer.setIcon(a)}this.setAttribute("leaflet-id",t.stamp(this.layer)),this.addEventListener(k,function(t){var n=t.detail,r=n.openPopup,a=e.layer.bindPopup(n.content);r&&a.openPopup()});var i=new CustomEvent(A,{cancelable:!0,bubbles:!0,detail:{layer:this.layer}});this.dispatchEvent(i)},r.attributeChangedCallback=function(e,n,r){null!==this.layer&&("lat-lng"===e&&this.layer.setLatLng(JSON.parse(r)),"opacity"===e&&this.layer.setOpacity(parseFloat(r)),"icon"===e&&this.layer.setIcon(t.icon(JSON.parse(r))))},n}(H);G.observedAttributes=["lat-lng","opacity","icon"];var K=/*#__PURE__*/function(t){function e(){return t.call(this)||this}return E(e,t),e.prototype.connectedCallback=function(){this.addEventListener(A,function(t){t.detail.type="overlay"})},e}(/*#__PURE__*/O(HTMLElement)),Q=/*#__PURE__*/function(t){function e(){return t.call(this)||this}return E(e,t),e.prototype.connectedCallback=function(){var t=this.getAttribute("content"),e=!1,n=this.getAttribute("open-popup");null!==n&&(e="false"!==n);var r=new CustomEvent(k,{cancelable:!0,bubbles:!0,detail:{content:t,openPopup:e}});this.dispatchEvent(r)},e}(/*#__PURE__*/O(HTMLElement)),X=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).layer=null,e}return E(e,t),e.prototype.connectedCallback=function(){for(var t,n=I(V("url-template"),this),a={},i=function(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return y(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(t,e):void 0}}(t))){n&&(t=n);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e.parseTemplateAttributes(n));!(t=i()).done;){var o=t.value,l=this.getAttribute(o);null!==l&&(a[o]=l)}var s=this.getAttribute("name"),u=F({attribution:R(V("attribution")),errorTileUrl:R(V("error-tile-url"))}),c=I(u,this);this.layer=r(n,m({},a,c));var f=new CustomEvent(A,{detail:{name:s,layer:this.layer},bubbles:!0});this.dispatchEvent(f)},e.parseTemplateAttributes=function(t){return[].concat(t.matchAll(/{(.*?)}/g)).map(function(t){return t[1]})},e}(H),Y=/*#__PURE__*/function(t){function e(){return t.call(this)||this}E(e,t);var n=e.prototype;return n.connectedCallback=function(){var t=this.getAttribute("bounds");null!==t&&this.dispatchEvent(this.getEvent(j,JSON.parse(t)))},n.attributeChangedCallback=function(t,e,n){this.dispatchEvent(this.getEvent(T,JSON.parse(n)))},n.getEvent=function(t,e){return new CustomEvent(t,{bubbles:!0,detail:{bounds:e,method:this.getAttribute("method")||"fitBounds"}})},e}(/*#__PURE__*/O(HTMLElement));Y.observedAttributes=["bounds"];var tt=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).layer=null,e}E(e,t);var n=e.prototype;return n.connectedCallback=function(){var t=this.getAttribute("url");if(null!==t){var e=this.getAttribute("bounds");if(null!==e){var n={opacity:parseFloat(this.getAttribute("opacity")||"1.0"),alt:this.getAttribute("alt")||""};this.layer=a(t,JSON.parse(e),n),this.dispatchEvent(new CustomEvent(A,{cancelable:!0,bubbles:!0,detail:{layer:this.layer}}))}else console.warn("attribute 'bounds' not set")}else console.warn("attribute 'url' not set")},n.disconnectedCallback=function(){var t;null==(t=this.layer)||t.remove()},n.attributeChangedCallback=function(t,e,n){null!==this.layer&&("url"===t?this.layer.setUrl(n):"bounds"===t?this.layer.setBounds(JSON.parse(n)):"opacity"===t&&this.layer.setOpacity(parseFloat(n)))},e}(H);tt.observedAttributes=["url","bounds","opacity"];var et=/*#__PURE__*/function(t){function e(){return t.call(this)||this}return E(e,t),e.prototype.connectedCallback=function(){var t=JSON.parse(this.getAttribute("url")),e=JSON.parse(this.getAttribute("bounds")),n={opacity:parseFloat(this.getAttribute("opacity")||"1.0"),alt:this.getAttribute("alt")||"",autoplay:!0,muted:!0,playsInline:!0},r=i(t,e,n);this.dispatchEvent(new CustomEvent(A,{cancelable:!0,bubbles:!0,detail:{layer:r}}))},e}(H),nt=/*#__PURE__*/function(t){function e(){return t.call(this)||this}return E(e,t),e.prototype.connectedCallback=function(){var t=this.getAttribute("geojson");if(null!==t){var e=o(JSON.parse(t));this.dispatchEvent(new CustomEvent(A,{bubbles:!0,cancelable:!0,detail:{layer:e}}))}},e}(/*#__PURE__*/O(HTMLElement)),rt=function(t){return t.replace(/-./g,function(t){return t[1].toUpperCase()})},at=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).icon=null,e}return E(e,t),e.prototype.connectedCallback=function(){var t={};["icon-url","icon-retina-url","shadow-url","shadow-retina-url","class-name"].forEach(function(e){t[rt(e)]=R(V(e))}),["icon-anchor","icon-size","shadow-anchor","shadow-size","tooltip-anchor","popup-anchor"].forEach(function(e){t[rt(e)]=U(R(V(e)),x(D()))}),t.crossOrigin=U(R(V("cross-origin")),x(function(t){return m({},t,{value:"true"===t.value.toLowerCase()})}));var e=F(t),n=I(e,this);this.icon=l(n);var r=new CustomEvent(S,{cancelable:!0,bubbles:!0,detail:{icon:this.icon}});this.dispatchEvent(r)},e}(/*#__PURE__*/O(HTMLElement)),it=/*#__PURE__*/function(t){function e(){var e;return(e=t.call(this)||this).tooltip=s(),e}E(e,t);var n=e.prototype;return n.connectedCallback=function(){var t=new CustomEvent(J,{cancelable:!0,bubbles:!0,detail:{tooltip:this.tooltip}});this.dispatchEvent(t)},n.attributeChangedCallback=function(t,e,n){"content"===t&&this.tooltip.setContent(n)},e}(/*#__PURE__*/O(HTMLElement));it.observedAttributes=["content"];var ot=function(t){switch(t){case"circle":return[lt("latLng","latlng",null)];case"rectangle":return[lt("latLngBounds","latlngbounds",null)];case"polygon":case"polyline":return[lt("latLngs","latlng",null)]}},lt=function(t,e,n){return{camel:t,kebab:(r=t,r.split("").map(function(t,e){return t.toUpperCase()===t?(0!==e?"-":"")+t.toLowerCase():t}).join("")),parser:st(e),defaultValue:n};var r},st=function(t){switch(t.toLowerCase()){case"boolean":return function(t){return"true"===t};case"number":return parseFloat;case"latlng":case"latlngbounds":return JSON.parse;default:return function(t){return t}}},ut=function(t){var e={circle:[lt("radius","number",null)],path:[lt("stroke","boolean",!0),lt("color","string","#3388ff"),lt("weight","number",3),lt("opacity","number",1),lt("lineCap","string","round"),lt("lineJoin","string","round"),lt("dashArray","string",null),lt("dashOffset","string",null),lt("fill","boolean",!0),lt("fillColor","string","#3388ff"),lt("fillOpacity","number",.2)],polyline:[lt("smoothFactor","number",1),lt("noClip","boolean",!1)],polygon:[],rectangle:[],interactiveLayer:[lt("interactive","boolean",!0)]};return ft(t).flatMap(function(t){return e[t]})},ct={circle:["path"],polyline:["path"],polygon:["polyline"],rectangle:["polygon"],path:["interactiveLayer"],interactiveLayer:[]},ft=function(t){for(var e=t,n=[t];ct[e].length>0;){var r=ct[e][0];n.push(r),e=r}return n},pt=function(t,e){var n={};return ut(e).forEach(function(e){t.hasAttribute(e.kebab)&&(n[e.camel]=e.parser(t.getAttribute(e.kebab)))}),n},bt=function(t,e){var n=/*#__PURE__*/function(n){function r(){var t;return(t=n.call(this)||this).layer=null,t.addEventListener(J,function(e){null!==t.layer&&t.layer.bindTooltip(e.detail.tooltip)}),t}E(r,n);var a=r.prototype;return a.connectedCallback=function(){var n=function(t,e){return ot(e).map(function(e){var n=V(e.kebab),r=I(n,t);return e.parser(r)})}(this,e),r=pt(this,e);this.layer=t.apply(void 0,n.concat([r]));var a=new CustomEvent(A,{cancelable:!0,bubbles:!0,detail:{layer:this.layer}});this.dispatchEvent(a)},a.attributeChangedCallback=function(t,n,r){null!==this.layer&&function(t,e,n,r){var a=[].concat(ot(e),ut(e)).find(function(t){return t.kebab===n});if(void 0!==a){var i=a.parser(r);if(t instanceof u)switch(n){case"lat-lng":t.setLatLng(JSON.parse(r));break;case"radius":t.setRadius(parseFloat(r))}else if(t instanceof c)switch(n){case"lat-lngs":t.setLatLngs(JSON.parse(r));break;case"lat-lng-bounds":t.setBounds(JSON.parse(r))}else t instanceof f?"lat-lngs"===n&&t.setLatLngs(JSON.parse(r)):t instanceof p&&"lat-lngs"===n&&t.setLatLngs(JSON.parse(r));var o,l=ut("polyline").find(function(t){return t.kebab===n});void 0!==l&&t.setStyle(((o={})[l.camel]=i,o))}}(this.layer,e,t,r)},r}(/*#__PURE__*/O(HTMLElement));return n.observedAttributes=function(t){var e=ot(t).map(function(t){return t.kebab}),n=ut(t).map(function(t){return t.kebab});return[].concat(e,n)}(e),n},vt=(customElements.define("l-map",q),customElements.define("l-control-layers",P),customElements.define("l-base-layers",M),customElements.define("l-overlay-layers",K),customElements.define("l-layer-group",_),customElements.define("l-tile-layer",X),customElements.define("l-marker",G),customElements.define("l-popup",Q),customElements.define("l-lat-lng-bounds",Y),customElements.define("l-image-overlay",tt),customElements.define("l-video-overlay",et),customElements.define("l-geojson",nt),customElements.define("l-icon",at),customElements.define("l-circle",bt(b,"circle")),customElements.define("l-polyline",bt(v,"polyline")),customElements.define("l-polygon",bt(h,"polygon")),customElements.define("l-rectangle",bt(d,"rectangle")),void customElements.define("l-tooltip",it));export{vt as default};
2
2
  //# sourceMappingURL=leaflet-html.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"leaflet-html.js","sources":["../src/events.js","../src/l-base-layers.js","../src/l-control-layers.js","../src/l-layer.js","../src/l-layer-group.js","../src/parse.js","../src/l-map.js","../src/l-marker.js","../src/l-overlay-layers.js","../src/l-popup.js","../src/l-tile-layer.js","../src/l-lat-lng-bounds.js","../src/l-image-overlay.js","../src/l-video-overlay.js","../src/l-geojson.js","../src/util.js","../src/l-icon.js","../src/l-tooltip.js","../src/generator.js","../src/index.js"],"sourcesContent":["export const mapAddTo = \"map:addTo\";\nexport const popupAdd = \"popup:add\";\nexport const layerRemove = \"layer:remove\";\n","// @ts-check\nimport { mapAddTo } from \"./events.js\";\n\nclass LBaseLayers extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.addEventListener(mapAddTo, (ev) => {\n ev.detail[\"type\"] = \"base\";\n });\n }\n}\n\nexport default LBaseLayers;\n","// @ts-check\n/** @typedef {import(\"leaflet\").Layer} Layer */\nimport { control } from \"leaflet\";\nimport { mapAddTo } from \"./events.js\";\n\nclass LControlLayers extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n /** @type {{ [key: string]: Layer }} */\n const base = {};\n /** @type {{ [key: string]: Layer }} */\n const overlay = {};\n const controlLayers = control.layers(base, overlay);\n\n this.addEventListener(mapAddTo, (ev) => {\n const { type, name, layer } = ev.detail;\n if (type === \"overlay\") {\n controlLayers.addOverlay(layer, name);\n } else if (type === \"base\") {\n controlLayers.addBaseLayer(layer, name);\n }\n ev.preventDefault();\n });\n\n const event = new CustomEvent(mapAddTo, {\n cancelable: true,\n bubbles: true,\n detail: {\n layer: controlLayers,\n },\n });\n this.dispatchEvent(event);\n }\n}\n\nexport default LControlLayers;\n","class LLayer extends HTMLElement {\n constructor() {\n super()\n this.layer = null\n }\n}\n\nexport default LLayer\n","// @ts-check\nimport { layerGroup } from \"leaflet\";\nimport { mapAddTo } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\n\nclass LLayerGroup extends LLayer {\n constructor() {\n super();\n this.layer = null;\n }\n\n connectedCallback() {\n const name = this.getAttribute(\"name\");\n const group = layerGroup();\n this.layer = group;\n\n const event = new CustomEvent(mapAddTo, {\n cancelable: true,\n bubbles: true,\n detail: {\n layer: group,\n name,\n },\n });\n this.dispatchEvent(event);\n\n this.addEventListener(mapAddTo, (ev) => {\n ev.stopPropagation();\n group.addLayer(ev.detail.layer);\n });\n\n const observer = new MutationObserver(function (mutations) {\n mutations.forEach((mutation) => {\n mutation.removedNodes.forEach((node) => {\n if (node instanceof HTMLElement) {\n const leafletId = node.getAttribute(\"leaflet-id\");\n if (leafletId !== null) {\n const layer = group.getLayer(parseInt(leafletId));\n if (typeof layer !== \"undefined\") {\n group.removeLayer(layer);\n }\n }\n }\n });\n });\n });\n observer.observe(this, { childList: true });\n }\n}\n\nexport default LLayerGroup;\n","/// <reference path=\"./parser.d.ts\" />\n \nexport class LeafletHTMLError extends Error {\n /** @type {Issue[]} */\n issues = [];\n\n /**\n * @param {Issue[]} issues\n */\n constructor(issues) {\n super();\n this.name = \"LeafletHTMLError\";\n this.issues = issues;\n }\n\n get message() {\n return JSON.stringify(this.issues, null, 2);\n }\n}\n\n/**\n * @template T\n * @param {T} value\n * @returns {Context<T>}\n */\nconst wrap = (value) => {\n return {\n status: \"clean\",\n issues: [],\n value,\n };\n};\n\n/**\n * @template T\n * @param {Context<T>} value\n * @returns {T}\n */\nconst unwrap = ({ value }) => value;\n\n/**\n * @template S\n * @template T\n * @param {Parser<T, S>} schema\n * @param {T} value\n * @returns {S}\n */\nexport const parse = (schema, value) => {\n const result = schema(wrap(value));\n if (result.status !== \"clean\") {\n throw new LeafletHTMLError(result.issues);\n } else {\n return unwrap(result);\n }\n};\n\n/**\n * @template S\n * @template T\n * @param {Parser<T, S>} schema\n * @param {T} value\n * @returns {Context<S>}\n */\nexport const safeParse = (schema, value) => schema(wrap(value));\n\n/**\n * @param {Object} obj\n * @returns {(ctx: Context<Object>) => Context<Object>}\n */\nexport const object = (obj) => (ctx) => {\n let { status, issues } = ctx;\n const result = {};\n for (const key of Object.keys(obj)) {\n if (key in ctx.value) {\n result[key] = obj[key](wrap(ctx.value[key])).value;\n } else {\n status = \"abort\";\n issues = [...issues, missingKeyIssue(key)];\n }\n }\n return { status, issues, value: result };\n};\n\n// CONNECTORS\n\n/**\n * @template T\n * @param {Object} obj\n * @returns {(ctx: Context<T>) => Context<Object>}\n */\nexport const distribute = (obj) => (ctx) => {\n let { status, issues } = ctx;\n const result = {};\n for (const key of Object.keys(obj)) {\n let localCtx = obj[key](ctx);\n if (localCtx.status === \"abort\") {\n status = \"abort\";\n issues = [...issues, ...localCtx.issues];\n }\n result[key] = localCtx.value;\n }\n return { status, issues, value: result };\n};\n\nexport const partial = (obj) => (ctx) => {\n let { issues } = ctx;\n let status = \"clean\"\n const result = {};\n for (const key of Object.keys(obj)) {\n let localCtx = obj[key](ctx);\n if (localCtx.status !== \"clean\") {\n status = localCtx.status\n }\n \n if ((localCtx.value === null) && (localCtx.status === \"clean\")) {\n continue\n } else {\n issues = [...issues, ...localCtx.issues];\n result[key] = localCtx.value;\n }\n }\n return { status, issues, value: result };\n};\n\nexport const pipe =\n (...parsers) =>\n (ctx) => {\n for (let i = 0; i < parsers.length; i++) {\n ctx = parsers[i](ctx);\n if (ctx.status === \"abort\") {\n break;\n }\n }\n return ctx;\n };\n\nexport const chain = (...parsers) => (ctx) => {\n for (let i=0; i<parsers.length; i++) {\n ctx = parsers[i](ctx)\n }\n return ctx\n}\n\n\n// PRIMITIVES\nexport const nullable = (parser) => (ctx) => {\n if (ctx.value === null) {\n return ctx\n }\n return parser(ctx)\n}\n\nexport const optional = (parser) => (ctx) => {\n ctx = parser(ctx)\n if (ctx.value === null) {\n return {status: \"clean\", issues: [], value: null}\n } else {\n return ctx\n }\n}\n\n/**\n * @param {string} attributeName\n * @returns {Parser<HTMLElement, string>}\n */\nexport const htmlAttribute = (attributeName) => (ctx) => {\n const el = ctx.value;\n let result = el.getAttribute(attributeName);\n if (result === null) {\n return {\n status: \"abort\",\n issues: [...ctx.issues, htmlAttributeIssue(el, attributeName)],\n value: null,\n };\n }\n return { ...ctx, value: result };\n};\n\n/**\n * @returns {(ctx: Context<string>) => Context<number>}\n */\nexport const int = () => (ctx) => {\n let result = parseInt(ctx.value);\n if (isNaN(result)) {\n return {\n status: \"abort\",\n issues: [...ctx.issues, intIssue(ctx.value)],\n value: result,\n };\n }\n return { ...ctx, value: result };\n};\n\n/**\n * @returns {(ctx: Context<string>) => Context<number>}\n */\nexport const float = () => (ctx) => {\n let result = parseFloat(ctx.value);\n if (isNaN(result)) {\n return {\n status: \"abort\",\n issues: [...ctx.issues, floatIssue(ctx.value)],\n value: result,\n };\n }\n return { ...ctx, value: result };\n};\n\n/**\n * @returns {(ctx: Context<string>) => Context<number>}\n */\nexport const json = () => (ctx) => {\n let result;\n try {\n result = JSON.parse(ctx.value);\n } catch (e) {\n return {\n status: \"abort\",\n issues: [...ctx.issues, jsonIssue(e)],\n value: null,\n };\n }\n return { ...ctx, value: result };\n};\n\n/**\n * @returns {(ctx: Context<string>) => Context<boolean>}\n */\nexport const bool = () => (ctx) => {\n return { ...ctx, value: ctx.value.toLowerCase() === \"true\" };\n};\n\n/**\n * @template T\n * @template S\n * @param {string} key\n * @param {Parser<T, S>[]} fns\n */\nexport const option = (key, ...fns) => pipe(htmlAttribute(key), ...fns);\n\n\n// ISSUES\n\n/**\n * @param {string} value\n * @returns {Issue}\n */\nexport const intIssue = (value) => {\n return {\n code: \"parse_int\",\n message: `could not parse int given: \"${value}\"`,\n };\n};\n\n/**\n * @param {string} value\n * @returns {Issue}\n */\nexport const floatIssue = (value) => {\n return {\n code: \"parse_float\",\n message: `could not parse float given: \"${value}\"`,\n };\n};\n\n/**\n * @param {SyntaxError} e\n * @returns {Issue}\n */\nexport const jsonIssue = (e) => {\n return {\n code: \"parse_json\",\n message: e.message,\n };\n};\n\n/**\n * @param {string} value\n * @returns {Issue}\n */\nexport const missingKeyIssue = (value) => {\n return {\n code: \"missing_key\",\n message: `key not found: ${value}`,\n };\n};\n\n/**\n * @param {HTMLElement} el\n * @param {string} attributeName\n * @returns {Issue}\n */\nexport const htmlAttributeIssue = (el, attributeName) => {\n return {\n code: \"missing_attribute\",\n message: `${el.tagName.toLowerCase()} missing attribute '${attributeName}'`,\n };\n};\n","// @ts-check\nimport * as L from \"leaflet\";\nimport { layerRemove, mapAddTo } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\nimport { distribute, int, json, option, parse } from \"./parse.js\";\n\nclass LMap extends HTMLElement {\n static observedAttributes = [\"zoom\", \"center\"];\n\n constructor() {\n super();\n\n this.map = null;\n this.addEventListener(\"map:bounds\", (ev) => {\n const { bounds, method } = ev.detail;\n if (this.map !== null) {\n this.map[method](bounds);\n }\n });\n\n // Observe removed l-tile-layers\n const observer = new MutationObserver(function (mutations) {\n mutations.forEach((mutation) => {\n if (mutation.target instanceof LMap) {\n const el = mutation.target;\n mutation.removedNodes.forEach((node) => {\n if (node instanceof LLayer) {\n if (el.map !== null && node.layer !== null) {\n el.map.removeLayer(node.layer);\n }\n }\n });\n }\n });\n });\n observer.observe(this, { childList: true });\n }\n\n connectedCallback() {\n this.map = L.map(this);\n\n // Allow listeners to know when the map is \"ready\"\n this.map.whenReady(() => {\n this.dispatchEvent(\n new CustomEvent(\"ready\", {\n bubbles: true,\n cancelable: true,\n detail: this.map\n })\n )\n })\n\n // Connect Leaflet events\n if (this.hasAttribute(\"on\")) {\n const on = this.getAttribute(\"on\");\n if (on !== null) {\n on.split(/\\s+/).forEach((eventName) => {\n if (this.map !== null) {\n this.map.on(eventName, (e) => {\n this.dispatchEvent(\n new CustomEvent(eventName, { bubbles: true, detail: e })\n );\n });\n }\n });\n }\n }\n\n if (this.hasAttribute(\"fit-world\")) {\n this.map.fitWorld();\n } else {\n const schema = distribute({\n zoom: option(\"zoom\", int()),\n center: option(\"center\", json())\n })\n const { zoom, center } = parse(schema, this)\n this.map.setView(center, zoom);\n }\n\n if (this.hasAttribute(\"locate\")) {\n const schema = option(\"locate\", json())\n this.map.locate(parse(schema, this));\n }\n\n this.addEventListener(mapAddTo, (ev) => {\n const layer = ev.detail.layer;\n layer.addTo(this.map);\n });\n\n this.addEventListener(layerRemove, (ev) => {\n if (this.map !== null) {\n this.map.removeLayer(ev.detail.layer);\n }\n });\n }\n\n attributeChangedCallback(name, _oldValue, newValue) {\n if (this.map !== null) {\n if (name === \"zoom\") {\n this.map.setZoom(parseInt(newValue));\n } else if (name === \"center\") {\n this.map.setView(JSON.parse(newValue));\n }\n }\n }\n}\n\nexport default LMap;\n","import * as L from \"leaflet\";\nimport { mapAddTo, popupAdd } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\nimport {\n chain,\n float,\n json,\n option,\n optional,\n htmlAttribute,\n parse,\n partial,\n nullable,\n} from \"./parse.js\";\n\nclass LMarker extends LLayer {\n static observedAttributes = [\"lat-lng\", \"opacity\", \"icon\"];\n\n constructor() {\n super();\n this.layer = null;\n this.addEventListener(\"icon:add\", (ev) => {\n ev.stopPropagation();\n this.layer.setIcon(ev.detail.icon);\n });\n }\n\n connectedCallback() {\n // Experimental parse/validate API\n const latLng = parse(option(\"lat-lng\", json()), this);\n const options = parse(\n partial({\n opacity: chain(optional(htmlAttribute(\"opacity\")), nullable(float())),\n }),\n this\n );\n this.layer = L.marker(latLng, options);\n\n if (this.hasAttribute(\"icon\")) {\n const icon = L.icon(JSON.parse(this.getAttribute(\"icon\")));\n this.layer.setIcon(icon);\n }\n\n this.setAttribute(\"leaflet-id\", L.stamp(this.layer));\n\n this.addEventListener(popupAdd, (ev) => {\n const { content, openPopup } = ev.detail;\n const popup = this.layer.bindPopup(content);\n if (openPopup) {\n popup.openPopup();\n }\n });\n\n const event = new CustomEvent(mapAddTo, {\n cancelable: true,\n bubbles: true,\n detail: {\n layer: this.layer,\n },\n });\n this.dispatchEvent(event);\n }\n\n attributeChangedCallback(name, _oldValue, newValue) {\n if (this.layer !== null) {\n if (name === \"lat-lng\") {\n this.layer.setLatLng(JSON.parse(newValue));\n }\n if (name === \"opacity\") {\n this.layer.setOpacity(parseFloat(newValue));\n }\n if (name === \"icon\") {\n this.layer.setIcon(L.icon(JSON.parse(newValue)));\n }\n }\n }\n}\n\nexport default LMarker;\n","// @ts-check\nimport { mapAddTo } from \"./events.js\";\n\nclass LOverlayLayers extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.addEventListener(mapAddTo, (ev) => {\n ev.detail[\"type\"] = \"overlay\";\n });\n }\n}\n\nexport default LOverlayLayers;\n","// @ts-check\nimport { popupAdd } from \"./events.js\";\n\nclass LPopup extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n const content = this.getAttribute(\"content\");\n let openPopup = false;\n const openPopupAttribute = this.getAttribute(\"open-popup\");\n if (openPopupAttribute !== null) {\n openPopup = openPopupAttribute !== \"false\";\n }\n const event = new CustomEvent(popupAdd, {\n cancelable: true,\n bubbles: true,\n detail: {\n content,\n openPopup,\n },\n });\n this.dispatchEvent(event);\n }\n}\n\nexport default LPopup;\n","// @ts-check\nimport { tileLayer } from \"leaflet\";\nimport { mapAddTo } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\nimport { htmlAttribute, optional, parse, partial } from \"./parse.js\";\n\nclass LTileLayer extends LLayer {\n constructor() {\n super();\n this.layer = null;\n }\n\n connectedCallback() {\n const urlTemplate = parse(htmlAttribute(\"url-template\"), this)\n \n // Template attributes\n const urlAttributes = LTileLayer.parseTemplateAttributes(urlTemplate)\n const templateOptions = {}\n for (const attribute of urlAttributes) {\n const value = this.getAttribute(attribute)\n if (value !== null) {\n templateOptions[attribute] = value\n }\n }\n \n // Options\n const name = this.getAttribute(\"name\");\n const schema = partial({\n attribution: optional(htmlAttribute(\"attribution\")),\n errorTileUrl: optional(htmlAttribute(\"error-tile-url\"))\n })\n const options = parse(schema, this)\n this.layer = tileLayer(urlTemplate, { ...templateOptions, ...options });\n const event = new CustomEvent(mapAddTo, {\n detail: { name, layer: this.layer },\n bubbles: true,\n });\n this.dispatchEvent(event);\n }\n\n /**\n * @param {string} urlTemplate\n * @returns {string[]}\n */\n static parseTemplateAttributes(urlTemplate) {\n const regex = /{(.*?)}/g\n return [...urlTemplate.matchAll(regex)].map(match => match[1])\n }\n}\n\nexport default LTileLayer;\n","// @ts-check\nimport { LatLngBounds } from \"leaflet\";\n\nclass LLatLngBounds extends HTMLElement {\n static observedAttributes = [\"bounds\"];\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n let value = this.getAttribute(\"bounds\")\n if (value !== null) {\n this.dispatchEvent(this.getEvent(JSON.parse(value)))\n }\n }\n\n attributeChangedCallback(_name, _oldValue, newValue) {\n this.dispatchEvent(this.getEvent(JSON.parse(newValue)));\n }\n\n /**\n * @param {LatLngBounds} bounds\n */\n getEvent(bounds) {\n return new CustomEvent(\"map:bounds\", {\n bubbles: true,\n detail: {\n bounds,\n method: this.getAttribute(\"method\") || \"fitBounds\",\n },\n });\n }\n}\n\nexport default LLatLngBounds;\n","// @ts-check\nimport { imageOverlay } from \"leaflet\";\nimport { mapAddTo } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\n\nclass LImageOverlay extends LLayer {\n static observedAttributes = [\"url\", \"bounds\", \"opacity\"];\n\n constructor() {\n super();\n this.layer = null;\n }\n\n connectedCallback() {\n const url = this.getAttribute(\"url\");\n if (url === null) {\n console.warn(\"attribute 'url' not set\");\n return;\n }\n let bounds = this.getAttribute(\"bounds\");\n if (bounds === null) {\n console.warn(\"attribute 'bounds' not set\");\n return;\n }\n const options = {\n opacity: parseFloat(this.getAttribute(\"opacity\") || \"1.0\"),\n alt: this.getAttribute(\"alt\") || \"\",\n };\n this.layer = imageOverlay(url, JSON.parse(bounds), options);\n this.dispatchEvent(\n new CustomEvent(mapAddTo, {\n cancelable: true,\n bubbles: true,\n detail: {\n layer: this.layer,\n },\n })\n );\n }\n\n disconnectedCallback() {\n this.layer?.remove();\n }\n\n attributeChangedCallback(name, _oldValue, newValue) {\n if (this.layer !== null) {\n if (name === \"url\") {\n this.layer.setUrl(newValue);\n } else if (name === \"bounds\") {\n this.layer.setBounds(JSON.parse(newValue));\n } else if (name === \"opacity\") {\n this.layer.setOpacity(parseFloat(newValue));\n }\n }\n }\n}\n\nexport default LImageOverlay;\n","// @ts-check\nimport { videoOverlay } from \"leaflet\";\nimport { mapAddTo } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\n\nclass LVideoOverlay extends LLayer {\n constructor() {\n super();\n }\n\n connectedCallback() {\n const url = JSON.parse(this.getAttribute(\"url\"));\n const bounds = JSON.parse(this.getAttribute(\"bounds\"));\n const options = {\n opacity: parseFloat(this.getAttribute(\"opacity\") || \"1.0\"),\n alt: this.getAttribute(\"alt\") || \"\",\n autoplay: true,\n muted: true,\n playsInline: true,\n };\n const layer = videoOverlay(url, bounds, options);\n this.dispatchEvent(\n new CustomEvent(mapAddTo, {\n cancelable: true,\n bubbles: true,\n detail: {\n layer,\n },\n }),\n );\n }\n}\n\nexport default LVideoOverlay;\n","// @ts-check\nimport { geoJSON } from \"leaflet\";\nimport { mapAddTo } from \"./events.js\";\n\nclass LGeoJSON extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n const value = this.getAttribute(\"geojson\");\n if (value !== null) {\n const layer = geoJSON(JSON.parse(value));\n this.dispatchEvent(\n new CustomEvent(mapAddTo, {\n bubbles: true,\n cancelable: true,\n detail: {\n layer,\n },\n }),\n );\n }\n }\n}\n\nexport default LGeoJSON;\n","// Utility functions\nexport const kebabToCamel = (kebab) => kebab.replace(/-./g, (x) => x[1].toUpperCase());\nexport const camelToKebab = (s) => {\n return s.split('').map((letter, idx) => {\n return letter.toUpperCase() === letter\n ? `${idx !== 0 ? '-' : ''}${letter.toLowerCase()}`\n : letter;\n }).join('');\n}\n\n","import { icon } from \"leaflet\";\nimport {\n bool,\n chain,\n htmlAttribute,\n json,\n nullable,\n optional,\n parse,\n partial,\n} from \"./parse.js\";\nimport { kebabToCamel } from \"./util.js\";\n\nclass LIcon extends HTMLElement {\n constructor() {\n super();\n this.icon = null;\n }\n\n connectedCallback() {\n // Experimental parse/validate API\n const obj = {};\n const keys = [\n \"icon-url\",\n \"icon-retina-url\",\n \"shadow-url\",\n \"shadow-retina-url\",\n \"class-name\",\n ];\n keys.forEach((key) => {\n obj[kebabToCamel(key)] = optional(htmlAttribute(key));\n });\n let points = [\n \"icon-anchor\",\n \"icon-size\",\n \"shadow-anchor\",\n \"shadow-size\",\n \"tooltip-anchor\",\n \"popup-anchor\",\n ];\n points.forEach((key) => {\n obj[kebabToCamel(key)] = chain(\n optional(htmlAttribute(key)),\n nullable(json())\n );\n });\n obj[\"crossOrigin\"] = chain(\n optional(htmlAttribute(\"cross-origin\")),\n nullable(bool())\n );\n const schema = partial(obj);\n const options = parse(schema, this);\n\n this.icon = icon(options);\n\n const event = new CustomEvent(\"icon:add\", {\n cancelable: true,\n bubbles: true,\n detail: {\n icon: this.icon,\n },\n });\n this.dispatchEvent(event);\n }\n}\n\nexport default LIcon;\n","// @ts-check\n\nimport { tooltip } from \"leaflet\";\n\nclass LTooltip extends HTMLElement {\n static observedAttributes = [\"content\"];\n\n constructor() {\n super();\n this.tooltip = tooltip();\n }\n\n connectedCallback() {\n const event = new CustomEvent(\"bindTooltip\", {\n cancelable: true,\n bubbles: true,\n detail: {\n tooltip: this.tooltip,\n },\n });\n this.dispatchEvent(event);\n }\n\n /**\n * @param {string} attName\n * @param {string} newValue\n */\n attributeChangedCallback(attName, _, newValue) {\n if (attName === \"content\") {\n this.tooltip.setContent(newValue);\n }\n }\n}\n\nexport default LTooltip;\n","// @ts-check\nimport { Circle, LatLng, Polygon, Polyline, Rectangle } from \"leaflet\";\nimport { camelToKebab } from \"./util.js\";\nimport { htmlAttribute, parse } from \"./parse.js\";\n\n/**\n * @typedef {Object} TagOption\n * @property {string} camel\n * @property {string} kebab\n * @property {(s: string) => AttributeValue} parser\n * @property {AttributeValue | null} defaultValue\n */\n/**\n * @typedef {(\"circle\"|\"rectangle\"|\"polygon\"|\"polyline\")} MethodName\n * @typedef {(\"path\"|\"interactiveLayer\")} LayerName\n * @typedef {(\"boolean\"|\"number\"|\"string\"|\"latlng\"|\"latlngbounds\")} AttributeType\n * @typedef {(boolean|number|string|LatLng)} AttributeValue\n */\n\n/**\n * @param {MethodName} methodName\n * @returns {TagOption[]}\n */\nconst positionalArguments = (methodName) => {\n switch (methodName) {\n case \"circle\":\n return [option(\"latLng\", \"latlng\", null)];\n case \"rectangle\":\n return [option(\"latLngBounds\", \"latlngbounds\", null)];\n case \"polygon\":\n return [option(\"latLngs\", \"latlng\", null)];\n case \"polyline\":\n return [option(\"latLngs\", \"latlng\", null)];\n }\n};\n\n/**\n * @param {string} name\n * @param {AttributeType} type\n * @param {AttributeValue | null} defaultValue\n * @returns {TagOption}\n */\nconst option = (name, type, defaultValue) => {\n return {\n camel: name,\n kebab: camelToKebab(name),\n parser: inferParser(type),\n defaultValue,\n };\n};\n\n/**\n * @param {AttributeType} type\n * @returns {(s: string) => AttributeValue}\n */\nconst inferParser = (type) => {\n switch (type.toLowerCase()) {\n case \"boolean\":\n return (s) => s === \"true\";\n case \"number\":\n return parseFloat;\n case \"latlng\":\n case \"latlngbounds\":\n return JSON.parse;\n case \"string\":\n return (s) => s;\n default:\n return (s) => s;\n }\n};\n\n/**\n * @param {MethodName} methodName\n * @returns {TagOption[]}\n */\nconst options = (methodName) => {\n const _OPTIONS = {\n circle: [option(\"radius\", \"number\", null)],\n path: [\n option(\"stroke\", \"boolean\", true),\n option(\"color\", \"string\", \"#3388ff\"),\n option(\"weight\", \"number\", 3),\n option(\"opacity\", \"number\", 1.0),\n option(\"lineCap\", \"string\", \"round\"),\n option(\"lineJoin\", \"string\", \"round\"),\n option(\"dashArray\", \"string\", null),\n option(\"dashOffset\", \"string\", null),\n option(\"fill\", \"boolean\", true),\n option(\"fillColor\", \"string\", \"#3388ff\"),\n option(\"fillOpacity\", \"number\", 0.2),\n ],\n polyline: [\n option(\"smoothFactor\", \"number\", 1.0),\n option(\"noClip\", \"boolean\", false),\n ],\n polygon: [],\n rectangle: [],\n interactiveLayer: [option(\"interactive\", \"boolean\", true)],\n };\n return inheritance(methodName).flatMap((parent) => _OPTIONS[parent]);\n};\n\n/**\n * @type {Object.<string, (MethodName | LayerName)[]>}\n */\nconst INHERITS = {\n circle: [\"path\"],\n polyline: [\"path\"],\n polygon: [\"polyline\"],\n rectangle: [\"polygon\"],\n path: [\"interactiveLayer\"],\n interactiveLayer: [],\n};\n\n/**\n * @param {MethodName} methodName\n * @returns {(MethodName | LayerName)[]}\n */\nconst inheritance = (methodName) => {\n /** @type {(MethodName | LayerName)} */\n let name = methodName;\n let chain = [methodName];\n while (INHERITS[name].length > 0) {\n let parent = INHERITS[name][0];\n chain.push(parent);\n name = parent;\n }\n return chain;\n};\n\n/**\n * @param {MethodName} methodName\n * @param {string} newValue\n * @param {string} name\n * @param {(Circle | Rectangle | Polygon | Polyline)} layer\n */\nconst setter = (layer, methodName, name, newValue) => {\n // Parse\n const allOptions = [\n ...positionalArguments(methodName),\n ...options(methodName),\n ];\n let _opt = allOptions.find((o) => o.kebab === name);\n if (typeof _opt === \"undefined\") {\n return;\n }\n const parsedValue = _opt.parser(newValue);\n\n // Update\n if (layer instanceof Circle) {\n switch (name) {\n case \"lat-lng\":\n layer.setLatLng(JSON.parse(newValue));\n break;\n case \"radius\":\n layer.setRadius(parseFloat(newValue));\n break;\n }\n } else if (layer instanceof Rectangle) {\n switch (name) {\n case \"lat-lngs\":\n layer.setLatLngs(JSON.parse(newValue));\n break;\n case \"lat-lng-bounds\":\n layer.setBounds(JSON.parse(newValue));\n break;\n }\n } else if (layer instanceof Polygon) {\n switch (name) {\n case \"lat-lngs\":\n layer.setLatLngs(JSON.parse(newValue));\n break;\n }\n } else if (layer instanceof Polyline) {\n switch (name) {\n case \"lat-lngs\":\n layer.setLatLngs(JSON.parse(newValue));\n break;\n }\n }\n\n // setStyle options\n let opt = options(\"polyline\").find((o) => o.kebab === name);\n if (typeof opt !== \"undefined\") {\n layer.setStyle({ [opt.camel]: parsedValue });\n }\n};\n\n/**\n * @param {MethodName} methodName\n */\nconst attributes = (methodName) => {\n let args = positionalArguments(methodName).map((o) => o.kebab);\n let opts = options(methodName).map((o) => o.kebab);\n return [...args, ...opts];\n};\n\n/**\n * @param {HTMLElement} el\n * @param {MethodName} methodName\n */\nconst settings = (el, methodName) => {\n // Gather settings\n let result = {};\n\n // Process inheritance chain\n options(methodName).forEach((o) => {\n if (el.hasAttribute(o.kebab)) {\n result[o.camel] = o.parser(el.getAttribute(o.kebab));\n }\n });\n return result;\n};\n\n/**\n * Read positional arguments from HTMLElement\n *\n * @param {HTMLElement} el\n * @param {MethodName} methodName\n */\nconst positional = (el, methodName) => {\n return positionalArguments(methodName).map(option => {\n const schema = htmlAttribute(option.kebab)\n const value = parse(schema, el)\n return option.parser(value);\n })\n};\n\n/**\n * @param {MethodName} methodName\n */\nconst generator = (method, methodName) => {\n class cls extends HTMLElement {\n static observedAttributes = attributes(methodName);\n\n constructor() {\n super();\n this.layer = null;\n this.addEventListener(\"bindTooltip\", (ev) => {\n if (this.layer !== null) {\n this.layer.bindTooltip(ev.detail.tooltip);\n }\n });\n }\n\n connectedCallback() {\n const args = positional(this, methodName);\n const options = settings(this, methodName);\n this.layer = method(...args, options);\n const event = new CustomEvent(\"map:addTo\", {\n cancelable: true,\n bubbles: true,\n detail: {\n layer: this.layer,\n },\n });\n this.dispatchEvent(event);\n }\n\n /**\n * @param {string} attName\n * @param {string} newValue\n */\n attributeChangedCallback(attName, _, newValue) {\n if (this.layer !== null) {\n setter(this.layer, methodName, attName, newValue);\n }\n }\n }\n return cls;\n};\n\nexport default generator;\n","// @ts-check\nimport LBaseLayers from \"./l-base-layers.js\";\nimport LControlLayers from \"./l-control-layers.js\";\nimport LLayerGroup from \"./l-layer-group.js\";\nimport LMap from \"./l-map.js\";\nimport LMarker from \"./l-marker.js\";\nimport LOverlayLayers from \"./l-overlay-layers.js\";\nimport LPopup from \"./l-popup.js\";\nimport LTileLayer from \"./l-tile-layer.js\";\nimport LLatLngBounds from \"./l-lat-lng-bounds.js\";\nimport LImageOverlay from \"./l-image-overlay.js\";\nimport LVideoOverlay from \"./l-video-overlay.js\";\nimport LGeoJSON from \"./l-geojson.js\";\nimport LIcon from \"./l-icon.js\";\nimport LTooltip from \"./l-tooltip.js\";\nimport generator from \"./generator.js\";\nimport { circle, polyline, polygon, rectangle } from \"leaflet\";\n\nconst init = (() => {\n // Custom elements (order of definition is important)\n customElements.define(\"l-map\", LMap);\n customElements.define(\"l-control-layers\", LControlLayers);\n customElements.define(\"l-base-layers\", LBaseLayers);\n customElements.define(\"l-overlay-layers\", LOverlayLayers);\n customElements.define(\"l-layer-group\", LLayerGroup);\n customElements.define(\"l-tile-layer\", LTileLayer);\n customElements.define(\"l-marker\", LMarker);\n customElements.define(\"l-popup\", LPopup);\n customElements.define(\"l-lat-lng-bounds\", LLatLngBounds);\n customElements.define(\"l-image-overlay\", LImageOverlay);\n customElements.define(\"l-video-overlay\", LVideoOverlay);\n customElements.define(\"l-geojson\", LGeoJSON);\n customElements.define(\"l-icon\", LIcon);\n customElements.define(\"l-circle\", generator(circle, \"circle\"));\n customElements.define(\"l-polyline\", generator(polyline, \"polyline\"));\n customElements.define(\"l-polygon\", generator(polygon, \"polygon\"));\n customElements.define(\"l-rectangle\", generator(rectangle, \"rectangle\"));\n customElements.define(\"l-tooltip\", LTooltip);\n})();\n\nexport default init;\n"],"names":["mapAddTo","popupAdd","LBaseLayers","_HTMLElement","call","this","_inheritsLoose","prototype","connectedCallback","addEventListener","ev","detail","_wrapNativeSuper","HTMLElement","LControlLayers","controlLayers","control","layers","_ev$detail","type","name","layer","addOverlay","addBaseLayer","preventDefault","event","CustomEvent","cancelable","bubbles","dispatchEvent","LLayer","_this","LLayerGroup","_LLayer","getAttribute","group","layerGroup","stopPropagation","addLayer","MutationObserver","mutations","forEach","mutation","removedNodes","node","leafletId","getLayer","parseInt","removeLayer","observe","childList","LeafletHTMLError","_Error","issues","key","get","JSON","stringify","Error","parse","schema","value","result","status","wrap","partial","obj","ctx","_i3","_Object$keys3","Object","keys","length","localCtx","concat","pipe","parsers","slice","arguments","i","chain","nullable","parser","optional","htmlAttribute","attributeName","el","htmlAttributeIssue","_extends","json","e","jsonIssue","option","apply","code","message","tagName","toLowerCase","LMap","map","method","bounds","target","_proto","_this2","L","whenReady","hasAttribute","on","split","eventName","fitWorld","zoom","isNaN","center","_i2","_Object$keys2","_parse","setView","locate","addTo","attributeChangedCallback","_oldValue","newValue","setZoom","observedAttributes","LMarker","setIcon","icon","latLng","options","opacity","parseFloat","marker","setAttribute","stamp","openPopup","popup","bindPopup","content","setLatLng","setOpacity","LOverlayLayers","LPopup","openPopupAttribute","LTileLayer","_step","urlTemplate","templateOptions","_iterator","_createForOfIteratorHelperLoose","parseTemplateAttributes","done","attribute","attribution","errorTileUrl","tileLayer","matchAll","match","LLatLngBounds","getEvent","_name","LImageOverlay","url","alt","imageOverlay","console","warn","disconnectedCallback","_this$layer","remove","setUrl","setBounds","LVideoOverlay","autoplay","muted","playsInline","videoOverlay","LGeoJSON","geoJSON","kebabToCamel","kebab","replace","x","toUpperCase","LIcon","LTooltip","tooltip","attName","_","setContent","positionalArguments","methodName","defaultValue","camel","s","letter","idx","join","inferParser","_OPTIONS","circle","path","polyline","polygon","rectangle","interactiveLayer","inheritance","flatMap","parent","INHERITS","push","settings","o","generator","cls","bindTooltip","args","positional","_opt","find","parsedValue","Circle","setRadius","Rectangle","setLatLngs","Polygon","Polyline","_layer$setStyle","opt","setStyle","setter","opts","attributes","init","customElements","define"],"mappings":"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"}
1
+ {"version":3,"file":"leaflet-html.js","sources":["../src/events.js","../src/l-base-layers.js","../src/l-control-layers.js","../src/l-layer.js","../src/l-layer-group.js","../src/parse.js","../src/l-map.js","../src/l-marker.js","../src/l-overlay-layers.js","../src/l-popup.js","../src/l-tile-layer.js","../src/l-lat-lng-bounds.js","../src/l-image-overlay.js","../src/l-video-overlay.js","../src/l-geojson.js","../src/util.js","../src/l-icon.js","../src/l-tooltip.js","../src/generator.js","../src/index.js"],"sourcesContent":["// NOTE: These event keys are part of the public API of leaflet-html\nexport const layerConnected = \"l:layer:connected\";\nexport const popupConnected = \"l:popup:connected\";\nexport const iconConnected = \"l:icon:connected\";\nexport const layerRemoved = \"l:layer:removed\";\nexport const latLngBoundsConnected = \"l:latlngbounds:connected\";\nexport const latLngBoundsChanged = \"l:latlngbounds:changed\";\nexport const tooltipConnected = \"l:tooltip:connected\";\n","// @ts-check\nimport { layerConnected } from \"./events.js\";\n\nclass LBaseLayers extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.addEventListener(layerConnected, (ev) => {\n ev.detail[\"type\"] = \"base\";\n });\n }\n}\n\nexport default LBaseLayers;\n","// @ts-check\n/** @typedef {import(\"leaflet\").Layer} Layer */\nimport { control } from \"leaflet\";\nimport { layerConnected } from \"./events.js\";\n\nclass LControlLayers extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n /** @type {{ [key: string]: Layer }} */\n const base = {};\n /** @type {{ [key: string]: Layer }} */\n const overlay = {};\n const controlLayers = control.layers(base, overlay);\n\n this.addEventListener(layerConnected, (ev) => {\n const { type, name, layer } = ev.detail;\n if (type === \"overlay\") {\n controlLayers.addOverlay(layer, name);\n } else if (type === \"base\") {\n controlLayers.addBaseLayer(layer, name);\n }\n ev.preventDefault();\n });\n\n const event = new CustomEvent(layerConnected, {\n cancelable: true,\n bubbles: true,\n detail: {\n layer: controlLayers,\n },\n });\n this.dispatchEvent(event);\n }\n}\n\nexport default LControlLayers;\n","class LLayer extends HTMLElement {\n constructor() {\n super()\n this.layer = null\n }\n}\n\nexport default LLayer\n","// @ts-check\nimport { layerGroup } from \"leaflet\";\nimport { layerConnected } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\n\nclass LLayerGroup extends LLayer {\n constructor() {\n super();\n this.layer = null;\n }\n\n connectedCallback() {\n const name = this.getAttribute(\"name\");\n const group = layerGroup();\n this.layer = group;\n\n const event = new CustomEvent(layerConnected, {\n cancelable: true,\n bubbles: true,\n detail: {\n layer: group,\n name,\n },\n });\n this.dispatchEvent(event);\n\n this.addEventListener(layerConnected, (ev) => {\n ev.stopPropagation();\n group.addLayer(ev.detail.layer);\n });\n\n const observer = new MutationObserver(function (mutations) {\n mutations.forEach((mutation) => {\n mutation.removedNodes.forEach((node) => {\n if (node instanceof HTMLElement) {\n const leafletId = node.getAttribute(\"leaflet-id\");\n if (leafletId !== null) {\n const layer = group.getLayer(parseInt(leafletId));\n if (typeof layer !== \"undefined\") {\n group.removeLayer(layer);\n }\n }\n }\n });\n });\n });\n observer.observe(this, { childList: true });\n }\n}\n\nexport default LLayerGroup;\n","/// <reference path=\"./parser.d.ts\" />\n \nexport class LeafletHTMLError extends Error {\n /** @type {Issue[]} */\n issues = [];\n\n /**\n * @param {Issue[]} issues\n */\n constructor(issues) {\n super();\n this.name = \"LeafletHTMLError\";\n this.issues = issues;\n }\n\n get message() {\n return JSON.stringify(this.issues, null, 2);\n }\n}\n\n/**\n * @template T\n * @param {T} value\n * @returns {Context<T>}\n */\nconst wrap = (value) => {\n return {\n status: \"clean\",\n issues: [],\n value,\n };\n};\n\n/**\n * @template T\n * @param {Context<T>} value\n * @returns {T}\n */\nconst unwrap = ({ value }) => value;\n\n/**\n * @template S\n * @template T\n * @param {Parser<T, S>} schema\n * @param {T} value\n * @returns {S}\n */\nexport const parse = (schema, value) => {\n const result = schema(wrap(value));\n if (result.status !== \"clean\") {\n throw new LeafletHTMLError(result.issues);\n } else {\n return unwrap(result);\n }\n};\n\n/**\n * @template S\n * @template T\n * @param {Parser<T, S>} schema\n * @param {T} value\n * @returns {Context<S>}\n */\nexport const safeParse = (schema, value) => schema(wrap(value));\n\n/**\n * @param {Object} obj\n * @returns {(ctx: Context<Object>) => Context<Object>}\n */\nexport const object = (obj) => (ctx) => {\n let { status, issues } = ctx;\n const result = {};\n for (const key of Object.keys(obj)) {\n if (key in ctx.value) {\n result[key] = obj[key](wrap(ctx.value[key])).value;\n } else {\n status = \"abort\";\n issues = [...issues, missingKeyIssue(key)];\n }\n }\n return { status, issues, value: result };\n};\n\n// CONNECTORS\n\n/**\n * @template T\n * @param {Object} obj\n * @returns {(ctx: Context<T>) => Context<Object>}\n */\nexport const distribute = (obj) => (ctx) => {\n let { status, issues } = ctx;\n const result = {};\n for (const key of Object.keys(obj)) {\n let localCtx = obj[key](ctx);\n if (localCtx.status === \"abort\") {\n status = \"abort\";\n issues = [...issues, ...localCtx.issues];\n }\n result[key] = localCtx.value;\n }\n return { status, issues, value: result };\n};\n\nexport const partial = (obj) => (ctx) => {\n let { issues } = ctx;\n let status = \"clean\"\n const result = {};\n for (const key of Object.keys(obj)) {\n let localCtx = obj[key](ctx);\n if (localCtx.status !== \"clean\") {\n status = localCtx.status\n }\n \n if ((localCtx.value === null) && (localCtx.status === \"clean\")) {\n continue\n } else {\n issues = [...issues, ...localCtx.issues];\n result[key] = localCtx.value;\n }\n }\n return { status, issues, value: result };\n};\n\nexport const pipe =\n (...parsers) =>\n (ctx) => {\n for (let i = 0; i < parsers.length; i++) {\n ctx = parsers[i](ctx);\n if (ctx.status === \"abort\") {\n break;\n }\n }\n return ctx;\n };\n\nexport const chain = (...parsers) => (ctx) => {\n for (let i=0; i<parsers.length; i++) {\n ctx = parsers[i](ctx)\n }\n return ctx\n}\n\n\n// PRIMITIVES\nexport const nullable = (parser) => (ctx) => {\n if (ctx.value === null) {\n return ctx\n }\n return parser(ctx)\n}\n\nexport const optional = (parser) => (ctx) => {\n ctx = parser(ctx)\n if (ctx.value === null) {\n return {status: \"clean\", issues: [], value: null}\n } else {\n return ctx\n }\n}\n\n/**\n * @param {string} attributeName\n * @returns {Parser<HTMLElement, string>}\n */\nexport const htmlAttribute = (attributeName) => (ctx) => {\n const el = ctx.value;\n let result = el.getAttribute(attributeName);\n if (result === null) {\n return {\n status: \"abort\",\n issues: [...ctx.issues, htmlAttributeIssue(el, attributeName)],\n value: null,\n };\n }\n return { ...ctx, value: result };\n};\n\n/**\n * @returns {(ctx: Context<string>) => Context<number>}\n */\nexport const int = () => (ctx) => {\n let result = parseInt(ctx.value);\n if (isNaN(result)) {\n return {\n status: \"abort\",\n issues: [...ctx.issues, intIssue(ctx.value)],\n value: result,\n };\n }\n return { ...ctx, value: result };\n};\n\n/**\n * @returns {(ctx: Context<string>) => Context<number>}\n */\nexport const float = () => (ctx) => {\n let result = parseFloat(ctx.value);\n if (isNaN(result)) {\n return {\n status: \"abort\",\n issues: [...ctx.issues, floatIssue(ctx.value)],\n value: result,\n };\n }\n return { ...ctx, value: result };\n};\n\n/**\n * @returns {(ctx: Context<string>) => Context<number>}\n */\nexport const json = () => (ctx) => {\n let result;\n try {\n result = JSON.parse(ctx.value);\n } catch (e) {\n return {\n status: \"abort\",\n issues: [...ctx.issues, jsonIssue(e)],\n value: null,\n };\n }\n return { ...ctx, value: result };\n};\n\n/**\n * @returns {(ctx: Context<string>) => Context<boolean>}\n */\nexport const bool = () => (ctx) => {\n return { ...ctx, value: ctx.value.toLowerCase() === \"true\" };\n};\n\n/**\n * @template T\n * @template S\n * @param {string} key\n * @param {Parser<T, S>[]} fns\n */\nexport const option = (key, ...fns) => pipe(htmlAttribute(key), ...fns);\n\n\n// ISSUES\n\n/**\n * @param {string} value\n * @returns {Issue}\n */\nexport const intIssue = (value) => {\n return {\n code: \"parse_int\",\n message: `could not parse int given: \"${value}\"`,\n };\n};\n\n/**\n * @param {string} value\n * @returns {Issue}\n */\nexport const floatIssue = (value) => {\n return {\n code: \"parse_float\",\n message: `could not parse float given: \"${value}\"`,\n };\n};\n\n/**\n * @param {SyntaxError} e\n * @returns {Issue}\n */\nexport const jsonIssue = (e) => {\n return {\n code: \"parse_json\",\n message: e.message,\n };\n};\n\n/**\n * @param {string} value\n * @returns {Issue}\n */\nexport const missingKeyIssue = (value) => {\n return {\n code: \"missing_key\",\n message: `key not found: ${value}`,\n };\n};\n\n/**\n * @param {HTMLElement} el\n * @param {string} attributeName\n * @returns {Issue}\n */\nexport const htmlAttributeIssue = (el, attributeName) => {\n return {\n code: \"missing_attribute\",\n message: `${el.tagName.toLowerCase()} missing attribute '${attributeName}'`,\n };\n};\n","// @ts-check\nimport * as L from \"leaflet\";\nimport { layerRemoved, layerConnected, latLngBoundsConnected, latLngBoundsChanged } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\nimport { distribute, int, json, option, parse } from \"./parse.js\";\n\nclass LMap extends HTMLElement {\n static observedAttributes = [\"zoom\", \"center\", \"zoom-control\"];\n\n constructor() {\n super();\n\n this.map = null;\n\n // Handle <l-lat-lng-bounds> connection and modification(s)\n const boundsListener = (ev) => {\n const { bounds, method } = ev.detail;\n if (this.map !== null) {\n this.map[method](bounds);\n }\n };\n this.addEventListener(latLngBoundsConnected, boundsListener);\n this.addEventListener(latLngBoundsChanged, boundsListener);\n\n // Observe removed l-tile-layers\n const observer = new MutationObserver(function (mutations) {\n mutations.forEach((mutation) => {\n if (mutation.target instanceof LMap) {\n const el = mutation.target;\n mutation.removedNodes.forEach((node) => {\n if (node instanceof LLayer) {\n if (el.map !== null && node.layer !== null) {\n // Notify listeners of layer removal\n el.dispatchEvent(new CustomEvent(layerRemoved, {\n bubbles: true,\n detail: {\n layer: node.layer\n }\n }))\n el.map.removeLayer(node.layer);\n }\n }\n });\n }\n });\n });\n observer.observe(this, { childList: true });\n }\n\n connectedCallback() {\n this.map = L.map(this, { zoomControl: this.hasAttribute(\"zoom-control\") });\n\n // Allow listeners to know when the map is \"ready\"\n this.map.whenReady(() => {\n this.dispatchEvent(\n new CustomEvent(\"ready\", {\n bubbles: true,\n cancelable: true,\n detail: this.map\n })\n )\n })\n\n // Connect Leaflet events\n if (this.hasAttribute(\"on\")) {\n const on = this.getAttribute(\"on\");\n if (on !== null) {\n on.split(/\\s+/).forEach((eventName) => {\n if (this.map !== null) {\n this.map.on(eventName, (e) => {\n this.dispatchEvent(\n new CustomEvent(eventName, { bubbles: true, detail: e })\n );\n });\n }\n });\n }\n }\n\n if (this.hasAttribute(\"fit-world\")) {\n this.map.fitWorld();\n } else {\n const schema = distribute({\n zoom: option(\"zoom\", int()),\n center: option(\"center\", json())\n })\n const { zoom, center } = parse(schema, this)\n this.map.setView(center, zoom);\n }\n\n if (this.hasAttribute(\"locate\")) {\n const schema = option(\"locate\", json())\n this.map.locate(parse(schema, this));\n }\n\n this.addEventListener(layerConnected, (ev) => {\n const layer = ev.detail.layer;\n layer.addTo(this.map);\n });\n\n this.addEventListener(layerRemoved, (ev) => {\n if (this.map !== null) {\n this.map.removeLayer(ev.detail.layer);\n }\n });\n }\n\n attributeChangedCallback(name, _oldValue, newValue) {\n if (this.map !== null) {\n if (name === \"zoom\") {\n this.map.setZoom(parseInt(newValue));\n } else if (name === \"center\") {\n this.map.setView(JSON.parse(newValue));\n }\n }\n }\n}\n\nexport default LMap;\n","import * as L from \"leaflet\";\nimport { layerConnected, popupConnected, iconConnected } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\nimport {\n chain,\n float,\n json,\n option,\n optional,\n htmlAttribute,\n parse,\n partial,\n nullable,\n} from \"./parse.js\";\n\nclass LMarker extends LLayer {\n static observedAttributes = [\"lat-lng\", \"opacity\", \"icon\"];\n\n constructor() {\n super();\n this.layer = null;\n this.addEventListener(iconConnected, (ev) => {\n ev.stopPropagation();\n this.layer.setIcon(ev.detail.icon);\n });\n }\n\n connectedCallback() {\n // Experimental parse/validate API\n const latLng = parse(option(\"lat-lng\", json()), this);\n const options = parse(\n partial({\n opacity: chain(optional(htmlAttribute(\"opacity\")), nullable(float())),\n }),\n this\n );\n this.layer = L.marker(latLng, options);\n\n if (this.hasAttribute(\"icon\")) {\n const icon = L.icon(JSON.parse(this.getAttribute(\"icon\")));\n this.layer.setIcon(icon);\n }\n\n this.setAttribute(\"leaflet-id\", L.stamp(this.layer));\n\n this.addEventListener(popupConnected, (ev) => {\n const { content, openPopup } = ev.detail;\n const popup = this.layer.bindPopup(content);\n if (openPopup) {\n popup.openPopup();\n }\n });\n\n const event = new CustomEvent(layerConnected, {\n cancelable: true,\n bubbles: true,\n detail: {\n layer: this.layer,\n },\n });\n this.dispatchEvent(event);\n }\n\n attributeChangedCallback(name, _oldValue, newValue) {\n if (this.layer !== null) {\n if (name === \"lat-lng\") {\n this.layer.setLatLng(JSON.parse(newValue));\n }\n if (name === \"opacity\") {\n this.layer.setOpacity(parseFloat(newValue));\n }\n if (name === \"icon\") {\n this.layer.setIcon(L.icon(JSON.parse(newValue)));\n }\n }\n }\n}\n\nexport default LMarker;\n","// @ts-check\nimport { layerConnected } from \"./events.js\";\n\nclass LOverlayLayers extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.addEventListener(layerConnected, (ev) => {\n ev.detail[\"type\"] = \"overlay\";\n });\n }\n}\n\nexport default LOverlayLayers;\n","// @ts-check\nimport { popupConnected } from \"./events.js\";\n\nclass LPopup extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n const content = this.getAttribute(\"content\");\n let openPopup = false;\n const openPopupAttribute = this.getAttribute(\"open-popup\");\n if (openPopupAttribute !== null) {\n openPopup = openPopupAttribute !== \"false\";\n }\n const event = new CustomEvent(popupConnected, {\n cancelable: true,\n bubbles: true,\n detail: {\n content,\n openPopup,\n },\n });\n this.dispatchEvent(event);\n }\n}\n\nexport default LPopup;\n","// @ts-check\nimport { tileLayer } from \"leaflet\";\nimport { layerConnected } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\nimport { htmlAttribute, optional, parse, partial } from \"./parse.js\";\n\nclass LTileLayer extends LLayer {\n constructor() {\n super();\n this.layer = null;\n }\n\n connectedCallback() {\n const urlTemplate = parse(htmlAttribute(\"url-template\"), this)\n \n // Template attributes\n const urlAttributes = LTileLayer.parseTemplateAttributes(urlTemplate)\n const templateOptions = {}\n for (const attribute of urlAttributes) {\n const value = this.getAttribute(attribute)\n if (value !== null) {\n templateOptions[attribute] = value\n }\n }\n \n // Options\n const name = this.getAttribute(\"name\");\n const schema = partial({\n attribution: optional(htmlAttribute(\"attribution\")),\n errorTileUrl: optional(htmlAttribute(\"error-tile-url\"))\n })\n const options = parse(schema, this)\n this.layer = tileLayer(urlTemplate, { ...templateOptions, ...options });\n const event = new CustomEvent(layerConnected, {\n detail: { name, layer: this.layer },\n bubbles: true,\n });\n this.dispatchEvent(event);\n }\n\n /**\n * @param {string} urlTemplate\n * @returns {string[]}\n */\n static parseTemplateAttributes(urlTemplate) {\n const regex = /{(.*?)}/g\n return [...urlTemplate.matchAll(regex)].map(match => match[1])\n }\n}\n\nexport default LTileLayer;\n","// @ts-check\nimport { LatLngBounds } from \"leaflet\";\nimport { latLngBoundsChanged, latLngBoundsConnected } from \"./events\"; \n\nclass LLatLngBounds extends HTMLElement {\n static observedAttributes = [\"bounds\"];\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n let value = this.getAttribute(\"bounds\")\n if (value !== null) {\n this.dispatchEvent(this.getEvent(latLngBoundsConnected, JSON.parse(value)))\n }\n }\n\n attributeChangedCallback(_name, _oldValue, newValue) {\n this.dispatchEvent(this.getEvent(latLngBoundsChanged, JSON.parse(newValue)));\n }\n\n /**\n * @param {LatLngBounds} bounds\n */\n getEvent(key, bounds) {\n return new CustomEvent(key, {\n bubbles: true,\n detail: {\n bounds,\n method: this.getAttribute(\"method\") || \"fitBounds\",\n },\n });\n }\n}\n\nexport default LLatLngBounds;\n","// @ts-check\nimport { imageOverlay } from \"leaflet\";\nimport { layerConnected } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\n\nclass LImageOverlay extends LLayer {\n static observedAttributes = [\"url\", \"bounds\", \"opacity\"];\n\n constructor() {\n super();\n this.layer = null;\n }\n\n connectedCallback() {\n const url = this.getAttribute(\"url\");\n if (url === null) {\n console.warn(\"attribute 'url' not set\");\n return;\n }\n let bounds = this.getAttribute(\"bounds\");\n if (bounds === null) {\n console.warn(\"attribute 'bounds' not set\");\n return;\n }\n const options = {\n opacity: parseFloat(this.getAttribute(\"opacity\") || \"1.0\"),\n alt: this.getAttribute(\"alt\") || \"\",\n };\n this.layer = imageOverlay(url, JSON.parse(bounds), options);\n this.dispatchEvent(\n new CustomEvent(layerConnected, {\n cancelable: true,\n bubbles: true,\n detail: {\n layer: this.layer,\n },\n })\n );\n }\n\n disconnectedCallback() {\n this.layer?.remove();\n }\n\n attributeChangedCallback(name, _oldValue, newValue) {\n if (this.layer !== null) {\n if (name === \"url\") {\n this.layer.setUrl(newValue);\n } else if (name === \"bounds\") {\n this.layer.setBounds(JSON.parse(newValue));\n } else if (name === \"opacity\") {\n this.layer.setOpacity(parseFloat(newValue));\n }\n }\n }\n}\n\nexport default LImageOverlay;\n","// @ts-check\nimport { videoOverlay } from \"leaflet\";\nimport { layerConnected } from \"./events.js\";\nimport LLayer from \"./l-layer.js\";\n\nclass LVideoOverlay extends LLayer {\n constructor() {\n super();\n }\n\n connectedCallback() {\n const url = JSON.parse(this.getAttribute(\"url\"));\n const bounds = JSON.parse(this.getAttribute(\"bounds\"));\n const options = {\n opacity: parseFloat(this.getAttribute(\"opacity\") || \"1.0\"),\n alt: this.getAttribute(\"alt\") || \"\",\n autoplay: true,\n muted: true,\n playsInline: true,\n };\n const layer = videoOverlay(url, bounds, options);\n this.dispatchEvent(\n new CustomEvent(layerConnected, {\n cancelable: true,\n bubbles: true,\n detail: {\n layer,\n },\n }),\n );\n }\n}\n\nexport default LVideoOverlay;\n","// @ts-check\nimport { geoJSON } from \"leaflet\";\nimport { layerConnected } from \"./events.js\";\n\nclass LGeoJSON extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n const value = this.getAttribute(\"geojson\");\n if (value !== null) {\n const layer = geoJSON(JSON.parse(value));\n this.dispatchEvent(\n new CustomEvent(layerConnected, {\n bubbles: true,\n cancelable: true,\n detail: {\n layer,\n },\n }),\n );\n }\n }\n}\n\nexport default LGeoJSON;\n","// Utility functions\nexport const kebabToCamel = (kebab) => kebab.replace(/-./g, (x) => x[1].toUpperCase());\nexport const camelToKebab = (s) => {\n return s.split('').map((letter, idx) => {\n return letter.toUpperCase() === letter\n ? `${idx !== 0 ? '-' : ''}${letter.toLowerCase()}`\n : letter;\n }).join('');\n}\n\n","import { icon } from \"leaflet\";\nimport { iconConnected } from \"./events.js\";\nimport {\n bool,\n chain,\n htmlAttribute,\n json,\n nullable,\n optional,\n parse,\n partial,\n} from \"./parse.js\";\nimport { kebabToCamel } from \"./util.js\";\n\nclass LIcon extends HTMLElement {\n constructor() {\n super();\n this.icon = null;\n }\n\n connectedCallback() {\n // Experimental parse/validate API\n const obj = {};\n const keys = [\n \"icon-url\",\n \"icon-retina-url\",\n \"shadow-url\",\n \"shadow-retina-url\",\n \"class-name\",\n ];\n keys.forEach((key) => {\n obj[kebabToCamel(key)] = optional(htmlAttribute(key));\n });\n let points = [\n \"icon-anchor\",\n \"icon-size\",\n \"shadow-anchor\",\n \"shadow-size\",\n \"tooltip-anchor\",\n \"popup-anchor\",\n ];\n points.forEach((key) => {\n obj[kebabToCamel(key)] = chain(\n optional(htmlAttribute(key)),\n nullable(json())\n );\n });\n obj[\"crossOrigin\"] = chain(\n optional(htmlAttribute(\"cross-origin\")),\n nullable(bool())\n );\n const schema = partial(obj);\n const options = parse(schema, this);\n\n this.icon = icon(options);\n\n const event = new CustomEvent(iconConnected, {\n cancelable: true,\n bubbles: true,\n detail: {\n icon: this.icon,\n },\n });\n this.dispatchEvent(event);\n }\n}\n\nexport default LIcon;\n","// @ts-check\n\nimport { tooltip } from \"leaflet\";\nimport { tooltipConnected } from \"./events\";\n\nclass LTooltip extends HTMLElement {\n static observedAttributes = [\"content\"];\n\n constructor() {\n super();\n this.tooltip = tooltip();\n }\n\n connectedCallback() {\n const event = new CustomEvent(tooltipConnected, {\n cancelable: true,\n bubbles: true,\n detail: {\n tooltip: this.tooltip,\n },\n });\n this.dispatchEvent(event);\n }\n\n /**\n * @param {string} attName\n * @param {string} newValue\n */\n attributeChangedCallback(attName, _, newValue) {\n if (attName === \"content\") {\n this.tooltip.setContent(newValue);\n }\n }\n}\n\nexport default LTooltip;\n","// @ts-check\nimport { Circle, LatLng, Polygon, Polyline, Rectangle } from \"leaflet\";\nimport { camelToKebab } from \"./util.js\";\nimport { htmlAttribute, parse } from \"./parse.js\";\nimport { layerConnected, tooltipConnected } from \"./events.js\";\n\n/**\n * @typedef {Object} TagOption\n * @property {string} camel\n * @property {string} kebab\n * @property {(s: string) => AttributeValue} parser\n * @property {AttributeValue | null} defaultValue\n */\n/**\n * @typedef {(\"circle\"|\"rectangle\"|\"polygon\"|\"polyline\")} MethodName\n * @typedef {(\"path\"|\"interactiveLayer\")} LayerName\n * @typedef {(\"boolean\"|\"number\"|\"string\"|\"latlng\"|\"latlngbounds\")} AttributeType\n * @typedef {(boolean|number|string|LatLng)} AttributeValue\n */\n\n/**\n * @param {MethodName} methodName\n * @returns {TagOption[]}\n */\nconst positionalArguments = (methodName) => {\n switch (methodName) {\n case \"circle\":\n return [option(\"latLng\", \"latlng\", null)];\n case \"rectangle\":\n return [option(\"latLngBounds\", \"latlngbounds\", null)];\n case \"polygon\":\n return [option(\"latLngs\", \"latlng\", null)];\n case \"polyline\":\n return [option(\"latLngs\", \"latlng\", null)];\n }\n};\n\n/**\n * @param {string} name\n * @param {AttributeType} type\n * @param {AttributeValue | null} defaultValue\n * @returns {TagOption}\n */\nconst option = (name, type, defaultValue) => {\n return {\n camel: name,\n kebab: camelToKebab(name),\n parser: inferParser(type),\n defaultValue,\n };\n};\n\n/**\n * @param {AttributeType} type\n * @returns {(s: string) => AttributeValue}\n */\nconst inferParser = (type) => {\n switch (type.toLowerCase()) {\n case \"boolean\":\n return (s) => s === \"true\";\n case \"number\":\n return parseFloat;\n case \"latlng\":\n case \"latlngbounds\":\n return JSON.parse;\n case \"string\":\n return (s) => s;\n default:\n return (s) => s;\n }\n};\n\n/**\n * @param {MethodName} methodName\n * @returns {TagOption[]}\n */\nconst options = (methodName) => {\n const _OPTIONS = {\n circle: [option(\"radius\", \"number\", null)],\n path: [\n option(\"stroke\", \"boolean\", true),\n option(\"color\", \"string\", \"#3388ff\"),\n option(\"weight\", \"number\", 3),\n option(\"opacity\", \"number\", 1.0),\n option(\"lineCap\", \"string\", \"round\"),\n option(\"lineJoin\", \"string\", \"round\"),\n option(\"dashArray\", \"string\", null),\n option(\"dashOffset\", \"string\", null),\n option(\"fill\", \"boolean\", true),\n option(\"fillColor\", \"string\", \"#3388ff\"),\n option(\"fillOpacity\", \"number\", 0.2),\n ],\n polyline: [\n option(\"smoothFactor\", \"number\", 1.0),\n option(\"noClip\", \"boolean\", false),\n ],\n polygon: [],\n rectangle: [],\n interactiveLayer: [option(\"interactive\", \"boolean\", true)],\n };\n return inheritance(methodName).flatMap((parent) => _OPTIONS[parent]);\n};\n\n/**\n * @type {Object.<string, (MethodName | LayerName)[]>}\n */\nconst INHERITS = {\n circle: [\"path\"],\n polyline: [\"path\"],\n polygon: [\"polyline\"],\n rectangle: [\"polygon\"],\n path: [\"interactiveLayer\"],\n interactiveLayer: [],\n};\n\n/**\n * @param {MethodName} methodName\n * @returns {(MethodName | LayerName)[]}\n */\nconst inheritance = (methodName) => {\n /** @type {(MethodName | LayerName)} */\n let name = methodName;\n let chain = [methodName];\n while (INHERITS[name].length > 0) {\n let parent = INHERITS[name][0];\n chain.push(parent);\n name = parent;\n }\n return chain;\n};\n\n/**\n * @param {MethodName} methodName\n * @param {string} newValue\n * @param {string} name\n * @param {(Circle | Rectangle | Polygon | Polyline)} layer\n */\nconst setter = (layer, methodName, name, newValue) => {\n // Parse\n const allOptions = [\n ...positionalArguments(methodName),\n ...options(methodName),\n ];\n let _opt = allOptions.find((o) => o.kebab === name);\n if (typeof _opt === \"undefined\") {\n return;\n }\n const parsedValue = _opt.parser(newValue);\n\n // Update\n if (layer instanceof Circle) {\n switch (name) {\n case \"lat-lng\":\n layer.setLatLng(JSON.parse(newValue));\n break;\n case \"radius\":\n layer.setRadius(parseFloat(newValue));\n break;\n }\n } else if (layer instanceof Rectangle) {\n switch (name) {\n case \"lat-lngs\":\n layer.setLatLngs(JSON.parse(newValue));\n break;\n case \"lat-lng-bounds\":\n layer.setBounds(JSON.parse(newValue));\n break;\n }\n } else if (layer instanceof Polygon) {\n switch (name) {\n case \"lat-lngs\":\n layer.setLatLngs(JSON.parse(newValue));\n break;\n }\n } else if (layer instanceof Polyline) {\n switch (name) {\n case \"lat-lngs\":\n layer.setLatLngs(JSON.parse(newValue));\n break;\n }\n }\n\n // setStyle options\n let opt = options(\"polyline\").find((o) => o.kebab === name);\n if (typeof opt !== \"undefined\") {\n layer.setStyle({ [opt.camel]: parsedValue });\n }\n};\n\n/**\n * @param {MethodName} methodName\n */\nconst attributes = (methodName) => {\n let args = positionalArguments(methodName).map((o) => o.kebab);\n let opts = options(methodName).map((o) => o.kebab);\n return [...args, ...opts];\n};\n\n/**\n * @param {HTMLElement} el\n * @param {MethodName} methodName\n */\nconst settings = (el, methodName) => {\n // Gather settings\n let result = {};\n\n // Process inheritance chain\n options(methodName).forEach((o) => {\n if (el.hasAttribute(o.kebab)) {\n result[o.camel] = o.parser(el.getAttribute(o.kebab));\n }\n });\n return result;\n};\n\n/**\n * Read positional arguments from HTMLElement\n *\n * @param {HTMLElement} el\n * @param {MethodName} methodName\n */\nconst positional = (el, methodName) => {\n return positionalArguments(methodName).map(option => {\n const schema = htmlAttribute(option.kebab)\n const value = parse(schema, el)\n return option.parser(value);\n })\n};\n\n/**\n * @param {MethodName} methodName\n */\nconst generator = (method, methodName) => {\n class cls extends HTMLElement {\n static observedAttributes = attributes(methodName);\n\n constructor() {\n super();\n this.layer = null;\n this.addEventListener(tooltipConnected, (ev) => {\n if (this.layer !== null) {\n this.layer.bindTooltip(ev.detail.tooltip);\n }\n });\n }\n\n connectedCallback() {\n const args = positional(this, methodName);\n const options = settings(this, methodName);\n this.layer = method(...args, options);\n const event = new CustomEvent(layerConnected, {\n cancelable: true,\n bubbles: true,\n detail: {\n layer: this.layer,\n },\n });\n this.dispatchEvent(event);\n }\n\n /**\n * @param {string} attName\n * @param {string} newValue\n */\n attributeChangedCallback(attName, _, newValue) {\n if (this.layer !== null) {\n setter(this.layer, methodName, attName, newValue);\n }\n }\n }\n return cls;\n};\n\nexport default generator;\n","// @ts-check\nimport LBaseLayers from \"./l-base-layers.js\";\nimport LControlLayers from \"./l-control-layers.js\";\nimport LLayerGroup from \"./l-layer-group.js\";\nimport LMap from \"./l-map.js\";\nimport LMarker from \"./l-marker.js\";\nimport LOverlayLayers from \"./l-overlay-layers.js\";\nimport LPopup from \"./l-popup.js\";\nimport LTileLayer from \"./l-tile-layer.js\";\nimport LLatLngBounds from \"./l-lat-lng-bounds.js\";\nimport LImageOverlay from \"./l-image-overlay.js\";\nimport LVideoOverlay from \"./l-video-overlay.js\";\nimport LGeoJSON from \"./l-geojson.js\";\nimport LIcon from \"./l-icon.js\";\nimport LTooltip from \"./l-tooltip.js\";\nimport generator from \"./generator.js\";\nimport { circle, polyline, polygon, rectangle } from \"leaflet\";\n\nconst init = (() => {\n // Custom elements (order of definition is important)\n customElements.define(\"l-map\", LMap);\n customElements.define(\"l-control-layers\", LControlLayers);\n customElements.define(\"l-base-layers\", LBaseLayers);\n customElements.define(\"l-overlay-layers\", LOverlayLayers);\n customElements.define(\"l-layer-group\", LLayerGroup);\n customElements.define(\"l-tile-layer\", LTileLayer);\n customElements.define(\"l-marker\", LMarker);\n customElements.define(\"l-popup\", LPopup);\n customElements.define(\"l-lat-lng-bounds\", LLatLngBounds);\n customElements.define(\"l-image-overlay\", LImageOverlay);\n customElements.define(\"l-video-overlay\", LVideoOverlay);\n customElements.define(\"l-geojson\", LGeoJSON);\n customElements.define(\"l-icon\", LIcon);\n customElements.define(\"l-circle\", generator(circle, \"circle\"));\n customElements.define(\"l-polyline\", generator(polyline, \"polyline\"));\n customElements.define(\"l-polygon\", generator(polygon, \"polygon\"));\n customElements.define(\"l-rectangle\", generator(rectangle, \"rectangle\"));\n customElements.define(\"l-tooltip\", LTooltip);\n})();\n\nexport default init;\n"],"names":["layerConnected","popupConnected","iconConnected","layerRemoved","latLngBoundsConnected","latLngBoundsChanged","tooltipConnected","LBaseLayers","_HTMLElement","call","this","_inheritsLoose","prototype","connectedCallback","addEventListener","ev","detail","_wrapNativeSuper","HTMLElement","LControlLayers","controlLayers","control","layers","_ev$detail","type","name","layer","addOverlay","addBaseLayer","preventDefault","event","CustomEvent","cancelable","bubbles","dispatchEvent","LLayer","_this","LLayerGroup","_LLayer","getAttribute","group","layerGroup","stopPropagation","addLayer","MutationObserver","mutations","forEach","mutation","removedNodes","node","leafletId","getLayer","parseInt","removeLayer","observe","childList","LeafletHTMLError","_Error","issues","key","get","JSON","stringify","Error","parse","schema","value","result","status","wrap","partial","obj","ctx","_i3","_Object$keys3","Object","keys","length","localCtx","concat","pipe","parsers","slice","arguments","i","chain","nullable","parser","optional","htmlAttribute","attributeName","el","htmlAttributeIssue","_extends","json","e","jsonIssue","option","apply","code","message","tagName","toLowerCase","LMap","map","boundsListener","method","bounds","target","_proto","_this2","L","zoomControl","hasAttribute","whenReady","on","split","eventName","fitWorld","zoom","isNaN","center","_i2","_Object$keys2","_parse","setView","locate","addTo","attributeChangedCallback","_oldValue","newValue","setZoom","observedAttributes","LMarker","setIcon","icon","latLng","options","opacity","parseFloat","marker","setAttribute","stamp","openPopup","popup","bindPopup","content","setLatLng","setOpacity","LOverlayLayers","LPopup","openPopupAttribute","LTileLayer","_step","urlTemplate","templateOptions","_iterator","_createForOfIteratorHelperLoose","parseTemplateAttributes","done","attribute","attribution","errorTileUrl","tileLayer","matchAll","match","LLatLngBounds","getEvent","_name","LImageOverlay","url","alt","imageOverlay","console","warn","disconnectedCallback","_this$layer","remove","setUrl","setBounds","LVideoOverlay","autoplay","muted","playsInline","videoOverlay","LGeoJSON","geoJSON","kebabToCamel","kebab","replace","x","toUpperCase","LIcon","LTooltip","tooltip","attName","_","setContent","positionalArguments","methodName","defaultValue","camel","s","letter","idx","join","inferParser","_OPTIONS","circle","path","polyline","polygon","rectangle","interactiveLayer","inheritance","flatMap","parent","INHERITS","push","settings","o","generator","cls","bindTooltip","args","positional","_opt","find","parsedValue","Circle","setRadius","Rectangle","setLatLngs","Polygon","Polyline","_layer$setStyle","opt","setStyle","setter","opts","attributes","init","customElements","define"],"mappings":"8hEACO,IAAMA,EAAiB,oBACjBC,EAAiB,oBACjBC,EAAgB,mBAChBC,EAAe,kBACfC,EAAwB,2BACxBC,EAAsB,yBACtBC,EAAmB,sBCJ1BC,eAAWC,SAAAA,GACf,SAAAD,IAAc,OACZC,EAAAC,KAAAC,OAAOA,IACT,CAMC,OANAC,EAAAJ,EAAAC,GAAAD,EAAAK,UAEDC,kBAAA,WACEH,KAAKI,iBAAiBd,EAAgB,SAACe,GACrCA,EAAGC,OAAa,KAAI,MACtB,EACF,EAACT,CAAA,CATcC,cASdS,EATuBC,cCEpBC,eAAc,SAAAX,GAClB,SAAAW,IAAc,OACZX,EAAAC,KAAMC,WACR,CA2BC,OA3BAC,EAAAQ,EAAAX,GAAAW,EAAAP,UAEDC,kBAAA,WAEE,IAGMO,EAAgBC,EAAQC,OAHjB,CAAA,EAEG,CAAE,GAGlBZ,KAAKI,iBAAiBd,EAAgB,SAACe,GACrC,IAAAQ,EAA8BR,EAAGC,OAAzBQ,EAAID,EAAJC,KAAMC,EAAIF,EAAJE,KAAMC,EAAKH,EAALG,MACP,YAATF,EACFJ,EAAcO,WAAWD,EAAOD,GACd,SAATD,GACTJ,EAAcQ,aAAaF,EAAOD,GAEpCV,EAAGc,gBACL,GAEA,IAAMC,EAAQ,IAAIC,YAAY/B,EAAgB,CAC5CgC,YAAY,EACZC,SAAS,EACTjB,OAAQ,CACNU,MAAON,KAGXV,KAAKwB,cAAcJ,EACrB,EAACX,CAAA,CA9BiB,cA8BjBF,EA9B0BC,cCLvBiB,eAAM3B,SAAAA,GACV,SAAA2B,IAAcC,IAAAA,EAEKA,OADjBA,EAAA5B,EAAAC,KAAMC,aACDgB,MAAQ,KAAIU,CACnB,CAACD,OAAAxB,EAAAwB,EAAA3B,GAAA2B,CAAA,CAJS3B,cAITS,EAJkBC,cCKfmB,eAAW,SAAAC,GACf,SAAAD,IAAc,IAAAD,EAEM,OADlBA,EAAAE,EAAA7B,KAAMC,OACN0B,MAAKV,MAAQ,KAAKU,CACpB,CAsCCC,OAtCA1B,EAAA0B,EAAAC,GAAAD,EAAAzB,UAEDC,kBAAA,WACE,IAAMY,EAAOf,KAAK6B,aAAa,QACzBC,EAAQC,IACd/B,KAAKgB,MAAQc,EAEb,IAAMV,EAAQ,IAAIC,YAAY/B,EAAgB,CAC5CgC,YAAY,EACZC,SAAS,EACTjB,OAAQ,CACNU,MAAOc,EACPf,KAAAA,KAGJf,KAAKwB,cAAcJ,GAEnBpB,KAAKI,iBAAiBd,EAAgB,SAACe,GACrCA,EAAG2B,kBACHF,EAAMG,SAAS5B,EAAGC,OAAOU,MAC3B,GAEiB,IAAIkB,iBAAiB,SAAUC,GAC9CA,EAAUC,QAAQ,SAACC,GACjBA,EAASC,aAAaF,QAAQ,SAACG,GAC7B,GAAIA,aAAgB/B,YAAa,CAC/B,IAAMgC,EAAYD,EAAKV,aAAa,cACpC,GAAkB,OAAdW,EAAoB,CACtB,IAAMxB,EAAQc,EAAMW,SAASC,SAASF,SACjB,IAAVxB,GACTc,EAAMa,YAAY3B,EAEtB,CACF,CACF,EACF,EACF,GACS4B,QAAQ5C,KAAM,CAAE6C,WAAW,GACtC,EAAClB,CAAA,CA1Cc,CAASF,GCHbqB,eAAgB,SAAAC,GAO3B,SAAAD,EAAYE,GAAQ,IAAAtB,EAGG,OAFrBA,EAAAqB,EAAAhD,KAAAC,OAAOA,MANTgD,OAAS,GAOPtB,EAAKX,KAAO,mBACZW,EAAKsB,OAASA,EAAOtB,CACvB,QAACzB,EAAA6C,EAAAC,KAAAD,KAAA,CAAA,CAAAG,IAAAC,UAAAA,IAED,WACE,OAAOC,KAAKC,UAAUpD,KAAKgD,OAAQ,KAAM,EAC3C,0PAf2B,cAe1BzC,EAfmC8C,QA6CzBC,EAAQ,SAACC,EAAQC,GAC5B,IAAMC,EAASF,EAvBJ,SAACC,GACZ,MAAO,CACLE,OAAQ,QACRV,OAAQ,GACRQ,MAAAA,EAEJ,CAiBwBG,CAAKH,IAC3B,GAAsB,UAAlBC,EAAOC,OACT,MAAM,IAAIZ,EAAiBW,EAAOT,QAElC,OAAcS,EAdAD,KAgBlB,EAkDaI,EAAU,SAACC,GAAG,gBAAMC,GAI/B,IAHA,IAAMd,EAAWc,EAAXd,OACFU,EAAS,QACPD,EAAS,CAAA,EACfM,EAAAC,EAAAA,EAAkBC,OAAOC,KAAKL,GAAIE,EAAAC,EAAAG,OAAAJ,IAAE,CAA/B,IAAMd,EAAGe,EAAAD,GACRK,EAAWP,EAAIZ,GAAKa,GACA,UAApBM,EAASV,SACXA,EAASU,EAASV,QAGI,OAAnBU,EAASZ,OAAwC,UAApBY,EAASV,SAGzCV,EAAMqB,GAAAA,OAAOrB,EAAWoB,EAASpB,QACjCS,EAAOR,GAAOmB,EAASZ,MAE3B,CACA,MAAO,CAAEE,OAAAA,EAAQV,OAAAA,EAAQQ,MAAOC,EAClC,CAAC,EAEYa,EACX,eAAIC,EAAOC,GAAAA,MAAAzE,KAAA0E,WAAA,gBACVX,GACC,IAAK,IAAIY,EAAI,EAAGA,EAAIH,EAAQJ,QAEP,WADnBL,EAAMS,EAAQG,GAAGZ,IACTJ,OAF0BgB,KAMpC,OAAOZ,CACT,CAAC,EAEUa,EAAQ,eAAIJ,EAAOC,GAAAA,MAAAzE,KAAA0E,WAAK,OAAA,SAACX,GACpC,IAAK,IAAIY,EAAE,EAAGA,EAAEH,EAAQJ,OAAQO,IAC9BZ,EAAMS,EAAQG,GAAGZ,GAEnB,OAAOA,CACT,CAAC,EAIYc,EAAW,SAACC,GAAM,gBAAMf,GACnC,OAAkB,OAAdA,EAAIN,MACCM,EAEFe,EAAOf,EAChB,CAAC,EAEYgB,EAAW,SAACD,GAAW,OAAA,SAACf,GAEnC,OAAkB,QADlBA,EAAMe,EAAOf,IACLN,MACC,CAACE,OAAQ,QAASV,OAAQ,GAAIQ,MAAO,MAErCM,CAEX,CAAC,EAMYiB,EAAgB,SAACC,UAAmBlB,SAAAA,GAC/C,IAAMmB,EAAKnB,EAAIN,MACXC,EAASwB,EAAGpD,aAAamD,GAC7B,OAAe,OAAXvB,EACK,CACLC,OAAQ,QACRV,OAAMqB,GAAAA,OAAMP,EAAId,OAAM,CAAEkC,EAAmBD,EAAID,KAC/CxB,MAAO,MAGX2B,EAAYrB,CAAAA,EAAAA,GAAKN,MAAOC,GAC1B,CAAC,EAmCY2B,EAAO,kBAAOtB,SAAAA,GACzB,IAAIL,EACJ,IACEA,EAASN,KAAKG,MAAMQ,EAAIN,MAC1B,CAAE,MAAO6B,GACP,MAAO,CACL3B,OAAQ,QACRV,OAAM,GAAAqB,OAAMP,EAAId,OAAQsC,CAAAA,EAAUD,KAClC7B,MAAO,KAEX,CACA,OAAA2B,EAAYrB,GAAAA,EAAKN,CAAAA,MAAOC,GAC1B,CAAC,EAeY8B,EAAS,SAACtC,GAAG,OAAaqB,EAAIkB,WAAA,EAAA,CAACT,EAAc9B,IAAIoB,OAAA,GAAAG,MAAAzE,KAAA0E,cAAS,EA+B1Da,EAAY,SAACD,GACxB,MAAO,CACLI,KAAM,aACNC,QAASL,EAAEK,QAEf,EAkBaR,EAAqB,SAACD,EAAID,GACrC,MAAO,CACLS,KAAM,oBACNC,QAAYT,EAAGU,QAAQC,qCAAoCZ,EAAa,IAE5E,ECnSMa,eAAI/F,SAAAA,GAGR,SAAA+F,IAAcnE,IAAAA,GACZA,EAAA5B,EAAAC,KAAMC,aAED8F,IAAM,KAGX,IAAMC,EAAiB,SAAC1F,GACtB,IAAAQ,EAA2BR,EAAGC,OACb,OAAboB,EAAKoE,KACPpE,EAAKoE,IAFejF,EAANmF,QAAFnF,EAANoF,OAIV,EA0B4C,OAzB5CvE,EAAKtB,iBAAiBV,EAAuBqG,GAC7CrE,EAAKtB,iBAAiBT,EAAqBoG,GAG1B,IAAI7D,iBAAiB,SAAUC,GAC9CA,EAAUC,QAAQ,SAACC,GACjB,GAAIA,EAAS6D,kBAAkBL,EAAM,CACnC,IAAMZ,EAAK5C,EAAS6D,OACpB7D,EAASC,aAAaF,QAAQ,SAACG,GACzBA,aAAgBd,GACH,OAAXwD,EAAGa,KAA+B,OAAfvD,EAAKvB,QAE1BiE,EAAGzD,cAAc,IAAIH,YAAY5B,EAAc,CAC7C8B,SAAS,EACTjB,OAAQ,CACNU,MAAOuB,EAAKvB,UAGhBiE,EAAGa,IAAInD,YAAYJ,EAAKvB,OAG9B,EACF,CACF,EACF,GACS4B,QAAOlB,EAAO,CAAEmB,WAAW,IAAQnB,CAC9C,CAACzB,EAAA4F,EAAA/F,OAAAqG,EAAAN,EAAA3F,UAoEA2F,OApEAM,EAEDhG,kBAAA,WAAoBiG,IDyCKvC,ECzCLuC,OAelB,GAdApG,KAAK8F,IAAMO,EAAEP,IAAI9F,KAAM,CAAEsG,YAAatG,KAAKuG,aAAa,kBAGxDvG,KAAK8F,IAAIU,UAAU,WACjBJ,EAAK5E,cACH,IAAIH,YAAY,QAAS,CACvBE,SAAS,EACTD,YAAY,EACZhB,OAAQ8F,EAAKN,MAGnB,GAGI9F,KAAKuG,aAAa,MAAO,CAC3B,IAAME,EAAKzG,KAAK6B,aAAa,MAClB,OAAP4E,GACFA,EAAGC,MAAM,OAAOtE,QAAQ,SAACuE,GACN,OAAbP,EAAKN,KACPM,EAAKN,IAAIW,GAAGE,EAAW,SAACtB,GACtBe,EAAK5E,cACH,IAAIH,YAAYsF,EAAW,CAAEpF,SAAS,EAAMjB,OAAQ+E,IAExD,EAEJ,EAEJ,CAEA,GAAIrF,KAAKuG,aAAa,aACpBvG,KAAK8F,IAAIc,eACJ,CACL,IAAMrD,GDQeM,ECRK,CACxBgD,KAAMtB,EAAO,gBDkGKzB,GACxB,IAiEuBN,EAjEnBC,EAASf,SAASoB,EAAIN,OAC1B,OAAIsD,MAAMrD,GACD,CACLC,OAAQ,QACRV,OAAM,GAAAqB,OAAMP,EAAId,OAAM,EA6DHQ,EA7DcM,EAAIN,MA8DlC,CACLiC,KAAM,YACNC,QAAwClC,+BAAAA,EAC1C,QAhEIA,MAAOC,GAGX0B,KAAYrB,EAAG,CAAEN,MAAOC,GAC1B,GC3GQsD,OAAQxB,EAAO,SAAUH,MDMGtB,SAAAA,GAGlC,IAFA,IAAMJ,EAAmBI,EAAnBJ,OAAQV,EAAWc,EAAXd,OACRS,EAAS,CAAE,EACjBuD,EAAA,EAAAC,EAAkBhD,OAAOC,KAAKL,GAAImD,EAAAC,EAAA9C,OAAA6C,IAAE,CAA/B,IAAM/D,EAAGgE,EAAAD,GACR5C,EAAWP,EAAIZ,GAAKa,GACA,UAApBM,EAASV,SACXA,EAAS,QACTV,KAAMqB,OAAOrB,EAAWoB,EAASpB,SAEnCS,EAAOR,GAAOmB,EAASZ,KACzB,CACA,MAAO,CAAEE,OAAAA,EAAQV,OAAAA,EAAQQ,MAAOC,EAClC,GChBMyD,EAAyB5D,EAAMC,EAAQvD,MACvCA,KAAK8F,IAAIqB,QADWD,EAANH,OAAFG,EAAJL,KAEV,CAEA,GAAI7G,KAAKuG,aAAa,UAAW,CAC/B,IAAMhD,EAASgC,EAAO,SAAUH,KAChCpF,KAAK8F,IAAIsB,OAAO9D,EAAMC,EAAQvD,MAChC,CAEAA,KAAKI,iBAAiBd,EAAgB,SAACe,GACvBA,EAAGC,OAAOU,MAClBqG,MAAMjB,EAAKN,IACnB,GAEA9F,KAAKI,iBAAiBX,EAAc,SAACY,GAClB,OAAb+F,EAAKN,KACPM,EAAKN,IAAInD,YAAYtC,EAAGC,OAAOU,MAEnC,EACF,EAACmF,EAEDmB,yBAAA,SAAyBvG,EAAMwG,EAAWC,GACvB,OAAbxH,KAAK8F,MACM,SAAT/E,EACFf,KAAK8F,IAAI2B,QAAQ/E,SAAS8E,IACR,WAATzG,GACTf,KAAK8F,IAAIqB,QAAQhE,KAAKG,MAAMkE,IAGlC,EAAC3B,CAAA,CA7GO/F,cA6GPS,EA7GgBC,cAAbqF,EACG6B,mBAAqB,CAAC,OAAQ,SAAU,gBCM7B,IAEdC,eAAO/F,SAAAA,GAGX,SAAA+F,QAAcjG,EAMT,OALHA,EAAAE,EAAA7B,KAAMC,OACN0B,MAAKV,MAAQ,KACbU,EAAKtB,iBAAiBZ,EAAe,SAACa,GACpCA,EAAG2B,kBACHN,EAAKV,MAAM4G,QAAQvH,EAAGC,OAAOuH,KAC/B,GAAGnG,CACL,CAACzB,EAAA0H,EAAA/F,OAAAuE,EAAAwB,EAAAzH,UAkDAyH,OAlDAxB,EAEDhG,kBAAA,eAAoBiG,EAAApG,KAEZ8H,EAASxE,EAAMiC,EAAO,UAAWH,KAASpF,MAC1C+H,EAAUzE,EACdM,EAAQ,CACNoE,QAASrD,EAAMG,EAASC,EAAc,YAAaH,WFoK/Bd,GAC1B,IA6DyBN,EA7DrBC,EAASwE,WAAWnE,EAAIN,OAC5B,OAAIsD,MAAMrD,GACD,CACLC,OAAQ,QACRV,OAAMqB,GAAAA,OAAMP,EAAId,OAAM,EAyDDQ,EAzDcM,EAAIN,MA0DpC,CACLiC,KAAM,cACNC,QAA0ClC,iCAAAA,UA3DxCA,MAAOC,GAGX0B,EAAA,CAAA,EAAYrB,EAAG,CAAEN,MAAOC,GAC1B,ME5KMzD,MAIF,GAFAA,KAAKgB,MAAQqF,EAAE6B,OAAOJ,EAAQC,GAE1B/H,KAAKuG,aAAa,QAAS,CAC7B,IAAMsB,EAAOxB,EAAEwB,KAAK1E,KAAKG,MAAMtD,KAAK6B,aAAa,UACjD7B,KAAKgB,MAAM4G,QAAQC,EACrB,CAEA7H,KAAKmI,aAAa,aAAc9B,EAAE+B,MAAMpI,KAAKgB,QAE7ChB,KAAKI,iBAAiBb,EAAgB,SAACc,GACrC,IAAAQ,EAA+BR,EAAGC,OAAjB+H,EAASxH,EAATwH,UACXC,EAAQlC,EAAKpF,MAAMuH,UADV1H,EAAP2H,SAEJH,GACFC,EAAMD,WAEV,GAEA,IAAMjH,EAAQ,IAAIC,YAAY/B,EAAgB,CAC5CgC,YAAY,EACZC,SAAS,EACTjB,OAAQ,CACNU,MAAOhB,KAAKgB,SAGhBhB,KAAKwB,cAAcJ,EACrB,EAAC+E,EAEDmB,yBAAA,SAAyBvG,EAAMwG,EAAWC,GACrB,OAAfxH,KAAKgB,QACM,YAATD,GACFf,KAAKgB,MAAMyH,UAAUtF,KAAKG,MAAMkE,IAErB,YAATzG,GACFf,KAAKgB,MAAM0H,WAAWT,WAAWT,IAEtB,SAATzG,GACFf,KAAKgB,MAAM4G,QAAQvB,EAAEwB,KAAK1E,KAAKG,MAAMkE,KAG3C,EAACG,CAAA,CA5DU/F,CAASH,GAAhBkG,EACGD,mBAAqB,CAAC,UAAW,UAAW,QCfR,IAEvCiB,eAAc7I,SAAAA,GAClB,SAAA6I,IAAc,OACZ7I,EAAAC,KAAAC,OAAOA,IACT,CAMC,OANAC,EAAA0I,EAAA7I,GAAA6I,EAAAzI,UAEDC,kBAAA,WACEH,KAAKI,iBAAiBd,EAAgB,SAACe,GACrCA,EAAGC,OAAa,KAAI,SACtB,EACF,EAACqI,CAAA,CATiB7I,cASjBS,EAT0BC,cCAvBoI,eAAM,SAAA9I,GACV,SAAA8I,IAAc,OACZ9I,EAAAC,KAAMC,OACRA,IAAA,CAkBC4I,OAlBA3I,EAAA2I,EAAA9I,GAAA8I,EAAA1I,UAEDC,kBAAA,WACE,IAAMqI,EAAUxI,KAAK6B,aAAa,WAC9BwG,GAAY,EACVQ,EAAqB7I,KAAK6B,aAAa,cAClB,OAAvBgH,IACFR,EAAmC,UAAvBQ,GAEd,IAAMzH,EAAQ,IAAIC,YAAY9B,EAAgB,CAC5C+B,YAAY,EACZC,SAAS,EACTjB,OAAQ,CACNkI,QAAAA,EACAH,UAAAA,KAGJrI,KAAKwB,cAAcJ,EACrB,EAACwH,CAAA,CArBS,cAqBTrI,EArBkBC,cCGfsI,eAAUlH,SAAAA,GACd,SAAAkH,IAAc,IAAApH,EAEM,OADlBA,EAAAE,EAAA7B,KAAMC,OACN0B,MAAKV,MAAQ,KAAKU,CACpB,CAqCC,OArCAzB,EAAA6I,EAAAlH,GAAAkH,EAAA5I,UAEDC,kBAAA,WAME,IALA,IAKqC4I,EAL/BC,EAAc1F,EAAMyB,EAAc,gBAAiB/E,MAInDiJ,EAAkB,CAAE,EAC1BC,6pBAAAC,CAFsBL,EAAWM,wBAAwBJ,MAEpBD,EAAAG,KAAAG,MAAE,CAAA,IAA5BC,EAASP,EAAAvF,MACZA,EAAQxD,KAAK6B,aAAayH,GAClB,OAAV9F,IACFyF,EAAgBK,GAAa9F,EAEjC,CAGA,IAAMzC,EAAOf,KAAK6B,aAAa,QACzB0B,EAASK,EAAQ,CACrB2F,YAAazE,EAASC,EAAc,gBACpCyE,aAAc1E,EAASC,EAAc,qBAEjCgD,EAAUzE,EAAMC,EAAQvD,MAC9BA,KAAKgB,MAAQyI,EAAUT,EAAW7D,EAAO8D,CAAAA,EAAAA,EAAoBlB,IAC7D,IAAM3G,EAAQ,IAAIC,YAAY/B,EAAgB,CAC5CgB,OAAQ,CAAES,KAAAA,EAAMC,MAAOhB,KAAKgB,OAC5BO,SAAS,IAEXvB,KAAKwB,cAAcJ,EACrB,EAAC0H,EAMMM,wBAAP,SAA+BJ,GAE7B,MAAO,GAAA3E,OAAI2E,EAAYU,SADT,aAC0B5D,IAAI,SAAA6D,GAAS,OAAAA,EAAM,EAAE,EAC/D,EAACb,CAAA,CAzCalH,CAASH,GCFnBmI,eAAa,SAAA9J,GAGjB,SAAA8J,IAAc,OACZ9J,EAAAC,KAAAC,OACFA,IAAA,CAACC,EAAA2J,EAAA9J,GAAA,IAAAqG,EAAAyD,EAAA1J,UAwBA,OAxBAiG,EAEDhG,kBAAA,WACE,IAAIqD,EAAQxD,KAAK6B,aAAa,UAChB,OAAV2B,GACFxD,KAAKwB,cAAcxB,KAAK6J,SAASnK,EAAuByD,KAAKG,MAAME,IAEvE,EAAC2C,EAEDmB,yBAAA,SAAyBwC,EAAOvC,EAAWC,GACzCxH,KAAKwB,cAAcxB,KAAK6J,SAASlK,EAAqBwD,KAAKG,MAAMkE,IACnE,EAACrB,EAKD0D,SAAA,SAAS5G,EAAKgD,GACZ,OAAO,IAAI5E,YAAY4B,EAAK,CAC1B1B,SAAS,EACTjB,OAAQ,CACN2F,OAAAA,EACAD,OAAQhG,KAAK6B,aAAa,WAAa,cAG7C,EAAC+H,CAAA,CA7BgB,cA6BhBrJ,EA7ByBC,cAAtBoJ,EACGlC,mBAAqB,CAAC,UCFG,IAE5BqC,gBAAanI,SAAAA,GAGjB,SAAAmI,IAAc,IAAArI,EAEM,OADlBA,EAAAE,EAAA7B,KAAAC,OAAOA,MACFgB,MAAQ,KAAKU,CACpB,CAACzB,EAAA8J,EAAAnI,GAAA,IAAAuE,EAAA4D,EAAA7J,UA2CA6J,OA3CA5D,EAEDhG,kBAAA,WACE,IAAM6J,EAAMhK,KAAK6B,aAAa,OAC9B,GAAY,OAARmI,EAAJ,CAIA,IAAI/D,EAASjG,KAAK6B,aAAa,UAC/B,GAAe,OAAXoE,EAAJ,CAIA,IAAM8B,EAAU,CACdC,QAASC,WAAWjI,KAAK6B,aAAa,YAAc,OACpDoI,IAAKjK,KAAK6B,aAAa,QAAU,IAEnC7B,KAAKgB,MAAQkJ,EAAaF,EAAK7G,KAAKG,MAAM2C,GAAS8B,GACnD/H,KAAKwB,cACH,IAAIH,YAAY/B,EAAgB,CAC9BgC,YAAY,EACZC,SAAS,EACTjB,OAAQ,CACNU,MAAOhB,KAAKgB,SAXlB,MAFEmJ,QAAQC,KAAK,6BAHf,MAFED,QAAQC,KAAK,0BAsBjB,EAACjE,EAEDkE,qBAAA,WAAuB,IAAAC,EACX,OAAVA,EAAAtK,KAAKgB,QAALsJ,EAAYC,QACd,EAACpE,EAEDmB,yBAAA,SAAyBvG,EAAMwG,EAAWC,GACrB,OAAfxH,KAAKgB,QACM,QAATD,EACFf,KAAKgB,MAAMwJ,OAAOhD,GACA,WAATzG,EACTf,KAAKgB,MAAMyJ,UAAUtH,KAAKG,MAAMkE,IACd,YAATzG,GACTf,KAAKgB,MAAM0H,WAAWT,WAAWT,IAGvC,EAACuC,CAAA,CAjDgBnI,CAASH,GAAtBsI,GACGrC,mBAAqB,CAAC,MAAO,SAAU,WCHd,IAE5BgD,gBAAa9I,SAAAA,GACjB,SAAA8I,IAAc,OACZ9I,EAAA7B,KAAMC,WACR,QAACC,EAAAyK,EAAA9I,GAAA8I,EAAAxK,UAEDC,kBAAA,WACE,IAAM6J,EAAM7G,KAAKG,MAAMtD,KAAK6B,aAAa,QACnCoE,EAAS9C,KAAKG,MAAMtD,KAAK6B,aAAa,WACtCkG,EAAU,CACdC,QAASC,WAAWjI,KAAK6B,aAAa,YAAc,OACpDoI,IAAKjK,KAAK6B,aAAa,QAAU,GACjC8I,UAAU,EACVC,OAAO,EACPC,aAAa,GAET7J,EAAQ8J,EAAad,EAAK/D,EAAQ8B,GACxC/H,KAAKwB,cACH,IAAIH,YAAY/B,EAAgB,CAC9BgC,YAAY,EACZC,SAAS,EACTjB,OAAQ,CACNU,MAAAA,KAIR,EAAC0J,CAAA,CAzBgB9I,CAASH,GCDtBsJ,gBAAQ,SAAAjL,GACZ,SAAAiL,IACE,OAAAjL,EAAAC,KAAAC,OAAOA,IACT,CAgBC,OAhBAC,EAAA8K,EAAAjL,GAAAiL,EAAA7K,UAEDC,kBAAA,WACE,IAAMqD,EAAQxD,KAAK6B,aAAa,WAChC,GAAc,OAAV2B,EAAgB,CAClB,IAAMxC,EAAQgK,EAAQ7H,KAAKG,MAAME,IACjCxD,KAAKwB,cACH,IAAIH,YAAY/B,EAAgB,CAC9BiC,SAAS,EACTD,YAAY,EACZhB,OAAQ,CACNU,MAAAA,KAIR,CACF,EAAC+J,CAAA,CAnBW,cAmBXxK,EAnBoBC,cCHVyK,GAAe,SAACC,GAAK,OAAKA,EAAMC,QAAQ,MAAO,SAACC,UAAMA,EAAE,GAAGC,aAAa,EAAC,ECahFC,gBAAKxL,SAAAA,GACT,SAAAwL,IAAc,IAAA5J,EAEK,OADjBA,EAAA5B,EAAAC,KAAMC,OACN0B,MAAKmG,KAAO,KAAKnG,CACnB,CA8CC4J,OA9CArL,EAAAqL,EAAAxL,GAAAwL,EAAApL,UAEDC,kBAAA,WAEE,IAAM0D,EAAM,CAAE,EACD,CACX,WACA,kBACA,aACA,oBACA,cAEGzB,QAAQ,SAACa,GACZY,EAAIoH,GAAahI,IAAQ6B,EAASC,EAAc9B,GAClD,GACa,CACX,cACA,YACA,gBACA,cACA,iBACA,gBAEKb,QAAQ,SAACa,GACdY,EAAIoH,GAAahI,IAAQ0B,EACvBG,EAASC,EAAc9B,IACvB2B,EAASQ,KAEb,GACAvB,EAAiB,YAAIc,EACnBG,EAASC,EAAc,iBACvBH,WXmLqBd,GACzB,OAAAqB,EAAYrB,CAAAA,EAAAA,EAAKN,CAAAA,MAAmC,SAA5BM,EAAIN,MAAMoC,eACpC,IWnLI,IAAMrC,EAASK,EAAQC,GACjBkE,EAAUzE,EAAMC,EAAQvD,MAE9BA,KAAK6H,KAAOA,EAAKE,GAEjB,IAAM3G,EAAQ,IAAIC,YAAY7B,EAAe,CAC3C8B,YAAY,EACZC,SAAS,EACTjB,OAAQ,CACNuH,KAAM7H,KAAK6H,QAGf7H,KAAKwB,cAAcJ,EACrB,EAACkK,CAAA,CAlDQxL,cAkDRS,EAlDiBC,cCTd+K,gBAAQ,SAAAzL,GAGZ,SAAAyL,IAAc7J,IAAAA,EAEa,OADzBA,EAAA5B,EAAAC,KAAAC,OACA0B,MAAK8J,QAAUA,IAAU9J,CAC3B,CAACzB,EAAAsL,EAAAzL,GAAA,IAAAqG,EAAAoF,EAAArL,UAqBAqL,OArBApF,EAEDhG,kBAAA,WACE,IAAMiB,EAAQ,IAAIC,YAAYzB,EAAkB,CAC9C0B,YAAY,EACZC,SAAS,EACTjB,OAAQ,CACNkL,QAASxL,KAAKwL,WAGlBxL,KAAKwB,cAAcJ,EACrB,EAAC+E,EAMDmB,yBAAA,SAAyBmE,EAASC,EAAGlE,GACnB,YAAZiE,GACFzL,KAAKwL,QAAQG,WAAWnE,EAE5B,EAAC+D,CAAA,CA3BW,cA2BXhL,EA3BoBC,cAAjB+K,GACG7D,mBAAqB,CAAC,WCkB/B,IAAMkE,GAAsB,SAACC,GAC3B,OAAQA,GACN,IAAK,SACH,MAAO,CAACtG,GAAO,SAAU,SAAU,OACrC,IAAK,YACH,MAAO,CAACA,GAAO,eAAgB,eAAgB,OACjD,IAAK,UAEL,IAAK,WACH,MAAO,CAACA,GAAO,UAAW,SAAU,OAE1C,EAQMA,GAAS,SAACxE,EAAMD,EAAMgL,GAC1B,MAAO,CACLC,MAAOhL,EACPmK,OH5CyBc,EG4CLjL,EH3CdiL,EAAEtF,MAAM,IAAIZ,IAAI,SAACmG,EAAQC,GAC9B,OAAOD,EAAOZ,gBAAkBY,GAClB,IAARC,EAAY,IAAM,IAAKD,EAAOrG,cACjCqG,CACL,GAAGE,KAAK,KGwCPtH,OAAQuH,GAAYtL,GACpBgL,aAAAA,GH9CwB,IAACE,CGgD7B,EAMMI,GAAc,SAACtL,GACnB,OAAQA,EAAK8E,eACX,IAAK,UACH,OAAQoG,SAAAA,GAAM,MAAM,SAANA,CAAY,EAC5B,IAAK,SACH,OAAO/D,WACT,IAAK,SACL,IAAK,eACH,OAAO9E,KAAKG,MAGd,QACE,OAAO,SAAC0I,GAAC,OAAKA,CAAC,EAErB,EAMMjE,GAAU,SAAC8D,GACf,IAAMQ,EAAW,CACfC,OAAQ,CAAC/G,GAAO,SAAU,SAAU,OACpCgH,KAAM,CACJhH,GAAO,SAAU,WAAW,GAC5BA,GAAO,QAAS,SAAU,WAC1BA,GAAO,SAAU,SAAU,GAC3BA,GAAO,UAAW,SAAU,GAC5BA,GAAO,UAAW,SAAU,SAC5BA,GAAO,WAAY,SAAU,SAC7BA,GAAO,YAAa,SAAU,MAC9BA,GAAO,aAAc,SAAU,MAC/BA,GAAO,OAAQ,WAAW,GAC1BA,GAAO,YAAa,SAAU,WAC9BA,GAAO,cAAe,SAAU,KAElCiH,SAAU,CACRjH,GAAO,eAAgB,SAAU,GACjCA,GAAO,SAAU,WAAW,IAE9BkH,QAAS,GACTC,UAAW,GACXC,iBAAkB,CAACpH,GAAO,cAAe,WAAW,KAEtD,OAAOqH,GAAYf,GAAYgB,QAAQ,SAACC,GAAM,OAAKT,EAASS,EAAO,EACrE,EAKMC,GAAW,CACfT,OAAQ,CAAC,QACTE,SAAU,CAAC,QACXC,QAAS,CAAC,YACVC,UAAW,CAAC,WACZH,KAAM,CAAC,oBACPI,iBAAkB,IAOdC,GAAc,SAACf,GAInB,IAFA,IAAI9K,EAAO8K,EACPlH,EAAQ,CAACkH,GACNkB,GAAShM,GAAMoD,OAAS,GAAG,CAChC,IAAI2I,EAASC,GAAShM,GAAM,GAC5B4D,EAAMqI,KAAKF,GACX/L,EAAO+L,CACT,CACA,OAAOnI,CACT,EAyEMsI,GAAW,SAAChI,EAAI4G,GAEpB,IAAIpI,EAAS,CAAA,EAQb,OALAsE,GAAQ8D,GAAYzJ,QAAQ,SAAC8K,GACvBjI,EAAGsB,aAAa2G,EAAEhC,SACpBzH,EAAOyJ,EAAEnB,OAASmB,EAAErI,OAAOI,EAAGpD,aAAaqL,EAAEhC,QAEjD,GACOzH,CACT,EAmBM0J,GAAY,SAACnH,EAAQ6F,GACnB,IAAAuB,eAAGtN,SAAAA,GAGP,SAAAsN,IAAc,IAAA1L,EAOT,OANHA,EAAA5B,EAAAC,KAAMC,OACN0B,MAAKV,MAAQ,KACbU,EAAKtB,iBAAiBR,EAAkB,SAACS,GACpB,OAAfqB,EAAKV,OACPU,EAAKV,MAAMqM,YAAYhN,EAAGC,OAAOkL,QAErC,GAAG9J,CACL,CAACzB,EAAAmN,EAAAtN,GAAA,IAAAqG,EAAAiH,EAAAlN,UAwBA,OAxBAiG,EAEDhG,kBAAA,WACE,IAAMmN,EA1BO,SAACrI,EAAI4G,GACtB,OAAOD,GAAoBC,GAAY/F,IAAI,SAAAP,GACzC,IAAMhC,EAASwB,EAAcQ,EAAO2F,OAC9B1H,EAAQF,EAAMC,EAAQ0B,GAC5B,OAAOM,EAAOV,OAAOrB,EACvB,EACF,CAoBmB+J,CAAWvN,KAAM6L,GACxB9D,EAAUkF,GAASjN,KAAM6L,GAC/B7L,KAAKgB,MAAQgF,EAAMR,WAAI8H,EAAAA,EAAIjJ,QAAE0D,KAC7B,IAAM3G,EAAQ,IAAIC,YAAY/B,EAAgB,CAC5CgC,YAAY,EACZC,SAAS,EACTjB,OAAQ,CACNU,MAAOhB,KAAKgB,SAGhBhB,KAAKwB,cAAcJ,EACrB,EAAC+E,EAMDmB,yBAAA,SAAyBmE,EAASC,EAAGlE,GAChB,OAAfxH,KAAKgB,OAhIA,SAACA,EAAO6K,EAAY9K,EAAMyG,GAEvC,IAIIgG,EAJY,GAAAnJ,OACXuH,GAAoBC,GACpB9D,GAAQ8D,IAES4B,KAAK,SAACP,GAAC,OAAKA,EAAEhC,QAAUnK,CAAI,GAClD,QAAoB,IAATyM,EAAX,CAGA,IAAME,EAAcF,EAAK3I,OAAO2C,GAGhC,GAAIxG,aAAiB2M,EACnB,OAAQ5M,GACN,IAAK,UACHC,EAAMyH,UAAUtF,KAAKG,MAAMkE,IAC3B,MACF,IAAK,SACHxG,EAAM4M,UAAU3F,WAAWT,SAG1B,GAAIxG,aAAiB6M,EAC1B,OAAQ9M,GACN,IAAK,WACHC,EAAM8M,WAAW3K,KAAKG,MAAMkE,IAC5B,MACF,IAAK,iBACHxG,EAAMyJ,UAAUtH,KAAKG,MAAMkE,SAGtBxG,aAAiB+M,EAEnB,aADChN,GAEJC,EAAM8M,WAAW3K,KAAKG,MAAMkE,IAGvBxG,aAAiBgN,GAEnB,aADCjN,GAEJC,EAAM8M,WAAW3K,KAAKG,MAAMkE,IAMlC,IACgCyG,EAD5BC,EAAMnG,GAAQ,YAAY0F,KAAK,SAACP,GAAM,OAAAA,EAAEhC,QAAUnK,CAAI,QACvC,IAARmN,GACTlN,EAAMmN,WAAQF,EAAAA,CAAAA,GAAIC,EAAInC,OAAQ2B,EAAWO,GAvC3C,CAyCF,CA+EQG,CAAOpO,KAAKgB,MAAO6K,EAAYJ,EAASjE,EAE5C,EAAC4F,CAAA,CAnCMtN,cAmCNS,EAnCeC,cAqClB,OArCM4M,EACG1F,mBA1CQ,SAACmE,GAClB,IAAIyB,EAAO1B,GAAoBC,GAAY/F,IAAI,SAACoH,GAAC,OAAKA,EAAEhC,KAAK,GACzDmD,EAAOtG,GAAQ8D,GAAY/F,IAAI,SAACoH,GAAM,OAAAA,EAAEhC,KAAK,GACjD,MAAA7G,GAAAA,OAAWiJ,EAASe,EACtB,CAsCgCC,CAAWzC,GAoClCuB,CACT,EC7PMmB,IAEJC,eAAeC,OAAO,QAAS5I,GAC/B2I,eAAeC,OAAO,mBAAoBhO,GAC1C+N,eAAeC,OAAO,gBAAiB5O,GACvC2O,eAAeC,OAAO,mBAAoB9F,GAC1C6F,eAAeC,OAAO,gBAAiB9M,GACvC6M,eAAeC,OAAO,eAAgB3F,GACtC0F,eAAeC,OAAO,WAAY9G,GAClC6G,eAAeC,OAAO,UAAW7F,GACjC4F,eAAeC,OAAO,mBAAoB7E,GAC1C4E,eAAeC,OAAO,kBAAmB1E,IACzCyE,eAAeC,OAAO,kBAAmB/D,IACzC8D,eAAeC,OAAO,YAAa1D,IACnCyD,eAAeC,OAAO,SAAUnD,IAChCkD,eAAeC,OAAO,WAAYtB,GAAUb,EAAQ,WACpDkC,eAAeC,OAAO,aAActB,GAAUX,EAAU,aACxDgC,eAAeC,OAAO,YAAatB,GAAUV,EAAS,YACtD+B,eAAeC,OAAO,cAAetB,GAAUT,EAAW,mBAC1D8B,eAAeC,OAAO,YAAalD"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "leaflet-html",
3
3
  "type": "module",
4
- "version": "0.7.4",
4
+ "version": "0.8.0",
5
5
  "description": "Leaflet expressed in HTML",
6
6
  "keywords": [
7
7
  "leaflet",