(function(m,u){typeof exports=="object"&&typeof module<"u"?module.exports=u():typeof define=="function"&&define.amd?define(u):(m=typeof globalThis<"u"?globalThis:m||self,m.LegendControl=u())})(this,function(){"use strict";const m=e=>Array.isArray(e)?e:[e],u=(e,t,n,s=0,o=100)=>(e-t)*(o-s)/(n-t)+s,z=(e,t)=>Array.from({length:Math.ceil(e.length/t)},(n,s)=>e.slice(s*t,s*t+t)),D=(...e)=>e[0].map((t,n)=>e.slice(1).reduce((s,o)=>[...s,o[n]],[t])),T=e=>e.length===2?e:[null,...e],S=e=>e.reduce((t,[n,s],o)=>(o===e.length-1?t.push([[n,null],s]):t.push([[n,e[o+1][0]],s]),t),[]),d=(e,t={})=>{const{classes:n,styles:s,attributes:o,events:r,content:i,appendTo:a}=t,c=document.createElement(e);return n&&m(n).forEach(l=>c.classList.add(l)),s&&Object.entries(s).forEach(l=>c.style.setProperty(...l)),o&&Object.entries(o).forEach(([l,h])=>{h||h===0?c.setAttribute(l,`${h}`):c.removeAttribute(l)}),r&&Object.entries(r).forEach(([l,h])=>c.addEventListener(l,h)),i&&c.append(...m(i).filter(Boolean)),a&&a.appendChild(c),c},w=(e,t,n)=>{const s=Math.max(t,n),o=d("canvas",{attributes:{width:s,height:s}}),r=o.getContext("2d"),i=new ImageData(Uint8ClampedArray.from(e),t,n);return r==null||r.putImageData(i,(s-t)/2,(s-n)/2),o},v=(e,t)=>{const{labels:n={},unit:s=""}=t||{};return Array.isArray(e)?n[`${e}`]??(e[0]===null?`< ${n[`${e[1]}`]||`${e[1]}${s}`}`:e[1]===null?`> ${n[`${e[0]}`]||`${e[0]}${s}`}`:e.map(o=>n[`${o}`]||`${o}${s}`).join(" - ")):e!==null?n[`${e}`]??`${e}${s}`:n.other??"other"},x={},$=(e,t,n)=>{const{getter:s}=e;t.id in x||(x[t.id]=t.filter??null);const o=(i,a)=>{const{delta:c=0}=a||{};if(s)if(i==null)n.setFilter(t.id,x[t.id]);else if(Array.isArray(i)){const[l,h]=i,p=l?[">=",s,l]:!0,g=h?["<",s,h]:!0;n.setFilter(t.id,["all",p,g])}else{const l=typeof i=="number"?["all",[">=",s,i-c],["<=",s,i+c]]:["==",s,i];n.setFilter(t.id,l)}};return{highlight:o,events:i=>({mouseenter:()=>o(i),mouseleave:()=>o(void 0)})}},C={x:0},F=(e,t,n,s)=>{const{inputs:o,stops:r,min:i,max:a}=e,{highlight:c}=$(e,t,n),l=(a-i)/100,h={mouseleave:()=>c(void 0),mousemove:g=>{const{offsetX:f,target:y}=g;C.x=f;const b=y,A=u(f,0,b.offsetWidth,i,a);c(A,{delta:l}),b.style.setProperty("--x",`${f}px`)}},p=r.map(([g,f])=>`${f} ${u(g,i,a)}%`);return d("div",{classes:["gradient",`gradient--${s.highlight?"highlight":""}`],content:[d("p",{classes:"labels",content:o.map(g=>{const f=v(g,t.metadata);return f&&d("span",{styles:{left:`${u(g,i,a)}%`},content:f})})}),d("div",{classes:"bar",styles:{"background-image":`linear-gradient(90deg, ${p})`,"--x":`${C.x||0}px`},events:s.highlight?h:{}})]})},q=(e,t,n,s)=>{const{stops:o}=e,{events:r}=$(e,t,n);return d("ul",{classes:["list","list--color",`list--${s.highlight?"highlight":""}`],content:o.map(([i,a])=>{const c=v(i,t.metadata);return c&&d("li",{styles:{"--color":a},events:s.highlight?r(i):{},content:c})})})},I=(e,t,n,s)=>{switch(e.name){case"interpolate":return F(e,t,n,s);case"match":case"step":case"literal":return q(e,t,n,s);default:return}},R=(e,t,n,s)=>{const{stops:o}=e,{events:r}=$(e,t,n);return d("ul",{classes:["bubbles",`bubbles--${s.highlight?"highlight":""}`],content:o.sort((i,a)=>a[1]-i[1]).map(([i,a])=>{const c=v(i,t.metadata);return c&&d("li",{styles:{"--radius":`${a}px`},events:s.highlight?r(i):{},content:d("span",{content:c})})})})},B=(e,t,n,s)=>{const{stops:o}=e,{events:r}=$(e,t,n);return d("ul",{classes:["list","list--icons",`list--${s.highlight?"highlight":""}`],content:o.map(([i,a])=>{var f;const c=v(i,t.metadata);if(!c)return;const{height:l,width:h,data:p}=((f=n.style.getImage(a))==null?void 0:f.data)||{};if(!l||!h||!p)return;const g=w(p,h,l);return d("li",{events:s.highlight?r(i):{},content:[d("img",{classes:["icon"],attributes:{src:g.toDataURL()}}),c]})})})},U={color:I,radius:R,image:B,pattern:B},E=(e,t)=>z(e.slice(t),2),L={interpolate:e=>E(e,2),match:e=>E(e,1).map(T),step:e=>S([[null,e[1]],...E(e,2)]),literal:e=>[[...e,...e]]},j=e=>Array.isArray(e)&&!!e.length&&typeof e[0]=="string",M=e=>{var l;const[t,...n]=j(e)?e:["literal",e];if(t==="case")return n.slice(1).flatMap(M);const s=(l=L[t])==null?void 0:l.call(L,n);if(!s)return[];const o=t==="literal"?void 0:["match","step"].includes(t)?n[0]:n[1],[r,i]=D(...s),a=Math.min(...r.flat(2)),c=Math.max(...r.flat(2));return[{name:t,getter:o,stops:s,inputs:r,outputs:i,min:a,max:c}]},N={isExpression:j,parse:M},V={collapsed:!1,toggler:!1,highlight:!1};class W{constructor(t){const{layers:n,...s}=t||{};this._options={...V,layers:void 0,...s},n&&this.addLayers(n),this._panes=d("div",{classes:"panes",styles:{display:(t==null?void 0:t.minimized)??!1?"none":"block"}}),this._minimizer=(t==null?void 0:t.minimized)!==void 0?d("button",{classes:"minimizer",events:{click:()=>{const{display:o}=this._panes.style;this._panes.style.display=o==="none"?"block":"none"}}}):void 0,this._container=d("div",{classes:["mapboxgl-ctrl","maplibregl-ctrl","mapboxgl-ctrl-legend"],content:[this._minimizer,this._panes]}),this.refresh=this.refresh.bind(this)}onAdd(t){return this._map=t,this._map.on("styledata",this.refresh),this._container}onRemove(){var t,n;(t=this._container.parentNode)==null||t.removeChild(this._container),(n=this._map)==null||n.off("styledata",this.refresh)}addLayers(t){var s,o;const n=(r,i)=>{var g;const{collapsed:a=this._options.collapsed,toggler:c=this._options.toggler,highlight:l=this._options.highlight,onToggle:h=this._options.onToggle,attributes:p}=i||{};(g=this._options.layers)==null||g.set(r,{collapsed:a,toggler:c,highlight:l,onToggle:h,attributes:p})};(s=this._options).layers??(s.layers=new Map),Array.isArray(t)?t.forEach(r=>n(r)):Object.entries(t).forEach(([r,i])=>{typeof i=="boolean"?n(r):Array.isArray(i)?n(r,{attributes:i}):n(r,i)}),(o=this._map)!=null&&o.isStyleLoaded()&&this.refresh()}removeLayers(t){t.forEach(n=>{var o;(o=this._options.layers)==null||o.delete(n);const s=this._panes.querySelector(`.mapboxgl-ctrl-legend-pane--${n}`);s&&this._panes.removeChild(s)})}_getBlocks(t,n,s,o){var l;const[r]=s.split("-").slice(-1),i=U[r];if(!i)return;const a=N.parse(o),c=((l=this._options.layers)==null?void 0:l.get(t))||this._options;return a.map(h=>i(h,n,this._map,c)).filter(Boolean)}_toggleButton(t,n){var i,a;const{onToggle:s=this._options.onToggle}=((i=this._options.layers)==null?void 0:i.get(n))||{},o=((a=this._map)==null?void 0:a.getLayoutProperty(t[0],"visibility"))||"visible",r=d("div",{classes:["toggler",`toggler--${o}`]});return r.addEventListener("click",c=>{c.preventDefault();const l=o==="none"?"visible":"none";t.forEach(h=>{var p;(p=this._map)==null||p.setLayoutProperty(h,"visibility",l),s==null||s(h,l==="visible")})}),r}refresh(){var n;const t=this._options.layers?[...this._options.layers.keys()]:void 0;(n=this._map.getStyle())==null||n.layers.filter(s=>{const o="source"in s&&s.source!=="composite",r=!t||[...t].some(i=>typeof i=="string"?s.id===i:s.id.match(i));return o&&r}).reverse().forEach(s=>{var O;const{id:o,layout:r,paint:i,metadata:a}=s,c=(t==null?void 0:t.find(_=>o.match(_)))||o,{collapsed:l,toggler:h,attributes:p}=((O=this._options.layers)==null?void 0:O.get(c))||this._options,g=Object.entries({...r,...i}).reduce((_,[P,X])=>{if(!((p==null?void 0:p.includes(P))??!0))return _;const k=this._getBlocks(c,s,P,X);return k==null||k.forEach(G=>_.push(G)),_},[]);if(!g.length)return;const f=`mapboxgl-ctrl-legend-pane--${o}`,y=this._panes.querySelector(`.${f}`),b=h?typeof h=="boolean"?[o]:h:void 0,A=d("details",{classes:["mapboxgl-ctrl-legend-pane",f],attributes:{open:y?y.getAttribute("open")!==null:!l},content:[d("summary",{content:[(a==null?void 0:a.name)||o,b&&this._toggleButton(b,c)]}),...g]});y?this._panes.replaceChild(A,y):this._panes.appendChild(A)})}}return W});