mayacharts 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -6
- package/dist/core/registry.d.ts +1 -1
- package/dist/core/types.d.ts +1 -1
- package/dist/element/animate.d.ts +4 -0
- package/dist/element.js +3 -3
- package/dist/element.js.map +1 -1
- package/dist/flow.js +2 -2
- package/dist/flow.js.map +1 -1
- package/dist/geo.js +2 -2
- package/dist/geo.js.map +1 -1
- package/dist/hierarchy.js +2 -2
- package/dist/hierarchy.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/maya.global.js +3 -3
- package/dist/maya.global.js.map +1 -1
- package/dist/radial.js +1 -1
- package/dist/radial.js.map +1 -1
- package/dist/theme.css +1 -1
- package/llms.txt +1 -1
- package/package.json +5 -5
- package/schema.json +1 -1
package/dist/maya.global.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! mayacharts v0.
|
|
2
|
-
(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n=`0.2.0`,r=Symbol.for(`mayacharts.marks@0`);Object.hasOwn(globalThis,r)||Object.defineProperty(globalThis,r,{value:new Map});var i=globalThis[r],a=[`bar`,`line`,`area`,`scatter`,`heatmap`,`waterfall`,`kpi`,`dumbbell`,`ridgeline`,`beeswarm`,`parallel`,`table`],o={treemap:`hierarchy`,sunburst:`hierarchy`,marimekko:`hierarchy`,waffle:`hierarchy`,sankey:`flow`,chord:`flow`,radial:`radial`,hexmap:`geo`};function s(e,t){i.has(e)||i.set(e,t),typeof globalThis.dispatchEvent==`function`&&globalThis.dispatchEvent(new Event(`maya-register`))}var c=()=>[...i.keys()],l={noData:`No data`,other:`Other`,back:`Back`,reset:`Reset zoom`,showing:`Showing {0}`,drilledInto:`Drilled into {0}`,zoomedTo:`Zoomed to {0} – {1}`,selected:`{0} selected`,selectionCleared:`Selection cleared`,chartOf:`{0} chart of {1} by {2}`,chartOfAll:`{0} chart of {1}`,firstOf:`First {0} of {1} rows`,measures:`Measure`,crumbs:`Drill path`,positive:`positive`,negative:`negative`,above:`above target`,below:`below target`,vs:`{0} vs {1}`,sortedBy:`Sorted by {0}, {1}`,ascending:`ascending`,descending:`descending`,ofTarget:`{0} of target {1}`};function u(e,t,...n){return((e.text&&Object.hasOwn(e.text,t)?e.text[t]:void 0)??l[t]).replace(/\{(\d)\}/g,(e,t)=>String(n[+t]??``))}var d={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`};function f(e){return String(e).replace(/[&<>"']/g,e=>d[e])}function p(e){return Math.round(e*100)/100}function m(e,t,n){let r=``;for(let e in t){let n=t[e];n!=null&&n!==!1&&(r+=n===!0?` ${e}=""`:` ${e}="${f(n)}"`)}return n===void 0?`<${e}${r}/>`:`<${e}${r}>${n}</${e}>`}var h=`\0other`,g=(...e)=>e.map(e=>encodeURIComponent(String(e).replace(/\p{Cs}/gu,`�`)).replace(/~/g,`%7E`)).join(`~`);function _(e,t,n,r,i){let[a,o]=[Math.max(r,24),Math.max(i,24)];return r<24||i<24?m(`rect`,Object.assign({"data-maya":`hit`},e,{"data-maya":`hit`,x:p(t-(a-r)/2),y:p(n-(o-i)/2),width:p(a),height:p(o),fill:`transparent`})):``}var v=e=>e.title??`${e.titles.get(e.y)??e.y}`+(e.x||e.path.length?` by ${e.titles.get(e.x)??(e.x||e.path.join(` / `))}`:``),y=[`scatter`,`treemap`,`sunburst`,`sankey`,`hexmap`],b=1e3;function x(e,t,n,r){if(e.description!==null)return e.description;let i=t=>e.titles.get(t)??t,a=e.x||e.path.length?u(e,`chartOf`,r,i(e.y),e.x?i(e.x):e.path.join(` / `)):u(e,`chartOfAll`,r,i(e.y));if(e.series!==null&&t.series.length&&(a+=`, ${e.stack?`stacked`:`grouped`} by ${i(e.series)} (${t.series.join(`, `)})`),y.includes(e.type))return`${a}. ${e.data.length} rows.`;let o=0,s=1/0,c=-1/0;for(let e of t.cells)e.value!==null&&(o++,s=Math.min(s,e.value),c=Math.max(c,e.value));let l=t=>n(e.y,t);return o?o===1?`${a}. 1 value: ${l(s)}.`:`${a}. ${o} values from ${l(s)} to ${l(c)}.`:a+`. No data.`}function S(e,t,n,r){let i=t=>e.titles.get(t)??t,a=(t,i)=>{if(i==null)return``;let a=t===e.y&&typeof i==`number`?r(i):null;return f(n(t,i))+(a?` (${f(a)})`:``)},o=t=>t>b?u(e,`firstOf`,b,t):v(e),s,c,l;if(y.includes(e.type)){let t=[...new Set([e.x,...e.path,e.series,e.name,e.size,e.y,typeof e.colorBy==`string`&&e.colorBy!==`sign`?e.colorBy:null].filter(e=>!!e))];l=e.data.length,s=t.map(e=>`<th>${f(i(e))}</th>`).join(``),c=e.data.slice(0,b).map(e=>`<tr>${t.map(t=>`<td>${a(t,e[t])}</td>`).join(``)}</tr>`).join(``)}else{let n=e.series===null?[i(e.y)]:t.visible.map(e=>t.series[e]);l=t.categories.length,s=`<th>${f(i(e.x))}</th>`+n.map(e=>`<th>${f(e)}</th>`).join(``);let r=new Map(t.cells.map(e=>[e.ci+`,`+e.si,e.value]));c=``;for(let n=0;n<Math.min(l,b);n++){c+=`<tr><th scope="row">${f(t.categories[n])}</th>`;for(let i of t.visible)c+=`<td>${a(e.y,r.get(n+`,`+i))}</td>`;c+=`</tr>`}}return`<table class="maya-sr"><caption>${f(o(l))}</caption><thead><tr>${s}</tr></thead><tbody>${c}</tbody></table>`}var C=e=>{for(let t=0;t<8;t++)if(Math.abs(e*10**t-Math.round(e*10**t))<1e-9)return t;return 8},w=`year month day hour minute second weekday era timeZone dateStyle timeStyle fractionalSecondDigits hour12 dayPeriod timeZoneName`.split(` `),T={date:{dateStyle:`medium`},month:{month:`short`,year:`numeric`},year:{year:`numeric`},time:{timeStyle:`short`},datetime:{dateStyle:`medium`,timeStyle:`short`}};function E(e,t=e.y,n){typeof t==`number`&&([t,n]=[e.y,t]);let r=e.format.get(t),i=Intl.NumberFormat.supportedLocalesOf(e.locale).length?e.locale:`en-US`,a=n===void 0?2:C(n),o=``,s=``,c=null,l=null,u=typeof r==`string`?r:`auto`;if(typeof r==`string`&&Object.hasOwn(T,r))c=new Intl.DateTimeFormat(i,{timeZone:`UTC`,...T[r]});else if(typeof r==`object`&&r){let{prefix:e=``,suffix:t=``,...n}=r;[o,s]=[String(e),String(t)],w.some(e=>Object.hasOwn(n,e))?c=new Intl.DateTimeFormat(i,{timeZone:`UTC`,...n}):l=new Intl.NumberFormat(i,n)}if(!c&&!l){let t=u===`integer`?{maximumFractionDigits:0}:u===`decimal`?{minimumFractionDigits:2,maximumFractionDigits:2}:u===`compact`?{notation:`compact`,maximumFractionDigits:1}:u===`percent`?{style:`percent`,minimumFractionDigits:Math.max(0,a-2),maximumFractionDigits:Math.max(1,a-2)}:u===`currency`?{style:`currency`,currency:e.currency,minimumFractionDigits:n!==void 0&&n>=1?0:a,maximumFractionDigits:n!==void 0&&n>=1?0:Math.max(a,2)}:{maximumFractionDigits:Math.max(a,2)};l=new Intl.NumberFormat(i,t)}return e=>{if(e==null)return``;let t;if(c){let n=typeof e==`string`&&/^-?\d+$/.test(e)?new Date(+e):typeof e==`number`||typeof e==`string`||e instanceof Date?new Date(e):NaN;t=Number.isNaN(+n)?String(e):c.format(n)}else t=typeof e==`number`?l.format(e):String(e);return o+t+s}}function D(e,t,n=.2,r=.1){let i=e.length,a=t[1]-t[0],o=a/(i-n+r*2)||1,s=t[0]+(a-o*(i-n))/2;return{domain:e,step:o,bandwidth:o*(1-n),at:e=>s+o*e}}function O(e,t){let[n,r]=e,[i,a]=t,o=r===n?0:(a-i)/(r-n);return{domain:e,range:t,of:e=>r===n?(i+a)/2:i+(e-n)*o}}var k=e=>parseFloat(e.toPrecision(12));function A(e,t,n=5){t===e&&([e,t]=e===0?[0,1]:[e-1,t+1]);let r=10**Math.floor(Math.log10((t-e)/n)),i=r,a=1/0,o=e<0&&t>0;for(let s of[1,2,2.5,5,10]){let c=r*s,l=Math.floor(e/c+1e-9),u=Math.ceil(t/c-1e-9)-l+1,d=o?u>n+3?1/0:(u-1+Math.abs(u-n)/1e3)*c:Math.abs(u-n);d<a-1e-9*Math.abs(d)&&(a=d,i=c)}let s=Math.floor(e/i+1e-9),c=Math.ceil(t/i-1e-9),l=[];for(let e=s;e<=c;e++)l.push(k(e*i));return{domain:[k(s*i),k(c*i)],values:l,step:k(i)}}var j=e=>e>=4352&&e<=4447||e>=11904&&e<=42191||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65072&&e<=65103||e>=65280&&e<=65376||e>=65504&&e<=65510,M=e=>{let t=0,n=0;for(let r of e)j(r.codePointAt(0))?n++:t++;return t*7.2+n*12},N=e=>M(e)+8,P=e=>e.reduce((e,t)=>Math.max(e,N(t)),0);function ee(e,t){if(M(e)<=t)return e;let n=``,r=0;for(let i of e){if(r+=M(i),r+7.2>t)break;n+=i}return n+`…`}function F(e,t,n){let r=(t.field===e.y?e.yDomain:e.xDomain)??null,[i,a]=r??t.domain,[o,s]=i>a?[a,i]:[i,a],c=A(o,s),l=r?c.values.filter(e=>e>=o&&e<=s):c.values;return{domain:r??c.domain,values:l,labels:l.map(e=>n(t.field,e,c.step))}}function te(e,[t,n,r],i,a){let{width:o,height:s}=i,c=t&&t.kind===`linear`?F(e,t,a):null,l=n&&n.kind===`linear`?F(e,n,a):null,u=t&&!c?t.domain.map(e=>a(t.field,e)):[],d=n&&!l?n.domain.map(e=>a(n.field,e)):[],h=l?l.labels:d.map(e=>ee(e,o*.4-8)),g=r&&r.kind===`linear`?F(e,r,a):null,_=g&&r&&e.titles.get(r.field),v=n&&e.titles.get(n.field),y=t&&e.titles.get(t.field),b=Math.max((e.yAxis&&n?P(h)+10:8)+(v?18:0),c?M(c.labels[0]??``)/2+2:0),x=(e.xAxis&&t?24:8)+(y?18:0),S={x:b,y:10,w:Math.max(1,o-b-(g?(e.yAxis?P(g.labels)+4:8)+(_?18:0):Math.max(12,c?M(c.labels.at(-1)??``)/2+2:0))),h:Math.max(1,s-10-x)},C=t?t.kind===`band`?D(t.domain,[S.x,S.x+S.w]):O(c.domain,[S.x,S.x+S.w]):null,w=n?n.kind===`band`?D(n.domain,[S.y,S.y+S.h]):O(l.domain,[S.y+S.h,S.y]):null,T=g?O(g.domain,[S.y+S.h,S.y]):null,E=``;if(e.grid){let e=p(S.x+S.w);if(l)for(let t of l.values){let n=p(w.of(t));E+=m(`line`,{x1:p(S.x),x2:e,y1:n,y2:n})}if(c)for(let e of c.values){let t=p(C.of(e));E+=m(`line`,{x1:t,x2:t,y1:p(S.y),y2:p(S.y+S.h)})}}let k=``;if(e.yAxis&&n){if(l)l.values.forEach((e,t)=>{k+=m(`text`,{x:p(S.x-6),y:p(w.of(e)),"text-anchor":`end`,"dominant-baseline":`middle`},f(l.labels[t]))});else{let e=w,t=Math.max(1,Math.ceil(14/(S.h/Math.max(1,n.domain.length))));d.forEach((n,r)=>{if(r%t)return;let i=h[r];k+=m(`text`,{x:p(S.x-6),y:p(e.at(r)+e.bandwidth/2),"text-anchor":`end`,"dominant-baseline":`middle`},f(i)+(i===n?``:m(`title`,{},f(n))))})}}if(v){let e=p(S.y+S.h/2);k+=m(`text`,{x:9,y:e,"text-anchor":`middle`,transform:`rotate(-90 9 ${e})`},f(v))}if(g&&T&&(e.yAxis&&g.values.forEach((e,t)=>{k+=m(`text`,{x:p(S.x+S.w+6),y:p(T.of(e)),"text-anchor":`start`,"dominant-baseline":`middle`},f(g.labels[t]))}),_)){let[e,t]=[o-9,p(S.y+S.h/2)];k+=m(`text`,{x:e,y:t,"text-anchor":`middle`,transform:`rotate(90 ${e} ${t})`},f(_))}let A=``;if(e.xAxis&&t){let e=p(S.y+S.h+16);if(c){let t=Math.max(1,Math.ceil(P(c.labels)/(S.w/Math.max(1,c.values.length-1))));c.values.forEach((n,r)=>{r%t||(A+=m(`text`,{x:p(C.of(n)),y:e,"text-anchor":`middle`},f(c.labels[r])))})}else{let t=C,n=Math.max(1,Math.ceil(P(u)/(S.w/Math.max(1,u.length))));u.forEach((r,i)=>{i%n===0&&(A+=m(`text`,{x:p(t.at(i)+t.bandwidth/2),y:e,"text-anchor":`middle`},f(r)))})}}y&&(A+=m(`text`,{x:p(S.x+S.w/2),y:s-4,"text-anchor":`middle`},f(y)));let j=c&&l,N=t?.kind===`band`?t:n?.kind===`band`?n:null;return{plot:S,x:C,y:w,y2:T,grid:E,ay:k,ax:A,attrs:{"data-plot":`${p(S.x)} ${p(S.y)} ${p(S.w)} ${p(S.h)}`,"data-n":j||!N?null:N.domain.length,"data-xd":j?c.domain.join(` `):null,"data-yd":j?l.domain.join(` `):null}}}function ne(e){let t=0,n=0;return{add(r){n=t===0||e===`sum`||e===`mean`?n+r:e===`min`?Math.min(n,r):e===`max`?Math.max(n,r):n,t++},value:()=>e===`count`?t:t===0?null:e===`mean`?n/t:n}}function re(e,t={}){let{hidden:n=[],window:r}=Array.isArray(t)?{hidden:t}:t,i=[],a=new Map,o=new Map;for(let t of e.data){let n=String(t[e.x]),r=e.series===null?``:String(t[e.series]),s=a.get(r);s===void 0&&a.set(r,s=i.push(r)-1);let c=o.get(n);c||o.set(n,c={label:n,rows:[],vals:[]}),c.rows.push([s,t[e.y],e.y2===null?void 0:t[e.y2]])}let s=t=>{let n=new Map;for(let[r,i]of t){let t=n.get(r);t||n.set(r,t=ne(e.aggregate)),typeof i==`number`&&t.add(i)}return i.map((e,t)=>n.get(t)?.value()??null)},c=t=>{let n=ne(e.aggregate);for(let[,,e]of t.rows)typeof e==`number`&&n.add(e);t.y2=n.value()},l=[...o.values()];for(let e of l)e.vals=s(e.rows),c(e);let u=e=>e.vals.reduce((e,t)=>e+(t??0),0);if(e.sort){let t=e.sort===`asc`?1:-1;l=l.map(e=>[e,u(e)]).sort((e,n)=>t*(e[1]-n[1])).map(e=>e[0])}if(e.limit!==null&&l.length>e.limit){let t=new Set(l.map(e=>[e,u(e)]).sort((e,t)=>t[1]-e[1]).slice(0,e.limit).map(e=>e[0])),n={label:h,rows:l.filter(e=>!t.has(e)).flatMap(e=>e.rows),vals:[]};n.vals=s(n.rows),c(n),l=[...l.filter(e=>t.has(e)),n]}let d=e.type===`waterfall`,f=new Map;if(d){let t=0;for(let n of l)e.totals.includes(n.label)?f.set(n,[0,t]):f.set(n,[t,t+=u(n)])}if(r?.length===2&&l.length){let e=Math.min(l.length-1,Math.max(0,Math.trunc(r[1]))),t=Math.min(e,Math.max(0,Math.trunc(r[0])));l=l.slice(t,e+1)}let p=[];i.forEach((e,t)=>n.includes(e)||p.push(t));let m=[],g=0,_=0;return l.forEach((t,n)=>{let r=0,i=0;for(let a of p){let o=t.vals[a]??null,s=o??0,[c,l]=d?f.get(t):[0,s];e.stack&&(s<0?[c,l]=[i,i+=s]:[c,l]=[r,r+=s]),g=Math.min(g,c,l),_=Math.max(_,c,l),m.push({ci:n,si:a,value:o,y0:c,y1:l})}}),{categories:l.map(e=>e.label),totals:l.map(t=>e.totals.includes(t.label)),series:i,visible:p,cells:m,extent:[g,_],y2:e.y2===null?[]:l.map(e=>e.y2??null)}}function ie(e){let t=typeof e.colorBy==`string`&&e.colorBy!==`sign`?e.colorBy:null,n=new Map;if(t)for(let r of e.data){let i=r[t];if(typeof i!=`number`)continue;let a=String(r[e.x])+`\0`+(e.series===null?``:String(r[e.series]));(n.get(a)??n.set(a,ne(e.aggregate)).get(a)).add(i)}return(e,t)=>n.get(e+`\0`+t)?.value()??null}function ae(e){let t=[];for(let n of e.cells)t[n.ci]=n;let n=e.visible[0]??0,r=0,i=[];return e.categories.forEach((a,o)=>{let s=t[o];if(s){if(e.totals[o])return void i.push({ci:o,si:n,y0:0,y1:r,v:r,s:2});s.value!==null&&i.push({ci:o,si:n,y0:r,y1:r+=s.value,v:s.value,s:+(s.value<0)})}}),i}var oe=(e,t)=>e.type===`waterfall`?ae(t):t.cells.flatMap(e=>e.value===null?[]:[{ci:e.ci,si:e.si,y0:e.y0,y1:e.y1,v:e.value,s:e.si%8}]),se={noun:`Bar`,axes(e,t){let n=t.extent[0],r=t.extent[1];if(e.type===`waterfall`){n=r=0;for(let e of ae(t))n=Math.min(n,e.y0,e.y1),r=Math.max(r,e.y0,e.y1)}let i={kind:`band`,field:e.x,domain:t.categories},a={kind:`linear`,field:e.y,domain:[n,r]};if(e.y2!==null){let n=t.y2.filter(e=>e!==null);return[i,a,{kind:`linear`,field:e.y2,domain:[Math.min(0,...n),Math.max(0,...n)]}]}return e.horizontal?[a,i]:[i,a]},draw(e){let{spec:t,shaped:n}=e,r=t.horizontal,i=r?e.y:e.x,a=r?e.x:e.y,o=D(n.visible.map(e=>n.series[e]),[0,i.bandwidth],.1,0),s=ie(t),c=``,l=``;for(let u of oe(t,n)){let d=n.visible.indexOf(u.si),f=i.at(u.ci)+(t.stack||t.type===`waterfall`?0:o.at(d)),v=t.stack||t.type===`waterfall`?i.bandwidth:o.bandwidth,[y,b]=[a.of(u.y0),a.of(u.y1)],x=Math.min(y,b),S=Math.abs(y-b),[C,w,T,E]=r?[x,f,S,v]:[f,x,v,S],D=n.categories[u.ci],O=n.series[u.si],k=s(D,O),A={"data-key":g(O,D),"data-c":u.ci,"data-s":u.s,"data-x":e.fmt(t.x,D),"data-series":O,"data-f":e.fmt(t.y,u.v),"data-y":u.v,"data-neg":u.v<0,"data-tone":e.tone(u.v),"data-q":k===null?null:e.q(k),"data-other":D===h,"data-total":n.totals[u.ci]};if(c+=m(`rect`,{"data-maya":`mark`,...A,x:p(C),y:p(w),width:p(T),height:p(E)}),l+=_(A,C,w,T,E),t.labels){let n=e.fmt(t.y,u.v),i=n.length*7.2+4,[a,o]=[C+T/2,w+E/2],s=u.v<0;r?i<=T&&E>=14?e.label(a,o,n,`center`):e.label(s?C-4:C+T+4,o,n,s?`end`:`start`):i<=T&&E>=16?e.label(a,o,n,`center`):e.label(a,s?w+E:w,n,s?`below`:`above`)}}if(e.y2&&t.y2!==null&&n.y2.length){let r=t.y2,a=n.series.length%8,o=t.titles.get(r)??r,s=``,u=!0,d=``;n.y2.forEach((c,f)=>{if(c===null){u=!0;return}let h=p(i.at(f)+i.bandwidth/2),v=p(e.y2.of(c));s+=`${u?`M`:`L`}${h} ${v}`,u=!1;let y=n.categories[f],b={"data-key":g(`\0y2`,y),"data-c":f,"data-s":a,"data-x":e.fmt(t.x,y),"data-series":o,"data-f":e.fmt(r,c),"data-y":c,"data-neg":c<0};d+=m(`circle`,{"data-maya":`mark`,...b,r:3,cx:h,cy:v}),l+=_(b,h-3,v-3,6,6),t.labels&&e.label(+h,+v,e.fmt(r,c),`above`)}),c+=m(`path`,{"data-maya":`line`,"data-key":g(`l`,`\0y2`),"data-s":a,pathLength:1,d:s||null})+d}return{marks:c,hits:l}}};function ce(e,t){let n=[],r=new Map(t.categories.map((e,t)=>[e,t])),i=e.yDomain;return e.data.forEach((a,o)=>{let s=a[e.y];if(typeof s!=`number`||!Number.isFinite(s)||i&&(s<i[0]||s>i[1]))return;let c=e.x===``?0:r.get(String(a[e.x]));if(c===void 0)return;let l=t.series.indexOf(e.series===null?``:String(a[e.series]));if(!t.visible.includes(l))return;let u=e.name===null?null:a[e.name];n.push({i:o,v:s,ci:c,si:l,name:u==null?null:String(u),row:a})}),n}function le(e,t,n){let r=e.map((e,t)=>t).sort((t,n)=>e[t]-e[n]||t-n),i=(2*t)**2,a=Array(e.length).fill(0),o=[],s=0;for(let c of r){let r=e[c];for(;s<o.length&&r-e[o[s]]>=2*t;)s++;let l=o.slice(s),u=[0];for(let t of l){let n=Math.sqrt(Math.max(0,i-(r-e[t])**2));u.push(a[t]+n,a[t]-n)}u.sort((e,t)=>Math.abs(e)-Math.abs(t)||t-e);let d=u.find(t=>l.every(n=>(r-e[n])**2+(t-a[n])**2>=i-1e-6))??0;d=Math.max(-n,Math.min(n,d)),a[c]=d,o.push(c)}return a}var ue={noun:`Beeswarm`,axes(e,t){let n=1/0,r=-1/0;for(let i of ce(e,t))n=Math.min(n,i.v),r=Math.max(r,i.v);n>r&&(n=r=0);let i=e.x===``?null:{kind:`band`,field:e.x,domain:t.categories};return[{kind:`linear`,field:e.y,domain:e.yDomain??[n,r]},i]},draw(e){let{spec:t,shaped:n,plot:r}=e,i=e.x,a=e.y,o=ce(t,n),s=a?a.bandwidth:r.h,c=new Map;for(let e of o)(c.get(e.ci)??c.set(e.ci,[]).get(e.ci)).push(e);let l=1;for(let e of c.values())l=Math.max(l,e.length);let u=Math.max(3,Math.min(6,Math.sqrt(r.w*s/l)/4)),d=typeof t.colorBy==`string`&&t.colorBy!==`sign`?t.colorBy:null,f=new Map,h=``,v=``;for(let[o,l]of[...c].sort((e,t)=>e[0]-t[0])){let c=a?a.at(o)+a.bandwidth/2:r.y+r.h/2,y=l.map(e=>i.of(e.v)),b=le(y,u+.5,Math.max(0,s/2-u));l.forEach((r,i)=>{let s=r.i;if(r.name!==null){let e=(f.get(r.name)??0)+1;f.set(r.name,e),s=e>1?`${r.name}#${e}`:r.name}let l=n.series[r.si],x=e.fmt(t.y,r.v),S=d?r.row[d]:null,C={"data-key":g(l,s),"data-c":r.i,"data-s":r.si%8,"data-x":r.name??(a?e.fmt(t.x,n.categories[o]):``),"data-series":l,"data-y":r.v,"data-f":x,"data-neg":r.v<0,"data-tone":e.tone(r.v),"data-q":typeof S==`number`?e.q(S):null},w=y[i],T=c+b[i];h+=m(`circle`,{"data-maya":`mark`,...C,r:p(u),cx:p(w),cy:p(T)}),v+=_(C,w-u,T-u,u*2,u*2),t.labels&&e.label(w,T-u,x,`above`)})}return{marks:h,hits:v}}},de={noun:`Dumbbell`,axes(e,t){let n={kind:`band`,field:e.x,domain:t.categories},r={kind:`linear`,field:e.y,domain:t.extent};return e.horizontal?[r,n]:[n,r]},draw(e){let{spec:t,shaped:n}=e,r=t.horizontal,i=r?e.y:e.x,a=r?e.x:e.y,o=Math.max(3,Math.min(5,i.bandwidth/2-1)),s=new Map;for(let e of n.cells)e.value!==null&&e.si<2&&((s.get(e.ci)??s.set(e.ci,[]).get(e.ci))[e.si]=e.value);let c=``,l=``,u=``;for(let[d,f]of[...s].sort((e,t)=>e[0]-t[0])){let s=n.categories[d],v=i.at(d)+i.bandwidth/2,y=e=>r?[a.of(e),v]:[v,a.of(e)],[b,x]=f;if(b!==void 0&&x!==void 0){let[t,n]=y(b),[r,i]=y(x);c+=m(`line`,{"data-maya":`link`,"data-key":g(`k`,s),"data-c":d,"data-tone":e.tone(x-b),"stroke-width":2,x1:p(t),y1:p(n),x2:p(r),y2:p(i)})}for(let i of[0,1]){let a=f[i];if(a===void 0)continue;let[c,v]=y(a),b=n.series[i],x={"data-key":g(b,s),"data-c":d,"data-s":i%8,"data-x":e.fmt(t.x,s),"data-series":b,"data-f":e.fmt(t.y,a),"data-y":a,"data-neg":a<0,"data-other":s===h};if(l+=m(`circle`,{"data-maya":`mark`,...x,cx:p(c),cy:p(v),r:o}),u+=_(x,c-o,v-o,o*2,o*2),t.labels){let n=f[1-i],[s,l]=y(n??a),u=e.fmt(t.y,a),d=r?c>=s:v>=l,p=n===void 0?r:i===1?d:!d;r?e.label(c+(p?o+4:-o-4),v,u,p?`start`:`end`):e.label(c,v+(p?o:-o),u,p?`below`:`above`)}}}return{marks:c+l,hits:u}}},fe={noun:`Heatmap`,axes:(e,t)=>[{kind:`band`,field:e.x,domain:t.categories},{kind:`band`,field:e.series??``,domain:t.series}],draw(e){let{spec:t,shaped:n}=e,r=e.x,i=e.y,a=n.cells.filter(e=>e.value!==null),o=1/0,s=-1/0;for(let e of a)o=Math.min(o,e.value),s=Math.max(s,e.value);let c=e=>s>o?Math.min(9,Math.max(0,Math.floor((e-o)/(s-o)*10))):9,l=``,u=``;for(let[o,s]of a.entries()){let a=s.value,d=n.visible.indexOf(s.si),f=r.at(s.ci)+1,h=i.at(d)+1,v=Math.max(0,r.bandwidth-2),y=Math.max(0,i.bandwidth-2),b=n.categories[s.ci],x=n.series[s.si],S={"data-key":g(x,b),"data-c":o,"data-x":e.fmt(t.x,b),"data-series":x,"data-y":a,"data-f":e.fmt(t.y,a),"data-q":c(a)};l+=m(`rect`,{"data-maya":`mark`,...S,x:p(f),y:p(h),width:p(v),height:p(y)}),u+=_(S,f,h,v,y),t.labels!==!1&&v>=24&&y>=24&&e.label(f+v/2,h+y/2,e.fmt(t.y,a),`center`)}let d=a.length>0?`<div class="maya-legend" data-maya="ramp"><span>${f(e.fmt(t.y,o))}</span><i></i><span>${f(e.fmt(t.y,s))}</span></div>`:``;return{marks:l,hits:u,grid:``,legend:d}}},I=12,pe=e=>typeof e==`number`?e:null;function me(e){let{spec:t,shaped:n,width:r,height:i}=e,a=t.x?n.categories:[],o=t.x?n.cells.filter(e=>e.si===0).sort((e,t)=>e.ci-t.ci):[],s=o.filter(e=>e.value!==null),c=s[s.length-1],l=t.x?c?.value??null:e.agg(t.aggregate)(t.data.map(e=>pe(e[t.y]))),u=r/2;if(l===null)return{marks:``,hits:``,labels:m(`text`,{"data-maya":`empty`,x:p(u),y:p(i/2),"text-anchor":`middle`},f(e.t(`noData`)))};let d=c?.ci??0,h=t.x?e.fmt(t.x,a[d]):``,_=e.fmt(t.y,l),v=p(Math.max(16,Math.min(i*.32,72,(r-24)/(_.length*.62)))),y={"data-c":d,"data-s":0,"data-x":h,"data-series":``,"data-y":l,"data-f":_},b=(e,t)=>m(`text`,{"dominant-baseline":`hanging`,x:I,...e},f(t)),x=m(`text`,{"data-maya":`mark`,"data-key":`v`,...y,"font-size":v,x:I,y:I,"dominant-baseline":`hanging`},f(_)),S=``,C=``,w=I+v+4,T=s[s.length-2];if(c&&T&&T.value){let n=(l-T.value)/Math.abs(T.value),r=new Intl.NumberFormat(t.locale,{style:`percent`,maximumFractionDigits:1,signDisplay:`exceptZero`}).format(n);S+=b({"data-kpi":`delta`,"data-tone":n>0?`good`:n<0?`bad`:null,y:p(w),"font-size":12},e.t(`vs`,r,e.fmt(t.x,a[T.ci]))),w+=16}h&&(S+=b({"data-kpi":`period`,y:p(w),"font-size":11},h)),w+=18;let E=``,D=typeof t.colorBy==`object`&&t.colorBy?t.colorBy.target:null,O=i-I;if(D){let n=r-24,i=Math.min(Math.max(l/D,0),1.2)/1.2,a=new Intl.NumberFormat(t.locale,{style:`percent`,maximumFractionDigits:1});O-=8,E=m(`rect`,{"data-kpi":`track`,x:I,y:O,width:p(n),height:8,rx:4}),x+=m(`rect`,{"data-maya":`mark`,"data-key":`b`,...y,"data-kpi":`fill`,"data-tone":e.tone(l),x:I,y:O,width:p(n*i),height:8,rx:4}),S+=m(`line`,{"data-kpi":`target`,"stroke-width":2,x1:p(I+n/1.2),x2:p(I+n/1.2),y1:O-3,y2:O+11}),S+=b({"data-kpi":`of`,y:O-16,"font-size":11},e.t(`ofTarget`,a.format(l/D),e.fmt(t.y,D))),O-=24}if(a.length>=3&&O-w>=28){let n=s.map(e=>e.value),l=Math.min(...n),u=Math.max(...n)-l||1,d=a.length-1,f=(r-24)/d,h=e=>p(I+e*f),_=e=>p(O-(e-l)/u*(O-w-4)-2),v=``,y=!0;o.forEach(n=>{if(n.value===null)return void(y=!0);v+=`${y?`M`:`L`}${h(n.ci)} ${_(n.value)}`,y=!1,x+=m(`circle`,{"data-maya":`mark`,"data-key":g(``,a[n.ci]),"data-c":n.ci,"data-s":0,"data-x":e.fmt(t.x,a[n.ci]),"data-series":``,"data-y":n.value,"data-f":e.fmt(t.y,n.value),"data-neg":n.value<0,"data-last":n===c,r:3,cx:h(n.ci),cy:_(n.value)})}),x=m(`path`,{"data-maya":`line`,"data-key":g(`l`,``),"data-s":0,pathLength:1,d:v||null})+x,a.forEach((e,t)=>{C+=m(`rect`,{"data-maya":`hit`,"data-c":t,x:p(Math.max(0,I+t*f-f/2)),y:0,width:p(f),height:i,fill:`transparent`})})}return{marks:x,hits:C,labels:S,grid:E}}var he={noun:`KPI`,draw:me},ge=26,_e=12,ve=48,ye=14,be={noun:`Parallel coordinates`,draw(e){let{spec:t,shaped:n,width:r,height:i}=e,a=t.measures,o=new Map;for(let e of t.data){let n=String(e[t.x]);(o.get(n)??o.set(n,[]).get(n)).push(e)}let s=e.agg(t.aggregate),c=n.categories.flatMap((e,r)=>{let i=o.get(e);if(!i||e===`\0other`)return[];let c=a.map(e=>s(i.map(t=>t[e]))),l=t.series===null?0:Math.max(0,n.series.indexOf(String(i[0][t.series])));return n.visible.includes(l)?[{cat:e,ci:r,vals:c,si:l}]:[]}),l=ve,u=Math.max(49,r-ye),[d,h]=[ge,Math.max(27,i-_e)],_=e=>p(a.length<2?l:l+(u-l)*e/(a.length-1)),v=``,y=``,b=a.map((n,r)=>{let i=c.map(e=>e.vals[r]).filter(e=>e!==null),o=A(Math.min(0,...i),Math.max(0,...i),4),[s,l]=o.domain,u=e=>p(h-(e-s)/(l-s||1)*(h-d)),g=_(r);v+=m(`line`,{x1:g,x2:g,y1:p(d),y2:p(h)});for(let t of o.values){let r=u(t);v+=m(`line`,{x1:g-3,x2:g,y1:r,y2:r}),y+=m(`text`,{x:g-6,y:r,"text-anchor":`end`,"dominant-baseline":`middle`,"data-in":!0},f(e.fmt(n,t,o.step)))}return y+=m(`text`,{x:g,y:12,"text-anchor":r===0?`start`:r===a.length-1?`end`:`middle`,"font-weight":600,"data-in":!0},f(t.titles.get(n)??n)),u}),x=``,S=``,C=``;for(let{cat:n,ci:r,vals:i,si:o}of c){let s=e.fmt(t.x,n),c=``,l=!0;i.forEach((i,u)=>{if(i===null){l=!0;return}let[d,f]=[_(u),b[u](i)];c+=`${l?`M`:`L`}${d} ${f}`,l=!1,x+=m(`circle`,{"data-maya":`mark`,"data-key":g(n,a[u]),"data-c":r,"data-s":o%8,"data-x":s,"data-series":t.titles.get(a[u])??a[u],"data-y":i,"data-f":e.fmt(a[u],i),"data-neg":i<0,r:3.5,cx:d,cy:f})}),c&&(S+=m(`path`,{"data-maya":`line`,"data-key":g(`l`,n),"data-c":r,"data-s":o%8,pathLength:1,d:c}),C+=m(`path`,{"data-maya":`hit`,"data-c":r,d:c,fill:`none`,stroke:`transparent`,"stroke-width":16,"stroke-linejoin":`round`}))}return{marks:x+S,hits:C,grid:v,labels:y}}},xe={noun:`Ridgeline`,axes:(e,t)=>[{kind:`band`,field:e.x,domain:t.categories},{kind:`band`,field:e.series??``,domain:t.visible.map(e=>t.series[e])}],draw(e){let{spec:t,shaped:n,plot:r}=e,i=e.x,a=e.y,o=ie(t),s=e=>p(i.at(e)+i.bandwidth/2),c=0;for(let e of n.cells)e.value!==null&&e.value>c&&(c=e.value);c<=0&&(c=1);let l=e=>a.at(e)+a.bandwidth/2+a.step/2,u=Math.min(1.4*a.step,l(0)-r.y),d=``,f=``;n.visible.forEach((r,i)=>{let a=n.series[r],_=l(i),v=e=>p(_-e/c*u),y=n.cells.filter(e=>e.si===r).sort((e,t)=>e.ci-t.ci),b=[[]];for(let i of y){if(i.value===null){b.push([]);continue}b[b.length-1].push(i);let c=n.categories[i.ci],l=o(c,a);f+=m(`circle`,{"data-maya":`mark`,"data-key":g(a,c),"data-c":i.ci,"data-s":r%8,"data-x":e.fmt(t.x,c),"data-series":a,"data-y":i.value,"data-f":e.fmt(t.y,i.value),"data-neg":i.value<0,"data-tone":e.tone(i.value),"data-q":l===null?null:e.q(l),"data-other":c===h,r:3,cx:s(i.ci),cy:v(i.value)})}let x=e=>e.map((e,t)=>`${t?`L`:`M`}${s(e.ci)} ${v(e.value)}`),S=b.filter(e=>e.length>0),C=S.map(e=>`${x(e).join(``)}L${s(e.at(-1).ci)} ${p(_)}L${s(e[0].ci)} ${p(_)}Z`).join(``);C&&(d+=m(`path`,{"data-maya":`area`,"data-ridge":!0,"data-key":g(`a`,a),"data-s":r%8,d:C})),d+=m(`path`,{"data-maya":`line`,"data-key":g(`l`,a),"data-s":r%8,pathLength:1,d:S.map(e=>x(e).join(``)).join(``)||null})});let _=``;return n.categories.forEach((e,t)=>{_+=m(`rect`,{"data-maya":`hit`,"data-c":t,x:p(i.at(t)),y:p(r.y),width:p(i.bandwidth),height:p(r.h),fill:`transparent`})}),{marks:d+f,hits:_,cross:m(`line`,{x1:0,x2:0,y1:p(r.y),y2:p(r.y+r.h)})}}},Se=(e,t)=>[{kind:`band`,field:e.x,domain:t.categories},{kind:`linear`,field:e.y,domain:t.extent}];function Ce(e,t){let{spec:n,shaped:r,plot:i}=e,a=e.x,o=e.y,s=ie(n),c=e=>p(a.at(e)+a.bandwidth/2),l=``,u=``,d=``;for(let i of r.visible){let a=r.series[i],f=r.cells.filter(e=>e.si===i).sort((e,t)=>e.ci-t.ci),_=``,v=!0,y=[[]];for(let t of f){if(t.value===null&&!n.stack?y.push([]):y[y.length-1].push(t),t.value===null){v=!0;continue}_+=`${v?`M`:`L`}${c(t.ci)} ${p(o.of(t.y1))}`,v=!1;let l=r.categories[t.ci],u=s(l,a),f=l===h,b=e.fmt(n.x,l);d+=m(`circle`,{"data-maya":`mark`,"data-key":g(a,l),"data-c":t.ci,"data-s":i%8,"data-x":b,"data-series":a,"data-y":t.value,"data-f":e.fmt(n.y,t.value),"data-neg":t.value<0,"data-tone":e.tone(t.value),"data-q":u===null?null:e.q(u),"data-other":f,r:3,cx:c(t.ci),cy:p(o.of(t.y1))}),n.labels&&e.label(c(t.ci),o.of(t.y1),e.fmt(n.y,t.value),`above`)}if(t){let e=y.filter(e=>e.length>0).map(e=>e.map((e,t)=>`${t?`L`:`M`}${c(e.ci)} ${p(o.of(e.y1))}`).join(``)+[...e].reverse().map(e=>`L${c(e.ci)} ${p(o.of(e.y0))}`).join(``)+`Z`).join(``);e&&(l+=m(`path`,{"data-maya":`area`,"data-key":g(`a`,a),"data-s":i%8,d:e}))}u+=m(`path`,{"data-maya":`line`,"data-key":g(`l`,a),"data-s":i%8,pathLength:1,d:_||null})}let f=``;return r.categories.forEach((e,t)=>{f+=m(`rect`,{"data-maya":`hit`,"data-c":t,x:p(a.at(t)),y:p(i.y),width:p(a.bandwidth),height:p(i.h),fill:`transparent`})}),{marks:l+u+d,hits:f,cross:m(`line`,{x1:0,x2:0,y1:p(i.y),y2:p(i.y+i.h)})}}var we={noun:`Line`,axes:Se,draw:e=>Ce(e,!1)},Te={noun:`Area`,axes:Se,draw:e=>Ce(e,!0)},Ee=24;function De(e,t){let n=[],r=e.xDomain,i=e.yDomain,a=e.window;return e.data.forEach((o,s)=>{let c=o[e.x],l=o[e.y];if(typeof c!=`number`||typeof l!=`number`||r&&(c<r[0]||c>r[1])||i&&(l<i[0]||l>i[1])||a&&(c<a[0]||c>a[1]||l<a[2]||l>a[3]))return;let u=t.series.indexOf(e.series===null?``:String(o[e.series]));if(!t.visible.includes(u))return;let d=e.size===null?null:o[e.size],f=e.name===null?null:o[e.name];n.push({i:s,x:c,y:l,sz:typeof d==`number`?d:null,si:u,name:f==null?null:String(f),row:o})}),n}var Oe={noun:`Scatter`,axes(e,t){let n=1/0,r=-1/0,i=1/0,a=-1/0;for(let o of De(e,t))n=Math.min(n,o.x),r=Math.max(r,o.x),i=Math.min(i,o.y),a=Math.max(a,o.y);n>r&&(n=r=0,i=a=0);let o=e.size===null?0:(r-n)*.06,s=e.size===null?0:(a-i)*.06,c=(e,t)=>e>=0?Math.max(0,e-t):e-t;return[n,r,i,a]=[c(n,o),r+o,c(i,s),a+s],[{kind:`linear`,field:e.x,domain:e.xDomain??[n,r]},{kind:`linear`,field:e.y,domain:e.yDomain??[i,a]}]},draw(e){let{spec:t,shaped:n,plot:r}=e,i=e.x,a=e.y,o=De(t,n),s=0;for(let e of o)e.sz!==null&&(s=Math.max(s,Math.abs(e.sz)));let c=Math.min(r.w,r.h)/16,l=typeof t.colorBy==`string`&&t.colorBy!==`sign`?t.colorBy:null,u=new Map,d=o.map(r=>{let o=r.sz!==null&&s>0?2+Math.sqrt(Math.abs(r.sz)/s)*c:4,d=r.i;if(r.name!==null){let e=(u.get(r.name)??0)+1;u.set(r.name,e),d=e>1?`${r.name}#${e}`:r.name}let f=n.series[r.si],p=e.fmt(t.x,r.x),m=e.fmt(t.y,r.y),h=l?r.row[l]:null;return{p:r,rad:o,d:{"data-key":g(f,d),"data-c":r.i,"data-s":r.si%8,"data-x":r.name??p,"data-series":f,"data-y":r.y,"data-f":r.name===null&&r.sz===null?m:[p,m,r.sz===null?null:e.fmt(t.size,r.sz)].filter(e=>e!==null).join(` · `),"data-neg":r.y<0,"data-tone":e.tone(r.y),"data-q":typeof h==`number`?e.q(h):null},cx:i.of(r.x),cy:a.of(r.y)}});d.sort((e,t)=>t.rad-e.rad);let f=``,h=``;for(let{p:n,rad:r,d:i,cx:a,cy:o}of d)f+=m(`circle`,{"data-maya":`mark`,...i,r:p(r),cx:p(a),cy:p(o)}),r*2<Ee&&(h+=m(`circle`,{"data-maya":`hit`,...i,r:p(Math.max(r,12)),cx:p(a),cy:p(o),fill:`transparent`})),t.labels&&e.label(a,o-r,e.fmt(t.y,n.y),`above`);return{marks:f,hits:h}}},L=30,ke=26,R=8,Ae=e=>typeof e==`number`?e:null,je={noun:`Table`,draw(e){let{spec:t,width:n,height:r}=e,i=t.measures,a=e=>t.titles.get(e)??e,o=e.agg(t.aggregate),s=new Map;for(let e of t.data){let n=String(e[t.x]),r=s.get(n)??s.set(n,i.map(()=>[])).get(n);i.forEach((t,n)=>r[n].push(Ae(e[t])))}let c=[...s].map(([e,t])=>({name:e,vals:t.map(e=>o(e))})),l=(e,t)=>e===null?1/0:e*t,u=(e,t)=>(n,r)=>l(n.vals[e],t)-l(r.vals[e],t)||0;t.limit!==null&&c.length>t.limit&&(c=c.sort(u(0,-1)).slice(0,t.limit));let d=t.sortBy&&(t.sortBy[0]===t.x||i.includes(t.sortBy[0]))?t.sortBy:null;if(d){let e=d[1]===`asc`?1:-1,n=i.indexOf(d[0]);if(n<0){let n=new Intl.Collator(t.locale,{numeric:!0});c.sort((t,r)=>e*n.compare(t.name,r.name))}else c.sort((t,r)=>{let[i,a]=[t.vals[n],r.vals[n]];return i===null||a===null?(i===null)-+(a===null):e*(i-a)})}else t.sort&&c.sort(u(0,t.sort===`asc`?1:-1));let h=Math.max(80,Math.min(n*.34,180)),v=(n-h)/i.length,y=e=>h+e*v,b=i.map((e,t)=>Math.max(0,...c.map(e=>Math.abs(e.vals[t]??0)))),x=(e,t)=>{let n=Math.max(1,Math.floor((t-R)/7));return e.length>n?e.slice(0,n-1)+`…`:e},S=``,C=``;[t.x,...i].forEach((t,n)=>{let r=n?y(n-1):0,i=n?v:h,o=d?.[0]===t?d[1]:null,s=x(a(t),i-(o?14:0))+(o?o===`asc`?` ▲`:` ▼`:``);C+=m(`g`,{"data-maya":`sort`,"data-field":t,"data-sort":o,role:`button`,tabindex:0,"aria-label":o?e.t(`sortedBy`,a(t),e.t(o===`asc`?`ascending`:`descending`)):a(t)},m(`rect`,{x:p(r),y:0,width:p(i),height:L,fill:`transparent`})+m(`text`,{"data-th":!0,x:p(n?r+i-R:R),y:L/2,"text-anchor":n?`end`:`start`,"dominant-baseline":`middle`},f(s)))}),S+=m(`line`,{x1:0,x2:n,y1:L,y2:L});let w=Math.max(0,Math.floor((r-L)/ke)),T=``;return c.slice(0,w).forEach((n,r)=>{let o=L+r*ke,s=e.fmt(t.x,n.name);T+=m(`text`,{"data-key":g(`t`,n.name),x:R,y:o+ke/2-2,"dominant-baseline":`middle`,"data-td":`label`},f(x(s,h))),i.forEach((t,c)=>{let l=n.vals[c],u=y(c)+v-R,d=l===null?`–`:e.fmt(t,l);if(T+=m(`text`,{"data-key":g(`v`,t,n.name),x:p(u),y:o+ke/2-2,"text-anchor":`end`,"dominant-baseline":`middle`},f(d)),l===null)return;let h=b[c]?(v-16)*Math.abs(l)/b[c]:0,x={"data-key":g(t,n.name),"data-c":r,"data-s":i.length>1?c%8:0,"data-x":s,"data-series":a(t),"data-f":d,"data-y":l,"data-neg":l<0},S=o+ke-7;T+=m(`rect`,{"data-maya":`mark`,...x,x:p(y(c)+R),y:S,width:p(h),height:4}),C+=_(x,y(c)+R,S,h,4)})}),{marks:T,hits:C,labels:``,grid:S}}},Me=`--maya-fg:#1f2328;--maya-fg-muted:#656d76;--maya-bg:#fff`,Ne=`--maya-fg:#e6edf3;--maya-fg-muted:#9198a1;--maya-bg:#0d1117`,z=(e,t=0)=>Array.from({length:e},(e,n)=>n+t),Pe=z(8).map(e=>`[data-s="${e}"]{--c:var(--maya-series-${e+1})}`).join(``),Fe=z(10).map(e=>`[data-q="${e}"]{--q:${Math.round(20+e*80/9)}%}`).join(``),Ie=z(8).map(e=>`.maya:has([data-s="${e}"]:hover) [data-maya=mark]:not([data-s="${e}"]){opacity:.3}`).join(``),Le=z(3,2).map(e=>`.maya-ctl[data-n="${e}"]::before{width:calc((100% - 4px)/${e})}`).join(``)+z(3,1).map(e=>`.maya-ctl[data-i="${e}"]::before{transform:translateX(${e*100}%)}`).join(``),Re=`border:0;background:none;padding:0;font:inherit;color:var(--maya-fg-muted);cursor:pointer`,ze=`:host,.maya-root{--maya-font:system-ui,sans-serif;--maya-font-size:12px;--maya-fg:light-dark(#1f2328,#e6edf3);--maya-fg-muted:light-dark(#656d76,#9198a1);--maya-grid:color-mix(in oklab,var(--maya-fg) 12%,transparent);--maya-bg:light-dark(#fff,#0d1117);--maya-accent:oklch(.6 .17 255);--maya-radius:2px;--maya-tooltip-bg:var(--maya-fg);--maya-tooltip-fg:var(--maya-bg);--maya-focus:var(--maya-accent);--maya-good:light-dark(#1a7f37,#3fb950);--maya-bad:light-dark(#cf222e,#f85149);--maya-series-1:var(--maya-accent);--maya-series-2:oklch(.66 .16 50);--maya-series-3:oklch(.62 .15 160);--maya-series-4:oklch(.66 .17 330);--maya-series-5:oklch(.62 .14 90);--maya-series-6:oklch(.62 .12 205);--maya-series-7:oklch(.64 .19 22);--maya-series-8:oklch(.62 .16 295);color-scheme:light dark}@supports not (color:light-dark(#000,#fff)){:host,.maya-root{${Me}}@media (prefers-color-scheme:dark){:host,.maya-root{${Ne}}}}:host{display:block;position:relative;container-type:inline-size;min-height:200px}.maya{display:flex;flex-direction:column;height:100%;font:var(--maya-font-size) var(--maya-font);font-variant-numeric:tabular-nums;color:var(--maya-fg)}.maya-title{font-weight:600;font-size:14px}.maya-legend,.maya-crumbs{color:var(--maya-fg-muted);display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;margin:0 0 8px}.maya-crumbs{min-height:1.25em;line-height:1.25}.maya-legend button,.maya-crumbs button,.maya-reset{display:inline-flex;align-items:center;gap:6px;${Re};border-radius:4px}.maya-legend [aria-pressed=false]{opacity:.4}:is(.maya-legend,.maya-crumbs) button:focus-visible,.maya-reset:focus-visible,.maya-ctl :focus-visible{outline:2px solid var(--maya-focus);outline-offset:2px}i{width:10px;height:10px;border-radius:3px;background:var(--c)}[data-maya=ramp]{display:flex;align-items:center;gap:6px}[data-maya=ramp] i{width:80px;height:8px;background:linear-gradient(90deg,color-mix(in oklab,var(--maya-accent) 20%,var(--b)),var(--maya-accent))}[data-q],[data-maya=ramp] i{--b:light-dark(var(--maya-bg),color-mix(in oklab,var(--maya-accent) 15%,var(--maya-bg)))}.maya-legend span{display:inline-flex;align-items:center;gap:6px}.maya-reset{position:absolute;top:4px;right:4px;border:1px solid var(--maya-grid);border-radius:99px;padding:2px 10px;background:var(--maya-bg)}.maya-ctl{position:relative;display:inline-grid;grid-auto-flow:column;grid-auto-columns:1fr;align-self:flex-start;margin:0 0 8px;padding:2px;border-radius:8px;background:var(--maya-grid)}.maya-ctl::before{content:'';position:absolute;inset:2px auto 2px 2px;width:calc(100% - 4px);border-radius:6px;background:var(--maya-bg);transition:transform .2s}`+Le+`.maya-ctl [role=radio]{${Re};position:relative;padding:4px 12px;border-radius:6px}.maya-ctl [aria-checked=true]{color:var(--maya-fg);font-weight:600}.maya-err{margin:0;padding:8px;color:var(--maya-bad);white-space:pre-wrap;font:12px monospace}.maya-box{flex:1;min-height:0;position:relative}.maya-box svg{display:block;width:100%;height:100%;overflow:visible}.maya-svg{direction:ltr;font:var(--maya-font-size) var(--maya-font);font-variant-numeric:tabular-nums}.maya-svg text{fill:var(--maya-fg-muted);unicode-bidi:plaintext}[data-maya=grid] *{stroke:var(--maya-grid);shape-rendering:crispEdges}`+Pe+`[data-other],[data-total]{--c:var(--maya-fg-muted)}[data-tone=good]{--c:var(--maya-good)}[data-tone=bad]{--c:var(--maya-bad)}[data-q]{--c:color-mix(in oklab,var(--maya-accent) var(--q),var(--b))}`+Fe+`[data-maya=mark]{fill:var(--c,var(--maya-series-1));rx:var(--maya-radius);transform-box:fill-box;transform-origin:0 0}[data-dir=h] [data-neg]{transform-origin:100% 0}[data-maya=mark],[data-maya=link]{transition:opacity .2s}[data-maya=mark][data-active]{fill:color-mix(in oklab,var(--c,var(--maya-series-1)),var(--maya-fg) 18%)}:where([data-xd] circle[data-maya=mark]){stroke:var(--maya-bg);stroke-width:1}[data-maya=line]~circle[data-maya=mark]:not([data-active],[data-selected],[data-last]){fill-opacity:0}[data-maya=line]{fill:none;stroke:var(--c);stroke-width:2;stroke-linejoin:round}[data-maya=area]{fill:color-mix(in oklab,var(--c) 18%,transparent);stroke:none}[data-maya=link]{fill:var(--c);opacity:.3}[data-maya=link][data-active]{opacity:.6}line[data-maya=link]{stroke:var(--c,var(--maya-fg-muted));opacity:1}text[data-maya=mark]{fill:var(--maya-fg);font-weight:600}[data-kpi=track]{fill:var(--maya-grid)}[data-kpi=target]{stroke:var(--maya-fg)}[data-maya=labels] [data-tone]{fill:var(--c)}[data-maya=labels] :is([data-kpi=period],[data-kpi=of]){fill:var(--maya-fg-muted)}[data-line] i{height:2px;border-radius:1px}[data-ridge]{fill:color-mix(in oklab,var(--c) 40%,var(--maya-bg))}[data-maya=grid] circle{fill:none;shape-rendering:auto}[data-maya=labels] [data-ring]{fill:var(--maya-fg-muted)}[data-maya=marks] text{fill:var(--maya-fg)}[data-maya=sort]{cursor:pointer}[data-maya=sort] rect{fill:transparent}[data-maya=sort] text{font-weight:600}[data-maya=sort]:focus-visible{outline:2px solid var(--maya-focus)}[data-maya=line]{transition:opacity .2s}[data-maya=marks]:has(path[data-active]) path[data-maya=line]:not([data-active]){opacity:.25}[data-depth]{stroke:var(--maya-bg);stroke-width:1}[data-maya=marks]:has([data-active]) [data-maya=mark]:not([data-active],text){opacity:.55}[data-maya=marks]:has([data-selected]) [data-maya=mark]:not([data-selected]){opacity:.35}[data-selected]{stroke:var(--maya-fg);stroke-width:2}`+Ie+`[data-maya=labels],[data-maya=cross]{pointer-events:none}[data-maya=cross]{opacity:0}[data-maya=labels] text{fill:var(--maya-fg);paint-order:stroke;stroke:var(--maya-bg);stroke-width:3;stroke-linejoin:round}[data-maya=labels] [data-in]{stroke:none}[data-maya=cross] line{stroke:var(--maya-fg-muted);stroke-dasharray:3 3}[data-maya=brush]{fill:var(--maya-accent);fill-opacity:.12;stroke:var(--maya-accent);vector-effect:non-scaling-stroke;pointer-events:none}.maya-svg:focus-visible{outline:2px solid var(--maya-focus)}.maya-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.maya-probe{position:absolute;width:0;height:0;pointer-events:none;anchor-name:--maya-probe}.maya-tip{margin:0;inset:auto;border:0;padding:6px 8px;background:var(--maya-tooltip-bg);color:var(--maya-tooltip-fg);border-radius:6px;box-shadow:0 2px 8px #0003;font:var(--maya-font-size) var(--maya-font);pointer-events:none}@supports (anchor-name:--x){.maya-tip{position-anchor:--maya-probe;position-area:block-start;position-try-fallbacks:flip-block,block-start span-inline-start,block-start span-inline-end;margin:8px}}.maya-tip{opacity:0;transition:opacity .12s}.maya-tip.maya-open{opacity:1}.maya-tip b{display:block}.maya-tip div{display:flex;align-items:center;gap:6px}.maya-tip i{outline:1px solid}.maya-tip [data-on]{font-weight:600}@media (pointer:coarse){:is(.maya-legend,.maya-crumbs) button,.maya-ctl [role=radio],.maya-reset,.maya-crumbs{min-height:24px}}@container (max-width:320px){.maya-legend{display:none}.maya-title{font-size:12px}}@media (prefers-contrast:more){:host,.maya-root{--maya-fg-muted:var(--maya-fg);--maya-grid:color-mix(in oklab,var(--maya-fg) 40%,transparent)}}@media (forced-colors:active){.maya-svg,i{forced-color-adjust:none}[data-maya=mark]{stroke:CanvasText;stroke-width:1}[data-tone=bad]{stroke-dasharray:4 2}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}`,Be=class extends Error{code;path;constructor(e,t,n){super(n),this.name=`MayaSpecError`,this.code=e,this.path=t}},B=e=>e.split(` `),Ve=Object.fromEntries([...B(`$schema x y2 series size name title description locale currency`).map(e=>[e,`string`]),...B(`stack horizontal labels legend tooltip drill zoom grid xAxis yAxis table animate`).map(e=>[e,`boolean`])]),He=[...B(`type data y path totals aggregate sort limit format titles text yDomain xDomain select`),...B(`colors colorBy theme`),...Object.keys(Ve)],Ue=[`bar`,`line`,`area`,`dumbbell`],We=[`treemap`,`sunburst`,`sankey`,`chord`],Ge=[`parallel`,`table`],V=`bar,line,area`,Ke=`treemap,sunburst,sankey,chord`,qe=Object.fromEntries(B(`horizontal:bar,dumbbell y2:bar size:scatter name:scatter,beeswarm path:${V},dumbbell,${Ke} totals:waterfall series:${V},scatter,heatmap,dumbbell,ridgeline,beeswarm,parallel,marimekko,radial sort:${V},heatmap,dumbbell,table,radial,waffle limit:${V},heatmap,dumbbell,table,waffle,radial stack:bar,area colorBy:${V},waterfall,scatter,dumbbell,kpi,treemap,sunburst,hexmap xDomain:scatter drill:${V},dumbbell,${Ke} select:${V},waterfall,scatter,heatmap,dumbbell,beeswarm,parallel,table,marimekko,waffle,radial,treemap,sunburst,hexmap zoom:line,area,scatter`).map(e=>e.split(`:`)).map(([e,t])=>[e,t.split(`,`)])),Je=B(`sum mean count min max`),Ye=B(`auto integer decimal compact percent currency date month year time datetime`),Xe=B(`dateStyle timeStyle weekday era year month day dayPeriod hour minute second fractionalSecondDigits timeZoneName timeZone hour12 hourCycle calendar`),Ze=e=>Xe.some(t=>Object.hasOwn(e,t)),Qe=[...B(`font fontSize fg fgMuted grid bg accent radius tooltipBg tooltipFg focus good bad`),...[1,2,3,4,5,6,7,8].map(e=>`series`+e)],$e={x:`the category axis`,y:`the plotted numbers`,y2:`the right-axis line`,series:`splitting rows into series`,size:`bubble area`,name:`point identity`,path:`the hierarchy levels`,colorBy:`colouring marks by value`,format:`formatting that field`,titles:`naming that field`},et=`Use horizontal: true to put categories on the left axis.`,tt=`Size comes from the element's CSS box, or render(spec, { width, height }).`,nt=`Pie and donut charts are not supported: use "bar" or "treemap" to compare parts.`,rt=`Use type: "hexmap" (import "mayacharts/geo").`,it=`Example: { type: "bar", data: [{ month: "Jan", revenue: 10 }], x: "month", y: "revenue" }`,at={label:`Use titles: { <field>: "Name" } for display names, or labels: true for values on marks.`,xLabel:`Use titles: { <x field>: "Name" }. titles is keyed by field and also names tooltips and table headers.`,yLabel:`Use titles: { <y field>: "Name" }. titles is keyed by field and also names tooltips, legend and table headers.`,yFormat:`Use format: "compact" (applies to every y), or format: { <field>: "currency" }.`,dataKey:`Use y: "<field>" for values and x: "<field>" for categories.`,indexAxis:et,orientation:et,width:tt,height:tt,color:`Use colors: [...] for the palette, or colorBy: "sign" | { target: n } | "<field>".`,groupBy:`Use series: "<field>".`,formatter:`Functions are not supported (the spec is JSON). Use format presets or Intl options.`,"size:number":`spec.size names a field for bubble area. For chart size use CSS, or render(spec, { width, height }).`,"select:boolean":`Use select: true or "multi"; omit it to disable selection.`},ot={column:`Use type: "bar".`,barh:`Use type: "bar" with horizontal: true.`,bubble:`Use type: "scatter" with size: "<field>".`,choropleth:rt,map:rt,pie:nt,donut:nt},st=B(`rgb rgba hsl hsla oklch oklab lab lch color color-mix light-dark var calc`),ct=String.raw`\s*(?:"[\w\s.\-]*"|'[\w\s.\-]*'|[\w\-]+(?:\s+[\w\-]+)*)\s*`,lt=RegExp(`^${ct}(?:,${ct})*$`),ut=(e,t)=>Object.hasOwn(e,t)?e[t]:void 0,H=e=>typeof e==`object`&&!!e&&!Array.isArray(e),U=(e,t=0)=>Array.isArray(e)&&e.length>=t&&e.every(e=>typeof e==`string`),W=e=>e===null?`null`:Array.isArray(e)?`array`:typeof e,G=e=>{let t=typeof e==`string`||H(e)||Array.isArray(e)?JSON.stringify(e):String(e);return t.length>60?t.slice(0,59)+`…`:t},K=(e,t)=>{let n=e.toLowerCase(),r=``,i=40;for(let e of t){let t=e.toLowerCase(),a=Math.abs(n.length-t.length)+[...t].filter(e=>!n.includes(e)).length,o=0;for(;o<9&&n[o]!==void 0&&n[o]===t[o];)o++;a<4&&a*10-o<i&&([i,r]=[a*10-o,e])}return r&&`Did you mean "${r}"?`},q=(e,t,n,...r)=>{throw new Be(e,t,`mayacharts: ${n}\n${[...r,`-> https://bbekshr.github.io/mayacharts/errors.html#${e}`].filter(Boolean).map(e=>` `+e).join(`
|
|
3
|
-
`)}`)},J=(e,t,n)=>q(`invalid-option`,e,`spec.${e} must be ${n}, received ${G(t)}.`,ut(at,`${e}:${W(t)}`)??``),dt=(e,t,n)=>{let r=n?lt.test(t):/^[#\w\s.,%()+\-\/]*$/.test(t)&&[...t.matchAll(/([\w-]*)\s*\(/g)].every(e=>st.includes(e[1].toLowerCase()));(!t||!r)&&q(`unsafe-css-value`,e,`spec.${e} = ${G(t)} is not a safe CSS value.`,`Allowed: colours, lengths, numbers and ${st.join(`() `)}(); fonts are family names.`,`Not allowed: url(), image-set(), other functions, ; { } < > \\ and (outside fonts) quotes.`)},Y=(e,t,...n)=>q(`invalid-format`,e,t,...n),ft=(e,t,n)=>{if(typeof t==`string`){Ye.includes(t)||Y(e,`spec.${e} = ${G(t)} is not a format preset.`,`Presets: ${Ye.join(`, `)}. Or per field: { <field>: preset or Intl options }.`,K(t,Ye));return}H(t)||Y(e,`spec.${e} must be a preset or Intl options, received ${G(t)}.`);let{prefix:r,suffix:i,...a}=t;for(let[t,n]of[[`prefix`,r],[`suffix`,i]])n!==void 0&&typeof n!=`string`&&Y(`${e}.${t}`,`spec.${e}.${t} must be a string, received ${G(n)}.`);let o=Ze(a);try{o?new Intl.DateTimeFormat(n,a):new Intl.NumberFormat(n,a)}catch(n){Y(e,`spec.${e} = ${G(t)} is not valid ${o?`Intl.DateTimeFormat`:`Intl.NumberFormat`} options.`,n instanceof Error?n.message:String(n))}},pt=[[`y`,`a field name or a non-empty array of field names`,e=>typeof e==`string`||U(e,1)],[`path`,`a non-empty array of field names`,e=>U(e,1)],[`totals`,`an array of x values (strings)`,e=>U(e)],[`aggregate`,`one of ${Je.join(`, `)}`,e=>Je.includes(e)],[`sort`,`"asc" or "desc"`,e=>e===`asc`||e===`desc`],[`limit`,`a positive integer`,e=>Number.isInteger(e)&&e>0],[`select`,`true or "multi"`,e=>e===!0||e===`multi`],[`colorBy`,`"sign", { target: number } or a numeric field name`,e=>typeof e==`string`&&!!e||H(e)&&Object.keys(e).join()===`target`&&Number.isFinite(e.target)],[`titles`,`an object of strings keyed by field`,e=>H(e)&&Object.values(e).every(e=>typeof e==`string`)]];function mt(e){H(e)||q(`spec-not-object`,`spec`,`spec must be a plain object, received ${W(e)}.`,`Received: ${G(e)}`);let t=e;for(let e of Object.keys(t))He.includes(e)||q(`unknown-option`,e,`spec.${e} is not a known option.`,ut(at,e)??K(e,He),`Known options: ${He.join(`, `)}.`);let n=t.type;n===void 0&&q(`missing-field`,`type`,`spec.type is required but missing.`,`Required fields: type, data, x, y.`,it);let r=[...a,...c()],s=typeof n==`string`?n:void 0;if(s===void 0||!r.includes(s)){let e=s===void 0?void 0:ut(o,s);e&&q(`unknown-type`,`type`,`spec.type = "${n}" needs the "${e}" module, which is not loaded.`,`Add: import "mayacharts/${e}"`),q(`unknown-type`,`type`,`spec.type = ${G(n)} is not a chart type.`,`Valid types: ${r.join(`, `)}.`,s===void 0?``:ut(ot,s)??K(s,[...r,...Object.keys(o)]))}let u=n,d=We.includes(u),f=d?`path`:`x`,p=e.path;u===`sankey`&&Array.isArray(p)&&p.length<2&&q(`invalid-option`,`path`,`spec.path needs at least two levels for a sankey.`,`Example: path: ["region", "family"]`),u===`chord`&&Array.isArray(p)&&p.length!==2&&q(`invalid-option`,`path`,`spec.path needs exactly two levels for a chord: from and to.`,`Example: path: ["region", "family"]`);let m=e=>q(`missing-field`,e,`spec.${e} is required but missing.`,`Required fields: type, data, ${f}, y.`,d?`Example: { type: "${u}", data: [{ region: "N", state: "NY", sales: 10 }], path: ["region", "state"], y: "sales" }`:it);t.data===void 0&&m(`data`),Array.isArray(t.data)||q(`data-not-array`,`data`,`spec.data must be an array of rows, received ${W(t.data)}.`);let h=t.data;h.forEach((e,t)=>{H(e)||q(`row-not-object`,`data[${t}]`,`spec.data[${t}] must be an object, received ${W(e)}.`,`Received: ${G(e)}`)}),t[f]===void 0&&u!==`kpi`&&u!==`beeswarm`&&!(f===`x`&&Ue.includes(u)&&t.path!==void 0)&&m(f),t.y===void 0&&m(`y`),(u===`dumbbell`||u===`ridgeline`||u===`marimekko`)&&t.series===void 0&&m(`series`),u===`parallel`&&!(Array.isArray(t.y)&&t.y.length>=2)&&q(`invalid-option`,`y`,`spec.y on "parallel" needs an array of at least 2 measures, one axis each.`,`Example: y: ["sales", "units", "price"]`);for(let e in Ve)t[e]!==void 0&&typeof t[e]!==Ve[e]&&J(e,t[e],`a ${Ve[e]}`);for(let[e,n,r]of pt)t[e]!==void 0&&!r(t[e])&&J(e,t[e],n);let{y:g,path:_,select:v,colors:y,colorBy:b,theme:x,text:S}=t;if(S!==void 0){H(S)||J(`text`,S,`an object of strings`);for(let[e,t]of Object.entries(S))Object.hasOwn(l,e)||q(`invalid-option`,`text.${e}`,`spec.text.${e} is not a text key.`,K(e,Object.keys(l)),`Text keys: ${Object.keys(l).join(`, `)}.`),typeof t!=`string`&&J(`text.${e}`,t,`a string`)}for(let e of[`yDomain`,`xDomain`]){let n=t[e];n!==void 0&&!(Array.isArray(n)&&n.length===2&&Number.isFinite(n[0])&&Number.isFinite(n[1])&&(e===`yDomain`?n[0]!==n[1]:n[0]<n[1]))&&q(`invalid-domain`,e,`spec.${e} = ${G(n)} is not a valid domain.`,e===`yDomain`?`Expected [min, max] (or [max, min] to reverse) with two different finite numbers.`:`Expected [min, max] with finite numbers and min < max, e.g. [0, 100].`)}let C=`en-US`;if(typeof t.locale==`string`){let e=!1;try{e=Intl.NumberFormat.supportedLocalesOf(t.locale).length>0}catch{}e||Y(`locale`,`spec.locale = ${G(t.locale)} is not a locale this runtime supports.`,`Use a BCP 47 tag such as "de-DE". Node built with small ICU supports English only.`),C=t.locale}if(typeof t.currency==`string`)try{new Intl.NumberFormat(C,{style:`currency`,currency:t.currency})}catch{Y(`currency`,`spec.currency = ${G(t.currency)} is not an ISO 4217 currency code.`,`Use a three-letter code such as "USD" or "EUR".`)}if(typeof t.format==`string`)ft(`format`,t.format,C);else if(t.format!==void 0){H(t.format)||J(`format`,t.format,`a preset or an object keyed by field`);for(let[e,n]of Object.entries(t.format))ft(`format.${e}`,n,C)}if(y!==void 0){let e=Array.isArray(y)?y.map((e,t)=>[`[${t}]`,e]):H(y)?Object.entries(y).map(([e,t])=>[`.${e}`,t]):null;(!e||!e.every(([,e])=>typeof e==`string`))&&J(`colors`,y,`an array of colours, or an object of colours by series value`),e.length>8&&q(`invalid-option`,`colors`,`spec.colors has ${e.length} colours; the palette has 8 slots.`,`Pass at most 8. Series 9 and later reuse slots in order.`);for(let[t,n]of e)dt(`colors${t}`,n,!1)}if(x!==void 0){H(x)&&Object.values(x).every(e=>typeof e==`string`)||J(`theme`,x,`an object of string values`);for(let e of Object.keys(x))Qe.includes(e)||q(`invalid-theme`,`theme.${e}`,`spec.theme.${e} is not a theme token.`,`Valid tokens: ${Qe.join(`, `)}.`,K(e,Qe));for(let[e,t]of Object.entries(x))dt(`theme.${e}`,t,e===`font`)}t.stack===!0&&u===`line`&&q(`stack-unsupported`,`stack`,`spec.stack is not supported with spec.type = "line".`,`Use type "area" (or "bar") to stack series.`);for(let e in qe)t[e]!==void 0&&t[e]!==!1&&!qe[e].includes(u)&&q(`option-unsupported`,e,`spec.${e} is not supported with spec.type = "${u}".`,`spec.${e} works with: ${qe[e].join(`, `)}.`);let w=Ue.includes(u),T=[[b!==void 0&&t.series!==void 0&&u!==`dumbbell`,`colorBy`,`spec.colorBy cannot be combined with spec.series.`,`Series already set the colours; remove one of them.`],[t.yDomain!==void 0&&Array.isArray(g),`yDomain`,`spec.yDomain cannot be combined with a y array.`,`Each measure needs its own domain; use a single y or remove yDomain.`],[t.drill===!0&&v!==void 0,`select`,`spec.select cannot be combined with spec.drill.`,`A click either drills or selects; choose one.`],[w&&_!==void 0&&t.x!==void 0,`x`,`spec.x cannot be combined with spec.path.`,`With path, the current drill level is the category; remove x.`],[t.y2!==void 0&&t.horizontal===!0,`y2`,`spec.y2 cannot be combined with spec.horizontal.`,`The y2 line needs a right value axis; draw vertical bars.`],[u===`kpi`&&b!==void 0&&!H(b),`colorBy`,`spec.colorBy on "kpi" must be { target: number }.`,`A kpi compares its headline with one target, drawn as a bullet bar.`],[w&&t.drill===!0&&_===void 0,`drill`,`spec.drill on "${u}" needs spec.path.`,`Replace x with path: ["region", "state"] (outer to inner).`]];for(let[e,t,n,r]of T)e&&q(`option-unsupported`,t,n,r);if(h.length){let e=[...new Set(h.flatMap(e=>Object.keys(e)))],n=(t,n,r,i)=>q(`unknown-field`,t,n,`Fields found: ${e.slice(0,20).join(`, `)}.`,K(r,e),i),r=typeof g==`string`?[g]:g,i=(e,t)=>t.map((t,n)=>[`${e}[${n}]`,t]),a=[[`x`,t.x],...typeof g==`string`?[[`y`,g]]:i(`y`,r),[`series`,t.series],[`y2`,t.y2],[`size`,t.size],[`name`,t.name],...i(`path`,_??[]),[`colorBy`,b===`sign`?void 0:b]];for(let[t,r]of a){if(typeof r!=`string`||e.includes(r))continue;let i=t.replace(/\[.*/,``);n(t,`spec.${t} = ${G(r)} is not a field in spec.data.`,r,`spec.${i} names the field used for ${$e[i]}.`)}for(let r of[`format`,`titles`])if(H(t[r]))for(let i of Object.keys(t[r]))e.includes(i)||n(`${r}.${i}`,`spec.${r} key "${i}" is not a field in spec.data.`,i,`spec.${r} keys name fields, for ${$e[r]}.`);b===`sign`&&e.includes(`sign`)&&q(`invalid-option`,`colorBy`,`spec.colorBy = "sign" colours by the sign of y, but spec.data also has a field named "sign".`,`Rename that field (e.g. data.map(({ sign, ...r }) => ({ ...r, signValue: sign }))) to colour by it.`);let o=(e,t)=>h.forEach((n,r)=>t(n[e],`data[${r}].${e}`)),s=(e,t,n)=>o(e,(r,i)=>{r==null||typeof r==`number`&&Number.isFinite(r)||q(t,i,`spec.${i} is ${G(r)} (a ${W(r)}), but spec.${n} requires numbers.`,typeof r==`string`&&r.trim()&&Number.isFinite(Number(r))?`Convert first: data.map(r => ({ ...r, ${e}: Number(r.${e}) }))`:`Use null for a gap in the data.`)});for(let e of r)s(e,`non-numeric-y`,`y`);if(typeof t.size==`string`&&s(t.size,`non-numeric-field`,`size`),typeof t.y2==`string`&&s(t.y2,`non-numeric-field`,`y2`),u===`dumbbell`&&typeof t.series==`string`){let e=new Set(h.map(e=>String(e[t.series]))).size;e!==2&&q(`invalid-option`,`series`,`spec.series on "dumbbell" needs exactly 2 values, found ${e}.`,`The first value seen is the start of each bar, the second the end, e.g. last year and this year.`)}if(u===`scatter`&&typeof t.x==`string`&&s(t.x,`non-numeric-field`,`x`),typeof b==`string`&&b!==`sign`&&s(b,`non-numeric-field`,`colorBy`),d)for(let e of r)o(e,(t,n)=>{typeof t==`number`&&t<=0&&q(`non-positive-value`,n,`spec.${n} is ${t}, but ${u} sizes must be positive.`,`Filter first: data.filter(r => r.${e} > 0), or chart the signed values with "bar".`)})}i.get(u)?.check?.(e,q)}function ht(e){if(e===void 0)return;H(e)||q(`invalid-option`,`options`,`options must be a plain object, received ${W(e)}.`);let t=e,n=(e,t,n)=>q(`unknown-option`,`${e}.${t}`,`${e}.${t} is not a known render option.`,K(t,n),`Known options: ${n.join(`, `)}.`),r=B(`width height view selected nonce`);for(let e of Object.keys(t))r.includes(e)||n(`options`,e,r);let i=(e,t,n)=>q(`invalid-option`,`options.${e}`,`options.${e} must be ${n}, received ${G(t)}.`);for(let e of[`width`,`height`]){let n=t[e];n!==void 0&&!(typeof n==`number`&&Number.isFinite(n)&&n>0)&&q(`invalid-size`,`options.${e}`,`options.${e} = ${G(n)} is not a valid size.`,`Size must be a finite number greater than 0.`)}let{view:a,selected:o,nonce:s}=t;if(a!==void 0){H(a)||i(`view`,a,`an object`);let e=B(`measure drill window hidden sortBy`);for(let t of Object.keys(a))e.includes(t)||n(`options.view`,t,e);let{measure:t,drill:r,window:o,hidden:s,sortBy:c}=a;c!==void 0&&(!Array.isArray(c)||c.length!==2||typeof c[0]!=`string`||c[1]!==`asc`&&c[1]!==`desc`)&&i(`view.sortBy`,c,`[field, "asc" | "desc"]`),t!==void 0&&!(Number.isInteger(t)&&t>=0)&&i(`view.measure`,t,`an index (integer >= 0)`),r!==void 0&&!U(r)&&i(`view.drill`,r,`an array of strings`),s!==void 0&&!U(s)&&i(`view.hidden`,s,`an array of strings`),o!==void 0&&(!Array.isArray(o)||o.length!==2&&o.length!==4||!o.every(Number.isFinite))&&i(`view.window`,o,`[i0, i1] or [x0, x1, y0, y1] of finite numbers`)}o!==void 0&&!(Array.isArray(o)&&o.every(e=>H(e)&&Object.keys(e).every(e=>[`x`,`series`,`name`].includes(e))))&&i(`selected`,o,`an array of { x?, series?, name? }`),s!==void 0&&!(typeof s==`string`&&/^[\w+/=-]+$/.test(s))&&i(`nonce`,s,`a base64 nonce string`)}function gt(e,t={}){let n=typeof e.y==`string`?[e.y]:[...e.y],r=Math.min(t.measure??0,n.length-1),i=[...e.path??[]],a=e.drill?(t.drill??[]).slice(0,Math.max(0,i.length-1)):[],o=i.slice(a.length),s=e.format,c=e=>Object.entries(e??{}).filter(e=>e[1]!==void 0);return{type:e.type,data:a.length?e.data.filter(e=>a.every((t,n)=>String(e[i[n]])===t)):e.data,x:e.x??(Ue.includes(e.type)?o[0]??``:``),y:n[r],measures:n,measure:r,series:e.series??null,y2:e.y2??null,path:o,drilled:a,window:t.window&&t.window.length===4?t.window:null,size:e.size??null,name:e.name??null,totals:[...e.totals??[]],stack:e.stack??!1,horizontal:e.horizontal??!1,aggregate:e.aggregate??`sum`,sort:e.sort??null,sortBy:t.sortBy??null,limit:e.limit??null,format:new Map(typeof s==`string`?n.map(e=>[e,s]):c(s)),titles:new Map(c(e.titles)),labels:e.labels??null,text:{...e.text},title:e.title??null,description:e.description??null,legend:e.legend??(e.series!==void 0||e.y2!==void 0||e.type===`waffle`),tooltip:e.tooltip??!0,drill:e.drill??!1,select:e.select??!1,zoom:e.zoom??!1,grid:e.grid??!0,xAxis:e.xAxis??!0,yAxis:e.yAxis??!0,locale:e.locale??`en-US`,currency:e.currency??`USD`,yDomain:e.yDomain??null,xDomain:e.xDomain??null,table:e.table??!0,animate:e.animate??!0,colors:Array.isArray(e.colors)?e.colors:e.colors?new Map(Object.entries(e.colors)):null,colorBy:e.colorBy??null,theme:e.theme??{}}}var _t={bar:se,waterfall:se,line:we,area:Te,scatter:Oe,heatmap:fe,kpi:he,dumbbell:de,ridgeline:xe,beeswarm:ue,parallel:be,table:je},vt=e=>e.replace(/[A-Z]|\d+/g,e=>`-`+e.toLowerCase());function yt(e,t,n){mt(e),t!==void 0&&ht(t);let r=Object.hasOwn(_t,e.type)?_t[e.type]:i.get(e.type),a=gt(e,t?.view),o=t?.width??640,s=t?.height??320,c=re(a,t?.view??{}),l=e=>e>5e3&&q(`too-many-marks`,`data`,`${e} marks exceed the limit of 5000.`,`Use spec.limit to keep the top N categories, or aggregate the rows first.`);l(c.cells.length);let d=new Map,h=(e,t,n)=>{if(t===`\0other`)return u(a,`other`);let r=e+`\0`+n,i=d.get(r);return i||d.set(r,i=E(a,e,n)),i(t)},g=a.colorBy,_=1/0,y=-1/0;if(typeof g==`string`&&g!==`sign`)for(let e of a.data){let t=e[g];typeof t==`number`&&(_=Math.min(_,t),y=Math.max(y,t))}let b=e=>g===`sign`?e<0?`bad`:`good`:g&&typeof g==`object`?e>=g.target?`good`:`bad`:null,C=e=>{let t=b(e);return t===null?null:u(a,g===`sign`?t===`good`?`positive`:`negative`:t===`good`?`above`:`below`)},w=[],T=``,D=(e,t,n,r)=>{let i=n.length*7.2+4,a=r===`start`?e:r===`end`?e-i:e-i/2,c=r===`above`?t-16:r===`below`?t+2:t-7;return a<0||c<0||a+i>o||c+14>s||w.some(e=>a<e[2]&&a+i>e[0]&&c<e[3]&&c+14>e[1])?!1:(w.push([a,c,a+i,c+14]),T+=m(`text`,{x:p(e),y:p(r===`above`?t-4:r===`below`?t+13:t),"text-anchor":r===`start`||r===`end`?r:`middle`,"dominant-baseline":r===`above`||r===`below`?null:`middle`,"data-in":r===`center`},f(n)),!0)},O=r.axes?te(a,r.axes(a,c),{width:o,height:s},h):null,k=O?.plot??{x:0,y:0,w:o,h:s},A={spec:a,shaped:c,width:o,height:s,plot:k,x:O?.x??null,y:O?.y??null,y2:O?.y2??null,fmt:h,label:D,tone:b,q:e=>y>_?Math.min(9,Math.max(0,Math.floor((e-_)/(y-_)*10))):9,agg:e=>t=>{let n=ne(e);for(let e of t)typeof e==`number`&&n.add(e);return n.value()},fail:q,t:(e,...t)=>u(a,e,...t)};r.check?.(e,q);let j=null,M=``;if(a.data.length===0)M=m(`text`,{"data-maya":`empty`,x:o/2,y:s/2,"text-anchor":`middle`,"dominant-baseline":`middle`},f(u(a,`noData`)));else{let e=(e,t)=>m(`g`,{"data-maya":e},t),t=r.draw(A);l(t.marks.split(` data-maya="mark"`).length-1),j=t.legend??null,M=e(`grid`,t.grid??O?.grid??``)+e(`axis-y`,O?.ay??``)+e(`axis-x`,O?.ax??``)+e(`marks`,t.marks)+e(`labels`,(t.labels??``)+T)+e(`cross`,t.cross??``)+e(`hits`,t.hits)}let N=[];if(Array.isArray(a.colors))a.colors.forEach((e,t)=>N.push([`--maya-series-${t+1}`,e]));else if(a.colors)for(let[e,t]of a.colors){let n=c.series.indexOf(e);n>=0&&N.push([`--maya-series-${n%8+1}`,t])}for(let e in a.theme)N.push([`--maya-${vt(e)}`,a.theme[e]]);let P=N.map(([e,t])=>`${e}:${t};`).join(``),ee=m(`svg`,{class:n===null?`maya-svg`:`maya-root maya-svg`,viewBox:`0 0 ${o} ${s}`,width:o,height:s,role:`img`,"aria-label":n===null?null:v(a),"aria-labelledby":n===null?`maya-t`:null,"aria-describedby":n===null?`maya-d`:null,tabindex:n===null?`0`:null,style:n===null?null:P||null,"data-plot":`${p(k.x)} ${p(k.y)} ${p(k.w)} ${p(k.h)}`,...O?.attrs,"data-dir":a.horizontal?`h`:null},(n?`<style>${n}</style>`:``)+m(`title`,{id:n===null?`maya-t`:null},f(v(a)))+m(`desc`,{id:n===null?`maya-d`:null},f(x(a,c,h,r.noun)))+M),F=``;return j!==null&&a.legend?F=j:(a.series!==null||a.y2!==null)&&a.legend?F=`<div class="maya-legend" data-maya="legend">`+(a.series===null&&a.y2!==null?`<span data-s="0"><i></i>${f(a.titles.get(a.y)??a.y)}</span>`:``)+(a.series===null?[]:c.series).map((e,t)=>m(`button`,{type:`button`,"data-si":t,"data-s":t%8,"data-key":e,"aria-pressed":String(c.visible.includes(t))},`<i></i>${f(e)}`)).join(``)+(a.y2===null?``:`<span data-s="${c.series.length%8}" data-line><i></i>${f(a.titles.get(a.y2)??a.y2)}</span>`)+`</div>`:e.legend!==!1&&g!==null&&a.series===null&&a.type!==`kpi`&&(F=g===`sign`||typeof g==`object`?`<div class="maya-legend" data-maya="tone">`+[`good`,`bad`].map(e=>`<span data-tone="${e}"><i></i>${f(u(a,g===`sign`?e===`good`?`positive`:`negative`:e===`good`?`above`:`below`))}</span>`).join(``)+`</div>`:y>_?`<div class="maya-legend" data-maya="ramp"><span>${f(h(g,_))}</span><i></i><span>${f(h(g,y))}</span></div>`:``),{svg:ee,legend:F,controls:a.measures.length>1&&!Ge.includes(a.type)?`<div class="maya-ctl" role="radiogroup" aria-label="${f(u(a,`measures`))}" data-n="${a.measures.length}" data-i="${a.measure}">`+a.measures.map((e,t)=>`<button type="button" role="radio" aria-checked="${t===a.measure}" data-i="${t}" tabindex="${t===a.measure?0:-1}">${f(a.titles.get(e)??e)}</button>`).join(``)+`</div>`:``,crumbs:a.drilled.length>0?`<nav class="maya-crumbs" aria-label="${f(u(a,`crumbs`))}"><button type="button" data-depth="0">${f(u(a,`back`))}</button>`+a.drilled.map((e,t)=>`<span aria-hidden="true">›</span><button type="button" data-depth="${t+1}"${t===a.drilled.length-1?` aria-current="page"`:``}>${f(String(e))}</button>`).join(``)+`</nav>`:a.drill?`<div class="maya-crumbs" aria-hidden="true"></div>`:``,table:a.table?S(a,c,h,C):``,title:a.title===null?``:`<div class="maya-title">${f(a.title)}</div>`,style:P,vars:N,warnings:[]}}function bt(e,t){return yt(e,t,null)}function xt(e,t){return yt(e,t,ze).svg}function St(e,t,n){let r=e.style?` style="${f(e.style)}"`:``,i=n?` nonce="${f(n)}"`:``;return`${t?`<style${i}>${t}</style>`:``}<div class="maya"${r}>${e.title}${e.controls}${e.legend}${e.crumbs}<div class="maya-box">${e.svg}</div>${e.table}<div class="maya-sr" data-maya="live" aria-live="polite"></div><div class="maya-probe" data-maya="probe"></div><div class="maya-tip" popover="manual" role="tooltip"></div></div>`}function Ct(e){let t=e=>typeof e==`object`?Object.keys(e):[],n=new Set([e.x,...typeof e.y==`string`?[e.y]:e.y,e.series,e.y2,e.size,e.name,...e.path??[],typeof e.colorBy==`string`?e.colorBy:void 0,...t(e.format),...t(e.titles)]);return{...e,data:e.data.map(e=>Object.fromEntries(Object.entries(e).filter(([e])=>n.has(e))))}}function wt(e,t){let n=bt(e,t),r=JSON.stringify(Ct(e)).replace(/</g,`\\u003c`);return`<maya-chart><template shadowrootmode="open">${St(n,ze,t?.nonce)}</template><script type="application/json">${r}<\/script></maya-chart>`}var Tt,Et=e=>{let t=globalThis.trustedTypes;if(!t)return e;if(Tt?.[0]!==t){let e=null;try{e=t.createPolicy(`mayacharts`,{createHTML:e=>e})}catch{e=t.getPolicy?.(`mayacharts`)??null}Tt=[t,e]}return Tt[1]?Tt[1].createHTML(e):e},Dt=!1,Ot=`cubic-bezier(.2,.8,.2,1)`,kt={duration:280,easing:Ot},At={duration:160,easing:Ot},jt=1500,Mt=1e-6,X=(e,t)=>+(e.getAttribute(t)??0),Nt=e=>{if(e.localName===`rect`)return[X(e,`x`),X(e,`y`),X(e,`width`),X(e,`height`)];if(e.localName===`circle`){let t=X(e,`r`);return[X(e,`cx`)-t,X(e,`cy`)-t,2*t,2*t]}},Pt=e=>{let t=e.getBBox?.();return Nt(e)??(t?[t.x,t.y,t.width,t.height]:void 0)},Ft=(e,t)=>`translate(${t[0]-e[0]}px,${t[1]-e[1]}px) scale(${Math.max(t[2],Mt)/Math.max(e[2],Mt)},${Math.max(t[3],Mt)/Math.max(e[3],Mt)})`,It=(e,t,n,r)=>{let i=Dt?void 0:e.animate?.(t,n);if(!r)return;if(!i)return r();let a=!1,o=()=>a||(a=!0,r());i.addEventListener(`finish`,o),i.addEventListener(`cancel`,o),setTimeout(o,Number(n.duration??0)+100)};function Lt(e,t){for(let n of[...e.attributes])t.hasAttribute(n.name)||e.removeAttribute(n.name);for(let n of[...t.attributes])e.setAttribute(n.name,n.value)}function Rt(e,t,n){if(n)return n;let[r,i,a,o]=t;if(e.localName===`circle`)return[r+a/2,i+o/2,0,0];let s=e.hasAttribute(`data-neg`);return e.closest(`[data-dir=h]`)?[s?r+a:r,i,0,o]:[r,s?i:i+o,a,0]}function zt(e,t,n,r=kt){let i=[{opacity:0},{opacity:1}];It(e,t?i.reverse():i,t?{...r,fill:`forwards`}:r,n)}function Bt(e,t){let n=Nt(e);if(n)It(e,[{transform:Ft(n,Rt(e,n,t)),opacity:0},{transform:`none`,opacity:1}],kt);else if(e.matches(`path[data-maya=line]`)){e.setAttribute(`pathLength`,`1`);let t=e=>({strokeDasharray:`1`,strokeDashoffset:e});It(e,[t(`1`),t(`0`)],kt)}else zt(e,!1)}function Vt(e,t){e.removeAttribute(`data-key`),e.removeAttribute(`data-maya`);let n=Nt(e),r=()=>e.remove();n?It(e,[{transform:`none`,opacity:1},{transform:Ft(n,Rt(e,n,t)),opacity:0}],{...kt,fill:`forwards`},r):zt(e,!0,r)}function Ht(e,t){let n=e.getAnimations?.()??[];if(!n.length)return t;let r=getComputedStyle(e).transform;for(let e of n)e.cancel();if(!r||r===`none`||typeof DOMMatrix>`u`)return t;let i=new DOMMatrix(r);return[t[0]+i.e,t[1]+i.f,t[2]*i.a,t[3]*i.d]}function Ut(e,t,n){let r=new Map;for(let t of e.children)t.hasAttribute(`data-key`)&&r.set(t.getAttribute(`data-key`),t);let i=[];for(let e of[...t.children]){let t=e.getAttribute(`data-key`),n=r.get(t);if(!n||n.localName!==e.localName){i.push(e);continue}r.delete(t);let a=Nt(n),o=a&&Ht(n,a);Lt(n,e);let s=Nt(n);o&&s&&o.some((e,t)=>Math.abs(e-s[t])>.01)&&It(n,[{transform:Ft(s,o)},{transform:`none`}],kt),i.push(n)}for(let e of r.values())Vt(e,n);let a=e.firstElementChild;for(let t of i){for(;a&&a!==t&&!a.hasAttribute(`data-key`);)a=a.nextElementSibling;if(a===t)a=a.nextElementSibling;else{let r=!t.isConnected;e.insertBefore(t,a),r&&Bt(t,n)}}}function Wt(e,t,n,r){let i=e=>e.getAttribute(`data-maya`)??e.localName,a=new Map([...e.children].filter(e=>e!==n).map(e=>[i(e),e])),o=[],s=[],c=[],l=e=>e.localName===`g`&&!/^(cross|hits)$/.test(i(e));for(let e of[...t.children]){if(e===r){o.push(n);continue}let t=a.get(i(e));a.delete(i(e)),t&&t.outerHTML===e.outerHTML?o.push(t):(t&&l(t)&&(c.push(t),o.push(t)),o.push(e),t&&l(e)&&s.push(e))}for(let e of a.values())l(e)&&(c.push(e),o.push(e));e.replaceChildren(...o);for(let e of c)Gt(e);for(let e of s)zt(e,!1,void 0,At)}function Gt(e){e.removeAttribute(`data-maya`);for(let t of e.querySelectorAll(`[data-maya]`))t.removeAttribute(`data-maya`);zt(e,!0,()=>e.remove(),At)}function Kt(e,t,n,r={}){let i=document.createElement(`template`);i.innerHTML=Et(t);let a=i.content.firstElementChild,o=e.firstElementChild,s=o?.querySelector(`:scope > [data-maya=marks]`),c=a.querySelector(`:scope > [data-maya=marks]`);!n||!o||!s||!c||c.childElementCount>jt||s.childElementCount>jt?e.replaceChildren(a):(Dt=!!r.instant,Lt(o,a),Lt(s,c),Ut(s,c,r.origin),Wt(o,a,s,c),Dt=!1),r.after?.(e.firstElementChild)}var qt=(e=[],t=[])=>e.length===t.length&&e.every((e,n)=>e===t[n]),Jt=(e,t)=>qt(e.view.drill,t)?e:{view:{...e.view,drill:t},selected:[]},Yt=(e,t)=>{let n=e.view.drill??[];if(t.type===`pop`)return Jt(e,n.slice(0,Math.max(0,t.depth)));if(t.type===`drill`){let r=t.spec?.path?.length??0;return t.spec?.drill&&n.length<r-1?Jt(e,[...n,t.value]):e}if(t.type!==`spec`||!n.length)return e;let{prev:r,next:i}=t,a=i.path??[];if(!i.drill||r&&(r.type!==i.type||r.x!==i.x||!qt(r.path,i.path)))return Jt(e,[]);let o=i.data,s=[];for(let e=0;e<n.length&&e<a.length-1&&(o=o.filter(t=>String(t[a[e]])===n[e]),o.length);e++)s.push(n[e]);return Jt(e,s)},Xt=(e,t)=>{let n=e.split(`~`),r=n[0]===`h`?n[1+t]??n[n.length-1]:n[1];if(r!==void 0)try{return decodeURIComponent(r)}catch{return r}},Zt=e=>{let t,n=()=>[...e.root.querySelectorAll(`[data-maya=mark][data-key]`)].filter(e=>!e.hasAttribute(`data-other`)),r=t=>{let n=e.spec(),r=t.view.drill??[];n&&e.announce(u(n,r.length?`drilledInto`:`back`,r.join(` / `)))},i=n=>{let i=e.state(),a=i.view.drill??[];if(n>=a.length)return!1;let o=Yt(i,{type:`pop`,depth:n});return o!==i&&(t={value:a[n]},e.commit(o),r(o),!0)},a=n=>{let i=e.spec(),a=n.getAttribute(`data-key`);if(!i?.drill||!a||n.hasAttribute(`data-other`))return!1;let o=e.state(),s=Xt(a,(o.view.drill??[]).length);if(s===void 0)return!1;let c=Yt(o,{type:`drill`,value:s,spec:i});return c!==o&&(t={first:!0},e.commit(c),r(c),!0)},o=e=>{let t=e.target,n=t?.closest(`.maya-crumbs [data-depth]`);if(n)return void i(Number(n.getAttribute(`data-depth`)));let r=t?.closest(`[data-maya=mark],[data-maya=hit]`);r&&a(r)};return e.root.addEventListener(`click`,o),{escape:()=>i((e.state().view.drill??[]).length-1),enter:e=>a(e),painted(){if(!t)return;let r=n(),i=`first`in t?r[0]:r.find(n=>Xt(n.getAttribute(`data-key`),e.state().view.drill?.length??0)===t.value);t=void 0,i&&(i.hasAttribute(`tabindex`)||i.setAttribute(`tabindex`,`-1`),i.focus?.({preventScroll:!0})),(!e.root.activeElement||!e.root.contains(e.root.activeElement))&&e.root.querySelector(`.maya-svg`)?.focus({preventScroll:!0})},off:()=>e.root.removeEventListener(`click`,o)}},Qt=`.maya-ctl [role=radio]`,$t=(e,t)=>{if(t.type===`spec`){let n=t.next.y,r=t.prev&&JSON.stringify(n)===JSON.stringify(t.prev.y);if(Array.isArray(n)&&r||e.view.measure===void 0)return e;let{measure:i,...a}=e.view;return{...e,view:a}}let n=t.count===void 0?1/0:t.count-1,r=Math.min(Math.max(0,Math.trunc(t.index)||0),Math.max(0,n));return e.view.measure===r?e:{...e,view:{...e.view,measure:r}}},en=e=>{let t=()=>[...e.root.querySelectorAll(Qt)],n=!1,r=t=>{let n=e.spec(),r=n&&Array.isArray(n.y)?n.y:[],i=e.state(),a=$t(i,{type:`measure`,index:t,count:r.length||void 0});if(a===i)return;e.commit(a);let o=a.view.measure??0,s=r[o]??String(o);e.announce(u(n??{},`showing`,n?.titles?.[s]??s))},i=e=>{let n=e.target.closest?.(Qt),i=n?t().indexOf(n):-1;i>=0&&r(i)},a=i=>{let a=i.key,s=t(),c=s.indexOf(i.target.closest?.(Qt));if(c<0)return;let l=a===`ArrowRight`||a===`ArrowDown`?(c+1)%s.length:a===`ArrowLeft`||a===`ArrowUp`?(c-1+s.length)%s.length:a===`Home`?0:a===`End`?s.length-1:-1;l<0||(i.preventDefault(),n=!0,l===e.state().view.measure?o():r(l),s[l]?.focus({preventScroll:!0}))},o=()=>{let r=t(),i=e.state().view.measure??0;r.forEach((e,t)=>{e.setAttribute(`aria-checked`,String(t===i)),e.setAttribute(`tabindex`,t===i?`0`:`-1`)}),n&&(n=!1,r[i]?.focus({preventScroll:!0}))};return e.root.addEventListener(`click`,i),e.root.addEventListener(`keydown`,a),{painted:o,off(){e.root.removeEventListener(`click`,i),e.root.removeEventListener(`keydown`,a)}}},tn=(e,t)=>JSON.stringify(e)===JSON.stringify(t),nn=[`x`,`series`,`name`],rn=e=>{try{return decodeURIComponent(e)}catch{return e}};function an(e,t){if(t.type===`clear`)return e.selected.length?{...e,selected:[]}:e;if(t.type===`spec`){let n=t.prev;if(!n||!e.selected.length)return e;let r=t.next;return n.type!==r.type||n.x!==r.x||JSON.stringify(n.path)!==JSON.stringify(r.path)?{...e,selected:[]}:e}if(t.type!==`toggle`)return e;let n=e.selected.some(e=>tn(e,t.sel)),r=t.multi?n?e.selected.filter(e=>!tn(e,t.sel)):[...e.selected,t.sel]:n&&e.selected.length===1?[]:[t.sel];return{...e,selected:r}}function on(e,t){let n=e.getAttribute(`data-key`);if(!n)return;let r=n.split(`~`).map(rn);if(r[0]===`h`)return{name:r[r.length-1]};if(r.length!==2)return;let i={};return r[0]&&(i.series=r[0]),t===`scatter`?i.name=r[1]:i.x=r[1],i}function sn(e,t,n){let r=on(t,n);return r?nn.every(t=>e[t]===void 0||String(e[t])===String(r[t])):!1}function cn(e){let{root:t}=e,n=()=>e.spec()?.type,r=(t,n)=>{let r=e.spec();if(!r?.select)return;let i=an(e.state(),{type:`toggle`,sel:t,multi:r.select===`multi`}),a=n?.getAttribute(`data-y`)??``;e.commit(i,n?{...t,value:a!==``&&!isNaN(+a)?+a:a}:null);let o=i.selected.length;e.announce(o?u(r,`selected`,o):u(r,`selectionCleared`))},i=i=>{if(!e.spec()?.select)return;let a=i.target,o=a.closest(`[data-maya=legend] button`);if(o){let e=o.getAttribute(`data-key`);e&&r({series:e},null);return}let s=a.closest(`[data-maya=mark],[data-maya=hit]`);if(s&&!s.getAttribute(`data-key`)){let e=s.getAttribute(`data-c`);s=e===null?null:t.querySelector(`[data-maya=mark][data-key][data-c="${e}"]`)}let c=s&&on(s,n());s&&c&&r(c,s)};return t.addEventListener(`click`,i),{escape(){return e.state().selected.length?(e.commit(an(e.state(),{type:`clear`})),e.announce(u(e.spec()??{},`selectionCleared`)),!0):!1},enter(t){let i=on(t,n());return!e.spec()?.select||!i?!1:(r(i,t),!0)},painted(){let r=e.state().selected;for(let e of t.querySelectorAll(`[data-maya=mark][data-key]`))r.some(t=>sn(t,e,n()))?e.setAttribute(`data-selected`,``):e.removeAttribute(`data-selected`)},off:()=>t.removeEventListener(`click`,i)}}var ln=(e,t)=>{if(t.type===`spec`){let{prev:n,next:r}=t;if(!e.view.sortBy||n&&n.type===r.type&&n.x===r.x&&JSON.stringify(n.y)===JSON.stringify(r.y))return e;let{sortBy:i,...a}=e.view;return{...e,view:a}}let n=e.view.sortBy,r=n?.[0]===t.field?n[1]===`asc`?`desc`:`asc`:t.label?`asc`:`desc`;return{...e,view:{...e.view,sortBy:[t.field,r]}}},un=`[data-maya=sort]`,dn=e=>{let t=null,n=n=>{let r=e.spec(),i=n.getAttribute(`data-field`);if(!r||r.type!==`table`||!i)return;let a=ln(e.state(),{type:`sort`,field:i,label:i===r.x}),[,o]=a.view.sortBy;t=i,e.commit(a);let s=r.titles;e.announce(u(r,`sortedBy`,s?.[i]??i,u(r,o===`asc`?`ascending`:`descending`)))},r=e=>{let t=e.target.closest?.(un);t&&n(t)},i=e=>{let t=e.key,r=e.target.closest?.(un);!r||t!==`Enter`&&t!==` `||(e.preventDefault(),e.stopPropagation(),n(r))};return e.root.addEventListener(`click`,r),e.root.addEventListener(`keydown`,i,!0),{painted(){if(t===null)return;let n=t;t=null,[...e.root.querySelectorAll(un)].find(e=>e.getAttribute(`data-field`)===n)?.focus({preventScroll:!0})},off(){e.root.removeEventListener(`click`,r),e.root.removeEventListener(`keydown`,i,!0)}}},Z=(e,t)=>e.getAttribute(t)??``,Q=(e,t=``,n={})=>{let r=document.createElement(e);r.textContent=t;for(let e in n)r.setAttribute(e,n[e]);return r},fn=`[data-maya=hit],[data-maya=mark],[data-maya=link][data-key]`,pn=120;function mn(e,t,n=()=>{},r=()=>void 0){let i=t=>e.querySelector(t),a=i(`.maya-box`),o=i(`.maya-tip`),s=i(`.maya-probe`),c=e.host,l=!!globalThis.CSS?.supports?.(`anchor-name: --x`),d=[],f=new Map,p=new Map,m,h=!1,g=!1,_=!1,v,y,b=()=>{d=[...a.querySelectorAll(`[data-maya=mark][data-key]`)],f=new Map,p=new Map;for(let e of d){if(f.set(Z(e,`data-key`),e),!e.hasAttribute(`data-c`))continue;let t=Z(e,`data-c`);p.set(t,[...p.get(t)??[],e])}},x=e=>Z(e,`data-maya`)!==`link`&&e.hasAttribute(`data-c`)&&p.get(Z(e,`data-c`))||[e],S=[],C=e=>{for(let e of S)e.removeAttribute(`data-active`);S=e?.hasAttribute(`data-c`)?[...a.querySelectorAll(`[data-maya=line][data-c="${CSS.escape(Z(e,`data-c`))}"]`)]:[];for(let e of S)e.setAttribute(`data-active`,``)},w=e=>{let t=a.querySelector(`[data-maya=cross]`);if(!t||!e&&t.style.opacity!==`1`)return;t.style.opacity=e?`1`:`0`;let n=t.ownerSVGElement??a.querySelector(`svg`);if(!e||!n)return;let r=e.getBoundingClientRect(),i=n.getBoundingClientRect(),o=+(Z(n,`viewBox`).split(` `)[2]||i.width)||1;t.style.transform=`translateX(${(r.left+r.width/2-i.left)*o/(i.width||o)}px)`},T=()=>{m?.removeAttribute(`data-active`),C(void 0),m=void 0,g=!1,w(void 0),o.classList.remove(`maya-open`),h&&(h=!1,clearTimeout(v),v=setTimeout(()=>h||o.hidePopover(),pn))},E=(e,t)=>{let n=e?.closest?.(fn);if(!n||Z(n,`data-maya`)!==`hit`)return n??void 0;if(n.hasAttribute(`data-key`))return f.get(Z(n,`data-key`));let r=t?.clientY??0,i,a=1/0;for(let e of p.get(Z(n,`data-c`))??[]){let t=e.getBoundingClientRect(),n=Math.abs(r-(t.top+t.height/2));n<a&&(a=n,i=e)}return i},D=e=>{let t=Z(e,`data-tone`),n=r();if(!t)return``;let i=typeof n?.colorBy==`object`;return u(n??{},t===`good`?i?`above`:`positive`:i?`below`:`negative`)},O=(e,t=!1)=>{m?.removeAttribute(`data-active`),m=e,e.setAttribute(`data-active`,``),C(e);let r=x(e);o.replaceChildren(Q(`b`,Z(e,`data-x`)),...r.map(t=>{let n=Q(`div`,``,t===e?{"data-on":``}:{}),r=Z(t,`data-series`);r&&(t.hasAttribute(`data-s`)&&n.append(Q(`i`,``,{"data-s":Z(t,`data-s`)})),n.append(Q(`span`,r))),n.append(Q(`span`,Z(t,`data-f`)));let i=D(t);return i&&n.append(Q(`span`,i)),n})),w(e);let i=e.getBoundingClientRect(),a=c.getBoundingClientRect();if(Object.assign(s.style,{left:i.left-a.left-c.clientLeft+`px`,top:i.top-a.top-c.clientTop+`px`,width:i.width+`px`,height:i.height+`px`}),clearTimeout(v),h||=(o.showPopover(),!0),o.classList.add(`maya-open`),!l){let e=o.getBoundingClientRect(),t=globalThis.visualViewport?.width??innerWidth,n=i.top-e.height-8;n<8&&(n=i.bottom+8);let r=Math.min(Math.max(i.left+i.width/2-e.width/2,8),t-e.width-8);Object.assign(o.style,{position:`fixed`,left:r+`px`,top:n+`px`})}t&&n(`${Z(e,`data-x`)}: ${r.map(e=>[Z(e,`data-series`),Z(e,`data-f`),D(e)].filter(Boolean).join(` `)).join(`, `)}`)},k=e=>{if(_=!1,!t()||e.pointerType!==`mouse`)return;let n=E(e.target,e);n?n!==m&&O(n):T()},A=[[a,`pointerover`,k],[a,`pointermove`,k],[a,`pointerdown`,e=>{_=!1;let t=e;y=t.pointerType===`mouse`?void 0:[t.clientX,t.clientY]}],[a,`pointerup`,e=>{let n=e,r=y;if(y=void 0,!t()||!r||Math.hypot(n.clientX-r[0],n.clientY-r[1])>=4)return;let i=E(e.target,e);i&&O(i)}],[a,`pointerleave`,e=>e.pointerType===`mouse`&&T()],[a,`keydown`,e=>{let n=e.key;if(!t())return;if(_=!0,n===`Escape`)return g&&e.preventDefault(),T();let r;if(n===` `){if(r=m??d[0],!r)return;g=!g,g&&O(r,!0)}else if(n.startsWith(`Arrow`)){let e=n===`ArrowRight`||n===`ArrowDown`?1:-1,t=m?d.indexOf(m):-1;if(t<0)r=d[0];else if(n===`ArrowUp`||n===`ArrowDown`){let n=x(d[t]);r=n[n.indexOf(d[t])+e]}else{let n=[...p.keys()],i=p.get(n[n.indexOf(Z(d[t],`data-c`))+e]);r=i?.find(e=>Z(e,`data-s`)===Z(d[t],`data-s`))??i?.[0]}r&&O(r,!0)}else return;e.preventDefault()}],[a,`focusout`,()=>g||T()],[document,`pointerdown`,e=>{let t=e.composedPath();(!t.includes(a)||!E(t[0],e))&&T()},{capture:!0}],[window,`scroll`,()=>_||T(),{capture:!0,passive:!0}]];for(let[e,t,n,r]of A)e.addEventListener(t,n,r);return b(),{off:()=>(T(),clearTimeout(v),A.forEach(([e,t,n,r])=>e.removeEventListener(t,n,r))),hide:T,active:()=>m,refresh(){let e=m&&Z(m,`data-key`);b();let n=e?f.get(e):void 0;n&&t()?O(n):T()}}}var hn=e=>{if(!e.view.window)return e;let{window:t,...n}=e.view;return{...e,view:n}},gn=(e,t)=>{if(t.type===`zoom`){let n=t.window;if(n.length===2){let t=Math.max(0,Math.trunc(Math.min(n[0],n[1]))),r=Math.max(t,Math.trunc(Math.max(n[0],n[1])));return{...e,view:{...e.view,window:[t,r]}}}let[r,i,a,o]=n;return{...e,view:{...e.view,window:[Math.min(r,i),Math.max(r,i),Math.min(a,o),Math.max(a,o)]}}}if(t.type===`reset`)return hn(e);let{prev:n,next:r}=t;return n&&(n.type!==r.type||n.x!==r.x||JSON.stringify(n.path)!==JSON.stringify(r.path))?hn(e):e},_n=4,vn=2,yn=`http://www.w3.org/2000/svg`,bn=e=>(e??``).trim().split(/\s+/).map(Number),xn=e=>String(+e.toPrecision(4)),Sn=e=>{let{root:t}=e,n,r,i=``,a=JSON.stringify(e.state().view.drill),o=e=>e.target?.closest?.(`svg.maya-svg`),s=e=>{let t=e.getBoundingClientRect(),n=bn(e.getAttribute(`viewBox`)),r=t.width?(n[2]??t.width)/t.width:1,i=t.height?(n[3]??t.height)/t.height:1,[a=0,o=0,s=1,c=1]=bn(e.getAttribute(`data-plot`));return{r:t,k:r,ky:i,px:a,py:o,pw:s,ph:c,vx:n[0]??0,vy:n[1]??0}},c=(e,t,n)=>Math.min(n,Math.max(t,e)),l=()=>{r?.remove(),r=void 0,n=void 0},d=(e,t)=>{let n=s(e);return{g:n,x:c((t.clientX-n.r.left)*n.k+n.vx,n.px,n.px+n.pw),y:c((t.clientY-n.r.top)*n.ky+n.vy,n.py,n.py+n.ph)}},f=e=>!e.hasAttribute(`data-xd`),p=(e,t,n)=>{let i=s(e);(!r||r.ownerSVGElement!==e)&&(r?.remove(),r=document.createElementNS(yn,`rect`),r.setAttribute(`data-maya`,`brush`),r.setAttribute(`width`,`1`),r.setAttribute(`height`,`1`),r.style.pointerEvents=`none`,r.style.transformOrigin=`0 0`,e.append(r));let a=f(e),o=Math.min(t.x,n.x),c=Math.abs(t.x-n.x),l=a?i.py:Math.min(t.y,n.y),u=a?i.ph:Math.abs(t.y-n.y);r.style.transform=`matrix(${c},0,0,${u},${o},${l})`},m,h=t=>{let r=t,i=o(r);i&&e.spec()?.zoom&&(r.pointerType!==`mouse`||r.button===0)&&r.isPrimary!==!1&&(l(),i.style.touchAction=`pan-y`,n={id:r.pointerId,x:r.clientX,y:r.clientY,svg:i},m=d(i,r))},g=e=>{let t=e;if(n&&t.pointerId===n.id&&m&&!(!r&&Math.hypot(t.clientX-n.x,t.clientY-n.y)<_n)){if(!r)try{n.svg.setPointerCapture(t.pointerId)}catch{}p(n.svg,m,d(n.svg,t))}},_=()=>{let e=e=>e.stopPropagation();t.addEventListener(`click`,e,{capture:!0,once:!0}),setTimeout(()=>t.removeEventListener(`click`,e,{capture:!0}),0)},v=t=>{let i=t;if(!n||i.pointerId!==n.id||!m)return;let{svg:a}=n,o=!!r,s=m,u=d(a,i),p=u.g;try{a.releasePointerCapture(i.pointerId)}catch{}if(l(),m=void 0,!o)return;_();let h=f(a),g=Math.abs(s.x-u.x)/p.k,v=Math.abs(s.y-u.y)/p.ky;if(h?g<vn:g<vn||v<vn)return;let y=e.state();if(h){let t=Math.max(1,+(a.getAttribute(`data-n`)??1)),n=y.view.window?.[0]??0,r=e=>c(Math.floor((e-p.px)/p.pw*t),0,t-1),i=r(Math.min(s.x,u.x)),o=r(Math.max(s.x,u.x));e.commit(gn(y,{type:`zoom`,window:[n+i,n+o]}),null)}else{let t=bn(a.getAttribute(`data-xd`)),n=bn(a.getAttribute(`data-yd`)),r=e=>t[0]+(e-p.px)/p.pw*(t[1]-t[0]),i=e=>n[1]-(e-p.py)/p.ph*(n[1]-n[0]);e.commit(gn(y,{type:`zoom`,window:[r(s.x),r(u.x),i(s.y),i(u.y)]}),null)}},y=()=>{let t=e.state();return t.view.window?(e.commit(gn(t,{type:`reset`}),null),!0):!1},b=e=>{e.target.closest(`.maya-reset`)&&y()},x=e=>{o(e)&&y()};t.addEventListener(`pointerdown`,h),t.addEventListener(`pointermove`,g),t.addEventListener(`pointerup`,v);let S=()=>{l(),m=void 0};return t.addEventListener(`pointercancel`,S),t.addEventListener(`click`,b),t.addEventListener(`dblclick`,x),{cancel(){return r?(l(),m=void 0,!0):!1},escape:y,painted(){let n=e.state(),r=e.spec(),o=n.view.window,s=JSON.stringify(n.view.drill),c=s!==a;if(a=s,o&&c)return void y();let l=t.querySelector(`svg.maya-svg`);l&&r?.zoom&&(l.style.touchAction=`pan-y`);let d=t.querySelector(`.maya-box`),f=d?.querySelector(`.maya-reset`)??null;if(!o||!r){f?.remove(),i=``;return}d&&!f&&(f=document.createElement(`button`),f.type=`button`,f.className=`maya-reset`,d.append(f)),f&&(f.textContent=u(r,`reset`));let p=o.join(`,`);if(p!==i){if(i=p,o.length===4)e.announce(u(r,`zoomedTo`,xn(o[0]),xn(o[1])));else{let n=[...t.querySelectorAll(`[data-maya=mark][data-x]`)].map(e=>e.getAttribute(`data-x`));n.length&&e.announce(u(r,`zoomedTo`,n[0],n[n.length-1]))}}},off(){l(),t.removeEventListener(`pointerdown`,h),t.removeEventListener(`pointermove`,g),t.removeEventListener(`pointerup`,v),t.removeEventListener(`pointercancel`,S),t.removeEventListener(`click`,b),t.removeEventListener(`dblclick`,x)}}},Cn,wn=class extends HTMLElement{static observedAttributes=[`spec`];static version=n;#e;#t;#n;#r={view:{},selected:[]};#i;#a;#o;#s={};#c=[0,0];#l=0;#u;#d=!1;#f;#p;#m;#h=new Set;#g=``;#_=!1;get spec(){return this.#e??this.#t??this.#n}set spec(e){this.#e=e,this.#w()}get data(){return this.spec?.data}set data(e){this.#e={...this.spec,data:e},this.#w()}get view(){return this.#r.view}set view(e){this.#r={...this.#r,view:e??{}},this.#w()}get selected(){return this.#r.selected}set selected(e){this.#r={...this.#r,selected:e??[]},this.#w()}attributeChangedCallback(e,t,n){try{this.#n=n?JSON.parse(n):void 0}catch(e){this.#n=void 0,console.error(e)}this.#w()}connectedCallback(){for(let e of[`spec`,`data`,`view`,`selected`])if(Object.hasOwn(this,e)){let t=this[e];delete this[e],this[e]=t}let e=this.querySelector(`:scope > script[type="application/json"]`)?.textContent;try{e&&(this.#t=JSON.parse(e))}catch(e){console.error(e)}let t=this.shadowRoot;t||(t=this.attachShadow({mode:`open`}),Cn??=new CSSStyleSheet,Cn.cssRules.length||Cn.replaceSync(ze),t.adoptedStyleSheets=[Cn],t.innerHTML=Et(St({svg:``,legend:``,controls:``,crumbs:``,table:``,title:``,style:``,vars:[],warnings:[]},``))),t.addEventListener(`click`,this.#C),t.addEventListener(`keydown`,this.#S),globalThis.addEventListener(`maya-register`,this.#v);let n={root:t,el:this,spec:()=>this.spec,state:()=>this.#r,commit:(e,t)=>this.#x(e,t??null),announce:e=>this.#y(e)};this.#a={measure:en(n),drill:Zt(n),select:cn(n),zoom:Sn(n),sort:dn(n)};let r=t.querySelector(`.maya-box`);this.#p=mn(t,()=>this.spec?.tooltip!==!1,e=>this.#y(e),()=>this.spec),this.#f=this.#p.off,this.#u=new ResizeObserver(()=>{(Math.abs(r.clientWidth-this.#c[0])>1||Math.abs(r.clientHeight-this.#c[1])>1)&&(this.#a?.zoom.cancel?.(),this.#d=!0,this.#w())}),this.#u.observe(r),this.#w()}disconnectedCallback(){cancelAnimationFrame(this.#l),this.#l=0,this.#u?.disconnect(),this.#f?.(),this.shadowRoot?.removeEventListener(`click`,this.#C),this.shadowRoot?.removeEventListener(`keydown`,this.#S),globalThis.removeEventListener(`maya-register`,this.#v),clearTimeout(this.#o);for(let e of Object.values(this.#a??{}))e.off();this.#a=void 0}#v=()=>this.#w();#y(e){clearTimeout(this.#o),this.#o=setTimeout(()=>{let t=this.shadowRoot?.querySelector(`[data-maya=live]`);t&&(t.textContent=e)},300)}toSVG(){let e=this.shadowRoot,t=e?.querySelector(`svg.maya-svg`);if(!e||!t)return``;let n=getComputedStyle(e.querySelector(`.maya`)),r=new Set([...ze.matchAll(/--maya-[\w-]+/g)].map(e=>e[0]));for(let e of this.#h)r.add(e);let i=[...r].map(e=>[e,n.getPropertyValue(e).trim()]).filter(([,e])=>e).map(([e,t])=>`${e}:${t}`).join(`;`),a=t.cloneNode(!0);a.setAttribute(`xmlns`,`http://www.w3.org/2000/svg`),a.removeAttribute(`tabindex`);for(let e of a.querySelectorAll(`[data-active]`))e.removeAttribute(`data-active`);let o=document.createElementNS(`http://www.w3.org/2000/svg`,`style`);return o.textContent=`${ze}.maya-svg{${i}}`,a.prepend(o),a.outerHTML}#b(e,t,n=!1){return this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0,cancelable:n}))}#x(e,t){let n=this.#r,r=this.#p?.active();r&&JSON.stringify(n.view.drill)!==JSON.stringify(e.view.drill)&&(this.#m=Pt(r)),this.#r=e,this.#w(),JSON.stringify(n.view)!==JSON.stringify(e.view)&&this.#b(`maya-view`,e.view),JSON.stringify(n.selected)!==JSON.stringify(e.selected)&&this.#b(`maya-select`,{selected:[...e.selected],target:t})}#S=e=>{let t=this.#a;if(!t||e.defaultPrevented)return;let n=e.key,r;if(n===`Escape`)r=t.zoom.cancel?.()||t.select.escape?.()||t.zoom.escape?.()||t.drill.escape?.();else if(n===`Enter`){let e=this.#p?.active();r=!!e&&(t.drill.enter?.(e)||t.select.enter?.(e))}r&&e.preventDefault()};#C=e=>{if(this.spec?.select)return;let t=e.target.closest(`[data-maya=legend] button`);if(!t)return;let n=t.getAttribute(`data-key`)??``,r=new Set(this.#r.view.hidden);if(r.has(n))r.delete(n);else if(this.shadowRoot.querySelectorAll(`[data-maya=legend] [aria-pressed=true]`).length>1)r.add(n);else return;this.#x({...this.#r,view:{...this.#r.view,hidden:[...r]}},null)};#w(){this.isConnected&&!this.#l&&(this.#l=requestAnimationFrame(()=>(this.#l=0,this.#T())))}#T(){let e=this.shadowRoot,t=this.spec,n=e.querySelector(`.maya-box`);if(!t)return;if(t!==this.#i){let e={type:`spec`,prev:this.#i,next:t};this.#r=an(gn(ln(Yt($t(this.#r,e),e),e),e),e),this.#i=t}let r=n.clientWidth||640,i=n.clientHeight||320;this.#c=[n.clientWidth,n.clientHeight];let a;try{a=bt(t,{width:r,height:i,view:this.#r.view,selected:this.#r.selected})}catch(e){this.#p?.hide();let t=e instanceof Be?{code:e.code,path:e.path,message:e.message}:null;if(t&&!this.#b(`maya-error`,t,!0)){n.replaceChildren(),this.#_=!1;return}let r=document.createElement(`pre`);r.className=`maya-err`,r.textContent=e instanceof Error?e.message:String(e),n.replaceChildren(r),this.#_=!1,r.textContent!==this.#g&&console.error(e),this.#g=r.textContent;return}this.#g=``;let o=this.#E(),s=e.querySelector(`.maya`),c=[[`title`,`.maya-title`],[`controls`,`.maya-ctl`],[`legend`,`[data-maya=legend]`],[`crumbs`,`.maya-crumbs`]];c.forEach(([t,r],i)=>{this.#s[t]!==a[t]&&(this.#s[t]=a[t],e.querySelector(r)?.remove(),(c.slice(i+1).map(([,t])=>e.querySelector(t)).find(Boolean)??n).insertAdjacentHTML(`beforebegin`,Et(a[t])))}),this.#s.table!==a.table&&(this.#s.table=a.table,e.querySelector(`table.maya-sr`)?.remove(),n.insertAdjacentHTML(`afterend`,Et(a.table)));for(let[e,t]of a.vars)s.style.setProperty(e,t);for(let e of this.#h)a.vars.some(([t])=>t===e)||s.style.removeProperty(e);this.#h=new Set(a.vars.map(([e])=>e));let l=t.animate===!1||matchMedia(`(prefers-reduced-motion: reduce)`).matches,u=this.#d;this.#d=!1,Kt(n,a.svg,this.#_&&!l,{origin:this.#m,after:()=>this.#p?.refresh(),instant:u}),this.#m=void 0,this.#_=!0,this.#D(o);for(let e of Object.values(this.#a??{}))e.painted?.();this.#b(`maya-render`,{})}#E(){let e=this.shadowRoot.activeElement;if(e)for(let[t,n]of Tn){let r=[...this.shadowRoot.querySelectorAll(n)].indexOf(e);if(r>=0)return`${t}:${r}`}}#D(e){let t=this.shadowRoot;if(!e||t.activeElement)return;let[n,r]=e.split(`:`),i=Tn.find(([e])=>e===n)[1];t.querySelectorAll(i)[+r]?.focus({preventScroll:!0})}},Tn=[[`svg`,`.maya-svg`],[`legend`,`[data-maya=legend] button`],[`measure`,`.maya-ctl [role=radio]`],[`crumb`,`.maya-crumbs :is(button,a)`],[`reset`,`.maya-reset`]],En=t({MayaChart:()=>wn,MayaSpecError:()=>Be,render:()=>xt,renderParts:()=>bt,renderShell:()=>wt,validateSpec:()=>mt,version:()=>n});if(typeof customElements<`u`){let e=customElements.get(`maya-chart`);e?e.version!==`0.2.0`&&console.warn(`mayacharts: <maya-chart> ${e.version??`(unknown)`} is already defined; ${n} is not used.`):customElements.define(`maya-chart`,wn)}function Dn(e,t,n,r,i=null){let a=()=>({kids:new Map,ys:[],cs:[]}),o=a();for(let r of e){let e=r[n];if(typeof e!=`number`)continue;let s=o;for(let e of t){let t=String(r[e]);s=s.kids.get(t)??s.kids.set(t,a()).get(t)}s.ys.push(e);let c=i===null?null:r[i];typeof c==`number`&&s.cs.push(c)}let s=(e,t,n,i)=>{let a=[...e.kids].map(([e,t])=>s(t,e,n+1,[...i,e]));return{name:t,children:a,depth:n,parts:i,cv:e.cs.length?r(e.cs):null,value:a.length?a.reduce((e,t)=>e+t.value,0):r(e.ys)??0}};return s(o,``,0,[])}function On(e,t,n,r,i){let a=[],o=e.filter(e=>e.value>0).sort((e,t)=>t.value-e.value),s=o.reduce((e,t)=>e+t.value,0),c=0;for(;c<o.length;){let e=Math.min(r,i),l=r*i/s,u=(t,n,r)=>Math.max(e*e*r/(t*t),t*t/(e*e*n)),d=c,f=0,p=1/0;for(;d<o.length;d++){let e=o[d].value*l,t=f+e,n=u(t,e,o[c].value*l);if(d>c&&n>p)break;p=n,f=t}let m=o.slice(c,d),h=e?f/e:0,g=0;for(let o of m){let s=f?o.value*l*e/f:0;a.push(r>=i?[o,t,n+g,h,s]:[o,t+g,n,s,h]),g+=s}r>=i?(t+=h,r-=h):(n+=h,i-=h),s-=m.reduce((e,t)=>e+t.value,0),c=d}return a}function kn(e){let{spec:t}=e;t.data.forEach((n,r)=>{let i=n[t.y];typeof i==`number`&&!(i>0)&&e.fail(`non-positive-value`,`data[${r}].${t.y}`,`Value ${i} is not positive.`,`Treemaps and sunbursts size shapes by value, so every value must be above zero.`,`To show negative values use a bar chart with colorBy: "sign".`)});let n=typeof t.colorBy==`string`&&t.colorBy!==`sign`?t.colorBy:null,r=Dn(t.data,t.path,t.y,e.agg(t.aggregate),n),i=0,a=r.children;return{root:r,tops:a,attrs:n=>{let r=[...t.drilled,...n.parts],o=a.findIndex(e=>e.name===n.parts[0]);return{"data-maya":`mark`,"data-key":g(`h`,...r),"data-c":i++,"data-s":o%8,"data-x":r.join(` › `),"data-series":``,"data-y":n.value,"data-f":e.fmt(t.y,n.value),"data-tone":e.tone(n.value),"data-q":n.cv===null?null:e.q(n.cv),"data-depth":n.depth}}}}var An=e=>e.length*7.2+4,jn={noun:`Treemap`,draw(e){let{plot:t,spec:n}=e,{root:r,attrs:i}=kn(e),a=``,o=``,s=(t,r,c,l,u)=>{let d=t.depth>1?.5:0,[f,h,g,v]=[r+d,c+d,Math.max(0,l-2*d),Math.max(0,u-2*d)];if(!t.children.length){let r=i(t);a+=m(`rect`,{...r,x:p(f),y:p(h),width:p(g),height:p(v)}),o+=_(r,f,h,g,v);let[s,c,l,u]=[f+g/2,h+v/2,r[`data-f`],`${t.name} · ${r[`data-f`]}`];if(!n.labels||v<16)return;v>=34&&An(t.name)<=g&&An(l)<=g?e.label(s,c-8,t.name,`center`)&&e.label(s,c+8,l,`center`):An(u)<=g?e.label(s,c,u,`center`):An(l)<=g&&e.label(s,c,l,`center`);return}t.depth===1&&An(t.name)<=g&&v>=30&&e.label(f+g/2,h+9,t.name,`center`);for(let[e,n,r,i,a]of On(t.children,f,h,g,v))s(e,n,r,i,a)};return s(r,t.x,t.y,t.w,t.h),{marks:a,hits:o}}},Mn=Math.PI*2;s(`treemap`,jn),s(`sunburst`,{noun:`Sunburst`,draw(e){let{plot:t,spec:n}=e,{root:r,attrs:i}=kn(e),a=n.path.length,o=Math.min(t.w,t.h)/2,[s,c]=[t.x+t.w/2,t.y+t.h/2],l=(e,t)=>`${p(s+e*Math.cos(t-Math.PI/2))} ${p(c+e*Math.sin(t-Math.PI/2))}`,u=``,d=(e,t,n)=>{if(e.depth){let[r,s]=[e.depth*o/(a+1),(e.depth+1)*o/(a+1)],c=Math.min(n,t+Mn*359.99/360),d=+(c-t>Math.PI),f=`M${l(s,t)}A${p(s)} ${p(s)} 0 ${d} 1 ${l(s,c)}L${l(r,c)}A${p(r)} ${p(r)} 0 ${d} 0 ${l(r,t)}Z`;u+=m(`path`,{...i(e),d:f})}let r=t;for(let i of e.children){let a=(n-t)*i.value/e.value;d(i,r,r+a),r+=a}};return d(r,0,Mn),{marks:u,hits:``}}});var Nn=e=>e>0&&e<.005?`<1%`:`${Math.round(e*100)}%`;s(`marimekko`,{noun:`Marimekko`,draw(e){let{plot:t,spec:n,shaped:r}=e,{categories:i,series:a,cells:o}=r,s=new Map,c=i.map(()=>0);for(let e of o){let t=Math.max(0,e.value??0);s.set(`${e.ci}/${e.si}`,t),c[e.ci]=(c[e.ci]??0)+t}let l=c.reduce((e,t)=>e+t,0);if(!l)return{marks:``,hits:``};let[u,d]=[t.y+2,t.y+t.h-20],f=t.w-4*(i.length-1),h=``,v=``,y=t.x;return i.forEach((i,o)=>{let b=c[o]??0,x=f*b/l,S=d;for(let t of r.visible){let r=s.get(`${o}/${t}`);if(!r)continue;let c=(d-u)*r/b,l=e.fmt(n.y,r),f={"data-maya":`mark`,"data-key":g(a[t],i),"data-c":o,"data-s":t%8,"data-x":i,"data-series":a[t],"data-y":r,"data-f":`${l} (${Nn(r/b)})`};if(S-=c,h+=m(`rect`,{...f,x:p(y),y:p(S),width:p(x),height:p(c)}),v+=_(f,y,S,x,c),n.labels&&c>=16){let t=Nn(r/b);e.label(y+x/2,S+c/2,`${l} (${t})`.length*7.2+4<=x?`${l} (${t})`:t,`center`)}}x>0&&e.label(y+x/2,t.y+t.h-20,i,`below`),y+=x+4}),{marks:h,hits:v}}}),s(`waffle`,{noun:`Waffle`,draw(e){let{plot:t,spec:n,shaped:r}=e,i=r.categories.map(()=>0);for(let e of r.cells)i[e.ci]=(i[e.ci]??0)+Math.max(0,e.value??0);let a=i.reduce((e,t)=>e+t,0);if(!a)return{marks:``,hits:``};let o=i.map(e=>Math.floor(e/a*100)),s=100-o.reduce((e,t)=>e+t,0);i.map((e,t)=>[e/a*100%1,t]).sort((e,t)=>t[0]-e[0]||e[1]-t[1]).slice(0,s).forEach(([,e])=>o[e]=(o[e]??0)+1);let c=Math.min(t.w,t.h)/10,[l,u]=[t.x+(t.w-c*10)/2,t.y+(t.h-c*10)/2],d=Math.min(3,c*.12),h=``,_=``,v=0;r.categories.forEach((t,r)=>{let s=i[r]??0;for(let i=0;i<(o[r]??0);i++,v++){let[o,f]=[l+v%10*c,u+Math.floor(v/10)*c],y={"data-maya":`mark`,"data-key":g(`w`,t,i),"data-c":v,"data-s":r%8,"data-x":t,"data-series":``,"data-y":s,"data-f":`${e.fmt(n.y,s)} (${Nn(s/a)})`};h+=m(`rect`,{...y,x:p(o+d/2),y:p(f+d/2),width:p(c-d),height:p(c-d)}),_+=m(`rect`,{...y,"data-maya":`hit`,x:p(o),y:p(f),width:p(c),height:p(c),fill:`transparent`})}});let y=`<div class="maya-legend" data-maya="legend">`+r.categories.map((e,t)=>`<span data-s="${t%8}"><i></i>${f(e)} ${Nn((i[t]??0)/a)}</span>`).join(``)+`</div>`;return{marks:h,hits:_,legend:y}}});var Pn=12,Fn=8;s(`sankey`,{noun:`Sankey`,check(e,t){(!Array.isArray(e.path)||e.path.length<2)&&t(`invalid-option`,`path`,`spec.path on "sankey" needs at least 2 levels.`,`Example: path: ["source", "target"] (outer to inner).`)},draw(e){let{spec:t,plot:n}=e,r=t.path,i=r.length,a=[],o=r.map(()=>new Map),s=new Map,c=(e,t)=>{let n=o[e].get(t);return n||(n={lv:e,name:t,i:a.length,in:0,out:0,v:0,y:0},o[e].set(t,n),a.push(n)),n};for(let n of t.data){let a=n[t.y];if(typeof a!=`number`)continue;a>0||e.fail(`non-positive-value`,t.y,`spec.${t.y} is ${a}, but sankey sizes must be positive.`);let o=c(0,String(n[r[0]]));for(let e=1;e<i;e++){let t=c(e,String(n[r[e]])),i=o.i+`\0`+t.i,l=s.get(i);l||s.set(i,l={s:o,t,vals:[],v:0,sy:0,ty:0}),l.vals.push(a),o=t}}let l=e.agg(t.aggregate),u=[...s.values()];for(let n of u)n.v=l(n.vals)??0,n.v>0||e.fail(`non-positive-value`,t.y,`link ${n.s.name} to ${n.t.name} is ${n.v}, but sankey sizes must be positive.`),n.s.out+=n.v,n.t.in+=n.v;for(let e of a)e.v=Math.max(e.in,e.out);let d=e=>a.filter(t=>t.lv===e).sort((e,t)=>t.v-e.v),f=1/0;for(let e=0;e<i;e++){let t=d(e),r=t.reduce((e,t)=>e+t.v,0);r>0&&(f=Math.min(f,(n.h-Fn*(t.length-1))/r))}f>0&&f<1/0||(f=0);for(let e=0;e<i;e++){let t=n.y;for(let n of d(e))n.y=t,t+=n.v*f+Fn}let h=e=>n.x+e.lv*(n.w-Pn)/(i-1);for(let e of a){let t=e.y;for(let n of u.filter(t=>t.s===e).sort((e,t)=>e.t.y-t.t.y))n.sy=t,t+=n.v*f;t=e.y;for(let n of u.filter(t=>t.t===e).sort((e,t)=>e.s.y-t.s.y))n.ty=t,t+=n.v*f}let _=0,v=``;for(let n of u){let[r,i,a,o]=[h(n.s)+Pn,h(n.t),n.v*f,(h(n.s)+Pn+h(n.t))/2],[s,c]=[n.sy,n.ty],l=`M${p(r)} ${p(s)}C${p(o)} ${p(s)} ${p(o)} ${p(c)} ${p(i)} ${p(c)}L${p(i)} ${p(c+a)}C${p(o)} ${p(c+a)} ${p(o)} ${p(s+a)} ${p(r)} ${p(s+a)}Z`;v+=m(`path`,{"data-maya":`link`,"data-key":g(`k`,n.s.lv,n.s.name,n.t.name),"data-c":_++,"data-s":n.s.i%8,"data-x":`${n.s.name} → ${n.t.name}`,"data-series":``,"data-y":n.v,"data-f":e.fmt(t.y,n.v),d:l})}for(let n of a){let r=n.v*f;v+=m(`rect`,{"data-maya":`mark`,"data-key":g(`n`,n.lv,n.name),"data-c":_++,"data-s":n.i%8,"data-x":n.name,"data-series":``,"data-y":n.v,"data-f":e.fmt(t.y,n.v),"data-depth":n.lv,x:p(h(n)),y:p(n.y),width:Pn,height:p(r)});let a=n.lv===i-1;e.label(a?h(n)-4:h(n)+Pn+4,n.y+r/2,n.name,a?`end`:`start`)}return{marks:v,hits:``}}});var $=8,In=e=>{let t=[...e];return t.length>14?t.slice(0,13).join(``)+`…`:e};s(`chord`,{noun:`Chord`,draw(e){let{spec:t,plot:n}=e,[r,i]=t.path,a=[],o=[new Map,new Map],s=new Map,c=(e,t)=>{let n=o[e].get(t);return n||(n={lv:e,name:t,i:a.length,s:0,v:0,a:0},o[e].set(t,n),a.push(n)),n};for(let n of t.data){let a=n[t.y];if(typeof a!=`number`)continue;a>0||e.fail(`non-positive-value`,t.y,`spec.${t.y} is ${a}, but chord sizes must be positive.`);let o=c(0,String(n[r])),l=c(1,String(n[i])),u=o.i+`\0`+l.i,d=s.get(u);d||s.set(u,d={s:o,t:l,vals:[],v:0}),d.vals.push(a)}let l=e.agg(t.aggregate),u=[...s.values()];for(let n of u)n.v=l(n.vals)??0,n.v>0||e.fail(`non-positive-value`,t.y,`link ${n.s.name} to ${n.t.name} is ${n.v}, but chord sizes must be positive.`),n.s.v+=n.v,n.t.v+=n.v;a.sort((e,t)=>e.lv-t.lv||e.i-t.i).forEach((e,t)=>e.s=t%8);let d=u.reduce((e,t)=>e+t.v,0);if(!(d>0))return{marks:``,hits:``};let f=.1,h=.03,_=[0,1].map(e=>a.filter(t=>t.lv===e)),v=Math.min(..._.map(e=>(Math.PI-f-h*(e.length-1))/d));for(let e of[0,1]){let t=_[e].sort((t,n)=>(e?n.v-t.v:t.v-n.v)||t.i-n.i),n=e?f/2:Math.PI+f/2;for(let e of t)e.a=n,n+=e.v*v+h}let y=Math.min(Math.max(...a.map(e=>In(e.name).length))*7.2+4,n.w*.28),b=Math.max(12,Math.min(n.h/2-$-22,n.w/2-$-y-10)),[x,S]=[n.x+n.w/2,n.y+n.h/2],C=(e,t)=>`${p(x+t*Math.sin(e))} ${p(S-t*Math.cos(e))}`,w=(e,t,n,r)=>`A${p(n)} ${p(n)} 0 0 ${r} ${C(r?t:e,n)}`,T=new Map;for(let e of a){let t=u.filter(t=>(e.lv?t.t:t.s)===e).sort((t,n)=>e.lv?n.s.a-t.s.a:n.t.a-t.t.a),n=e.a;for(let r of t){let t=T.get(r)??{sa:0,ta:0};e.lv?t.ta=n:t.sa=n,T.set(r,t),n+=r.v*v}}let E=e=>t.titles.get(e)??e,D=0,O=``;for(let n of u){let{sa:r,ta:i}=T.get(n),[a,o]=[r+n.v*v,i+n.v*v],s=`M${C(r,b)}${w(r,a,b,1)}Q${p(x)} ${p(S)} ${C(i,b)}${w(i,o,b,1)}Q${p(x)} ${p(S)} ${C(r,b)}Z`;O+=m(`path`,{"data-maya":`link`,"data-key":g(`k`,0,n.s.name,n.t.name),"data-c":D++,"data-s":n.s.s,"data-x":`${n.s.name} -> ${n.t.name}`,"data-series":``,"data-y":n.v,"data-f":e.fmt(t.y,n.v),d:s})}for(let n of a){let[a,o]=[n.a,n.a+n.v*v],s=`M${C(a,b+$)}${w(a,o,b+$,1)}L${C(o,b)}${w(a,o,b,0)}Z`;O+=m(`path`,{"data-maya":`mark`,"data-key":g(`n`,n.lv,n.name),"data-c":D++,"data-s":n.s,"data-x":n.name,"data-series":E(n.lv?i:r),"data-y":n.v,"data-f":e.fmt(t.y,n.v),"data-depth":n.lv,d:s})}for(let t of a){let n=t.a+t.v*v/2,[r,i]=[Math.sin(n),Math.cos(n)],a=b+$+4,[o,s]=[x+a*r,S-a*i],c=In(t.name);e.label(o,s,c,Math.abs(r)<.25?i>0?`above`:`below`:r>0?`start`:`end`)}return{marks:O,hits:``}}});var Ln=`AK Alaska 0 0|ME Maine 10 0|WI Wisconsin 5 1|VT Vermont 9 1|NH New Hampshire 10 1|WA Washington 0 2|ID Idaho 1 2|MT Montana 2 2|ND North Dakota 3 2|MN Minnesota 4 2|IL Illinois 5 2|MI Michigan 6 2|NY New York 8 2|MA Massachusetts 9 2|OR Oregon 0 3|NV Nevada 1 3|WY Wyoming 2 3|SD South Dakota 3 3|IA Iowa 4 3|IN Indiana 5 3|OH Ohio 6 3|PA Pennsylvania 7 3|NJ New Jersey 8 3|CT Connecticut 9 3|RI Rhode Island 10 3|CA California 0 4|UT Utah 1 4|CO Colorado 2 4|NE Nebraska 3 4|MO Missouri 4 4|KY Kentucky 5 4|WV West Virginia 6 4|VA Virginia 7 4|MD Maryland 8 4|DE Delaware 9 4|AZ Arizona 1 5|NM New Mexico 2 5|KS Kansas 3 5|AR Arkansas 4 5|TN Tennessee 5 5|NC North Carolina 6 5|SC South Carolina 7 5|DC District of Columbia 8 5|OK Oklahoma 3 6|LA Louisiana 4 6|MS Mississippi 5 6|AL Alabama 6 6|GA Georgia 7 6|HI Hawaii 0 7|TX Texas 3 7|FL Florida 7 7|PR Puerto Rico 8 8`.split(`|`).map(e=>{let t=/^(\S+) (.+) (\d+) (\d+)$/.exec(e);return{code:t[1],name:t[2],c:+t[3],r:+t[4]}}),Rn=new Map;for(let e of Ln)Rn.set(e.code.toLowerCase(),e).set(e.name.toLowerCase(),e);var zn=e=>Rn.get(String(e).trim().toLowerCase()),Bn=e=>{let t=e.trim().toLowerCase(),n=``,r=4;for(let[e,i]of Rn){let a=Math.abs(t.length-e.length)+[...e].filter(e=>!t.includes(e)).length+[...t].filter(t=>!e.includes(t)).length;a<r&&([r,n]=[a,e.length===2?i.code:i.name])}return n},Vn=Math.sqrt(3),Hn=Math.max(...Ln.map(e=>e.c))+1.5,Un=Math.max(...Ln.map(e=>e.r))+1;s(`hexmap`,{noun:`Hex map`,check(e,t){e.data.forEach((n,r)=>{let i=n[e.x];if(i==null||zn(i))return;let a=Bn(String(i));t(`unknown-state`,`data[${r}].${e.x}`,`"${i}" is not a US state`,a&&`Did you mean "${a}"?`,`Use a two-letter code or full name (50 states, DC, PR).`)})},draw(e){let{spec:t,shaped:n,plot:r}=e,i=Math.min(r.w/(Vn*Hn),r.h/(1.5*(Un-1)+2)),a=r.x+(r.w-Vn*i*Hn)/2,o=r.y+(r.h-i*(1.5*(Un-1)+2))/2,s=i*.94,c=e=>[a+Vn*i*(e.c+.5+e.r%2/2),o+i+1.5*i*e.r],l=e=>{let[t,n]=c(e);return`M`+[0,1,2,3,4,5].map(e=>{let r=Math.PI/3*e-Math.PI/6;return`${p(t+s*Math.cos(r))} ${p(n+s*Math.sin(r))}`}).join(`L`)+`Z`},u=new Map;n.cells.forEach(e=>{let t=zn(n.categories[e.ci]);t&&e.value!==null&&u.set(t,(u.get(t)??0)+e.value)});let d=[...u.values()],h=Math.min(...d),_=Math.max(...d),v=``;for(let e of Ln)v+=m(`path`,{d:l(e),fill:`none`});let y=``,b=0;for(let[n,r]of u){let[i,a]=c(n);y+=m(`path`,{"data-maya":`mark`,"data-key":g(`g`,n.code),"data-c":b++,"data-s":0,"data-x":n.name,"data-series":``,"data-f":e.fmt(t.y,r),"data-y":r,"data-neg":r<0,"data-tone":e.tone(r),"data-q":_>h?Math.min(9,Math.floor((r-h)/(_-h)*10)):9,d:l(n)}),e.label(i,a,n.code,`center`)}let x=_>h?`<div class="maya-legend" data-maya="ramp"><span>${f(e.fmt(t.y,h))}</span><i></i><span>${f(e.fmt(t.y,_))}</span></div>`:``;return{marks:y,hits:``,grid:v,legend:x}}});var Wn=Math.PI*2,Gn=11;s(`radial`,{noun:`Radial bar`,draw(e){let{spec:t,shaped:n,plot:r}=e,i=n.categories.length;if(!i||!n.cells.length)return{marks:``,hits:``};let a=n.cells.map(e=>({c:e,v:Math.max(0,e.value??0),y0:0,y1:0})),o=Array(i).fill(0);for(let e of a)e.y0=o[e.c.ci],e.y1=o[e.c.ci]=e.y0+e.v;let s=A(0,Math.max(0,...o),5),c=s.domain[1],l=n.categories.map(n=>{let r=e.fmt(t.x,n);return r.length>Gn?r.slice(0,10)+`…`:r}),u=Math.max(...l.map(e=>e.length))*7.2+6,[d,_]=[r.x+r.w/2,r.y+r.h/2],v=Math.max(10,Math.min(r.w/2-u,r.h/2-16)),y=v*.25,b=e=>y+e/c*(v-y),x=(e,t)=>`${p(d+e*Math.sin(t))} ${p(_-e*Math.cos(t))}`,S=i>1?.35:0,C=(Wn-S)/i,w=Math.min(C*.1,.04),T=(e,t,n,r)=>{let i=Math.min(r,n+Wn*359.99/360),a=+(i-n>Math.PI);return`M${x(t,n)}A${p(t)} ${p(t)} 0 ${a} 1 ${x(t,i)}L${x(e,i)}A${p(e)} ${p(e)} 0 ${a} 0 ${x(e,n)}Z`},E=``,D=``;a.forEach((r,i)=>{let a=n.categories[r.c.ci],o=n.series[r.c.si],[s,c]=[S/2+r.c.ci*C+w,S/2+(r.c.ci+1)*C-w],[l,u]=[b(r.y0),b(r.y1)],d={"data-key":g(o,a),"data-c":i,"data-s":r.c.si%8,"data-x":e.fmt(t.x,a),"data-series":o,"data-y":r.c.value,"data-f":e.fmt(t.y,r.c.value),"data-tone":e.tone(r.v),"data-other":a===h};E+=m(`path`,{"data-maya":`mark`,...d,d:T(l,u,s,c)});let f=(l+u)/2,[p,_]=[Math.max(0,f-Math.max(12,(u-l)/2)),f+Math.max(12,(u-l)/2)],v=Math.max((c-s)/2,12/f||0),y=(s+c)/2;(u-l<24||(c-s)*f<24)&&(D+=m(`path`,{"data-maya":`hit`,...d,d:T(p,_,y-v,y+v),fill:`transparent`}))});let O=``,k=``,j=s.values.filter(e=>e>0);for(let n of j.length>3?j.filter((e,t)=>t%2):j)O+=m(`circle`,{cx:p(d),cy:p(_),r:p(b(n)),fill:`none`}),k+=m(`text`,{x:p(d),y:p(_-b(n)+4),"text-anchor":`middle`,"data-ring":``},f(e.fmt(t.y,n)));let M=[];return l.forEach((e,t)=>{let n=S/2+(t+.5)*C,[r,i]=[d+(v+6)*Math.sin(n),_-(v+6)*Math.cos(n)],a=Math.sin(n),o=Math.abs(a)<.2?`middle`:a>0?`start`:`end`,s=e.length*7.2,c=o===`middle`?r-s/2:o===`start`?r:r-s;M.some(e=>c<e[2]&&c+s>e[0]&&i-7<e[3]&&i+7>e[1])||(M.push([c,i-7,c+s,i+7]),k+=m(`text`,{x:p(r),y:p(i),"text-anchor":o,"dominant-baseline":`middle`,"data-cat":``},f(e)))}),{marks:E,hits:D,labels:k,grid:O}}}),globalThis.maya=En})();
|
|
1
|
+
/*! mayacharts v0.3.0 | MIT | https://github.com/BbekShr/mayacharts */
|
|
2
|
+
(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n=`0.3.0`,r=Symbol.for(`mayacharts.marks@0`);Object.hasOwn(globalThis,r)||Object.defineProperty(globalThis,r,{value:new Map});var i=globalThis[r],a=[`bar`,`line`,`area`,`scatter`,`heatmap`,`waterfall`,`kpi`,`dumbbell`,`ridgeline`,`beeswarm`,`parallel`,`table`],o={treemap:`hierarchy`,sunburst:`hierarchy`,marimekko:`hierarchy`,waffle:`hierarchy`,sankey:`flow`,chord:`flow`,radial:`radial`,hexmap:`geo`};function s(e,t){i.has(e)||i.set(e,t),typeof globalThis.dispatchEvent==`function`&&globalThis.dispatchEvent(new Event(`maya-register`))}var c=()=>[...i.keys()],l={noData:`No data`,other:`Other`,back:`Back`,reset:`Reset zoom`,showing:`Showing {0}`,drilledInto:`Drilled into {0}`,zoomedTo:`Zoomed to {0} – {1}`,selected:`{0} selected`,selectionCleared:`Selection cleared`,chartOf:`{0} chart of {1} by {2}`,chartOfAll:`{0} chart of {1}`,firstOf:`First {0} of {1} rows`,measures:`Measure`,crumbs:`Drill path`,positive:`positive`,negative:`negative`,above:`above target`,below:`below target`,vs:`{0} vs {1}`,sortedBy:`Sorted by {0}, {1}`,ascending:`ascending`,descending:`descending`,ofTarget:`{0} of target {1}`};function u(e,t,...n){return((e.text&&Object.hasOwn(e.text,t)?e.text[t]:void 0)??l[t]).replace(/\{(\d)\}/g,(e,t)=>String(n[+t]??``))}var d={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`};function f(e){return String(e).replace(/[&<>"']/g,e=>d[e])}function p(e){return Math.round(e*100)/100}function m(e,t,n){let r=``;for(let e in t){let n=t[e];n!=null&&n!==!1&&(r+=n===!0?` ${e}=""`:` ${e}="${f(n)}"`)}return n===void 0?`<${e}${r}/>`:`<${e}${r}>${n}</${e}>`}var h=`\0other`,g=(...e)=>e.map(e=>encodeURIComponent(String(e).replace(/\p{Cs}/gu,`�`)).replace(/~/g,`%7E`)).join(`~`);function _(e,t,n,r,i){let[a,o]=[Math.max(r,24),Math.max(i,24)];return r<24||i<24?m(`rect`,Object.assign({"data-maya":`hit`},e,{"data-maya":`hit`,x:p(t-(a-r)/2),y:p(n-(o-i)/2),width:p(a),height:p(o),fill:`transparent`})):``}var v=e=>e.title??`${e.titles.get(e.y)??e.y}`+(e.x||e.path.length?` by ${e.titles.get(e.x)??(e.x||e.path.join(` / `))}`:``),y=[`scatter`,`treemap`,`sunburst`,`sankey`,`hexmap`],b=1e3;function x(e,t,n,r){if(e.description!==null)return e.description;let i=t=>e.titles.get(t)??t,a=e.x||e.path.length?u(e,`chartOf`,r,i(e.y),e.x?i(e.x):e.path.join(` / `)):u(e,`chartOfAll`,r,i(e.y));if(e.series!==null&&t.series.length&&(a+=`, ${e.stack?`stacked`:`grouped`} by ${i(e.series)} (${t.series.join(`, `)})`),y.includes(e.type))return`${a}. ${e.data.length} rows.`;let o=0,s=1/0,c=-1/0;for(let e of t.cells)e.value!==null&&(o++,s=Math.min(s,e.value),c=Math.max(c,e.value));let l=t=>n(e.y,t);return o?o===1?`${a}. 1 value: ${l(s)}.`:`${a}. ${o} values from ${l(s)} to ${l(c)}.`:a+`. No data.`}function S(e,t,n,r){let i=t=>e.titles.get(t)??t,a=(t,i)=>{if(i==null)return``;let a=t===e.y&&typeof i==`number`?r(i):null;return f(n(t,i))+(a?` (${f(a)})`:``)},o=t=>t>b?u(e,`firstOf`,b,t):v(e),s,c,l;if(y.includes(e.type)){let t=[...new Set([e.x,...e.path,e.series,e.name,e.size,e.y,typeof e.colorBy==`string`&&e.colorBy!==`sign`?e.colorBy:null].filter(e=>!!e))];l=e.data.length,s=t.map(e=>`<th>${f(i(e))}</th>`).join(``),c=e.data.slice(0,b).map(e=>`<tr>${t.map(t=>`<td>${a(t,e[t])}</td>`).join(``)}</tr>`).join(``)}else{let n=e.series===null?[i(e.y)]:t.visible.map(e=>t.series[e]);l=t.categories.length,s=`<th>${f(i(e.x))}</th>`+n.map(e=>`<th>${f(e)}</th>`).join(``);let r=new Map(t.cells.map(e=>[e.ci+`,`+e.si,e.value]));c=``;for(let n=0;n<Math.min(l,b);n++){c+=`<tr><th scope="row">${f(t.categories[n])}</th>`;for(let i of t.visible)c+=`<td>${a(e.y,r.get(n+`,`+i))}</td>`;c+=`</tr>`}}return`<table class="maya-sr"><caption>${f(o(l))}</caption><thead><tr>${s}</tr></thead><tbody>${c}</tbody></table>`}var C=e=>{for(let t=0;t<8;t++)if(Math.abs(e*10**t-Math.round(e*10**t))<1e-9)return t;return 8},w=`year month day hour minute second weekday era timeZone dateStyle timeStyle fractionalSecondDigits hour12 dayPeriod timeZoneName`.split(` `),T={date:{dateStyle:`medium`},month:{month:`short`,year:`numeric`},year:{year:`numeric`},time:{timeStyle:`short`},datetime:{dateStyle:`medium`,timeStyle:`short`}};function E(e,t=e.y,n){typeof t==`number`&&([t,n]=[e.y,t]);let r=e.format.get(t),i=Intl.NumberFormat.supportedLocalesOf(e.locale).length?e.locale:`en-US`,a=n===void 0?2:C(n),o=``,s=``,c=null,l=null,u=null,d=typeof r==`string`?r:`auto`;if(typeof r==`string`&&Object.hasOwn(T,r))c=new Intl.DateTimeFormat(i,{timeZone:`UTC`,...T[r]});else if(typeof r==`object`&&r){let{prefix:e=``,suffix:t=``,...n}=r;[o,s]=[String(e),String(t)],w.some(e=>Object.hasOwn(n,e))?c=new Intl.DateTimeFormat(i,{timeZone:`UTC`,...n}):l=new Intl.NumberFormat(i,n)}if(!c&&!l){let t=d===`integer`?{maximumFractionDigits:0}:d===`decimal`?{minimumFractionDigits:2,maximumFractionDigits:2}:d===`compact`?{notation:`compact`,maximumFractionDigits:1}:d===`percent`?{style:`percent`,minimumFractionDigits:n===void 0?0:C(n*100),maximumFractionDigits:n===void 0?1:Math.max(1,C(n*100))}:d===`currency`?{style:`currency`,currency:e.currency,minimumFractionDigits:n!==void 0&&n>=1?0:a,maximumFractionDigits:n!==void 0&&n>=1?0:Math.max(a,2)}:{maximumFractionDigits:Math.max(a,2)};l=new Intl.NumberFormat(i,t),d===`percent`&&n===void 0&&(u=new Intl.NumberFormat(i,{...t,maximumFractionDigits:2}))}return e=>{if(e==null)return``;let t;if(c){let n=typeof e==`string`&&/^-?\d+$/.test(e)?new Date(+e):typeof e==`number`||typeof e==`string`||e instanceof Date?new Date(e):NaN;t=Number.isNaN(+n)?String(e):c.format(n)}else t=typeof e==`number`?(u&&e&&Math.abs(e)<.01?u:l).format(e):String(e);return o+t+s}}function D(e,t,n=.2,r=.1){let i=e.length,a=t[1]-t[0],o=a/(i-n+r*2)||1,s=t[0]+(a-o*(i-n))/2;return{domain:e,step:o,bandwidth:o*(1-n),at:e=>s+o*e}}function O(e,t){let[n,r]=e,[i,a]=t,o=r===n?0:(a-i)/(r-n);return{domain:e,range:t,of:e=>r===n?(i+a)/2:i+(e-n)*o}}var k=e=>parseFloat(e.toPrecision(12));function A(e,t,n=5){t===e&&([e,t]=e===0?[0,1]:[e-1,t+1]);let r=10**Math.floor(Math.log10((t-e)/n)),i=r,a=1/0,o=e<0&&t>0;for(let s of[1,2,2.5,5,10]){let c=r*s,l=Math.floor(e/c+1e-9),u=Math.ceil(t/c-1e-9)-l+1,d=o?u>n+3?1/0:(u-1+Math.abs(u-n)/1e3)*c:Math.abs(u-n);d<a-1e-9*Math.abs(d)&&(a=d,i=c)}let s=Math.floor(e/i+1e-9),c=Math.ceil(t/i-1e-9),l=[];for(let e=s;e<=c;e++)l.push(k(e*i));return{domain:[k(s*i),k(c*i)],values:l,step:k(i)}}var j=e=>e>=4352&&e<=4447||e>=11904&&e<=42191||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65072&&e<=65103||e>=65280&&e<=65376||e>=65504&&e<=65510,M=e=>{let t=0,n=0;for(let r of e)j(r.codePointAt(0))?n++:t++;return t*7.2+n*12},N=e=>M(e)+8,P=e=>e.reduce((e,t)=>Math.max(e,N(t)),0);function ee(e,t){if(M(e)<=t)return e;let n=``,r=0;for(let i of e){if(r+=M(i),r+7.2>t)break;n+=i}return n+`…`}function F(e,t,n){let r=(t.field===e.y?e.yDomain:e.xDomain)??null,[i,a]=r??t.domain,[o,s]=i>a?[a,i]:[i,a],c=A(o,s),l=r?c.values.filter(e=>e>=o&&e<=s):c.values;return r&&!l.some(e=>Math.abs(e-a)<c.step/2)&&(l.push(a),l.sort((e,t)=>e-t)),{domain:r??c.domain,values:l,labels:l.map(e=>n(t.field,e,c.step))}}function te(e,[t,n,r],i,a){let{width:o,height:s}=i,c=t&&t.kind===`linear`?F(e,t,a):null,l=n&&n.kind===`linear`?F(e,n,a):null,u=t&&!c?t.domain.map(e=>a(t.field,e)):[],d=n&&!l?n.domain.map(e=>a(n.field,e)):[],h=l?l.labels:d.map(e=>ee(e,o*.4-8)),g=r&&r.kind===`linear`?F(e,r,a):null,_=g&&r&&e.titles.get(r.field),v=n&&e.titles.get(n.field),y=t&&e.titles.get(t.field),b=Math.max((e.yAxis&&n?P(h)+10:8)+(v?18:0),c?M(c.labels[0]??``)/2+2:0),x=(e.xAxis&&t?24:8)+(y?18:0),S={x:b,y:10,w:Math.max(1,o-b-(g?(e.yAxis?P(g.labels)+4:8)+(_?18:0):Math.max(12,c?M(c.labels.at(-1)??``)/2+2:0))),h:Math.max(1,s-10-x)},C=t?t.kind===`band`?D(t.domain,[S.x,S.x+S.w]):O(c.domain,[S.x,S.x+S.w]):null,w=n?n.kind===`band`?D(n.domain,[S.y,S.y+S.h]):O(l.domain,[S.y+S.h,S.y]):null,T=g?O(g.domain,[S.y+S.h,S.y]):null,E=``;if(e.grid){let e=p(S.x+S.w);if(l)for(let t of l.values){let n=p(w.of(t));E+=m(`line`,{x1:p(S.x),x2:e,y1:n,y2:n})}if(c)for(let e of c.values){let t=p(C.of(e));E+=m(`line`,{x1:t,x2:t,y1:p(S.y),y2:p(S.y+S.h)})}}let k=``;if(e.yAxis&&n){if(l)l.values.forEach((e,t)=>{k+=m(`text`,{x:p(S.x-6),y:p(w.of(e)),"text-anchor":`end`,"dominant-baseline":`middle`},f(l.labels[t]))});else{let e=w,t=Math.max(1,Math.ceil(14/(S.h/Math.max(1,n.domain.length))));d.forEach((n,r)=>{if(r%t)return;let i=h[r];k+=m(`text`,{x:p(S.x-6),y:p(e.at(r)+e.bandwidth/2),"text-anchor":`end`,"dominant-baseline":`middle`},f(i)+(i===n?``:m(`title`,{},f(n))))})}}if(v){let e=p(S.y+S.h/2);k+=m(`text`,{x:9,y:e,"text-anchor":`middle`,transform:`rotate(-90 9 ${e})`},f(v))}if(g&&T&&(e.yAxis&&g.values.forEach((e,t)=>{k+=m(`text`,{x:p(S.x+S.w+6),y:p(T.of(e)),"text-anchor":`start`,"dominant-baseline":`middle`},f(g.labels[t]))}),_)){let[e,t]=[o-9,p(S.y+S.h/2)];k+=m(`text`,{x:e,y:t,"text-anchor":`middle`,transform:`rotate(90 ${e} ${t})`},f(_))}let A=``;if(e.xAxis&&t){let e=p(S.y+S.h+16);if(c){let t=Math.max(1,Math.ceil(P(c.labels)/(S.w/Math.max(1,c.values.length-1))));c.values.forEach((n,r)=>{r%t||(A+=m(`text`,{x:p(C.of(n)),y:e,"text-anchor":`middle`},f(c.labels[r])))})}else{let t=C,n=Math.max(1,Math.ceil(P(u)/(S.w/Math.max(1,u.length))));u.forEach((r,i)=>{i%n===0&&(A+=m(`text`,{x:p(t.at(i)+t.bandwidth/2),y:e,"text-anchor":`middle`},f(r)))})}}y&&(A+=m(`text`,{x:p(S.x+S.w/2),y:s-4,"text-anchor":`middle`},f(y)));let j=c&&l,N=t?.kind===`band`?t:n?.kind===`band`?n:null;return{plot:S,x:C,y:w,y2:T,grid:E,ay:k,ax:A,attrs:{"data-plot":`${p(S.x)} ${p(S.y)} ${p(S.w)} ${p(S.h)}`,"data-n":j||!N?null:N.domain.length,"data-xd":j?c.domain.join(` `):null,"data-yd":j?l.domain.join(` `):null}}}function ne(e){let t=0,n=0;return{add(r){n=t===0||e===`sum`||e===`mean`?n+r:e===`min`?Math.min(n,r):e===`max`?Math.max(n,r):n,t++},value:()=>e===`count`?t:t===0?null:e===`mean`?n/t:n}}function re(e,t={}){let{hidden:n=[],window:r}=Array.isArray(t)?{hidden:t}:t,i=[],a=new Map,o=new Map;for(let t of e.data){let n=String(t[e.x]),r=e.series===null?``:String(t[e.series]),s=a.get(r);s===void 0&&a.set(r,s=i.push(r)-1);let c=o.get(n);c||o.set(n,c={label:n,rows:[],vals:[]}),c.rows.push([s,t[e.y],e.y2===null?void 0:t[e.y2]])}let s=t=>{let n=new Map;for(let[r,i]of t){let t=n.get(r);t||n.set(r,t=ne(e.aggregate)),typeof i==`number`&&t.add(i)}return i.map((e,t)=>n.get(t)?.value()??null)},c=t=>{let n=ne(e.aggregate);for(let[,,e]of t.rows)typeof e==`number`&&n.add(e);t.y2=n.value()},l=[...o.values()];for(let e of l)e.vals=s(e.rows),c(e);let u=e=>e.vals.reduce((e,t)=>e+(t??0),0);if(e.sort){let t=e.sort===`asc`?1:-1;l=l.map(e=>[e,u(e)]).sort((e,n)=>t*(e[1]-n[1])).map(e=>e[0])}if(e.limit!==null&&l.length>e.limit){let t=new Set(l.map(e=>[e,u(e)]).sort((e,t)=>t[1]-e[1]).slice(0,e.limit).map(e=>e[0])),n={label:h,rows:l.filter(e=>!t.has(e)).flatMap(e=>e.rows),vals:[]};n.vals=s(n.rows),c(n),l=[...l.filter(e=>t.has(e)),n]}let d=e.type===`waterfall`,f=new Map;if(d){let t=0;for(let n of l)e.totals.includes(n.label)?f.set(n,[0,t]):f.set(n,[t,t+=u(n)])}if(r?.length===2&&l.length){let e=Math.min(l.length-1,Math.max(0,Math.trunc(r[1]))),t=Math.min(e,Math.max(0,Math.trunc(r[0])));l=l.slice(t,e+1)}let p=[];i.forEach((e,t)=>n.includes(e)||p.push(t));let m=[],g=0,_=0;return l.forEach((t,n)=>{let r=0,i=0;for(let a of p){let o=t.vals[a]??null,s=o??0,[c,l]=d?f.get(t):[0,s];e.stack&&(s<0?[c,l]=[i,i+=s]:[c,l]=[r,r+=s]),g=Math.min(g,c,l),_=Math.max(_,c,l),m.push({ci:n,si:a,value:o,y0:c,y1:l})}}),{categories:l.map(e=>e.label),totals:l.map(t=>e.totals.includes(t.label)),series:i,visible:p,cells:m,extent:[g,_],y2:e.y2===null?[]:l.map(e=>e.y2??null)}}function ie(e){let t=typeof e.colorBy==`string`&&e.colorBy!==`sign`?e.colorBy:null,n=new Map;if(t)for(let r of e.data){let i=r[t];if(typeof i!=`number`)continue;let a=String(r[e.x])+`\0`+(e.series===null?``:String(r[e.series]));(n.get(a)??n.set(a,ne(e.aggregate)).get(a)).add(i)}return(e,t)=>n.get(e+`\0`+t)?.value()??null}var ae=72;function oe(e){let t=[];for(let n of e.cells)t[n.ci]=n;let n=e.visible[0]??0,r=0,i=[];return e.categories.forEach((a,o)=>{let s=t[o];if(s){if(e.totals[o])return void i.push({ci:o,si:n,y0:0,y1:r,v:r,s:2});s.value!==null&&i.push({ci:o,si:n,y0:r,y1:r+=s.value,v:s.value,s:+(s.value<0)})}}),i}var se=(e,t)=>e.type===`waterfall`?oe(t):t.cells.flatMap(e=>e.value===null?[]:[{ci:e.ci,si:e.si,y0:e.y0,y1:e.y1,v:e.value,s:e.si%8}]),ce={noun:`Bar`,axes(e,t){let n=t.extent[0],r=t.extent[1];if(e.type===`waterfall`){n=r=0;for(let e of oe(t))n=Math.min(n,e.y0,e.y1),r=Math.max(r,e.y0,e.y1)}let i={kind:`band`,field:e.x,domain:t.categories},a={kind:`linear`,field:e.y,domain:[n,r]};if(e.y2!==null){let n=t.y2.filter(e=>e!==null);return[i,a,{kind:`linear`,field:e.y2,domain:[Math.min(0,...n),Math.max(0,...n)]}]}return e.horizontal?[a,i]:[i,a]},draw(e){let{spec:t,shaped:n}=e,r=t.horizontal,i=r?e.y:e.x,a=r?e.x:e.y,o=D(n.visible.map(e=>n.series[e]),[0,i.bandwidth],.1,0),s=ie(t),c=``,l=``;for(let u of se(t,n)){let d=n.visible.indexOf(u.si),f=t.stack||t.type===`waterfall`?i.bandwidth:o.bandwidth,v=Math.min(f,ae),y=i.at(u.ci)+(t.stack||t.type===`waterfall`?0:o.at(d))+(f-v)/2,[b,x]=[a.of(u.y0),a.of(u.y1)],S=Math.min(b,x),C=Math.abs(b-x),[w,T,E,D]=r?[S,y,C,v]:[y,S,v,C],O=n.categories[u.ci],k=n.series[u.si],A=s(O,k),j={"data-key":g(k,O),"data-c":u.ci,"data-s":u.s,"data-x":e.fmt(t.x,O),"data-series":k,"data-f":e.fmt(t.y,u.v),"data-y":u.v,"data-neg":u.v<0,"data-tone":e.tone(u.v),"data-q":A===null?null:e.q(A),"data-other":O===h,"data-total":n.totals[u.ci]};if(c+=m(`rect`,{"data-maya":`mark`,...j,x:p(w),y:p(T),width:p(E),height:p(D)}),l+=_(j,w,T,E,D),t.labels){let n=e.fmt(t.y,u.v),i=n.length*7.2+4,[a,o]=[w+E/2,T+D/2],s=u.v<0;r?i<=E&&D>=14?e.label(a,o,n,`center`):e.label(s?w-4:w+E+4,o,n,s?`end`:`start`):i<=E&&D>=16?e.label(a,o,n,`center`):e.label(a,s?T+D:T,n,s?`below`:`above`)}}if(e.y2&&t.y2!==null&&n.y2.length){let r=t.y2,a=n.series.length%8,o=t.titles.get(r)??r,s=``,u=!0,d=``;n.y2.forEach((c,f)=>{if(c===null){u=!0;return}let h=p(i.at(f)+i.bandwidth/2),v=p(e.y2.of(c));s+=`${u?`M`:`L`}${h} ${v}`,u=!1;let y=n.categories[f],b={"data-key":g(`\0y2`,y),"data-c":f,"data-s":a,"data-x":e.fmt(t.x,y),"data-series":o,"data-f":e.fmt(r,c),"data-y":c,"data-neg":c<0};d+=m(`circle`,{"data-maya":`mark`,...b,r:3,cx:h,cy:v}),l+=_(b,h-3,v-3,6,6),t.labels&&e.label(+h,+v,e.fmt(r,c),`above`)}),c+=m(`path`,{"data-maya":`line`,"data-key":g(`l`,`\0y2`),"data-s":a,pathLength:1,d:s||null})+d}return{marks:c,hits:l}}};function le(e,t){let n=[],r=new Map(t.categories.map((e,t)=>[e,t])),i=e.yDomain;return e.data.forEach((a,o)=>{let s=a[e.y];if(typeof s!=`number`||!Number.isFinite(s)||i&&(s<i[0]||s>i[1]))return;let c=e.x===``?0:r.get(String(a[e.x]));if(c===void 0)return;let l=t.series.indexOf(e.series===null?``:String(a[e.series]));if(!t.visible.includes(l))return;let u=e.name===null?null:a[e.name];n.push({i:o,v:s,ci:c,si:l,name:u==null?null:String(u),row:a})}),n}function ue(e,t,n){let r=e.map((e,t)=>t).sort((t,n)=>e[t]-e[n]||t-n),i=(2*t)**2,a=Array(e.length).fill(0),o=[],s=0;for(let c of r){let r=e[c];for(;s<o.length&&r-e[o[s]]>=2*t;)s++;let l=o.slice(s),u=[0];for(let t of l){let n=Math.sqrt(Math.max(0,i-(r-e[t])**2));u.push(a[t]+n,a[t]-n)}u.sort((e,t)=>Math.abs(e)-Math.abs(t)||t-e);let d=u.find(t=>l.every(n=>(r-e[n])**2+(t-a[n])**2>=i-1e-6))??0;d=Math.max(-n,Math.min(n,d)),a[c]=d,o.push(c)}return a}var de={noun:`Beeswarm`,axes(e,t){let n=1/0,r=-1/0;for(let i of le(e,t))n=Math.min(n,i.v),r=Math.max(r,i.v);n>r&&(n=r=0);let i=e.x===``?null:{kind:`band`,field:e.x,domain:t.categories};return[{kind:`linear`,field:e.y,domain:e.yDomain??[n,r]},i]},draw(e){let{spec:t,shaped:n,plot:r}=e,i=e.x,a=e.y,o=le(t,n),s=a?a.bandwidth:r.h,c=new Map;for(let e of o)(c.get(e.ci)??c.set(e.ci,[]).get(e.ci)).push(e);let l=1;for(let e of c.values())l=Math.max(l,e.length);let u=Math.max(3,Math.min(6,Math.sqrt(r.w*s/l)/4)),d=typeof t.colorBy==`string`&&t.colorBy!==`sign`?t.colorBy:null,f=new Map,h=``,v=``;for(let[o,l]of[...c].sort((e,t)=>e[0]-t[0])){let c=a?a.at(o)+a.bandwidth/2:r.y+r.h/2,y=l.map(e=>i.of(e.v)),b=ue(y,u+.5,Math.max(0,s/2-u));l.forEach((r,i)=>{let s=r.i;if(r.name!==null){let e=(f.get(r.name)??0)+1;f.set(r.name,e),s=e>1?`${r.name}#${e}`:r.name}let l=n.series[r.si],x=e.fmt(t.y,r.v),S=d?r.row[d]:null,C={"data-key":g(l,s),"data-c":r.i,"data-s":r.si%8,"data-x":r.name??(a?e.fmt(t.x,n.categories[o]):``),"data-series":l,"data-y":r.v,"data-f":x,"data-neg":r.v<0,"data-tone":e.tone(r.v),"data-q":typeof S==`number`?e.q(S):null},w=y[i],T=c+b[i];h+=m(`circle`,{"data-maya":`mark`,...C,r:p(u),cx:p(w),cy:p(T)}),v+=_(C,w-u,T-u,u*2,u*2),t.labels&&e.label(w,T-u,x,`above`)})}return{marks:h,hits:v}}},fe={noun:`Dumbbell`,axes(e,t){let n={kind:`band`,field:e.x,domain:t.categories},r={kind:`linear`,field:e.y,domain:t.extent};return e.horizontal?[r,n]:[n,r]},draw(e){let{spec:t,shaped:n}=e,r=t.horizontal,i=r?e.y:e.x,a=r?e.x:e.y,o=Math.max(3,Math.min(5,i.bandwidth/2-1)),s=new Map;for(let e of n.cells)e.value!==null&&e.si<2&&((s.get(e.ci)??s.set(e.ci,[]).get(e.ci))[e.si]=e.value);let c=``,l=``,u=``;for(let[d,f]of[...s].sort((e,t)=>e[0]-t[0])){let s=n.categories[d],v=i.at(d)+i.bandwidth/2,y=e=>r?[a.of(e),v]:[v,a.of(e)],[b,x]=f;if(b!==void 0&&x!==void 0){let[t,n]=y(b),[r,i]=y(x);c+=m(`line`,{"data-maya":`link`,"data-key":g(`k`,s),"data-c":d,"data-tone":e.tone(x-b),"stroke-width":2,x1:p(t),y1:p(n),x2:p(r),y2:p(i)})}for(let i of[0,1]){let a=f[i];if(a===void 0)continue;let[c,v]=y(a),b=n.series[i],x={"data-key":g(b,s),"data-c":d,"data-s":i%8,"data-x":e.fmt(t.x,s),"data-series":b,"data-f":e.fmt(t.y,a),"data-y":a,"data-neg":a<0,"data-other":s===h};if(l+=m(`circle`,{"data-maya":`mark`,...x,cx:p(c),cy:p(v),r:o}),u+=_(x,c-o,v-o,o*2,o*2),t.labels){let n=f[1-i],[s,l]=y(n??a),u=e.fmt(t.y,a),d=r?c>=s:v>=l,p=n===void 0?r:i===1?d:!d;r?e.label(c+(p?o+4:-o-4),v,u,p?`start`:`end`):e.label(c,v+(p?o:-o),u,p?`below`:`above`)}}}return{marks:c+l,hits:u}}},pe={noun:`Heatmap`,axes:(e,t)=>[{kind:`band`,field:e.x,domain:t.categories},{kind:`band`,field:e.series??``,domain:t.series}],draw(e){let{spec:t,shaped:n}=e,r=e.x,i=e.y,a=n.cells.filter(e=>e.value!==null),o=1/0,s=-1/0;for(let e of a)o=Math.min(o,e.value),s=Math.max(s,e.value);let c=e=>s>o?Math.min(9,Math.max(0,Math.floor((e-o)/(s-o)*10))):9,l=``,u=``,d=``;for(let[o,s]of a.entries()){let a=s.value,h=n.visible.indexOf(s.si),v=r.at(s.ci)+1,y=i.at(h)+1,b=Math.max(0,r.bandwidth-2),x=Math.max(0,i.bandwidth-2),S=n.categories[s.ci],C=n.series[s.si],w={"data-key":g(C,S),"data-c":o,"data-x":e.fmt(t.x,S),"data-series":C,"data-y":a,"data-f":e.fmt(t.y,a),"data-q":c(a)};l+=m(`rect`,{"data-maya":`mark`,...w,x:p(v),y:p(y),width:p(b),height:p(x)}),u+=_(w,v,y,b,x);let T=e.fmt(t.y,a);t.labels!==!1&&b>=24&&x>=24&&T.length*7.2+4<=b&&(d+=m(`text`,{x:p(v+b/2),y:p(y+x/2),"text-anchor":`middle`,"dominant-baseline":`middle`,"data-in":!0,"data-dark":w[`data-q`]>=6},f(T)))}let h=a.length>0?`<div class="maya-legend" data-maya="ramp"><span>${f(e.fmt(t.y,o))}</span><i></i><span>${f(e.fmt(t.y,s))}</span></div>`:``;return{marks:l,hits:u,labels:d,grid:``,legend:h}}},I=12,me=e=>typeof e==`number`?e:null;function he(e){let{spec:t,shaped:n,width:r,height:i}=e,a=t.x?n.categories:[],o=t.x?n.cells.filter(e=>e.si===0).sort((e,t)=>e.ci-t.ci):[],s=o.filter(e=>e.value!==null),c=s[s.length-1],l=t.x?c?.value??null:e.agg(t.aggregate)(t.data.map(e=>me(e[t.y]))),u=r/2;if(l===null)return{marks:``,hits:``,labels:m(`text`,{"data-maya":`empty`,x:p(u),y:p(i/2),"text-anchor":`middle`},f(e.t(`noData`)))};let d=c?.ci??0,h=t.x?e.fmt(t.x,a[d]):``,_=e.fmt(t.y,l),v=p(Math.max(16,Math.min(i*.32,72,(r-24)/(_.length*.62)))),y={"data-c":d,"data-s":0,"data-x":h,"data-series":``,"data-y":l,"data-f":_},b=(e,t)=>m(`text`,{"dominant-baseline":`hanging`,x:I,...e},f(t)),x=m(`text`,{"data-maya":`mark`,"data-key":`v`,...y,"font-size":v,x:I,y:I,"dominant-baseline":`hanging`},f(_)),S=``,C=``,w=I+v+4,T=s[s.length-2];if(c&&T&&T.value){let n=(l-T.value)/Math.abs(T.value),r=new Intl.NumberFormat(t.locale,{style:`percent`,maximumFractionDigits:1,signDisplay:`exceptZero`}).format(n);S+=b({"data-kpi":`delta`,"data-tone":n>0?`good`:n<0?`bad`:null,y:p(w),"font-size":12},e.t(`vs`,r,e.fmt(t.x,a[T.ci]))),w+=16}h&&(S+=b({"data-kpi":`period`,y:p(w),"font-size":11},h)),w+=18;let E=``,D=typeof t.colorBy==`object`&&t.colorBy?t.colorBy.target:null,O=i-I;if(D){let n=r-24,i=Math.min(Math.max(l/D,0),1.2)/1.2,a=new Intl.NumberFormat(t.locale,{style:`percent`,maximumFractionDigits:1});O-=8,E=m(`rect`,{"data-kpi":`track`,x:I,y:O,width:p(n),height:8,rx:4}),x+=m(`rect`,{"data-maya":`mark`,"data-key":`b`,...y,"data-kpi":`fill`,"data-tone":e.tone(l),x:I,y:O,width:p(n*i),height:8,rx:4}),S+=m(`line`,{"data-kpi":`target`,"stroke-width":2,x1:p(I+n/1.2),x2:p(I+n/1.2),y1:O-3,y2:O+11}),S+=b({"data-kpi":`of`,y:O-16,"font-size":11},e.t(`ofTarget`,a.format(l/D),e.fmt(t.y,D))),O-=24}if(a.length>=3&&O-w>=28){let n=s.map(e=>e.value),l=Math.min(...n),u=Math.max(...n)-l||1,d=a.length-1,f=(r-24)/d,h=e=>p(I+e*f),_=e=>p(O-(e-l)/u*(O-w-4)-2),v=``,y=!0;o.forEach(n=>{if(n.value===null)return void(y=!0);v+=`${y?`M`:`L`}${h(n.ci)} ${_(n.value)}`,y=!1,x+=m(`circle`,{"data-maya":`mark`,"data-key":g(``,a[n.ci]),"data-c":n.ci,"data-s":0,"data-x":e.fmt(t.x,a[n.ci]),"data-series":``,"data-y":n.value,"data-f":e.fmt(t.y,n.value),"data-neg":n.value<0,"data-last":n===c,r:3,cx:h(n.ci),cy:_(n.value)})});let b=s[0],S=s[s.length-1];x=(b&&S&&s.length===o.length?m(`path`,{"data-maya":`area`,"data-key":g(`a`,``),"data-s":0,d:`${v}L${h(S.ci)} ${p(O)}L${h(b.ci)} ${p(O)}Z`}):``)+m(`path`,{"data-maya":`line`,"data-key":g(`l`,``),"data-s":0,pathLength:1,d:v||null})+x,a.forEach((e,t)=>{C+=m(`rect`,{"data-maya":`hit`,"data-c":t,x:p(Math.max(0,I+t*f-f/2)),y:0,width:p(f),height:i,fill:`transparent`})})}return{marks:x,hits:C,labels:S,grid:E}}var ge={noun:`KPI`,draw:he},_e=26,ve=12,ye=48,be=14,xe={noun:`Parallel coordinates`,draw(e){let{spec:t,shaped:n,width:r,height:i}=e,a=t.measures,o=new Map;for(let e of t.data){let n=String(e[t.x]);(o.get(n)??o.set(n,[]).get(n)).push(e)}let s=e.agg(t.aggregate),c=n.categories.flatMap((e,r)=>{let i=o.get(e);if(!i||e===`\0other`)return[];let c=a.map(e=>s(i.map(t=>t[e]))),l=t.series===null?0:Math.max(0,n.series.indexOf(String(i[0][t.series])));return n.visible.includes(l)?[{cat:e,ci:r,vals:c,si:l}]:[]}),l=ye,u=Math.max(49,r-be),[d,h]=[_e,Math.max(27,i-ve)],_=e=>p(a.length<2?l:l+(u-l)*e/(a.length-1)),v=``,y=``,b=a.map((n,r)=>{let i=c.map(e=>e.vals[r]).filter(e=>e!==null),o=A(Math.min(0,...i),Math.max(0,...i),4),[s,l]=o.domain,u=e=>p(h-(e-s)/(l-s||1)*(h-d)),g=_(r);v+=m(`line`,{x1:g,x2:g,y1:p(d),y2:p(h)});for(let t of o.values){let r=u(t);v+=m(`line`,{x1:g-3,x2:g,y1:r,y2:r}),y+=m(`text`,{x:g-6,y:r,"text-anchor":`end`,"dominant-baseline":`middle`,"data-in":!0},f(e.fmt(n,t,o.step)))}return y+=m(`text`,{x:g,y:12,"text-anchor":r===0?`start`:r===a.length-1?`end`:`middle`,"font-weight":600,"data-in":!0},f(t.titles.get(n)??n)),u}),x=``,S=``,C=``;for(let{cat:n,ci:r,vals:i,si:o}of c){let s=e.fmt(t.x,n),c=``,l=!0;i.forEach((i,u)=>{if(i===null){l=!0;return}let[d,f]=[_(u),b[u](i)];c+=`${l?`M`:`L`}${d} ${f}`,l=!1,x+=m(`circle`,{"data-maya":`mark`,"data-key":g(n,a[u]),"data-c":r,"data-s":o%8,"data-x":s,"data-series":t.titles.get(a[u])??a[u],"data-y":i,"data-f":e.fmt(a[u],i),"data-neg":i<0,r:3.5,cx:d,cy:f})}),c&&(S+=m(`path`,{"data-maya":`line`,"data-key":g(`l`,n),"data-c":r,"data-s":o%8,pathLength:1,d:c}),C+=m(`path`,{"data-maya":`hit`,"data-c":r,d:c,fill:`none`,stroke:`transparent`,"stroke-width":16,"stroke-linejoin":`round`}))}return{marks:x+S,hits:C,grid:v,labels:y}}},Se={noun:`Ridgeline`,axes:(e,t)=>[{kind:`band`,field:e.x,domain:t.categories},{kind:`band`,field:e.series??``,domain:t.visible.map(e=>t.series[e])}],draw(e){let{spec:t,shaped:n,plot:r}=e,i=e.x,a=e.y,o=ie(t),s=e=>p(i.at(e)+i.bandwidth/2),c=0;for(let e of n.cells)e.value!==null&&e.value>c&&(c=e.value);c<=0&&(c=1);let l=e=>a.at(e)+a.bandwidth/2+a.step/2,u=Math.min(1.4*a.step,l(0)-r.y),d=``,f=``;n.visible.forEach((r,i)=>{let a=n.series[r],_=l(i),v=e=>p(_-e/c*u),y=n.cells.filter(e=>e.si===r).sort((e,t)=>e.ci-t.ci),b=[[]];for(let i of y){if(i.value===null){b.push([]);continue}b[b.length-1].push(i);let c=n.categories[i.ci],l=o(c,a);f+=m(`circle`,{"data-maya":`mark`,"data-key":g(a,c),"data-c":i.ci,"data-s":r%8,"data-x":e.fmt(t.x,c),"data-series":a,"data-y":i.value,"data-f":e.fmt(t.y,i.value),"data-neg":i.value<0,"data-tone":e.tone(i.value),"data-q":l===null?null:e.q(l),"data-other":c===h,r:3,cx:s(i.ci),cy:v(i.value)})}let x=e=>e.map((e,t)=>`${t?`L`:`M`}${s(e.ci)} ${v(e.value)}`),S=b.filter(e=>e.length>0),C=S.map(e=>`${x(e).join(``)}L${s(e.at(-1).ci)} ${p(_)}L${s(e[0].ci)} ${p(_)}Z`).join(``);C&&(d+=m(`path`,{"data-maya":`area`,"data-ridge":!0,"data-key":g(`a`,a),"data-s":r%8,d:C})),d+=m(`path`,{"data-maya":`line`,"data-key":g(`l`,a),"data-s":r%8,pathLength:1,d:S.map(e=>x(e).join(``)).join(``)||null})});let _=``;return n.categories.forEach((e,t)=>{_+=m(`rect`,{"data-maya":`hit`,"data-c":t,x:p(i.at(t)),y:p(r.y),width:p(i.bandwidth),height:p(r.h),fill:`transparent`})}),{marks:d+f,hits:_,cross:m(`line`,{x1:0,x2:0,y1:p(r.y),y2:p(r.y+r.h)})}}},Ce=(e,t)=>[{kind:`band`,field:e.x,domain:t.categories},{kind:`linear`,field:e.y,domain:t.extent}];function we(e,t){let{spec:n,shaped:r,plot:i}=e,a=e.x,o=e.y,s=ie(n),c=e=>p(a.at(e)+a.bandwidth/2),l=``,u=``,d=``;for(let i of r.visible){let a=r.series[i],f=r.cells.filter(e=>e.si===i).sort((e,t)=>e.ci-t.ci),_=``,v=!0,y=[[]];for(let t of f){if(t.value===null&&!n.stack?y.push([]):y[y.length-1].push(t),t.value===null){v=!0;continue}_+=`${v?`M`:`L`}${c(t.ci)} ${p(o.of(t.y1))}`,v=!1;let l=r.categories[t.ci],u=s(l,a),f=l===h,b=e.fmt(n.x,l);d+=m(`circle`,{"data-maya":`mark`,"data-key":g(a,l),"data-c":t.ci,"data-s":i%8,"data-x":b,"data-series":a,"data-y":t.value,"data-f":e.fmt(n.y,t.value),"data-neg":t.value<0,"data-tone":e.tone(t.value),"data-q":u===null?null:e.q(u),"data-other":f,r:3,cx:c(t.ci),cy:p(o.of(t.y1))}),n.labels&&e.label(c(t.ci),o.of(t.y1),e.fmt(n.y,t.value),`above`)}if(t){let e=y.filter(e=>e.length>0).map(e=>e.map((e,t)=>`${t?`L`:`M`}${c(e.ci)} ${p(o.of(e.y1))}`).join(``)+[...e].reverse().map(e=>`L${c(e.ci)} ${p(o.of(e.y0))}`).join(``)+`Z`).join(``);e&&(l+=m(`path`,{"data-maya":`area`,"data-key":g(`a`,a),"data-s":i%8,d:e}))}u+=m(`path`,{"data-maya":`line`,"data-key":g(`l`,a),"data-s":i%8,pathLength:1,d:_||null})}let f=``;return r.categories.forEach((e,t)=>{f+=m(`rect`,{"data-maya":`hit`,"data-c":t,x:p(a.at(t)),y:p(i.y),width:p(a.bandwidth),height:p(i.h),fill:`transparent`})}),{marks:l+u+d,hits:f,cross:m(`line`,{x1:0,x2:0,y1:p(i.y),y2:p(i.y+i.h)})}}var Te={noun:`Line`,axes:Ce,draw:e=>we(e,!1)},Ee={noun:`Area`,axes:Ce,draw:e=>we(e,!0)},De=24;function Oe(e,t){let n=[],r=e.xDomain,i=e.yDomain,a=e.window;return e.data.forEach((o,s)=>{let c=o[e.x],l=o[e.y];if(typeof c!=`number`||typeof l!=`number`||r&&(c<r[0]||c>r[1])||i&&(l<i[0]||l>i[1])||a&&(c<a[0]||c>a[1]||l<a[2]||l>a[3]))return;let u=t.series.indexOf(e.series===null?``:String(o[e.series]));if(!t.visible.includes(u))return;let d=e.size===null?null:o[e.size],f=e.name===null?null:o[e.name];n.push({i:s,x:c,y:l,sz:typeof d==`number`?d:null,si:u,name:f==null?null:String(f),row:o})}),n}var ke={noun:`Scatter`,axes(e,t){let n=1/0,r=-1/0,i=1/0,a=-1/0;for(let o of Oe(e,t))n=Math.min(n,o.x),r=Math.max(r,o.x),i=Math.min(i,o.y),a=Math.max(a,o.y);n>r&&(n=r=0,i=a=0);let o=e.size===null?0:(r-n)*.06,s=e.size===null?0:(a-i)*.06,c=(e,t)=>e>=0?Math.max(0,e-t):e-t;return[n,r,i,a]=[c(n,o),r+o,c(i,s),a+s],[{kind:`linear`,field:e.x,domain:e.xDomain??[n,r]},{kind:`linear`,field:e.y,domain:e.yDomain??[i,a]}]},draw(e){let{spec:t,shaped:n,plot:r}=e,i=e.x,a=e.y,o=Oe(t,n),s=0;for(let e of o)e.sz!==null&&(s=Math.max(s,Math.abs(e.sz)));let c=Math.min(r.w,r.h)/16,l=typeof t.colorBy==`string`&&t.colorBy!==`sign`?t.colorBy:null,u=new Map,d=o.map(r=>{let o=r.sz!==null&&s>0?2+Math.sqrt(Math.abs(r.sz)/s)*c:4,d=r.i;if(r.name!==null){let e=(u.get(r.name)??0)+1;u.set(r.name,e),d=e>1?`${r.name}#${e}`:r.name}let f=n.series[r.si],p=e.fmt(t.x,r.x),m=e.fmt(t.y,r.y),h=l?r.row[l]:null;return{p:r,rad:o,d:{"data-key":g(f,d),"data-c":r.i,"data-s":r.si%8,"data-x":r.name??p,"data-series":f,"data-y":r.y,"data-f":r.name===null&&r.sz===null?m:[p,m,r.sz===null?null:e.fmt(t.size,r.sz)].filter(e=>e!==null).join(` · `),"data-neg":r.y<0,"data-tone":e.tone(r.y),"data-q":typeof h==`number`?e.q(h):null},cx:i.of(r.x),cy:a.of(r.y)}});d.sort((e,t)=>t.rad-e.rad);let f=``,h=``;for(let{p:n,rad:r,d:i,cx:a,cy:o}of d)f+=m(`circle`,{"data-maya":`mark`,...i,r:p(r),cx:p(a),cy:p(o)}),r*2<De&&(h+=m(`circle`,{"data-maya":`hit`,...i,r:p(Math.max(r,12)),cx:p(a),cy:p(o),fill:`transparent`})),t.labels&&e.label(a,o-r,e.fmt(t.y,n.y),`above`);return{marks:f,hits:h}}},L=30,Ae=26,R=8,je=e=>typeof e==`number`?e:null,Me={noun:`Table`,draw(e){let{spec:t,width:n,height:r}=e,i=t.measures,a=e=>t.titles.get(e)??e,o=e.agg(t.aggregate),s=new Map;for(let e of t.data){let n=String(e[t.x]),r=s.get(n)??s.set(n,i.map(()=>[])).get(n);i.forEach((t,n)=>r[n].push(je(e[t])))}let c=[...s].map(([e,t])=>({name:e,vals:t.map(e=>o(e))})),l=(e,t)=>e===null?1/0:e*t,u=(e,t)=>(n,r)=>l(n.vals[e],t)-l(r.vals[e],t)||0;t.limit!==null&&c.length>t.limit&&(c=c.sort(u(0,-1)).slice(0,t.limit));let d=t.sortBy&&(t.sortBy[0]===t.x||i.includes(t.sortBy[0]))?t.sortBy:null;if(d){let e=d[1]===`asc`?1:-1,n=i.indexOf(d[0]);if(n<0){let n=new Intl.Collator(t.locale,{numeric:!0});c.sort((t,r)=>e*n.compare(t.name,r.name))}else c.sort((t,r)=>{let[i,a]=[t.vals[n],r.vals[n]];return i===null||a===null?(i===null)-+(a===null):e*(i-a)})}else t.sort&&c.sort(u(0,t.sort===`asc`?1:-1));let h=Math.max(80,Math.min(n*.34,180)),v=(n-h)/i.length,y=e=>h+e*v,b=i.map((e,t)=>Math.max(0,...c.map(e=>Math.abs(e.vals[t]??0)))),x=(e,t)=>{let n=Math.max(1,Math.floor((t-R)/7));return e.length>n?e.slice(0,n-1)+`…`:e},S=``,C=``;[t.x,...i].forEach((t,n)=>{let r=n?y(n-1):0,i=n?v:h,o=d?.[0]===t?d[1]:null,s=x(a(t),i-(o?14:0))+(o?o===`asc`?` ▲`:` ▼`:``);C+=m(`g`,{"data-maya":`sort`,"data-field":t,"data-sort":o,role:`button`,tabindex:0,"aria-label":o?e.t(`sortedBy`,a(t),e.t(o===`asc`?`ascending`:`descending`)):a(t)},m(`rect`,{x:p(r),y:0,width:p(i),height:L,fill:`transparent`})+m(`text`,{"data-th":!0,x:p(n?r+i-R:R),y:L/2,"text-anchor":n?`end`:`start`,"dominant-baseline":`middle`},f(s)))}),S+=m(`line`,{x1:0,x2:n,y1:L,y2:L});let w=Math.max(0,Math.floor((r-L)/Ae)),T=``;return c.slice(0,w).forEach((n,r)=>{let o=L+r*Ae,s=e.fmt(t.x,n.name);T+=m(`text`,{"data-key":g(`t`,n.name),x:R,y:o+Ae/2-2,"dominant-baseline":`middle`,"data-td":`label`},f(x(s,h))),i.forEach((t,c)=>{let l=n.vals[c],u=y(c)+v-R,d=l===null?`–`:e.fmt(t,l);if(T+=m(`text`,{"data-key":g(`v`,t,n.name),x:p(u),y:o+Ae/2-2,"text-anchor":`end`,"dominant-baseline":`middle`},f(d)),l===null)return;let h=b[c]?(v-16)*Math.abs(l)/b[c]:0,x={"data-key":g(t,n.name),"data-c":r,"data-s":i.length>1?c%8:0,"data-x":s,"data-series":a(t),"data-f":d,"data-y":l,"data-neg":l<0},S=o+Ae-7;T+=m(`rect`,{"data-maya":`mark`,...x,x:p(y(c)+R),y:S,width:p(h),height:4}),C+=_(x,y(c)+R,S,h,4)})}),{marks:T,hits:C,labels:``,grid:S}}},Ne=`--maya-fg:#1f2328;--maya-fg-muted:#656d76;--maya-bg:#fff`,Pe=`--maya-fg:#e6edf3;--maya-fg-muted:#9198a1;--maya-bg:#0d1117`,Fe=(e,t=0)=>Array.from({length:e},(e,n)=>n+t),Ie=Fe(8).map(e=>`[data-s="${e}"]{--c:var(--maya-series-${e+1})}`).join(``),Le=Fe(8).map(e=>`svg:not([data-stack]) [data-maya=area][data-s="${e}"]{fill:url(#maya-a${e}) color-mix(in oklab,var(--c) 18%,transparent)}`).join(``),Re=Fe(10).map(e=>`[data-q="${e}"]{--q:${Math.round(20+e*80/9)}%}`).join(``),ze=Fe(8).map(e=>`.maya:has(.maya-legend [data-s="${e}"]:hover) :is([data-maya=mark],[data-maya=line],[data-maya=area]):not([data-s="${e}"]){opacity:.25}`).join(``),Be=Fe(3,2).map(e=>`.maya-ctl[data-n="${e}"]::before{width:calc((100% - 4px)/${e})}`).join(``)+Fe(3,1).map(e=>`.maya-ctl[data-i="${e}"]::before{transform:translateX(${e*100}%)}`).join(``),Ve=`border:0;background:none;padding:0;font:inherit;color:var(--maya-fg-muted);cursor:pointer`,He=`:host,.maya-root{--maya-font:ui-sans-serif,system-ui,sans-serif;--maya-font-size:12px;--maya-fg:light-dark(#1f2328,#e6edf3);--maya-fg-muted:light-dark(#656d76,#9198a1);--maya-grid:color-mix(in oklab,var(--maya-fg) 10%,transparent);--maya-bg:light-dark(#fff,#0d1117);--maya-accent:oklch(.6 .17 255);--maya-radius:3px;--maya-ease:cubic-bezier(.22,1,.36,1);--maya-tooltip-bg:color-mix(in oklab,var(--maya-bg) 92%,transparent);--maya-tooltip-fg:var(--maya-fg);--maya-focus:var(--maya-accent);--maya-good:light-dark(#1a7f37,#3fb950);--maya-bad:light-dark(#cf222e,#f85149);--maya-series-1:var(--maya-accent);--maya-series-2:oklch(.66 .16 50);--maya-series-3:oklch(.62 .15 160);--maya-series-4:oklch(.66 .17 330);--maya-series-5:oklch(.62 .14 90);--maya-series-6:oklch(.62 .12 205);--maya-series-7:oklch(.64 .19 22);--maya-series-8:oklch(.62 .16 295);color-scheme:light dark}@supports not (color:light-dark(#000,#fff)){:host,.maya-root{${Ne}}@media (prefers-color-scheme:dark){:host,.maya-root{${Pe}}}}:host{display:block;position:relative;container-type:inline-size;min-height:200px}.maya{display:flex;flex-direction:column;height:100%;font:var(--maya-font-size) var(--maya-font);font-variant-numeric:tabular-nums;color:var(--maya-fg)}.maya-title{font-weight:600;font-size:15px;letter-spacing:-.01em;margin:0 0 6px}.maya-legend,.maya-crumbs{color:var(--maya-fg-muted);display:flex;flex-wrap:wrap;align-items:center;gap:2px 6px;margin:0 0 8px}.maya-crumbs{min-height:1.25em;line-height:1.25}.maya-legend :is(button,span),.maya-crumbs button,.maya-reset{display:inline-flex;align-items:center;gap:6px;${Ve};border-radius:6px;padding:2px 6px;transition:background .15s,opacity .2s,color .15s}:is(.maya-legend,.maya-crumbs) button:hover{background:var(--maya-grid);color:var(--maya-fg)}.maya-legend [aria-pressed=false]{opacity:.5}.maya-legend [aria-pressed=false] i{background:none;box-shadow:inset 0 0 0 1.5px var(--c)}:is(.maya-legend,.maya-crumbs) button:focus-visible,.maya-reset:focus-visible,.maya-ctl :focus-visible{outline:2px solid var(--maya-focus);outline-offset:2px}i{width:10px;height:10px;border-radius:3px;background:var(--c)}[data-maya=ramp]{display:flex;align-items:center;gap:6px}[data-maya=ramp] i{width:80px;height:8px;background:linear-gradient(90deg,color-mix(in oklab,var(--maya-accent) 20%,var(--b)),var(--maya-accent))}[data-q],[data-maya=ramp] i{--b:light-dark(var(--maya-bg),color-mix(in oklab,var(--maya-accent) 15%,var(--maya-bg)))}.maya-reset{position:absolute;top:4px;right:4px;border:1px solid var(--maya-grid);border-radius:99px;padding:3px 12px;background:var(--maya-bg);box-shadow:0 1px 3px #0000001a}.maya-ctl{position:relative;display:inline-grid;grid-auto-flow:column;grid-auto-columns:1fr;align-self:flex-start;margin:0 0 8px;padding:2px;border-radius:8px;background:var(--maya-grid)}.maya-ctl::before{content:'';position:absolute;inset:2px auto 2px 2px;width:calc(100% - 4px);border-radius:6px;background:var(--maya-bg);box-shadow:0 1px 3px #00000024;transition:transform .3s var(--maya-ease)}`+Be+`.maya-ctl [role=radio]{${Ve};position:relative;padding:4px 12px;border-radius:6px;transition:color .2s}.maya-ctl [aria-checked=true]{color:var(--maya-fg);font-weight:600}.maya-err{margin:0;padding:8px;color:var(--maya-bad);white-space:pre-wrap;font:12px monospace}.maya-box{flex:1;min-height:0;position:relative}.maya-box svg{display:block;width:100%;height:100%;overflow:visible}.maya-svg{direction:ltr;font:var(--maya-font-size) var(--maya-font);font-variant-numeric:tabular-nums}.maya-svg text{fill:var(--maya-fg-muted);unicode-bidi:plaintext}[data-maya^=axis] text{font-size:11px}[data-maya=grid] *{stroke:var(--maya-grid);shape-rendering:crispEdges}`+Ie+`[data-other],[data-total]{--c:var(--maya-fg-muted)}[data-tone=good]{--c:var(--maya-good)}[data-tone=bad]{--c:var(--maya-bad)}[data-q]{--c:color-mix(in oklab,var(--maya-accent) var(--q),var(--b))}`+Re+`[data-maya=mark]{fill:var(--c,var(--maya-series-1));rx:var(--maya-radius);transform-box:fill-box;transform-origin:0 0}[data-dir=h] [data-neg]{transform-origin:100% 0}[data-maya=mark],[data-maya=link]{transition:opacity .25s var(--maya-ease),fill .2s}[data-ghost]{pointer-events:none}[data-maya=mark][data-active]{fill:color-mix(in oklab,var(--c,var(--maya-series-1)),var(--maya-fg) 12%)}[data-stack] rect[data-maya=mark]{stroke:var(--maya-bg);stroke-width:1}:where([data-xd] circle[data-maya=mark]){stroke:var(--maya-bg);stroke-width:1}[data-maya=line]~circle[data-maya=mark]:not([data-active],[data-lit],[data-selected],[data-last]){fill-opacity:0;stroke-opacity:0}[data-maya=line]~circle[data-maya=mark]{stroke:var(--maya-bg);stroke-width:2;transition:fill-opacity .15s,stroke-opacity .15s}[data-maya=line]~circle[data-lit]{r:4px}circle[data-maya=mark][data-active]{filter:drop-shadow(0 0 4px color-mix(in oklab,var(--c) 70%,transparent))}[data-maya=line]{fill:none;stroke:var(--c);stroke-width:2.25;stroke-linejoin:round;stroke-linecap:round}[data-maya=area]{fill:color-mix(in oklab,var(--c) 18%,transparent);stroke:none}[data-stack] [data-maya=area]{fill:color-mix(in oklab,var(--c) 45%,var(--maya-bg))}`+Le+`stop{stop-color:var(--c)}[data-maya=link]{fill:var(--c);opacity:.3}[data-maya=link][data-active]{opacity:.6}line[data-maya=link]{stroke:var(--c,var(--maya-fg-muted));opacity:1}text[data-maya=mark]{fill:var(--maya-fg);font-weight:600}[data-kpi=track]{fill:var(--maya-grid)}[data-kpi=target]{stroke:var(--maya-fg)}[data-maya=labels] [data-tone]{fill:var(--c)}[data-maya=labels] :is([data-kpi=period],[data-kpi=of]){fill:var(--maya-fg-muted)}[data-line] i{height:2px;border-radius:1px}[data-ridge]{fill:color-mix(in oklab,var(--c) 40%,var(--maya-bg))}[data-maya=grid] circle{fill:none;shape-rendering:auto}[data-maya=labels] [data-ring]{fill:var(--maya-fg-muted)}[data-maya=marks] text{fill:var(--maya-fg)}[data-maya=sort]{cursor:pointer}[data-maya=sort] rect{fill:transparent}[data-maya=sort] text{font-weight:600}[data-maya=sort]:focus-visible{outline:2px solid var(--maya-focus)}:is([data-maya=line],[data-maya=area]){transition:opacity .25s}[data-maya=marks]:has(path[data-active]) path[data-maya=line]:not([data-active]){opacity:.25}[data-depth]{stroke:var(--maya-bg);stroke-width:1}[data-maya=marks]:has([data-active]) [data-maya=mark]:not([data-active],[data-lit],text){opacity:.4}[data-maya=marks]:has([data-selected]) [data-maya=mark]:not([data-selected]){opacity:.35}[data-selected]{stroke:var(--maya-fg);stroke-width:2}`+ze+`[data-maya=labels],[data-maya=cross],[data-maya=band]{pointer-events:none}[data-maya=cross],[data-maya=band]{opacity:0;transition:opacity .2s}[data-on]:is([data-maya=cross],[data-maya=band]){opacity:1;transition:opacity .2s,transform .25s var(--maya-ease)}[data-maya=band]{fill:var(--maya-fg);fill-opacity:.05;rx:6px}[data-maya=labels] text{fill:var(--maya-fg);paint-order:stroke;stroke:var(--maya-bg);stroke-width:3;stroke-linejoin:round}[data-maya=labels] [data-in]{stroke:none}[data-maya=labels] [data-dark]{fill:var(--maya-bg)}[data-maya=hit]{stroke:none}[data-maya=cross] line{stroke:var(--maya-fg-muted);stroke-opacity:.55}[data-maya=brush]{fill:var(--maya-accent);fill-opacity:.12;stroke:var(--maya-accent);vector-effect:non-scaling-stroke;pointer-events:none}.maya-svg:focus-visible{outline:2px solid var(--maya-focus)}.maya-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.maya-probe{position:absolute;width:0;height:0;pointer-events:none;anchor-name:--maya-probe}.maya-tip{margin:0;inset:auto;border:1px solid var(--maya-grid);padding:8px 10px;min-width:96px;background:var(--maya-tooltip-bg);color:var(--maya-tooltip-fg);border-radius:8px;box-shadow:0 1px 2px #0000000f,0 10px 28px -8px #0000004d;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);font:var(--maya-font-size)/1.4 var(--maya-font);font-variant-numeric:tabular-nums;pointer-events:none}@supports (anchor-name:--x){.maya-tip{position-anchor:--maya-probe;position-area:block-start;position-try-fallbacks:flip-block,block-start span-inline-start,block-start span-inline-end;margin:8px}.maya-tip[data-side]{position-area:inline-end span-block-end;position-try-fallbacks:flip-inline;margin:0 12px}}.maya-tip{opacity:0;translate:0 4px;transition:opacity .15s,translate .2s var(--maya-ease)}.maya-tip.maya-open{opacity:1;translate:none}.maya-tip b{display:block;margin:0 0 4px;font-weight:600}.maya-tip div{display:flex;align-items:center;gap:8px;color:color-mix(in oklab,var(--maya-tooltip-fg) 72%,transparent)}.maya-tip i{width:8px;height:8px;border-radius:50%}.maya-tip [data-v]{margin-inline-start:auto;padding-inline-start:12px;font-weight:600;color:var(--maya-tooltip-fg)}.maya-tip [data-on]{color:var(--maya-tooltip-fg)}@media (pointer:coarse){:is(.maya-legend,.maya-crumbs) button,.maya-ctl [role=radio],.maya-reset,.maya-crumbs{min-height:24px}}@container (max-width:320px){.maya-legend:has(button){display:none}.maya-title{font-size:12px}}@media (prefers-contrast:more){:host,.maya-root{--maya-fg-muted:var(--maya-fg);--maya-grid:color-mix(in oklab,var(--maya-fg) 40%,transparent)}}@media (forced-colors:active){.maya-svg,i{forced-color-adjust:none}[data-maya=mark]{stroke:CanvasText;stroke-width:1}[data-tone=bad]{stroke-dasharray:4 2}}[data-still] *{transition:none!important}@media (prefers-reduced-motion:reduce){*{transition:none!important}}`,Ue=class extends Error{code;path;constructor(e,t,n){super(n),this.name=`MayaSpecError`,this.code=e,this.path=t}},z=e=>e.split(` `),We=Object.fromEntries([...z(`$schema x y2 series size name title description locale currency`).map(e=>[e,`string`]),...z(`stack horizontal labels legend tooltip drill zoom grid xAxis yAxis table animate`).map(e=>[e,`boolean`])]),Ge=[...z(`type data y path totals aggregate sort limit format titles text yDomain xDomain select`),...z(`colors colorBy theme`),...Object.keys(We)],Ke=[`bar`,`line`,`area`,`dumbbell`],qe=[`treemap`,`sunburst`,`sankey`,`chord`],Je=[`parallel`,`table`],B=`bar,line,area`,Ye=`treemap,sunburst,sankey,chord`,Xe=Object.fromEntries(z(`horizontal:bar,dumbbell y2:bar size:scatter name:scatter,beeswarm path:${B},dumbbell,${Ye} totals:waterfall series:${B},scatter,heatmap,dumbbell,ridgeline,beeswarm,parallel,marimekko,radial sort:${B},heatmap,dumbbell,table,radial,waffle limit:${B},heatmap,dumbbell,table,waffle,radial stack:bar,area colorBy:${B},waterfall,scatter,dumbbell,kpi,treemap,sunburst,hexmap xDomain:scatter drill:${B},dumbbell,${Ye} select:${B},waterfall,scatter,heatmap,dumbbell,beeswarm,parallel,table,marimekko,waffle,radial,treemap,sunburst,hexmap zoom:line,area,scatter`).map(e=>e.split(`:`)).map(([e,t])=>[e,t.split(`,`)])),Ze=z(`sum mean count min max`),Qe=z(`auto integer decimal compact percent currency date month year time datetime`),$e=z(`dateStyle timeStyle weekday era year month day dayPeriod hour minute second fractionalSecondDigits timeZoneName timeZone hour12 hourCycle calendar`),et=e=>$e.some(t=>Object.hasOwn(e,t)),tt=[...z(`font fontSize fg fgMuted grid bg accent radius tooltipBg tooltipFg focus good bad`),...[1,2,3,4,5,6,7,8].map(e=>`series`+e)],nt={x:`the category axis`,y:`the plotted numbers`,y2:`the right-axis line`,series:`splitting rows into series`,size:`bubble area`,name:`point identity`,path:`the hierarchy levels`,colorBy:`colouring marks by value`,format:`formatting that field`,titles:`naming that field`},rt=`Use horizontal: true to put categories on the left axis.`,it=`Size comes from the element's CSS box, or render(spec, { width, height }).`,at=`Pie and donut charts are not supported: use "bar" or "treemap" to compare parts.`,ot=`Use type: "hexmap" (import "mayacharts/geo").`,st=`Example: { type: "bar", data: [{ month: "Jan", revenue: 10 }], x: "month", y: "revenue" }`,ct={label:`Use titles: { <field>: "Name" } for display names, or labels: true for values on marks.`,xLabel:`Use titles: { <x field>: "Name" }. titles is keyed by field and also names tooltips and table headers.`,yLabel:`Use titles: { <y field>: "Name" }. titles is keyed by field and also names tooltips, legend and table headers.`,yFormat:`Use format: "compact" (applies to every y), or format: { <field>: "currency" }.`,dataKey:`Use y: "<field>" for values and x: "<field>" for categories.`,indexAxis:rt,orientation:rt,width:it,height:it,color:`Use colors: [...] for the palette, or colorBy: "sign" | { target: n } | "<field>".`,groupBy:`Use series: "<field>".`,formatter:`Functions are not supported (the spec is JSON). Use format presets or Intl options.`,"size:number":`spec.size names a field for bubble area. For chart size use CSS, or render(spec, { width, height }).`,"select:boolean":`Use select: true or "multi"; omit it to disable selection.`},lt={column:`Use type: "bar".`,barh:`Use type: "bar" with horizontal: true.`,bubble:`Use type: "scatter" with size: "<field>".`,choropleth:ot,map:ot,pie:at,donut:at},ut=z(`rgb rgba hsl hsla oklch oklab lab lch color color-mix light-dark var calc`),dt=String.raw`\s*(?:"[\w\s.\-]*"|'[\w\s.\-]*'|[\w\-]+(?:\s+[\w\-]+)*)\s*`,ft=RegExp(`^${dt}(?:,${dt})*$`),pt=(e,t)=>Object.hasOwn(e,t)?e[t]:void 0,V=e=>typeof e==`object`&&!!e&&!Array.isArray(e),mt=(e,t=0)=>Array.isArray(e)&&e.length>=t&&e.every(e=>typeof e==`string`),H=e=>e===null?`null`:Array.isArray(e)?`array`:typeof e,U=e=>{let t=typeof e==`string`||V(e)||Array.isArray(e)?JSON.stringify(e):String(e);return t.length>60?t.slice(0,59)+`…`:t},W=(e,t)=>{let n=e.toLowerCase(),r=``,i=40;for(let e of t){let t=e.toLowerCase(),a=Math.abs(n.length-t.length)+[...t].filter(e=>!n.includes(e)).length,o=0;for(;o<9&&n[o]!==void 0&&n[o]===t[o];)o++;a<4&&a*10-o<i&&([i,r]=[a*10-o,e])}return r&&`Did you mean "${r}"?`},G=(e,t,n,...r)=>{throw new Ue(e,t,`mayacharts: ${n}\n${[...r,`-> https://bbekshr.github.io/mayacharts/errors.html#${e}`].filter(Boolean).map(e=>` `+e).join(`
|
|
3
|
+
`)}`)},K=(e,t,n)=>G(`invalid-option`,e,`spec.${e} must be ${n}, received ${U(t)}.`,pt(ct,`${e}:${H(t)}`)??``),ht=(e,t,n)=>{let r=n?ft.test(t):/^[#\w\s.,%()+\-\/]*$/.test(t)&&[...t.matchAll(/([\w-]*)\s*\(/g)].every(e=>ut.includes(e[1].toLowerCase()));(!t||!r)&&G(`unsafe-css-value`,e,`spec.${e} = ${U(t)} is not a safe CSS value.`,`Allowed: colours, lengths, numbers and ${ut.join(`() `)}(); fonts are family names.`,`Not allowed: url(), image-set(), other functions, ; { } < > \\ and (outside fonts) quotes.`)},q=(e,t,...n)=>G(`invalid-format`,e,t,...n),gt=(e,t,n)=>{if(typeof t==`string`){Qe.includes(t)||q(e,`spec.${e} = ${U(t)} is not a format preset.`,`Presets: ${Qe.join(`, `)}. Or per field: { <field>: preset or Intl options }.`,W(t,Qe));return}V(t)||q(e,`spec.${e} must be a preset or Intl options, received ${U(t)}.`);let{prefix:r,suffix:i,...a}=t;for(let[t,n]of[[`prefix`,r],[`suffix`,i]])n!==void 0&&typeof n!=`string`&&q(`${e}.${t}`,`spec.${e}.${t} must be a string, received ${U(n)}.`);let o=et(a);try{o?new Intl.DateTimeFormat(n,a):new Intl.NumberFormat(n,a)}catch(n){q(e,`spec.${e} = ${U(t)} is not valid ${o?`Intl.DateTimeFormat`:`Intl.NumberFormat`} options.`,n instanceof Error?n.message:String(n))}},_t=[[`y`,`a field name or a non-empty array of field names`,e=>typeof e==`string`||mt(e,1)],[`path`,`a non-empty array of field names`,e=>mt(e,1)],[`totals`,`an array of x values (strings)`,e=>mt(e)],[`aggregate`,`one of ${Ze.join(`, `)}`,e=>Ze.includes(e)],[`sort`,`"asc" or "desc"`,e=>e===`asc`||e===`desc`],[`limit`,`a positive integer`,e=>Number.isInteger(e)&&e>0],[`select`,`true or "multi"`,e=>e===!0||e===`multi`],[`colorBy`,`"sign", { target: number } or a numeric field name`,e=>typeof e==`string`&&!!e||V(e)&&Object.keys(e).join()===`target`&&Number.isFinite(e.target)],[`titles`,`an object of strings keyed by field`,e=>V(e)&&Object.values(e).every(e=>typeof e==`string`)]];function vt(e){V(e)||G(`spec-not-object`,`spec`,`spec must be a plain object, received ${H(e)}.`,`Received: ${U(e)}`);let t=e;for(let e of Object.keys(t))Ge.includes(e)||G(`unknown-option`,e,`spec.${e} is not a known option.`,pt(ct,e)??W(e,Ge),`Known options: ${Ge.join(`, `)}.`);let n=t.type;n===void 0&&G(`missing-field`,`type`,`spec.type is required but missing.`,`Required fields: type, data, x, y.`,st);let r=[...a,...c()],s=typeof n==`string`?n:void 0;if(s===void 0||!r.includes(s)){let e=s===void 0?void 0:pt(o,s);e&&G(`unknown-type`,`type`,`spec.type = "${n}" needs the "${e}" module, which is not loaded.`,`Add: import "mayacharts/${e}"`),G(`unknown-type`,`type`,`spec.type = ${U(n)} is not a chart type.`,`Valid types: ${r.join(`, `)}.`,s===void 0?``:pt(lt,s)??W(s,[...r,...Object.keys(o)]))}let u=n,d=qe.includes(u),f=d?`path`:`x`,p=e.path;u===`sankey`&&Array.isArray(p)&&p.length<2&&G(`invalid-option`,`path`,`spec.path needs at least two levels for a sankey.`,`Example: path: ["region", "family"]`),u===`chord`&&Array.isArray(p)&&p.length!==2&&G(`invalid-option`,`path`,`spec.path needs exactly two levels for a chord: from and to.`,`Example: path: ["region", "family"]`);let m=e=>G(`missing-field`,e,`spec.${e} is required but missing.`,`Required fields: type, data, ${f}, y.`,d?`Example: { type: "${u}", data: [{ region: "N", state: "NY", sales: 10 }], path: ["region", "state"], y: "sales" }`:st);t.data===void 0&&m(`data`),Array.isArray(t.data)||G(`data-not-array`,`data`,`spec.data must be an array of rows, received ${H(t.data)}.`);let h=t.data;h.forEach((e,t)=>{V(e)||G(`row-not-object`,`data[${t}]`,`spec.data[${t}] must be an object, received ${H(e)}.`,`Received: ${U(e)}`)}),t[f]===void 0&&u!==`kpi`&&u!==`beeswarm`&&!(f===`x`&&Ke.includes(u)&&t.path!==void 0)&&m(f),t.y===void 0&&m(`y`),(u===`dumbbell`||u===`ridgeline`||u===`marimekko`)&&t.series===void 0&&m(`series`),u===`parallel`&&!(Array.isArray(t.y)&&t.y.length>=2)&&G(`invalid-option`,`y`,`spec.y on "parallel" needs an array of at least 2 measures, one axis each.`,`Example: y: ["sales", "units", "price"]`);for(let e in We)t[e]!==void 0&&typeof t[e]!==We[e]&&K(e,t[e],`a ${We[e]}`);for(let[e,n,r]of _t)t[e]!==void 0&&!r(t[e])&&K(e,t[e],n);let{y:g,path:_,select:v,colors:y,colorBy:b,theme:x,text:S}=t;if(S!==void 0){V(S)||K(`text`,S,`an object of strings`);for(let[e,t]of Object.entries(S))Object.hasOwn(l,e)||G(`invalid-option`,`text.${e}`,`spec.text.${e} is not a text key.`,W(e,Object.keys(l)),`Text keys: ${Object.keys(l).join(`, `)}.`),typeof t!=`string`&&K(`text.${e}`,t,`a string`)}for(let e of[`yDomain`,`xDomain`]){let n=t[e];n!==void 0&&!(Array.isArray(n)&&n.length===2&&Number.isFinite(n[0])&&Number.isFinite(n[1])&&(e===`yDomain`?n[0]!==n[1]:n[0]<n[1]))&&G(`invalid-domain`,e,`spec.${e} = ${U(n)} is not a valid domain.`,e===`yDomain`?`Expected [min, max] (or [max, min] to reverse) with two different finite numbers.`:`Expected [min, max] with finite numbers and min < max, e.g. [0, 100].`)}let C=`en-US`;if(typeof t.locale==`string`){let e=!1;try{e=Intl.NumberFormat.supportedLocalesOf(t.locale).length>0}catch{}e||q(`locale`,`spec.locale = ${U(t.locale)} is not a locale this runtime supports.`,`Use a BCP 47 tag such as "de-DE". Node built with small ICU supports English only.`),C=t.locale}if(typeof t.currency==`string`)try{new Intl.NumberFormat(C,{style:`currency`,currency:t.currency})}catch{q(`currency`,`spec.currency = ${U(t.currency)} is not an ISO 4217 currency code.`,`Use a three-letter code such as "USD" or "EUR".`)}if(typeof t.format==`string`)gt(`format`,t.format,C);else if(t.format!==void 0){V(t.format)||K(`format`,t.format,`a preset or an object keyed by field`);for(let[e,n]of Object.entries(t.format))gt(`format.${e}`,n,C)}if(y!==void 0){let e=Array.isArray(y)?y.map((e,t)=>[`[${t}]`,e]):V(y)?Object.entries(y).map(([e,t])=>[`.${e}`,t]):null;(!e||!e.every(([,e])=>typeof e==`string`))&&K(`colors`,y,`an array of colours, or an object of colours by series value`),e.length>8&&G(`invalid-option`,`colors`,`spec.colors has ${e.length} colours; the palette has 8 slots.`,`Pass at most 8. Series 9 and later reuse slots in order.`);for(let[t,n]of e)ht(`colors${t}`,n,!1)}if(x!==void 0){V(x)&&Object.values(x).every(e=>typeof e==`string`)||K(`theme`,x,`an object of string values`);for(let e of Object.keys(x))tt.includes(e)||G(`invalid-theme`,`theme.${e}`,`spec.theme.${e} is not a theme token.`,`Valid tokens: ${tt.join(`, `)}.`,W(e,tt));for(let[e,t]of Object.entries(x))ht(`theme.${e}`,t,e===`font`)}t.stack===!0&&u===`line`&&G(`stack-unsupported`,`stack`,`spec.stack is not supported with spec.type = "line".`,`Use type "area" (or "bar") to stack series.`);for(let e in Xe)t[e]!==void 0&&t[e]!==!1&&!Xe[e].includes(u)&&G(`option-unsupported`,e,`spec.${e} is not supported with spec.type = "${u}".`,`spec.${e} works with: ${Xe[e].join(`, `)}.`);let w=Ke.includes(u),T=[[b!==void 0&&t.series!==void 0&&u!==`dumbbell`,`colorBy`,`spec.colorBy cannot be combined with spec.series.`,`Series already set the colours; remove one of them.`],[t.yDomain!==void 0&&Array.isArray(g),`yDomain`,`spec.yDomain cannot be combined with a y array.`,`Each measure needs its own domain; use a single y or remove yDomain.`],[t.drill===!0&&v!==void 0,`select`,`spec.select cannot be combined with spec.drill.`,`A click either drills or selects; choose one.`],[w&&_!==void 0&&t.x!==void 0,`x`,`spec.x cannot be combined with spec.path.`,`With path, the current drill level is the category; remove x.`],[t.y2!==void 0&&t.horizontal===!0,`y2`,`spec.y2 cannot be combined with spec.horizontal.`,`The y2 line needs a right value axis; draw vertical bars.`],[u===`kpi`&&b!==void 0&&!V(b),`colorBy`,`spec.colorBy on "kpi" must be { target: number }.`,`A kpi compares its headline with one target, drawn as a bullet bar.`],[w&&t.drill===!0&&_===void 0,`drill`,`spec.drill on "${u}" needs spec.path.`,`Replace x with path: ["region", "state"] (outer to inner).`]];for(let[e,t,n,r]of T)e&&G(`option-unsupported`,t,n,r);if(h.length){let e=[...new Set(h.flatMap(e=>Object.keys(e)))],n=(t,n,r,i)=>G(`unknown-field`,t,n,`Fields found: ${e.slice(0,20).join(`, `)}.`,W(r,e),i),r=typeof g==`string`?[g]:g,i=(e,t)=>t.map((t,n)=>[`${e}[${n}]`,t]),a=[[`x`,t.x],...typeof g==`string`?[[`y`,g]]:i(`y`,r),[`series`,t.series],[`y2`,t.y2],[`size`,t.size],[`name`,t.name],...i(`path`,_??[]),[`colorBy`,b===`sign`?void 0:b]];for(let[t,r]of a){if(typeof r!=`string`||e.includes(r))continue;let i=t.replace(/\[.*/,``);n(t,`spec.${t} = ${U(r)} is not a field in spec.data.`,r,`spec.${i} names the field used for ${nt[i]}.`)}for(let r of[`format`,`titles`])if(V(t[r]))for(let i of Object.keys(t[r]))e.includes(i)||n(`${r}.${i}`,`spec.${r} key "${i}" is not a field in spec.data.`,i,`spec.${r} keys name fields, for ${nt[r]}.`);b===`sign`&&e.includes(`sign`)&&G(`invalid-option`,`colorBy`,`spec.colorBy = "sign" colours by the sign of y, but spec.data also has a field named "sign".`,`Rename that field (e.g. data.map(({ sign, ...r }) => ({ ...r, signValue: sign }))) to colour by it.`);let o=(e,t)=>h.forEach((n,r)=>t(n[e],`data[${r}].${e}`)),s=(e,t,n)=>o(e,(r,i)=>{r==null||typeof r==`number`&&Number.isFinite(r)||G(t,i,`spec.${i} is ${U(r)} (a ${H(r)}), but spec.${n} requires numbers.`,typeof r==`string`&&r.trim()&&Number.isFinite(Number(r))?`Convert first: data.map(r => ({ ...r, ${e}: Number(r.${e}) }))`:`Use null for a gap in the data.`)});for(let e of r)s(e,`non-numeric-y`,`y`);if(typeof t.size==`string`&&s(t.size,`non-numeric-field`,`size`),typeof t.y2==`string`&&s(t.y2,`non-numeric-field`,`y2`),u===`dumbbell`&&typeof t.series==`string`){let e=new Set(h.map(e=>String(e[t.series]))).size;e!==2&&G(`invalid-option`,`series`,`spec.series on "dumbbell" needs exactly 2 values, found ${e}.`,`The first value seen is the start of each bar, the second the end, e.g. last year and this year.`)}if(u===`scatter`&&typeof t.x==`string`&&s(t.x,`non-numeric-field`,`x`),typeof b==`string`&&b!==`sign`&&s(b,`non-numeric-field`,`colorBy`),d)for(let e of r)o(e,(t,n)=>{typeof t==`number`&&t<=0&&G(`non-positive-value`,n,`spec.${n} is ${t}, but ${u} sizes must be positive.`,`Filter first: data.filter(r => r.${e} > 0), or chart the signed values with "bar".`)})}i.get(u)?.check?.(e,G)}function yt(e){if(e===void 0)return;V(e)||G(`invalid-option`,`options`,`options must be a plain object, received ${H(e)}.`);let t=e,n=(e,t,n)=>G(`unknown-option`,`${e}.${t}`,`${e}.${t} is not a known render option.`,W(t,n),`Known options: ${n.join(`, `)}.`),r=z(`width height view selected nonce`);for(let e of Object.keys(t))r.includes(e)||n(`options`,e,r);let i=(e,t,n)=>G(`invalid-option`,`options.${e}`,`options.${e} must be ${n}, received ${U(t)}.`);for(let e of[`width`,`height`]){let n=t[e];n!==void 0&&!(typeof n==`number`&&Number.isFinite(n)&&n>0)&&G(`invalid-size`,`options.${e}`,`options.${e} = ${U(n)} is not a valid size.`,`Size must be a finite number greater than 0.`)}let{view:a,selected:o,nonce:s}=t;if(a!==void 0){V(a)||i(`view`,a,`an object`);let e=z(`measure drill window hidden sortBy`);for(let t of Object.keys(a))e.includes(t)||n(`options.view`,t,e);let{measure:t,drill:r,window:o,hidden:s,sortBy:c}=a;c!==void 0&&(!Array.isArray(c)||c.length!==2||typeof c[0]!=`string`||c[1]!==`asc`&&c[1]!==`desc`)&&i(`view.sortBy`,c,`[field, "asc" | "desc"]`),t!==void 0&&!(Number.isInteger(t)&&t>=0)&&i(`view.measure`,t,`an index (integer >= 0)`),r!==void 0&&!mt(r)&&i(`view.drill`,r,`an array of strings`),s!==void 0&&!mt(s)&&i(`view.hidden`,s,`an array of strings`),o!==void 0&&(!Array.isArray(o)||o.length!==2&&o.length!==4||!o.every(Number.isFinite))&&i(`view.window`,o,`[i0, i1] or [x0, x1, y0, y1] of finite numbers`)}o!==void 0&&!(Array.isArray(o)&&o.every(e=>V(e)&&Object.keys(e).every(e=>[`x`,`series`,`name`].includes(e))))&&i(`selected`,o,`an array of { x?, series?, name? }`),s!==void 0&&!(typeof s==`string`&&/^[\w+/=-]+$/.test(s))&&i(`nonce`,s,`a base64 nonce string`)}function bt(e,t={}){let n=typeof e.y==`string`?[e.y]:[...e.y],r=Math.min(t.measure??0,n.length-1),i=[...e.path??[]],a=e.drill?(t.drill??[]).slice(0,Math.max(0,i.length-1)):[],o=i.slice(a.length),s=e.format,c=e=>Object.entries(e??{}).filter(e=>e[1]!==void 0);return{type:e.type,data:a.length?e.data.filter(e=>a.every((t,n)=>String(e[i[n]])===t)):e.data,x:e.x??(Ke.includes(e.type)?o[0]??``:``),y:n[r],measures:n,measure:r,series:e.series??null,y2:e.y2??null,path:o,drilled:a,window:t.window&&t.window.length===4?t.window:null,size:e.size??null,name:e.name??null,totals:[...e.totals??[]],stack:e.stack??!1,horizontal:e.horizontal??!1,aggregate:e.aggregate??`sum`,sort:e.sort??null,sortBy:t.sortBy??null,limit:e.limit??null,format:new Map(typeof s==`string`?n.map(e=>[e,s]):c(s)),titles:new Map(c(e.titles)),labels:e.labels??null,text:{...e.text},title:e.title??null,description:e.description??null,legend:e.legend??(e.series!==void 0||e.y2!==void 0||e.type===`waffle`),tooltip:e.tooltip??!0,drill:e.drill??!1,select:e.select??!1,zoom:e.zoom??!1,grid:e.grid??!0,xAxis:e.xAxis??!0,yAxis:e.yAxis??!0,locale:e.locale??`en-US`,currency:e.currency??`USD`,yDomain:e.yDomain??null,xDomain:e.xDomain??null,table:e.table??!0,animate:e.animate??!0,colors:Array.isArray(e.colors)?e.colors:e.colors?new Map(Object.entries(e.colors)):null,colorBy:e.colorBy??null,theme:e.theme??{}}}var xt={bar:ce,waterfall:ce,line:Te,area:Ee,scatter:ke,heatmap:pe,kpi:ge,dumbbell:fe,ridgeline:Se,beeswarm:de,parallel:xe,table:Me},St=e=>e.replace(/[A-Z]|\d+/g,e=>`-`+e.toLowerCase());function Ct(e,t,n){vt(e),t!==void 0&&yt(t);let r=Object.hasOwn(xt,e.type)?xt[e.type]:i.get(e.type),a=bt(e,t?.view),o=t?.width??640,s=t?.height??320,c=re(a,t?.view??{}),l=e=>e>5e3&&G(`too-many-marks`,`data`,`${e} marks exceed the limit of 5000.`,`Use spec.limit to keep the top N categories, or aggregate the rows first.`);l(c.cells.length);let d=new Map,h=(e,t,n)=>{if(t===`\0other`)return u(a,`other`);let r=e+`\0`+n,i=d.get(r);return i||d.set(r,i=E(a,e,n)),i(t)},g=a.colorBy,_=1/0,y=-1/0;if(typeof g==`string`&&g!==`sign`)for(let e of a.data){let t=e[g];typeof t==`number`&&(_=Math.min(_,t),y=Math.max(y,t))}let b=e=>g===`sign`?e<0?`bad`:`good`:g&&typeof g==`object`?e>=g.target?`good`:`bad`:null,C=e=>{let t=b(e);return t===null?null:u(a,g===`sign`?t===`good`?`positive`:`negative`:t===`good`?`above`:`below`)},w=[],T=``,D=(e,t,n,r)=>{let i=n.length*7.2+4,a=r===`start`?e:r===`end`?e-i:e-i/2,c=r===`above`?t-16:r===`below`?t+2:t-7;return a<0||c<0||a+i>o||c+14>s||w.some(e=>a<e[2]&&a+i>e[0]&&c<e[3]&&c+14>e[1])?!1:(w.push([a,c,a+i,c+14]),T+=m(`text`,{x:p(e),y:p(r===`above`?t-4:r===`below`?t+13:t),"text-anchor":r===`start`||r===`end`?r:`middle`,"dominant-baseline":r===`above`||r===`below`?null:`middle`,"data-in":r===`center`},f(n)),!0)},O=r.axes?te(a,r.axes(a,c),{width:o,height:s},h):null,k=O?.plot??{x:0,y:0,w:o,h:s},A={spec:a,shaped:c,width:o,height:s,plot:k,x:O?.x??null,y:O?.y??null,y2:O?.y2??null,fmt:h,label:D,tone:b,q:e=>y>_?Math.min(9,Math.max(0,Math.floor((e-_)/(y-_)*10))):9,agg:e=>t=>{let n=ne(e);for(let e of t)typeof e==`number`&&n.add(e);return n.value()},fail:G,t:(e,...t)=>u(a,e,...t)};r.check?.(e,G);let j=null,M=``;if(a.data.length===0)M=m(`text`,{"data-maya":`empty`,x:o/2,y:s/2,"text-anchor":`middle`,"dominant-baseline":`middle`},f(u(a,`noData`)));else{let e=(e,t)=>m(`g`,{"data-maya":e},t),t=r.draw(A);l(t.marks.split(` data-maya="mark"`).length-1),j=t.legend??null,M=e(`grid`,(a.type===`area`&&!a.stack||a.type===`kpi`?m(`defs`,{},[...new Set(c.visible.map(e=>e%8))].map(e=>m(`linearGradient`,{id:`maya-a${e}`,"data-s":e,x1:0,y1:0,x2:0,y2:1},`<stop offset="0" stop-opacity=".34"/><stop offset="1" stop-opacity=".02"/>`)).join(``)):``)+(t.grid??O?.grid??``))+e(`axis-y`,O?.ay??``)+e(`axis-x`,O?.ax??``)+e(`marks`,t.marks)+e(`labels`,(t.labels??``)+T)+e(`cross`,t.cross??``)+e(`hits`,t.hits)}let N=[];if(Array.isArray(a.colors))a.colors.forEach((e,t)=>N.push([`--maya-series-${t+1}`,e]));else if(a.colors)for(let[e,t]of a.colors){let n=(a.type===`waffle`?c.categories:c.series).indexOf(e);n>=0&&N.push([`--maya-series-${n%8+1}`,t])}for(let e in a.theme)N.push([`--maya-${St(e)}`,a.theme[e]]);let P=N.map(([e,t])=>`${e}:${t};`).join(``),ee=m(`svg`,{class:n===null?`maya-svg`:`maya-root maya-svg`,viewBox:`0 0 ${o} ${s}`,width:o,height:s,role:a.type===`table`?`figure`:`img`,"aria-label":n===null?null:v(a),"aria-labelledby":n===null?`maya-t`:null,"aria-describedby":n===null?`maya-d`:null,tabindex:n===null?`0`:null,style:n===null?null:P||null,"data-plot":`${p(k.x)} ${p(k.y)} ${p(k.w)} ${p(k.h)}`,...O?.attrs,"data-dir":a.horizontal?`h`:null,"data-stack":a.stack||null},(n?`<style>${n}</style>`:``)+m(`title`,{id:n===null?`maya-t`:null},f(v(a)))+m(`desc`,{id:n===null?`maya-d`:null},f(x(a,c,h,r.noun)))+M),F=``;return j!==null&&a.legend?F=j:(a.series!==null||a.y2!==null)&&a.legend?F=`<div class="maya-legend" data-maya="legend">`+(a.series===null&&a.y2!==null?`<span data-s="0"><i></i>${f(a.titles.get(a.y)??a.y)}</span>`:``)+(a.series===null?[]:c.series).map((e,t)=>m(`button`,{type:`button`,"data-si":t,"data-s":t%8,"data-key":e,"aria-pressed":String(c.visible.includes(t))},`<i></i>${f(e)}`)).join(``)+(a.y2===null?``:`<span data-s="${c.series.length%8}" data-line><i></i>${f(a.titles.get(a.y2)??a.y2)}</span>`)+`</div>`:e.legend!==!1&&g!==null&&a.series===null&&a.type!==`kpi`&&(F=g===`sign`||typeof g==`object`?`<div class="maya-legend" data-maya="tone">`+[`good`,`bad`].map(e=>`<span data-tone="${e}"><i></i>${f(u(a,g===`sign`?e===`good`?`positive`:`negative`:e===`good`?`above`:`below`))}</span>`).join(``)+`</div>`:y>_?`<div class="maya-legend" data-maya="ramp"><span>${f(h(g,_))}</span><i></i><span>${f(h(g,y))}</span></div>`:``),{svg:ee,legend:F,controls:a.measures.length>1&&!Je.includes(a.type)?`<div class="maya-ctl" role="radiogroup" aria-label="${f(u(a,`measures`))}" data-n="${a.measures.length}" data-i="${a.measure}">`+a.measures.map((e,t)=>`<button type="button" role="radio" aria-checked="${t===a.measure}" data-i="${t}" tabindex="${t===a.measure?0:-1}">${f(a.titles.get(e)??e)}</button>`).join(``)+`</div>`:``,crumbs:a.drilled.length>0?`<nav class="maya-crumbs" aria-label="${f(u(a,`crumbs`))}"><button type="button" data-depth="0">${f(u(a,`back`))}</button>`+a.drilled.map((e,t)=>`<span aria-hidden="true">›</span><button type="button" data-depth="${t+1}"${t===a.drilled.length-1?` aria-current="page"`:``}>${f(String(e))}</button>`).join(``)+`</nav>`:a.drill?`<div class="maya-crumbs" aria-hidden="true"></div>`:``,table:a.table?S(a,c,h,C):``,title:a.title===null?``:`<div class="maya-title">${f(a.title)}</div>`,style:P,vars:N,warnings:[]}}function wt(e,t){return Ct(e,t,null)}function Tt(e,t){return Ct(e,t,He).svg}function Et(e,t,n){let r=e.style?` style="${f(e.style)}"`:``,i=n?` nonce="${f(n)}"`:``;return`${t?`<style${i}>${t}</style>`:``}<div class="maya"${r}>${e.title}${e.controls}${e.legend}${e.crumbs}<div class="maya-box">${e.svg}</div>${e.table}<div class="maya-sr" data-maya="live" aria-live="polite"></div><div class="maya-probe" data-maya="probe"></div><div class="maya-tip" popover="manual" role="tooltip"></div></div>`}function Dt(e){let t=e=>typeof e==`object`?Object.keys(e):[],n=new Set([e.x,...typeof e.y==`string`?[e.y]:e.y,e.series,e.y2,e.size,e.name,...e.path??[],typeof e.colorBy==`string`?e.colorBy:void 0,...t(e.format),...t(e.titles)]);return{...e,data:e.data.map(e=>Object.fromEntries(Object.entries(e).filter(([e])=>n.has(e))))}}function Ot(e,t){let n=wt(e,t),r=JSON.stringify(Dt(e)).replace(/</g,`\\u003c`);return`<maya-chart><template shadowrootmode="open">${Et(n,He,t?.nonce)}</template><script type="application/json">${r}<\/script></maya-chart>`}var kt,At=e=>{let t=globalThis.trustedTypes;if(!t)return e;if(kt?.[0]!==t){let e=null;try{e=t.createPolicy(`mayacharts`,{createHTML:e=>e})}catch{e=t.getPolicy?.(`mayacharts`)??null}kt=[t,e]}return kt[1]?kt[1].createHTML(e):e},J=!1,jt=0,Mt=`cubic-bezier(.22,1,.36,1)`,Nt=`cubic-bezier(.34,1.5,.64,1)`,Pt=`cubic-bezier(.65,0,.35,1)`,Ft={duration:520,easing:Mt},It={duration:760,easing:Mt},Lt={duration:220,easing:Mt},Rt=1500,zt=320,Bt=1e-6,Y=(e,t)=>+(e.getAttribute(t)??0),Vt=e=>{if(e.localName===`rect`)return[Y(e,`x`),Y(e,`y`),Y(e,`width`),Y(e,`height`)];if(e.localName===`circle`){let t=Y(e,`r`);return[Y(e,`cx`)-t,Y(e,`cy`)-t,2*t,2*t]}},Ht=e=>{let t=e.getBBox?.();return Vt(e)??(t?[t.x,t.y,t.width,t.height]:void 0)},Ut=(e,t)=>`translate(${t[0]-e[0]}px,${t[1]-e[1]}px) scale(${Math.max(t[2],Bt)/Math.max(e[2],Bt)},${Math.max(t[3],Bt)/Math.max(e[3],Bt)})`,X=(e,t,n,r)=>{n.delay&&(n={...n,fill:n.fill===`forwards`?`both`:n.fill??`backwards`});let i=J?void 0:e.animate?.(t,n);if(!r)return;if(!i)return r();let a=!1,o=()=>a||(a=!0,r());i.addEventListener(`finish`,o),i.addEventListener(`cancel`,o),setTimeout(o,Number(n.duration??0)+Number(n.delay??0)+100)},Wt=e=>e.hasAttribute(`data-c`)?Y(e,`data-c`)*jt:0;function Gt(e,t){for(let n of[...e.attributes])!t.hasAttribute(n.name)&&n.name!==`style`&&e.removeAttribute(n.name);for(let n of[...t.attributes])e.setAttribute(n.name,n.value)}function Kt(e,t,n){if(n)return n;let[r,i,a,o]=t;if(e.localName===`circle`)return[r+a/2,i+o/2,0,0];let s=e.hasAttribute(`data-neg`);return e.closest(`[data-dir=h]`)?[s?r+a:r,i,0,o]:[r,s?i:i+o,a,0]}function Z(e,t,n,r=Ft){let i=[{opacity:0},{opacity:1}];X(e,t?i.reverse():i,t?{...r,fill:`forwards`}:r,n)}var qt=(e=!1)=>{let t=[{transform:`scale(.6)`,transformOrigin:`50% 50%`,opacity:0},{transform:`none`,transformOrigin:`50% 50%`,opacity:1}];return e?t.reverse():t};function Jt(e,t,n=Ft){let r=Vt(e),i={...n,delay:Wt(e)};if(r){let n=e.localName===`circle`;X(e,[{transform:Ut(r,Kt(e,r,t)),opacity:0},{transform:`none`,opacity:1}],n&&!t?{...i,easing:Nt}:i)}else if(e.matches(`path[data-maya=line]`)){e.setAttribute(`pathLength`,`1`);let t=e=>({strokeDasharray:`1`,strokeDashoffset:e});X(e,[t(`1`),t(`0`)],{...n,easing:Pt,duration:Number(n.duration)*1.4})}else e.localName===`path`&&!e.matches(`[data-maya=area]`)?X(e,qt(),i):Z(e,!1,void 0,i)}function Yt(e){for(let t of[`data-key`,`data-active`,`data-lit`])e.removeAttribute(t);e.setAttribute(`data-ghost`,``)}function Xt(e,t){Yt(e);let n=Vt(e),r=()=>e.remove(),i={...Ft,fill:`forwards`};n?X(e,[{transform:`none`,opacity:1},{transform:Ut(n,Kt(e,n,t)),opacity:0}],i,r):e.localName===`path`&&!e.matches(`[data-maya=line],[data-maya=area]`)?X(e,qt(!0),i,r):Z(e,!0,r)}function Zt(e,t){if(!e.getAnimations?.().length)return t;let n=getComputedStyle(e).transform;if(!n||n===`none`||typeof DOMMatrix>`u`)return t;let r=new DOMMatrix(n);return[t[0]+r.e,t[1]+r.f,t[2]*r.a,t[3]*r.d]}var Qt=!!globalThis.CSS?.supports?.(`d`,`path("M0 0")`),$t=e=>e.replace(/[^A-Za-z]/g,``),en=(e,t)=>Qt&&!!e&&!!t&&$t(e)===$t(t),tn=new WeakMap,nn=(e,t)=>{let n=tn.get(e)?.playState===`running`?getComputedStyle(e).getPropertyValue(`d`):``;return n.startsWith(`path(`)?n:`path("${t}")`};function rn(e,t,n){for(let t of e.getAnimations?.()??[])t.cancel();if(J)return;let r=e.animate?.([{d:t},{d:`path("${n}")`}],Ft);r&&tn.set(e,r)}function an(e){let t=e.cloneNode(!0);Yt(t),e.before(t),Z(t,!0,()=>t.remove())}var on=/\d(?:[\d.,'\u2019\s\u00a0\u202f]*\d)?/,sn=new WeakMap;function cn(e,t,n){let r=e.textContent??``,i=on.exec(r),a=on.exec(t);if(!i||J||typeof requestAnimationFrame>`u`)return;let o=i[0],s=o.replace(/\D/g,``);if(s.length>15||+s==0)return;let c=a?a[0].replace(/\D/g,``):``,l=c.length===s.length?+c:0,u=+s;if(l===u)return;let d=/^0\D/.test(o)?1:o.search(/\D\d{1,2}$|\D\d{4,}$/),f=r.slice(0,i.index),p=r.slice(i.index+o.length),m=e=>{let t=String(e).padStart(s.length,`0`),n=0,r=o.replace(/\d/g,()=>t[n++]),[i,a]=d<0?[r,``]:[r.slice(0,d),r.slice(d)];return f+i.replace(/^[0\D]+(?=\d)/,``)+a+p},h=Number(n.duration)*1.6,g=performance.now()+Number(n.delay??0),_=(sn.get(e)??0)+1;sn.set(e,_);let v=m(l);e.textContent=v;let y=t=>{if(sn.get(e)!==_||e.textContent!==v)return;let n=Math.min(1,Math.max(0,(t-g)/h));e.textContent=v=n<1?m(Math.round(l+(u-l)*(1-(1-n)**4))):r,n<1&&requestAnimationFrame(y)};requestAnimationFrame(y)}function ln(e,t,n){let r=new Map;for(let t of e.children)t.hasAttribute(`data-key`)&&r.set(t.getAttribute(`data-key`),t);let i=[];for(let e of[...t.children]){let t=e.getAttribute(`data-key`),n=r.get(t);if(!n||n.localName!==e.localName){i.push(e);continue}r.delete(t);let a=Vt(n),o=a&&Zt(n,a),s=n.getAttribute(`d`)??``,c=e.getAttribute(`d`)??``,l=!a&&s!==c,u=l&&en(s,c),d=u?nn(n,s):``,f=n.textContent??``;if(J||l&&!u)for(let e of n.getAnimations?.()??[])e.cancel();l&&!u&&!J&&an(n),Gt(n,e),u&&rn(n,d,c),n.innerHTML!==e.innerHTML&&n.replaceChildren(...e.childNodes);let p=Vt(n);if(!J&&o&&p&&(o.some((e,t)=>Math.abs(e-p[t])>.01)||p.some((e,t)=>e!==a[t]))){for(let e of n.getAnimations?.()??[])e.cancel();X(n,[{transform:Ut(p,o)},{transform:`none`}],{...Ft,delay:Wt(n)/2})}else l&&!u&&Z(n,!1);n.localName===`text`&&n.textContent!==f&&cn(n,f,Ft),i.push(n)}for(let e of r.values())Xt(e,n);let a=e.firstElementChild;for(let t of i){for(;a&&a!==t&&!a.hasAttribute(`data-key`);)a=a.nextElementSibling;if(a===t)a=a.nextElementSibling;else{let r=!t.isConnected;e.insertBefore(t,a),r&&Jt(t,n)}}}function un(e,t,n,r){let i=e=>e.getAttribute(`data-maya`)??e.localName,a=new Map([...e.children].filter(e=>e!==n).map(e=>[i(e),e])),o=[],s=[],c=[],l=e=>e.localName===`g`&&!/^(cross|hits)$/.test(i(e));for(let e of[...t.children]){if(e===r){o.push(n);continue}let t=a.get(i(e));a.delete(i(e)),t&&t.outerHTML===e.outerHTML?o.push(t):(t&&l(t)&&(c.push(t),o.push(t)),o.push(e),t&&l(e)&&s.push(e))}for(let e of a.values())l(e)&&(c.push(e),o.push(e));e.replaceChildren(...o);for(let e of c)dn(e);for(let e of s)Z(e,!1,void 0,Lt)}function dn(e){e.removeAttribute(`data-maya`);for(let t of e.querySelectorAll(`[data-maya]`))t.removeAttribute(`data-maya`);Z(e,!0,()=>e.remove(),Lt)}function fn(e,t){let n=t=>e.querySelector(`:scope > [data-maya=${t}]`);for(let e of[`grid`,`axis-y`,`axis-x`]){let t=n(e);t&&Z(t,!1,void 0,{...Lt,duration:480})}let r=n(`marks`);if(!r)return;let i={...Lt,duration:360,delay:Number(It.duration)*.6+zt/2},a=n(`labels`);if(a&&Z(a,!1,void 0,i),t===`wipe`){let e=e=>({clipPath:`inset(-20% ${e} -20% -1%)`});X(r,[e(`101%`),e(`-1%`)],{duration:1100,easing:Pt})}else if(t===`bloom`){let t=(e.getAttribute(`data-plot`)??`0 0 0 0`).split(` `).map(Number);r.style.transformOrigin=`${t[0]+t[2]/2}px ${t[1]+t[3]/2}px`,X(r,[{transform:`rotate(-24deg) scale(.82)`,opacity:0},{transform:`none`,opacity:1}],{duration:1e3,easing:Mt})}else for(let e of r.children)Jt(e,void 0,It);for(let e of r.querySelectorAll(`text[data-maya=mark]`))cn(e,``,It)}var pn=e=>{let t=new Set;for(let n of e.children)t.add(n.getAttribute(`data-c`)??``);return Math.min(40,zt/Math.max(1,t.size))};function mn(e,t,n,r={}){let i=document.createElement(`template`);i.innerHTML=At(t);let a=i.content.firstElementChild,o=e.firstElementChild,s=o?.querySelector(`:scope > [data-maya=marks]`),c=a.querySelector(`:scope > [data-maya=marks]`),l=!c||c.childElementCount>Rt||(s?.childElementCount??0)>Rt;!n||!o||!s||!c||l?(e.replaceChildren(a),n&&r.intro&&c&&!l&&(jt=pn(c),fn(e.firstElementChild,r.intro))):(J=!!r.instant,jt=pn(c),Gt(o,a),Gt(s,c),ln(s,c,r.origin),un(o,a,s,c),J=!1),r.after?.(e.firstElementChild)}var hn=(e=[],t=[])=>e.length===t.length&&e.every((e,n)=>e===t[n]),gn=(e,t)=>hn(e.view.drill,t)?e:{view:{...e.view,drill:t},selected:[]},_n=(e,t)=>{let n=e.view.drill??[];if(t.type===`pop`)return gn(e,n.slice(0,Math.max(0,t.depth)));if(t.type===`drill`){let r=t.spec?.path?.length??0;return t.spec?.drill&&n.length<r-1?gn(e,[...n,t.value]):e}if(t.type!==`spec`||!n.length)return e;let{prev:r,next:i}=t,a=i.path??[];if(!i.drill||r&&(r.type!==i.type||r.x!==i.x||!hn(r.path,i.path)))return gn(e,[]);let o=i.data,s=[];for(let e=0;e<n.length&&e<a.length-1&&(o=o.filter(t=>String(t[a[e]])===n[e]),o.length);e++)s.push(n[e]);return gn(e,s)},vn=(e,t)=>{let n=e.split(`~`),r=n[0]===`h`?n[1+t]??n[n.length-1]:n[1];if(r!==void 0)try{return decodeURIComponent(r)}catch{return r}},yn=e=>{let t,n=()=>[...e.root.querySelectorAll(`[data-maya=mark][data-key]`)].filter(e=>!e.hasAttribute(`data-other`)),r=t=>{let n=e.spec(),r=t.view.drill??[];n&&e.announce(u(n,r.length?`drilledInto`:`back`,r.join(` / `)))},i=n=>{let i=e.state(),a=i.view.drill??[];if(n>=a.length)return!1;let o=_n(i,{type:`pop`,depth:n});return o!==i&&(t={value:a[n]},e.commit(o),r(o),!0)},a=n=>{let i=e.spec(),a=n.getAttribute(`data-key`);if(!i?.drill||!a||n.hasAttribute(`data-other`))return!1;let o=e.state(),s=vn(a,(o.view.drill??[]).length);if(s===void 0)return!1;let c=_n(o,{type:`drill`,value:s,spec:i});return c!==o&&(t={first:!0},e.commit(c),r(c),!0)},o=e=>{let t=e.target,n=t?.closest(`.maya-crumbs [data-depth]`);if(n)return void i(Number(n.getAttribute(`data-depth`)));let r=t?.closest(`[data-maya=mark],[data-maya=hit]`);r&&a(r)};return e.root.addEventListener(`click`,o),{escape:()=>i((e.state().view.drill??[]).length-1),enter:e=>a(e),painted(){if(!t)return;let r=n(),i=`first`in t?r[0]:r.find(n=>vn(n.getAttribute(`data-key`),e.state().view.drill?.length??0)===t.value);t=void 0,i&&(i.hasAttribute(`tabindex`)||i.setAttribute(`tabindex`,`-1`),i.focus?.({preventScroll:!0})),(!e.root.activeElement||!e.root.contains(e.root.activeElement))&&e.root.querySelector(`.maya-svg`)?.focus({preventScroll:!0})},off:()=>e.root.removeEventListener(`click`,o)}},bn=`.maya-ctl [role=radio]`,xn=(e,t)=>{if(t.type===`spec`){let n=t.next.y,r=t.prev&&JSON.stringify(n)===JSON.stringify(t.prev.y);if(Array.isArray(n)&&r||e.view.measure===void 0)return e;let{measure:i,...a}=e.view;return{...e,view:a}}let n=t.count===void 0?1/0:t.count-1,r=Math.min(Math.max(0,Math.trunc(t.index)||0),Math.max(0,n));return e.view.measure===r?e:{...e,view:{...e.view,measure:r}}},Sn=e=>{let t=()=>[...e.root.querySelectorAll(bn)],n=!1,r=t=>{let n=e.spec(),r=n&&Array.isArray(n.y)?n.y:[],i=e.state(),a=xn(i,{type:`measure`,index:t,count:r.length||void 0});if(a===i)return;e.commit(a);let o=a.view.measure??0,s=r[o]??String(o);e.announce(u(n??{},`showing`,n?.titles?.[s]??s))},i=e=>{let n=e.target.closest?.(bn),i=n?t().indexOf(n):-1;i>=0&&r(i)},a=i=>{let a=i.key,s=t(),c=s.indexOf(i.target.closest?.(bn));if(c<0)return;let l=a===`ArrowRight`||a===`ArrowDown`?(c+1)%s.length:a===`ArrowLeft`||a===`ArrowUp`?(c-1+s.length)%s.length:a===`Home`?0:a===`End`?s.length-1:-1;l<0||(i.preventDefault(),n=!0,l===e.state().view.measure?o():r(l),s[l]?.focus({preventScroll:!0}))},o=()=>{let r=t(),i=e.state().view.measure??0;r.forEach((e,t)=>{e.setAttribute(`aria-checked`,String(t===i)),e.setAttribute(`tabindex`,t===i?`0`:`-1`)}),n&&(n=!1,r[i]?.focus({preventScroll:!0}))};return e.root.addEventListener(`click`,i),e.root.addEventListener(`keydown`,a),{painted:o,off(){e.root.removeEventListener(`click`,i),e.root.removeEventListener(`keydown`,a)}}},Cn=(e,t)=>JSON.stringify(e)===JSON.stringify(t),wn=[`x`,`series`,`name`],Tn=e=>{try{return decodeURIComponent(e)}catch{return e}};function En(e,t){if(t.type===`clear`)return e.selected.length?{...e,selected:[]}:e;if(t.type===`spec`){let n=t.prev;if(!n||!e.selected.length)return e;let r=t.next;return n.type!==r.type||n.x!==r.x||JSON.stringify(n.path)!==JSON.stringify(r.path)?{...e,selected:[]}:e}if(t.type!==`toggle`)return e;let n=e.selected.some(e=>Cn(e,t.sel)),r=t.multi?n?e.selected.filter(e=>!Cn(e,t.sel)):[...e.selected,t.sel]:n&&e.selected.length===1?[]:[t.sel];return{...e,selected:r}}function Dn(e,t){let n=e.getAttribute(`data-key`);if(!n)return;let r=n.split(`~`).map(Tn);if(r[0]===`h`)return{name:r[r.length-1]};if(r.length!==2)return;let i={};return r[0]&&(i.series=r[0]),t===`scatter`?i.name=r[1]:i.x=r[1],i}function On(e,t,n){let r=Dn(t,n);return r?wn.every(t=>e[t]===void 0||String(e[t])===String(r[t])):!1}function kn(e){let{root:t}=e,n=()=>e.spec()?.type,r=(t,n)=>{let r=e.spec();if(!r?.select)return;let i=En(e.state(),{type:`toggle`,sel:t,multi:r.select===`multi`}),a=n?.getAttribute(`data-y`)??``;e.commit(i,n?{...t,value:a!==``&&!isNaN(+a)?+a:a}:null);let o=i.selected.length;e.announce(o?u(r,`selected`,o):u(r,`selectionCleared`))},i=i=>{if(!e.spec()?.select)return;let a=i.target,o=a.closest(`[data-maya=legend] button`);if(o){let e=o.getAttribute(`data-key`);e&&r({series:e},null);return}let s=a.closest(`[data-maya=mark],[data-maya=hit]`);if(s&&!s.getAttribute(`data-key`)){let e=s.getAttribute(`data-c`);s=e===null?null:t.querySelector(`[data-maya=mark][data-key][data-c="${e}"]`)}let c=s&&Dn(s,n());s&&c&&r(c,s)};return t.addEventListener(`click`,i),{escape(){return e.state().selected.length?(e.commit(En(e.state(),{type:`clear`})),e.announce(u(e.spec()??{},`selectionCleared`)),!0):!1},enter(t){let i=Dn(t,n());return!e.spec()?.select||!i?!1:(r(i,t),!0)},painted(){let r=e.state().selected;for(let e of t.querySelectorAll(`[data-maya=mark][data-key]`))r.some(t=>On(t,e,n()))?e.setAttribute(`data-selected`,``):e.removeAttribute(`data-selected`)},off:()=>t.removeEventListener(`click`,i)}}var An=(e,t)=>{if(t.type===`spec`){let{prev:n,next:r}=t;if(!e.view.sortBy||n&&n.type===r.type&&n.x===r.x&&JSON.stringify(n.y)===JSON.stringify(r.y))return e;let{sortBy:i,...a}=e.view;return{...e,view:a}}let n=e.view.sortBy,r=n?.[0]===t.field?n[1]===`asc`?`desc`:`asc`:t.label?`asc`:`desc`;return{...e,view:{...e.view,sortBy:[t.field,r]}}},jn=`[data-maya=sort]`,Mn=e=>{let t=null,n=n=>{let r=e.spec(),i=n.getAttribute(`data-field`);if(!r||r.type!==`table`||!i)return;let a=An(e.state(),{type:`sort`,field:i,label:i===r.x}),[,o]=a.view.sortBy;t=i,e.commit(a);let s=r.titles;e.announce(u(r,`sortedBy`,s?.[i]??i,u(r,o===`asc`?`ascending`:`descending`)))},r=e=>{let t=e.target.closest?.(jn);t&&n(t)},i=e=>{let t=e.key,r=e.target.closest?.(jn);!r||t!==`Enter`&&t!==` `||(e.preventDefault(),e.stopPropagation(),n(r))};return e.root.addEventListener(`click`,r),e.root.addEventListener(`keydown`,i,!0),{painted(){if(t===null)return;let n=t;t=null,[...e.root.querySelectorAll(jn)].find(e=>e.getAttribute(`data-field`)===n)?.focus({preventScroll:!0})},off(){e.root.removeEventListener(`click`,r),e.root.removeEventListener(`keydown`,i,!0)}}},Q=(e,t)=>e.getAttribute(t)??``,$=(e,t=``,n={})=>{let r=document.createElement(e);r.textContent=t;for(let e in n)r.setAttribute(e,n[e]);return r},Nn=`[data-maya=hit],[data-maya=mark],[data-maya=link][data-key]`,Pn=120,Fn=[`position`,`position-area`,`left`,`top`,`margin`],In={duration:200,easing:`cubic-bezier(.22,1,.36,1)`},Ln=()=>matchMedia?.(`(prefers-reduced-motion: reduce)`).matches;function Rn(e,t,n=()=>{},r=()=>void 0){let i=t=>e.querySelector(t),a=i(`.maya-box`),o=i(`.maya-tip`),s=i(`.maya-probe`),c=e.host,l=!!globalThis.CSS?.supports?.(`anchor-name: --x`),d=[],f=new Map,p=new Map,m,h=!1,g=!1,_=!1,v=!1,y,b,x,S,C=()=>{d=[...a.querySelectorAll(`[data-maya=mark][data-key]`)],f=new Map,p=new Map;for(let e of d){if(f.set(Q(e,`data-key`),e),!e.hasAttribute(`data-c`))continue;let t=Q(e,`data-c`);p.set(t,[...p.get(t)??[],e])}},w=e=>Q(e,`data-maya`)!==`link`&&e.hasAttribute(`data-c`)&&p.get(Q(e,`data-c`))||[e],T=[],E=[],D=e=>{for(let e of T)e.removeAttribute(`data-active`);for(let e of E)e.removeAttribute(`data-lit`);T=e?.hasAttribute(`data-c`)?[...a.querySelectorAll(`[data-maya=line][data-key][data-c="${CSS.escape(Q(e,`data-c`))}"]`)]:[],E=e?[...w(e)]:[];let t=e?Q(e,`data-key`):``;if(t.startsWith(`h~`))for(let[e,n]of f)t.startsWith(e+`~`)&&e!==`h`&&E.push(n);for(let e of T)e.setAttribute(`data-active`,``);for(let e of E)e.setAttribute(`data-lit`,``)},O=e=>{let t=a.querySelector(`[data-maya=cross]`);if(!t||!e&&t.style.opacity!==`1`)return;let n=t.style.opacity===`1`;t.style.opacity=e?`1`:`0`;let r=t.ownerSVGElement??a.querySelector(`svg`);if(!e||!r)return t.removeAttribute(`data-on`);let i=e.getBoundingClientRect(),o=r.getBoundingClientRect(),s=+(Q(r,`viewBox`).split(` `)[2]||o.width)||1;t.style.transform=`translateX(${(i.left+i.width/2-o.left)*s/(o.width||s)}px)`,n||getComputedStyle(t).transform,t.setAttribute(`data-on`,``)},k=e=>{let t=a.querySelector(`svg`),n=r()?.type;if(!e||!t||e.localName!==`rect`||n!==`bar`&&n!==`waterfall`){S?.removeAttribute(`data-on`);return}let[i,o,s,c]=Q(t,`data-plot`).split(` `).map(Number),l=t.hasAttribute(`data-dir`),u=(l?c:s)/Math.max(1,+Q(t,`data-n`)||1),d=1/0,f=-1/0;for(let t of w(e)){let e=+Q(t,l?`y`:`x`),n=e+ +Q(t,l?`height`:`width`);d=Math.min(d,e),f=Math.max(f,n)}let p=(d+f)/2-u/2;S?.isConnected||(S=document.createElementNS(`http://www.w3.org/2000/svg`,`rect`),S.setAttribute(`data-maya`,`band`),t.querySelector(`:scope > [data-maya=marks]`)?.before(S));let m=S;for(let[e,t]of Object.entries(l?{x:i,y:0,width:s,height:u}:{x:0,y:o,width:u,height:c}))m.setAttribute(e,String(t));m.style.transform=l?`translateY(${p}px)`:`translateX(${p}px)`,m.hasAttribute(`data-on`)||getComputedStyle(m).transform,m.setAttribute(`data-on`,``)},A=()=>{m?.removeAttribute(`data-active`),D(void 0),m=void 0,g=!1,O(void 0),k(void 0),o.classList.remove(`maya-open`),h&&(h=!1,clearTimeout(y),y=setTimeout(()=>h||o.hidePopover(),Pn))},j=(e,t)=>{let n=e?.closest?.(Nn);if(!n||Q(n,`data-maya`)!==`hit`)return n??void 0;if(n.hasAttribute(`data-key`))return f.get(Q(n,`data-key`));let r=t?.clientY??0,i,a=1/0;for(let e of p.get(Q(n,`data-c`))??[]){let t=e.getBoundingClientRect(),n=Math.abs(r-(t.top+t.height/2));n<a&&(a=n,i=e)}return i},M=e=>{let t=Q(e,`data-tone`),n=r();if(!t)return``;let i=typeof n?.colorBy==`object`;return u(n??{},t===`good`?i?`above`:`positive`:i?`below`:`negative`)},N=(e,t=!1)=>{let i=h?o.getBoundingClientRect():void 0;x?.cancel(),m?.removeAttribute(`data-active`),m=e,e.setAttribute(`data-active`,``),D(e);let u=w(e),d=r(),f=d?.y,p=typeof f==`string`&&d?.type!==`scatter`?d?.titles&&Object.hasOwn(d.titles,f)?d.titles[f]:f:``;o.replaceChildren($(`b`,Q(e,`data-x`)),...u.map(t=>{let n=$(`div`,``,t===e?{"data-on":``}:{}),r=Q(t,`data-series`);r?(t.hasAttribute(`data-s`)&&n.append($(`i`,``,{"data-s":Q(t,`data-s`)})),n.append($(`span`,r))):p&&n.append($(`span`,p)),n.append($(`span`,Q(t,`data-f`),{"data-v":``}));let i=M(t);return i&&n.append($(`span`,i)),n})),O(e),k(e);let g=a.querySelector(`svg`),v=!!g?.querySelector(`[data-maya=cross] *`),b=e.getBoundingClientRect();if(v&&g){let e=g.getBoundingClientRect(),t=e.width/(+Q(g,`viewBox`).split(` `)[2]||e.width||1),[,n,,r]=Q(g,`data-plot`).split(` `).map(Number),i=b.left+b.width/2,a=e.top+n*t;b={left:i,top:a,width:0,height:r*t,right:i,bottom:a+r*t}}o.toggleAttribute(`data-side`,v);let S=c.getBoundingClientRect();Object.assign(s.style,{left:b.left-S.left-c.clientLeft+`px`,top:b.top-S.top-c.clientTop+`px`,width:b.width+`px`,height:b.height+`px`}),clearTimeout(y),h||=(o.showPopover(),!0),o.classList.add(`maya-open`);let C=globalThis.visualViewport,T=C?.width??innerWidth,E=C?.height??innerHeight;if(_)for(let e of Fn)o.style.removeProperty(e);_=!1;let A=o.getBoundingClientRect();if(!l||A.left<0||A.top<0||A.right>T||A.bottom>E){for(let e of[`left`,`top`,`margin`])o.style.setProperty(e,`0px`);o.style.setProperty(`position`,`fixed`),o.style.setProperty(`position-area`,`none`),A=o.getBoundingClientRect();let e=v?b.top:b.top-A.height-8;e<8&&(e=b.bottom+8),e=Math.max(8,Math.min(e,E-A.height-8));let t=v?b.left+12:b.left+b.width/2-A.width/2;v&&t+A.width>T-8&&(t=b.left-12-A.width),t=Math.max(8,Math.min(t,T-A.width-8)),o.style.setProperty(`left`,t+`px`),o.style.setProperty(`top`,e+`px`),_=!0}if(i&&!Ln()&&r()?.animate!==!1){let e=o.getBoundingClientRect(),t=i.left-e.left,n=i.top-e.top;(t||n)&&(x=o.animate?.([{transform:`translate(${t}px,${n}px)`},{transform:`none`}],In))}t&&n(`${Q(e,`data-x`)}: ${u.map(e=>[Q(e,`data-series`),Q(e,`data-f`),M(e)].filter(Boolean).join(` `)).join(`, `)}`)},P=e=>{if(v=!1,!t()||e.pointerType!==`mouse`)return;let n=j(e.target,e);n?n!==m&&N(n):A()},ee=[[a,`pointerover`,P],[a,`pointermove`,P],[a,`pointerdown`,e=>{v=!1;let t=e;b=t.pointerType===`mouse`?void 0:[t.clientX,t.clientY]}],[a,`pointerup`,e=>{let n=e,r=b;if(b=void 0,!t()||!r||Math.hypot(n.clientX-r[0],n.clientY-r[1])>=4)return;let i=j(e.target,e);i&&N(i)}],[a,`pointerleave`,e=>e.pointerType===`mouse`&&A()],[a,`keydown`,e=>{let n=e.key;if(!t())return;if(v=!0,n===`Escape`)return g&&e.preventDefault(),A();let r;if(n===` `){if(r=m??d[0],!r)return;g=!g,g&&N(r,!0)}else if(n.startsWith(`Arrow`)){let e=n===`ArrowRight`||n===`ArrowDown`?1:-1,t=m?d.indexOf(m):-1;if(t<0)r=d[0];else if(n===`ArrowUp`||n===`ArrowDown`){let n=w(d[t]);r=n[n.indexOf(d[t])+e]}else{let n=[...p.keys()],i=p.get(n[n.indexOf(Q(d[t],`data-c`))+e]);r=i?.find(e=>Q(e,`data-s`)===Q(d[t],`data-s`))??i?.[0]}r&&N(r,!0)}else return;e.preventDefault()}],[a,`focusout`,()=>g||A()],[document,`pointerdown`,e=>{let t=e.composedPath();(!t.includes(a)||!j(t[0],e))&&A()},{capture:!0}],[window,`scroll`,()=>v||A(),{capture:!0,passive:!0}]];for(let[e,t,n,r]of ee)e.addEventListener(t,n,r);return C(),{off:()=>(A(),clearTimeout(y),ee.forEach(([e,t,n,r])=>e.removeEventListener(t,n,r))),hide:A,active:()=>m,refresh(){let e=m&&Q(m,`data-key`);C();let n=e?f.get(e):void 0;n&&t()?N(n):A()}}}var zn=e=>{if(!e.view.window)return e;let{window:t,...n}=e.view;return{...e,view:n}},Bn=(e,t)=>{if(t.type===`zoom`){let n=t.window;if(n.length===2){let t=Math.max(0,Math.trunc(Math.min(n[0],n[1]))),r=Math.max(t,Math.trunc(Math.max(n[0],n[1])));return{...e,view:{...e.view,window:[t,r]}}}let[r,i,a,o]=n;return{...e,view:{...e.view,window:[Math.min(r,i),Math.max(r,i),Math.min(a,o),Math.max(a,o)]}}}if(t.type===`reset`)return zn(e);let{prev:n,next:r}=t;return n&&(n.type!==r.type||n.x!==r.x||JSON.stringify(n.path)!==JSON.stringify(r.path))?zn(e):e},Vn=4,Hn=2,Un=`http://www.w3.org/2000/svg`,Wn=e=>(e??``).trim().split(/\s+/).map(Number),Gn=e=>String(+e.toPrecision(4)),Kn=e=>{let{root:t}=e,n,r,i=``,a=JSON.stringify(e.state().view.drill),o=e=>e.target?.closest?.(`svg.maya-svg`),s=e=>{let t=e.getBoundingClientRect(),n=Wn(e.getAttribute(`viewBox`)),r=t.width?(n[2]??t.width)/t.width:1,i=t.height?(n[3]??t.height)/t.height:1,[a=0,o=0,s=1,c=1]=Wn(e.getAttribute(`data-plot`));return{r:t,k:r,ky:i,px:a,py:o,pw:s,ph:c,vx:n[0]??0,vy:n[1]??0}},c=(e,t,n)=>Math.min(n,Math.max(t,e)),l=()=>{r?.remove(),r=void 0,n=void 0},d=(e,t)=>{let n=s(e);return{g:n,x:c((t.clientX-n.r.left)*n.k+n.vx,n.px,n.px+n.pw),y:c((t.clientY-n.r.top)*n.ky+n.vy,n.py,n.py+n.ph)}},f=e=>!e.hasAttribute(`data-xd`),p=(e,t,n)=>{let i=s(e);(!r||r.ownerSVGElement!==e)&&(r?.remove(),r=document.createElementNS(Un,`rect`),r.setAttribute(`data-maya`,`brush`),r.setAttribute(`width`,`1`),r.setAttribute(`height`,`1`),r.style.pointerEvents=`none`,r.style.transformOrigin=`0 0`,e.append(r));let a=f(e),o=Math.min(t.x,n.x),c=Math.abs(t.x-n.x),l=a?i.py:Math.min(t.y,n.y),u=a?i.ph:Math.abs(t.y-n.y);r.style.transform=`matrix(${c},0,0,${u},${o},${l})`},m,h=t=>{let r=t,i=o(r);i&&e.spec()?.zoom&&(r.pointerType!==`mouse`||r.button===0)&&r.isPrimary!==!1&&(l(),i.style.touchAction=`pan-y`,n={id:r.pointerId,x:r.clientX,y:r.clientY,svg:i},m=d(i,r))},g=e=>{let t=e;if(n&&t.pointerId===n.id&&m&&!(!r&&Math.hypot(t.clientX-n.x,t.clientY-n.y)<Vn)){if(!r)try{n.svg.setPointerCapture(t.pointerId)}catch{}p(n.svg,m,d(n.svg,t))}},_=()=>{let e=e=>e.stopPropagation();t.addEventListener(`click`,e,{capture:!0,once:!0}),setTimeout(()=>t.removeEventListener(`click`,e,{capture:!0}),0)},v=t=>{let i=t;if(!n||i.pointerId!==n.id||!m)return;let{svg:a}=n,o=!!r,s=m,u=d(a,i),p=u.g;try{a.releasePointerCapture(i.pointerId)}catch{}if(l(),m=void 0,!o)return;_();let h=f(a),g=Math.abs(s.x-u.x)/p.k,v=Math.abs(s.y-u.y)/p.ky;if(h?g<Hn:g<Hn||v<Hn)return;let y=e.state();if(h){let t=Math.max(1,+(a.getAttribute(`data-n`)??1)),n=y.view.window?.[0]??0,r=e=>c(Math.floor((e-p.px)/p.pw*t),0,t-1),i=r(Math.min(s.x,u.x)),o=r(Math.max(s.x,u.x));e.commit(Bn(y,{type:`zoom`,window:[n+i,n+o]}),null)}else{let t=Wn(a.getAttribute(`data-xd`)),n=Wn(a.getAttribute(`data-yd`)),r=e=>t[0]+(e-p.px)/p.pw*(t[1]-t[0]),i=e=>n[1]-(e-p.py)/p.ph*(n[1]-n[0]);e.commit(Bn(y,{type:`zoom`,window:[r(s.x),r(u.x),i(s.y),i(u.y)]}),null)}},y=()=>{let t=e.state();return t.view.window?(e.commit(Bn(t,{type:`reset`}),null),!0):!1},b=e=>{e.target.closest(`.maya-reset`)&&y()},x=e=>{o(e)&&y()};t.addEventListener(`pointerdown`,h),t.addEventListener(`pointermove`,g),t.addEventListener(`pointerup`,v);let S=()=>{l(),m=void 0};return t.addEventListener(`pointercancel`,S),t.addEventListener(`click`,b),t.addEventListener(`dblclick`,x),{cancel(){return r?(l(),m=void 0,!0):!1},escape:y,painted(){let n=e.state(),r=e.spec(),o=n.view.window,s=JSON.stringify(n.view.drill),c=s!==a;if(a=s,o&&c)return void y();let l=t.querySelector(`svg.maya-svg`);l&&r?.zoom&&(l.style.touchAction=`pan-y`);let d=t.querySelector(`.maya-box`),f=d?.querySelector(`.maya-reset`)??null;if(!o||!r){f?.remove(),i=``;return}d&&!f&&(f=document.createElement(`button`),f.type=`button`,f.className=`maya-reset`,d.append(f)),f&&(f.textContent=u(r,`reset`));let p=o.join(`,`);if(p!==i){if(i=p,o.length===4)e.announce(u(r,`zoomedTo`,Gn(o[0]),Gn(o[1])));else{let n=[...t.querySelectorAll(`[data-maya=mark][data-key][data-x]`)].map(e=>e.getAttribute(`data-x`));n.length&&e.announce(u(r,`zoomedTo`,n[0],n[n.length-1]))}}},off(){l(),t.removeEventListener(`pointerdown`,h),t.removeEventListener(`pointermove`,g),t.removeEventListener(`pointerup`,v),t.removeEventListener(`pointercancel`,S),t.removeEventListener(`click`,b),t.removeEventListener(`dblclick`,x)}}},qn,Jn=class extends HTMLElement{static observedAttributes=[`spec`];static version=n;#e;#t;#n;#r={view:{},selected:[]};#i;#a;#o;#s={};#c=[0,0];#l=0;#u;#d=!1;#f;#p;#m;#h=new Set;#g=``;#_=!1;get spec(){return this.#e??this.#t??this.#n}set spec(e){this.#e=e,this.#w()}get data(){return this.spec?.data}set data(e){this.#e={...this.spec,data:e},this.#w()}get view(){return this.#r.view}set view(e){this.#r={...this.#r,view:e??{}},this.#w()}get selected(){return this.#r.selected}set selected(e){this.#r={...this.#r,selected:e??[]},this.#w()}attributeChangedCallback(e,t,n){try{this.#n=n?JSON.parse(n):void 0}catch(e){this.#n=void 0,console.error(e)}this.#w()}connectedCallback(){for(let e of[`spec`,`data`,`view`,`selected`])if(Object.hasOwn(this,e)){let t=this[e];delete this[e],this[e]=t}let e=this.querySelector(`:scope > script[type="application/json"]`)?.textContent;try{e&&(this.#t=JSON.parse(e))}catch(e){console.error(e)}let t=this.shadowRoot;t||(t=this.attachShadow({mode:`open`}),qn??=new CSSStyleSheet,qn.cssRules.length||qn.replaceSync(He),t.adoptedStyleSheets=[qn],t.innerHTML=At(Et({svg:``,legend:``,controls:``,crumbs:``,table:``,title:``,style:``,vars:[],warnings:[]},``))),t.addEventListener(`click`,this.#C),t.addEventListener(`keydown`,this.#S),globalThis.addEventListener(`maya-register`,this.#v);let n={root:t,el:this,spec:()=>this.spec,state:()=>this.#r,commit:(e,t)=>this.#x(e,t??null),announce:e=>this.#y(e)};this.#a={measure:Sn(n),drill:yn(n),select:kn(n),zoom:Kn(n),sort:Mn(n)};let r=t.querySelector(`.maya-box`);this.#p=Rn(t,()=>this.spec?.tooltip!==!1,e=>this.#y(e),()=>this.spec),this.#f=this.#p.off,this.#u=new ResizeObserver(()=>{(Math.abs(r.clientWidth-this.#c[0])>1||Math.abs(r.clientHeight-this.#c[1])>1)&&(this.#a?.zoom.cancel?.(),this.#d=!0,this.#w())}),this.#u.observe(r),this.#w()}disconnectedCallback(){cancelAnimationFrame(this.#l),this.#l=0,this.#u?.disconnect(),this.#f?.(),this.shadowRoot?.removeEventListener(`click`,this.#C),this.shadowRoot?.removeEventListener(`keydown`,this.#S),globalThis.removeEventListener(`maya-register`,this.#v),clearTimeout(this.#o);for(let e of Object.values(this.#a??{}))e.off();this.#a=void 0}#v=()=>this.#w();#y(e){clearTimeout(this.#o),this.#o=setTimeout(()=>{let t=this.shadowRoot?.querySelector(`[data-maya=live]`);t&&(t.textContent=e)},300)}toSVG(){let e=this.shadowRoot,t=e?.querySelector(`svg.maya-svg`);if(!e||!t)return``;let n=getComputedStyle(e.querySelector(`.maya`)),r=new Set([...He.matchAll(/--maya-[\w-]+/g)].map(e=>e[0]));for(let e of this.#h)r.add(e);let i=[...r].map(e=>[e,n.getPropertyValue(e).trim()]).filter(([,e])=>e).map(([e,t])=>`${e}:${t}`).join(`;`),a=t.cloneNode(!0);a.setAttribute(`xmlns`,`http://www.w3.org/2000/svg`),a.removeAttribute(`tabindex`);for(let e of a.querySelectorAll(`[data-active],[data-lit]`))e.removeAttribute(`data-active`),e.removeAttribute(`data-lit`);for(let e of a.querySelectorAll(`[data-ghost],[data-maya=band]`))e.remove();let o=document.createElementNS(`http://www.w3.org/2000/svg`,`style`);return o.textContent=`${He}.maya-svg{${i}}`,a.prepend(o),a.outerHTML}#b(e,t,n=!1){return this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0,cancelable:n}))}#x(e,t){let n=this.#r,r=this.#p?.active();r&&JSON.stringify(n.view.drill)!==JSON.stringify(e.view.drill)&&(this.#m=Ht(r)),this.#r=e,this.#w(),JSON.stringify(n.view)!==JSON.stringify(e.view)&&this.#b(`maya-view`,e.view),JSON.stringify(n.selected)!==JSON.stringify(e.selected)&&this.#b(`maya-select`,{selected:[...e.selected],target:t})}#S=e=>{let t=this.#a;if(!t||e.defaultPrevented)return;let n=e.key,r;if(n===`Escape`)r=t.zoom.cancel?.()||t.select.escape?.()||t.zoom.escape?.()||t.drill.escape?.();else if(n===`Enter`){let e=this.#p?.active();r=!!e&&(t.drill.enter?.(e)||t.select.enter?.(e))}r&&e.preventDefault()};#C=e=>{if(this.spec?.select)return;let t=e.target.closest(`[data-maya=legend] button`);if(!t)return;let n=t.getAttribute(`data-key`)??``,r=new Set(this.#r.view.hidden);if(r.has(n))r.delete(n);else if(this.shadowRoot.querySelectorAll(`[data-maya=legend] [aria-pressed=true]`).length>1)r.add(n);else return;this.#x({...this.#r,view:{...this.#r.view,hidden:[...r]}},null)};#w(){this.isConnected&&!this.#l&&(this.#l=requestAnimationFrame(()=>(this.#l=0,this.#T())))}#T(){let e=this.shadowRoot,t=this.spec,n=e.querySelector(`.maya-box`);if(!t)return;if(t!==this.#i){let e={type:`spec`,prev:this.#i,next:t};this.#r=En(Bn(An(_n(xn(this.#r,e),e),e),e),e),this.#i=t}let r=()=>(this.#c=[n.clientWidth,n.clientHeight],wt(t,{width:n.clientWidth||640,height:n.clientHeight||320,view:this.#r.view,selected:this.#r.selected})),i=this.#D(),a;try{a=r();let[t,i]=this.#c;this.#E(e,a)&&(n.clientWidth!==t||n.clientHeight!==i)&&(a=r())}catch(e){this.#p?.hide();let t=e instanceof Ue?{code:e.code,path:e.path,message:e.message}:null;if(t&&!this.#b(`maya-error`,t,!0)){n.replaceChildren(),this.#_=!1;return}let r=document.createElement(`pre`);r.className=`maya-err`,r.textContent=e instanceof Error?e.message:String(e),n.replaceChildren(r),this.#_=!1,r.textContent!==this.#g&&console.error(e),this.#g=r.textContent;return}this.#g=``;let o=e.querySelector(`.maya`);this.#s.table!==a.table&&(this.#s.table=a.table,e.querySelector(`table.maya-sr`)?.remove(),n.insertAdjacentHTML(`afterend`,At(a.table)));for(let[e,t]of a.vars)o.style.setProperty(e,t);for(let e of this.#h)a.vars.some(([t])=>t===e)||o.style.removeProperty(e);this.#h=new Set(a.vars.map(([e])=>e));let s=t.animate===!1||matchMedia(`(prefers-reduced-motion: reduce)`).matches;o.toggleAttribute(`data-still`,t.animate===!1);let c=this.#d;this.#d=!1;let l=this.#_||n.querySelector(`svg`)?void 0:Xn[t.type]??`marks`;mn(n,a.svg,(this.#_||!!l)&&!s,{intro:l,origin:this.#m,after:()=>this.#p?.refresh(),instant:c}),this.#m=void 0,this.#_=!0,this.#O(i);for(let e of Object.values(this.#a??{}))e.painted?.();this.#b(`maya-render`,{})}#E(e,t){let n=e.querySelector(`.maya-box`),r=!1;return Yn.forEach(([i,a],o)=>{this.#s[i]!==t[i]&&(r=!0,this.#s[i]=t[i],e.querySelector(a)?.remove(),(Yn.slice(o+1).map(([,t])=>e.querySelector(t)).find(Boolean)??n).insertAdjacentHTML(`beforebegin`,At(t[i])))}),r}#D(){let e=this.shadowRoot.activeElement;if(e)for(let[t,n]of Zn){let r=[...this.shadowRoot.querySelectorAll(n)].indexOf(e);if(r>=0)return`${t}:${r}`}}#O(e){let t=this.shadowRoot;if(!e||t.activeElement)return;let[n,r]=e.split(`:`),i=Zn.find(([e])=>e===n)[1];t.querySelectorAll(i)[+r]?.focus({preventScroll:!0})}},Yn=[[`title`,`.maya-title`],[`controls`,`.maya-ctl`],[`legend`,`.maya-legend`],[`crumbs`,`.maya-crumbs`]],Xn={line:`wipe`,area:`wipe`,sankey:`wipe`,ridgeline:`wipe`,parallel:`wipe`,sunburst:`bloom`,chord:`bloom`,radial:`bloom`},Zn=[[`svg`,`.maya-svg`],[`legend`,`[data-maya=legend] button`],[`measure`,`.maya-ctl [role=radio]`],[`crumb`,`.maya-crumbs :is(button,a)`],[`reset`,`.maya-reset`]],Qn=t({MayaChart:()=>Jn,MayaSpecError:()=>Ue,render:()=>Tt,renderParts:()=>wt,renderShell:()=>Ot,validateSpec:()=>vt,version:()=>n});if(typeof customElements<`u`){let e=customElements.get(`maya-chart`);e?e.version!==`0.3.0`&&console.warn(`mayacharts: <maya-chart> ${e.version??`(unknown)`} is already defined; ${n} is not used.`):customElements.define(`maya-chart`,Jn)}function $n(e,t,n,r,i=null){let a=()=>({kids:new Map,ys:[],cs:[]}),o=a();for(let r of e){let e=r[n];if(typeof e!=`number`)continue;let s=o;for(let e of t){let t=String(r[e]);s=s.kids.get(t)??s.kids.set(t,a()).get(t)}s.ys.push(e);let c=i===null?null:r[i];typeof c==`number`&&s.cs.push(c)}let s=(e,t,n,i)=>{let a=[...e.kids].map(([e,t])=>s(t,e,n+1,[...i,e]));return{name:t,children:a,depth:n,parts:i,cv:e.cs.length?r(e.cs):null,value:a.length?a.reduce((e,t)=>e+t.value,0):r(e.ys)??0}};return s(o,``,0,[])}function er(e,t,n,r,i){let a=[],o=e.filter(e=>e.value>0).sort((e,t)=>t.value-e.value),s=o.reduce((e,t)=>e+t.value,0),c=0;for(;c<o.length;){let e=Math.min(r,i),l=r*i/s,u=(t,n,r)=>Math.max(e*e*r/(t*t),t*t/(e*e*n)),d=c,f=0,p=1/0;for(;d<o.length;d++){let e=o[d].value*l,t=f+e,n=u(t,e,o[c].value*l);if(d>c&&n>p)break;p=n,f=t}let m=o.slice(c,d),h=e?f/e:0,g=0;for(let o of m){let s=f?o.value*l*e/f:0;a.push(r>=i?[o,t,n+g,h,s]:[o,t+g,n,s,h]),g+=s}r>=i?(t+=h,r-=h):(n+=h,i-=h),s-=m.reduce((e,t)=>e+t.value,0),c=d}return a}function tr(e){let{spec:t}=e;t.data.forEach((n,r)=>{let i=n[t.y];typeof i==`number`&&!(i>0)&&e.fail(`non-positive-value`,`data[${r}].${t.y}`,`Value ${i} is not positive.`,`Treemaps and sunbursts size shapes by value, so every value must be above zero.`,`To show negative values use a bar chart with colorBy: "sign".`)});let n=typeof t.colorBy==`string`&&t.colorBy!==`sign`?t.colorBy:null,r=$n(t.data,t.path,t.y,e.agg(t.aggregate),n);if(t.drill)for(let e of r.children)e.children=[];let i=0,a=r.children;return{root:r,tops:a,attrs:n=>{let r=[...t.drilled,...n.parts],o=a.findIndex(e=>e.name===n.parts[0]);return{"data-maya":`mark`,"data-key":g(`h`,...r),"data-c":i++,"data-s":o%8,"data-x":r.join(` › `),"data-series":``,"data-y":n.value,"data-f":e.fmt(t.y,n.value),"data-tone":e.tone(n.value),"data-q":n.cv===null?null:e.q(n.cv),"data-depth":n.depth}}}}var nr=e=>e.length*7.2+4,rr={noun:`Treemap`,draw(e){let{plot:t,spec:n}=e,{root:r,attrs:i}=tr(e),a=``,o=``,s=(t,r,c,l,u)=>{let d=t.depth>1?.5:0,[f,h,g,v]=[r+d,c+d,Math.max(0,l-2*d),Math.max(0,u-2*d)];if(!t.children.length){if(g*v<4)return;let r=i(t);a+=m(`rect`,{...r,x:p(f),y:p(h),width:p(g),height:p(v)}),o+=_({...r,"data-depth":null},f,h,g,v);let[s,c,l,u]=[f+g/2,h+v/2,r[`data-f`],`${t.name} · ${r[`data-f`]}`];if(!n.labels||v<16)return;v>=34&&nr(t.name)<=g&&nr(l)<=g?e.label(s,c-8,t.name,`center`)&&e.label(s,c+8,l,`center`):nr(u)<=g?e.label(s,c,u,`center`):nr(l)<=g&&e.label(s,c,l,`center`);return}t.depth===1&&nr(t.name)<=g&&v>=30&&e.label(f+g/2,h+9,t.name,`center`);for(let[e,n,r,i,a]of er(t.children,f,h,g,v))s(e,n,r,i,a)};return s(r,t.x,t.y,t.w,t.h),{marks:a,hits:o}}},ir=Math.PI*2;s(`treemap`,rr),s(`sunburst`,{noun:`Sunburst`,draw(e){let{plot:t,spec:n}=e,{root:r,attrs:i}=tr(e),a=n.drill?1:n.path.length,o=Math.min(t.w,t.h)/2,[s,c]=[t.x+t.w/2,t.y+t.h/2],l=(e,t)=>`${p(s+e*Math.cos(t-Math.PI/2))} ${p(c+e*Math.sin(t-Math.PI/2))}`,u=``,d=(t,r,s)=>{if(t.depth){let[c,d]=[t.depth*o/(a+1),(t.depth+1)*o/(a+1)];if((s-r)*d<2)return;let f=Math.min(s,r+ir*359.99/360),h=+(f-r>Math.PI),g=`M${l(d,r)}A${p(d)} ${p(d)} 0 ${h} 1 ${l(d,f)}L${l(c,f)}A${p(c)} ${p(c)} 0 ${h} 0 ${l(c,r)}Z`;u+=m(`path`,{...i(t),d:g});let[_,v,y]=[(r+f)/2,(c+d)/2,(f-r)*((c+d)/2)],b=Math.abs(Math.sin(_))*(d-c)+Math.abs(Math.cos(_))*y;if(n.labels&&y>=14&&nr(t.name)<=b){let[n,r]=l(v,_).split(` `);e.label(+n,+r,t.name,`center`)}}let c=r;for(let e of t.children){let n=(s-r)*e.value/t.value;d(e,c,c+n),c+=n}};return d(r,0,ir),{marks:u,hits:``}}});var ar=e=>e>0&&e<.005?`<1%`:`${Math.round(e*100)}%`;s(`marimekko`,{noun:`Marimekko`,draw(e){let{plot:t,spec:n,shaped:r}=e,{categories:i,series:a,cells:o}=r,s=new Map,c=i.map(()=>0);for(let e of o){let t=Math.max(0,e.value??0);s.set(`${e.ci}/${e.si}`,t),c[e.ci]=(c[e.ci]??0)+t}let l=c.reduce((e,t)=>e+t,0);if(!l)return{marks:``,hits:``};let[u,d]=[t.y+2,t.y+t.h-20],f=t.w-4*(i.length-1),h=``,v=``,y=t.x;return i.forEach((i,o)=>{let b=c[o]??0,x=f*b/l,S=d;for(let t of r.visible){let r=s.get(`${o}/${t}`);if(!r)continue;let c=(d-u)*r/b,l=e.fmt(n.y,r),f={"data-maya":`mark`,"data-key":g(a[t],i),"data-c":o,"data-s":t%8,"data-x":i,"data-series":a[t],"data-y":r,"data-f":`${l} (${ar(r/b)})`};if(S-=c,h+=m(`rect`,{...f,x:p(y),y:p(S),width:p(x),height:p(c)}),v+=_(f,y,S,x,c),n.labels&&c>=16){let t=ar(r/b);e.label(y+x/2,S+c/2,`${l} (${t})`.length*7.2+4<=x?`${l} (${t})`:t,`center`)}}x>0&&e.label(y+x/2,t.y+t.h-20,i,`below`),y+=x+4}),{marks:h,hits:v}}}),s(`waffle`,{noun:`Waffle`,draw(e){let{plot:t,spec:n,shaped:r}=e,i=r.categories.map(()=>0);for(let e of r.cells)i[e.ci]=(i[e.ci]??0)+Math.max(0,e.value??0);let a=i.reduce((e,t)=>e+t,0);if(!a)return{marks:``,hits:``};let o=i.map(e=>Math.floor(e/a*100)),s=100-o.reduce((e,t)=>e+t,0);i.map((e,t)=>[e/a*100%1,t]).sort((e,t)=>t[0]-e[0]||e[1]-t[1]).slice(0,s).forEach(([,e])=>o[e]=(o[e]??0)+1);let c=Math.min(t.w,t.h)/10,[l,u]=[t.x+(t.w-c*10)/2,t.y+(t.h-c*10)/2],d=Math.min(3,c*.12),h=``,_=``,v=0;r.categories.forEach((t,r)=>{let s=i[r]??0;for(let i=0;i<(o[r]??0);i++,v++){let[o,f]=[l+v%10*c,u+Math.floor(v/10)*c],y={"data-maya":`mark`,"data-key":g(`w`,t,i),"data-c":v,"data-s":r%8,"data-x":t,"data-series":``,"data-y":s,"data-f":`${e.fmt(n.y,s)} (${ar(s/a)})`};h+=m(`rect`,{...y,x:p(o+d/2),y:p(f+d/2),width:p(c-d),height:p(c-d)}),_+=m(`rect`,{...y,"data-maya":`hit`,x:p(o),y:p(f),width:p(c),height:p(c),fill:`transparent`})}});let y=`<div class="maya-legend" data-maya="legend">`+r.categories.map((e,t)=>`<span data-s="${t%8}"><i></i>${f(e)} ${ar((i[t]??0)/a)}</span>`).join(``)+`</div>`;return{marks:h,hits:_,legend:y}}});var or=12,sr=8;s(`sankey`,{noun:`Sankey`,check(e,t){(!Array.isArray(e.path)||e.path.length<2)&&t(`invalid-option`,`path`,`spec.path on "sankey" needs at least 2 levels.`,`Example: path: ["source", "target"] (outer to inner).`)},draw(e){let{spec:t,plot:n}=e,r=t.path,i=r.length,a=[],o=r.map(()=>new Map),s=new Map,c=(e,t)=>{let n=o[e].get(t);return n||(n={lv:e,name:t,i:a.length,in:0,out:0,v:0,y:0},o[e].set(t,n),a.push(n)),n};for(let n of t.data){let a=n[t.y];if(typeof a!=`number`)continue;a>0||e.fail(`non-positive-value`,t.y,`spec.${t.y} is ${a}, but sankey sizes must be positive.`);let o=c(0,String(n[r[0]]));for(let e=1;e<i;e++){let t=c(e,String(n[r[e]])),i=o.i+`\0`+t.i,l=s.get(i);l||s.set(i,l={s:o,t,vals:[],v:0,sy:0,ty:0}),l.vals.push(a),o=t}}let l=e.agg(t.aggregate),u=[...s.values()];for(let n of u)n.v=l(n.vals)??0,n.v>0||e.fail(`non-positive-value`,t.y,`link ${n.s.name} to ${n.t.name} is ${n.v}, but sankey sizes must be positive.`),n.s.out+=n.v,n.t.in+=n.v;for(let e of a)e.v=Math.max(e.in,e.out);let d=e=>a.filter(t=>t.lv===e).sort((e,t)=>t.v-e.v),[f,h]=[n.y+8,Math.max(0,n.h-16)],_=Math.max(...Array.from({length:i},(e,t)=>d(t).length)),v=_>1?Math.min(sr,h/4/(_-1)):0,y=1/0;for(let e=0;e<i;e++){let t=d(e),n=t.reduce((e,t)=>e+t.v,0);n>0&&(y=Math.min(y,(h-v*(t.length-1))/n))}y>0&&y<1/0||(y=0);for(let e=0;e<i;e++){let t=f;for(let n of d(e))n.y=t,t+=n.v*y+v}let b=e=>n.x+e.lv*(n.w-or)/(i-1);for(let e of a){let t=e.y;for(let n of u.filter(t=>t.s===e).sort((e,t)=>e.t.y-t.t.y))n.sy=t,t+=n.v*y;t=e.y;for(let n of u.filter(t=>t.t===e).sort((e,t)=>e.s.y-t.s.y))n.ty=t,t+=n.v*y}let x=0,S=``;for(let n of u){let[r,i,a,o]=[b(n.s)+or,b(n.t),n.v*y,(b(n.s)+or+b(n.t))/2],[s,c]=[n.sy,n.ty],l=`M${p(r)} ${p(s)}C${p(o)} ${p(s)} ${p(o)} ${p(c)} ${p(i)} ${p(c)}L${p(i)} ${p(c+a)}C${p(o)} ${p(c+a)} ${p(o)} ${p(s+a)} ${p(r)} ${p(s+a)}Z`;S+=m(`path`,{"data-maya":`link`,"data-key":g(`k`,n.s.lv,n.s.name,n.t.name),"data-c":x++,"data-s":n.s.i%8,"data-x":`${n.s.name} → ${n.t.name}`,"data-series":``,"data-y":n.v,"data-f":e.fmt(t.y,n.v),d:l})}for(let n of a){let r=n.v*y;S+=m(`rect`,{"data-maya":`mark`,"data-key":g(`n`,n.lv,n.name),"data-c":x++,"data-s":n.i%8,"data-x":n.name,"data-series":``,"data-y":n.v,"data-f":e.fmt(t.y,n.v),"data-depth":n.lv,x:p(b(n)),y:p(n.y),width:or,height:p(r)});let a=n.lv===i-1;e.label(a?b(n)-4:b(n)+or+4,n.y+r/2,n.name,a?`end`:`start`)}return{marks:S,hits:``}}});var cr=8,lr=(e,t)=>{let n=[...e];return n.length>t?n.slice(0,t-1).join(``)+`…`:e};s(`chord`,{noun:`Chord`,draw(e){let{spec:t,plot:n}=e,[r,i]=t.path,a=[],o=[new Map,new Map],s=new Map,c=(e,t)=>{let n=o[e].get(t);return n||(n={lv:e,name:t,i:a.length,s:0,v:0,a:0},o[e].set(t,n),a.push(n)),n};for(let n of t.data){let a=n[t.y];if(typeof a!=`number`)continue;a>0||e.fail(`non-positive-value`,t.y,`spec.${t.y} is ${a}, but chord sizes must be positive.`);let o=c(0,String(n[r])),l=c(1,String(n[i])),u=o.i+`\0`+l.i,d=s.get(u);d||s.set(u,d={s:o,t:l,vals:[],v:0}),d.vals.push(a)}let l=e.agg(t.aggregate),u=[...s.values()];for(let n of u)n.v=l(n.vals)??0,n.v>0||e.fail(`non-positive-value`,t.y,`link ${n.s.name} to ${n.t.name} is ${n.v}, but chord sizes must be positive.`),n.s.v+=n.v,n.t.v+=n.v;a.sort((e,t)=>e.lv-t.lv||e.i-t.i).forEach((e,t)=>e.s=t%8);let d=u.reduce((e,t)=>e+t.v,0);if(!(d>0))return{marks:``,hits:``};let f=.1,h=.03,_=[0,1].map(e=>a.filter(t=>t.lv===e)),v=Math.min(..._.map(e=>(Math.PI-f-h*(e.length-1))/d));for(let e of[0,1]){let t=_[e].sort((t,n)=>(e?n.v-t.v:t.v-n.v)||t.i-n.i),n=e?f/2:Math.PI+f/2;for(let e of t)e.a=n,n+=e.v*v+h}let y=Math.min(20,Math.floor((n.w*.36-4)/7.2)),b=[0,1].map(e=>Math.max(0,..._[e].map(e=>[...lr(e.name,y)].length))*7.2+4),x=Math.max(12,Math.min(n.h/2-cr-20,(n.w-b[0]-b[1]-24-4)/2)),S=n.w-b[0]-b[1]-2*(x+12),C=n.x+S/2+b[0]+x+12,w=n.y+n.h/2,T=(e,t)=>`${p(C+t*Math.sin(e))} ${p(w-t*Math.cos(e))}`,E=(e,t,n,r)=>`A${p(n)} ${p(n)} 0 0 ${r} ${T(r?t:e,n)}`,D=new Map;for(let e of a){let t=u.filter(t=>(e.lv?t.t:t.s)===e).sort((t,n)=>e.lv?n.s.a-t.s.a:n.t.a-t.t.a),n=e.a;for(let r of t){let t=D.get(r)??{sa:0,ta:0};e.lv?t.ta=n:t.sa=n,D.set(r,t),n+=r.v*v}}let O=e=>t.titles.get(e)??e,k=0,A=``;for(let n of u){let{sa:r,ta:i}=D.get(n),[a,o]=[r+n.v*v,i+n.v*v],s=`M${T(r,x)}${E(r,a,x,1)}Q${p(C)} ${p(w)} ${T(i,x)}${E(i,o,x,1)}Q${p(C)} ${p(w)} ${T(r,x)}Z`;A+=m(`path`,{"data-maya":`link`,"data-key":g(`k`,0,n.s.name,n.t.name),"data-c":k++,"data-s":n.s.s,"data-x":`${n.s.name} -> ${n.t.name}`,"data-series":``,"data-y":n.v,"data-f":e.fmt(t.y,n.v),d:s})}for(let n of a){let[a,o]=[n.a,n.a+n.v*v],s=`M${T(a,x+cr)}${E(a,o,x+cr,1)}L${T(o,x)}${E(a,o,x,0)}Z`;A+=m(`path`,{"data-maya":`mark`,"data-key":g(`n`,n.lv,n.name),"data-c":k++,"data-s":n.s,"data-x":n.name,"data-series":O(n.lv?i:r),"data-y":n.v,"data-f":e.fmt(t.y,n.v),"data-depth":n.lv,d:s})}for(let t of a){let n=t.a+t.v*v/2,[r,i]=[Math.sin(n),Math.cos(n)],a=x+cr+4,[o,s]=[C+a*r,w-a*i],c=lr(t.name,y);e.label(o,s,c,Math.abs(r)<.25?i>0?`above`:`below`:r>0?`start`:`end`)}return{marks:A,hits:``}}});var ur=`AK Alaska 0 0|ME Maine 10 0|WI Wisconsin 5 1|VT Vermont 9 1|NH New Hampshire 10 1|WA Washington 0 2|ID Idaho 1 2|MT Montana 2 2|ND North Dakota 3 2|MN Minnesota 4 2|IL Illinois 5 2|MI Michigan 6 2|NY New York 8 2|MA Massachusetts 9 2|OR Oregon 0 3|NV Nevada 1 3|WY Wyoming 2 3|SD South Dakota 3 3|IA Iowa 4 3|IN Indiana 5 3|OH Ohio 6 3|PA Pennsylvania 7 3|NJ New Jersey 8 3|CT Connecticut 9 3|RI Rhode Island 10 3|CA California 0 4|UT Utah 1 4|CO Colorado 2 4|NE Nebraska 3 4|MO Missouri 4 4|KY Kentucky 5 4|WV West Virginia 6 4|VA Virginia 7 4|MD Maryland 8 4|DE Delaware 9 4|AZ Arizona 1 5|NM New Mexico 2 5|KS Kansas 3 5|AR Arkansas 4 5|TN Tennessee 5 5|NC North Carolina 6 5|SC South Carolina 7 5|DC District of Columbia 8 5|OK Oklahoma 3 6|LA Louisiana 4 6|MS Mississippi 5 6|AL Alabama 6 6|GA Georgia 7 6|HI Hawaii 0 7|TX Texas 3 7|FL Florida 7 7|PR Puerto Rico 8 8`.split(`|`).map(e=>{let t=/^(\S+) (.+) (\d+) (\d+)$/.exec(e);return{code:t[1],name:t[2],c:+t[3],r:+t[4]}}),dr=new Map;for(let e of ur)dr.set(e.code.toLowerCase(),e).set(e.name.toLowerCase(),e);var fr=e=>dr.get(String(e).trim().toLowerCase()),pr=e=>{let t=e.trim().toLowerCase(),n=``,r=4;for(let[e,i]of dr){let a=Math.abs(t.length-e.length)+[...e].filter(e=>!t.includes(e)).length+[...t].filter(t=>!e.includes(t)).length;a<r&&([r,n]=[a,e.length===2?i.code:i.name])}return n},mr=Math.sqrt(3),hr=Math.max(...ur.map(e=>e.c))+1.5,gr=Math.max(...ur.map(e=>e.r))+1;s(`hexmap`,{noun:`Hex map`,check(e,t){e.data.forEach((n,r)=>{let i=n[e.x];if(i==null||fr(i))return;let a=pr(String(i));t(`unknown-state`,`data[${r}].${e.x}`,`"${i}" is not a US state`,a&&`Did you mean "${a}"?`,`Use a two-letter code or full name (50 states, DC, PR).`)})},draw(e){let{spec:t,shaped:n,plot:r}=e,i=Math.min(r.w/(mr*hr),r.h/(1.5*(gr-1)+2)),a=r.x+(r.w-mr*i*hr)/2,o=r.y+(r.h-i*(1.5*(gr-1)+2))/2,s=i*.94,c=e=>[a+mr*i*(e.c+.5+e.r%2/2),o+i+1.5*i*e.r],l=e=>{let[t,n]=c(e);return`M`+[0,1,2,3,4,5].map(e=>{let r=Math.PI/3*e-Math.PI/6;return`${p(t+s*Math.cos(r))} ${p(n+s*Math.sin(r))}`}).join(`L`)+`Z`},u=new Map;n.cells.forEach(e=>{let t=fr(n.categories[e.ci]);t&&e.value!==null&&u.set(t,(u.get(t)??0)+e.value)});let d=[...u.values()],h=Math.min(...d),_=Math.max(...d),v=``;for(let e of ur)v+=m(`path`,{d:l(e),fill:`none`});let y=``,b=``,x=0;for(let[n,r]of u){let[i,a]=c(n),o=_>h?Math.min(9,Math.floor((r-h)/(_-h)*10)):9;y+=m(`path`,{"data-maya":`mark`,"data-key":g(`g`,n.code),"data-c":x++,"data-s":0,"data-x":n.name,"data-series":``,"data-f":e.fmt(t.y,r),"data-y":r,"data-neg":r<0,"data-tone":e.tone(r),"data-q":o,d:l(n)}),b+=m(`text`,{x:p(i),y:p(a),"text-anchor":`middle`,"dominant-baseline":`middle`,"data-in":!0,"data-dark":o>=6},f(n.code))}let S=_>h?`<div class="maya-legend" data-maya="ramp"><span>${f(e.fmt(t.y,h))}</span><i></i><span>${f(e.fmt(t.y,_))}</span></div>`:``;return{marks:y,hits:``,labels:b,grid:v,legend:S}}});var _r=Math.PI*2,vr=11;s(`radial`,{noun:`Radial bar`,draw(e){let{spec:t,shaped:n,plot:r}=e,i=n.categories.length;if(!i||!n.cells.length)return{marks:``,hits:``};let a=n.cells.map(e=>({c:e,v:Math.max(0,e.value??0),y0:0,y1:0})),o=Array(i).fill(0);for(let e of a)e.y0=o[e.c.ci],e.y1=o[e.c.ci]=e.y0+e.v;let s=A(0,Math.max(0,...o),5),c=s.domain[1],l=n.categories.map(n=>{let r=e.fmt(t.x,n);return r.length>vr?r.slice(0,10)+`…`:r}),u=Math.max(...l.map(e=>e.length))*7.2+6,[d,_]=[r.x+r.w/2,r.y+r.h/2],v=Math.max(10,Math.min(r.w/2-u,r.h/2-16)),y=v*.25,b=e=>y+e/c*(v-y),x=(e,t)=>`${p(d+e*Math.sin(t))} ${p(_-e*Math.cos(t))}`,S=i>1?.35:0,C=(_r-S)/i,w=Math.min(C*.1,.04),T=(e,t,n,r)=>{let i=Math.min(r,n+_r*359.99/360),a=+(i-n>Math.PI);return`M${x(t,n)}A${p(t)} ${p(t)} 0 ${a} 1 ${x(t,i)}L${x(e,i)}A${p(e)} ${p(e)} 0 ${a} 0 ${x(e,n)}Z`},E=``,D=``;a.forEach((r,i)=>{let a=n.categories[r.c.ci],o=n.series[r.c.si],[s,c]=[S/2+r.c.ci*C+w,S/2+(r.c.ci+1)*C-w],[l,u]=[b(r.y0),b(r.y1)],d={"data-key":g(o,a),"data-c":i,"data-s":r.c.si%8,"data-x":e.fmt(t.x,a),"data-series":o,"data-y":r.c.value,"data-f":e.fmt(t.y,r.c.value),"data-tone":e.tone(r.v),"data-other":a===h};E+=m(`path`,{"data-maya":`mark`,...d,d:T(l,u,s,c)});let f=(l+u)/2,[p,_]=[Math.max(0,f-Math.max(12,(u-l)/2)),f+Math.max(12,(u-l)/2)],v=Math.max((c-s)/2,12/f||0),y=(s+c)/2;(u-l<24||(c-s)*f<24)&&(D+=m(`path`,{"data-maya":`hit`,...d,d:T(p,_,y-v,y+v),fill:`transparent`}))});let O=``,k=``,j=s.values.filter(e=>e>0);for(let n of j.length>3?j.filter((e,t)=>t%2):j)O+=m(`circle`,{cx:p(d),cy:p(_),r:p(b(n)),fill:`none`}),k+=m(`text`,{x:p(d),y:p(_-b(n)+4),"text-anchor":`middle`,"data-ring":``},f(e.fmt(t.y,n)));let M=[];return l.forEach((e,t)=>{let n=S/2+(t+.5)*C,[r,i]=[d+(v+6)*Math.sin(n),_-(v+6)*Math.cos(n)],a=Math.sin(n),o=Math.abs(a)<.2?`middle`:a>0?`start`:`end`,s=e.length*7.2,c=o===`middle`?r-s/2:o===`start`?r:r-s;M.some(e=>c<e[2]&&c+s>e[0]&&i-7<e[3]&&i+7>e[1])||(M.push([c,i-7,c+s,i+7]),k+=m(`text`,{x:p(r),y:p(i),"text-anchor":o,"dominant-baseline":`middle`,"data-cat":``},f(e)))}),{marks:E,hits:D,labels:k,grid:O}}}),globalThis.maya=Qn})();
|
|
4
4
|
//# sourceMappingURL=maya.global.js.map
|