mayacharts 0.1.1 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +158 -37
- package/dist/core/marks/beeswarm.d.ts +3 -0
- package/dist/core/marks/parallel.d.ts +6 -0
- package/dist/core/marks/ridgeline.d.ts +3 -0
- package/dist/core/marks/table.d.ts +6 -0
- package/dist/core/registry.d.ts +2 -2
- package/dist/core/strings.d.ts +6 -0
- package/dist/core/types.d.ts +11 -7
- package/dist/core/validate.d.ts +2 -0
- package/dist/element/sort.d.ts +8 -0
- package/dist/element.js +3 -3
- package/dist/element.js.map +1 -1
- package/dist/flow.d.ts +2 -0
- 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/global.d.ts +1 -0
- package/dist/hierarchy.d.ts +5 -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.d.ts +2 -0
- package/dist/radial.js +3 -0
- package/dist/radial.js.map +1 -0
- package/dist/theme.css +1 -1
- package/llms.txt +13 -5
- package/package.json +15 -8
- package/schema.json +14 -2
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.1.1`,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`],o={treemap:`hierarchy`,sunburst:`hierarchy`,sankey:`flow`,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}`,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}`,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} 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=u(e,`chartOf`,r,i(e.y),e.x?i(e.x):e.path.join(` / `));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=A(i,a),s=r?o.values.filter(e=>e>=i&&e<=a):o.values;return{domain:r??o.domain,values:s,labels:s.map(e=>n(t.field,e,o.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=(e.yAxis&&n?P(h)+10:8)+(v?18: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}}},ce={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}}},le={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,ue=e=>typeof e==`number`?e:null;function de(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=>ue(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 fe={noun:`KPI`,draw:de},pe=(e,t)=>[{kind:`band`,field:e.x,domain:t.categories},{kind:`linear`,field:e.y,domain:t.extent}];function me(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 he={noun:`Line`,axes:pe,draw:e=>me(e,!1)},ge={noun:`Area`,axes:pe,draw:e=>me(e,!0)},_e=24;function ve(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 ye={noun:`Scatter`,axes(e,t){let n=1/0,r=-1/0,i=1/0,a=-1/0;for(let o of ve(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=ve(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<_e&&(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}}},be=`--maya-fg:#1f2328;--maya-fg-muted:#656d76;--maya-bg:#fff`,xe=`--maya-fg:#e6edf3;--maya-fg-muted:#9198a1;--maya-bg:#0d1117`,L=(e,t=0)=>Array.from({length:e},(e,n)=>n+t),Se=L(8).map(e=>`[data-s="${e}"]{--c:var(--maya-series-${e+1})}`).join(``),Ce=L(10).map(e=>`[data-q="${e}"]{--q:${Math.round(20+e*80/9)}%}`).join(``),we=L(8).map(e=>`.maya:has([data-s="${e}"]:hover) [data-maya=mark]:not([data-s="${e}"]){opacity:.3}`).join(``),Te=L(3,2).map(e=>`.maya-ctl[data-n="${e}"]::before{width:calc((100% - 4px)/${e})}`).join(``)+L(3,1).map(e=>`.maya-ctl[data-i="${e}"]::before{transform:translateX(${e*100}%)}`).join(``),Ee=`border:0;background:none;padding:0;font:inherit;color:var(--maya-fg-muted);cursor:pointer`,R=`: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{${be}}@media (prefers-color-scheme:dark){:host,.maya-root{${xe}}}}: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;${Ee};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}`+Te+`.maya-ctl [role=radio]{${Ee};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}`+Se+`[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))}`+Ce+`[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-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}`+we+`[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}}`,De=class extends Error{code;path;constructor(e,t,n){super(n),this.name=`MayaSpecError`,this.code=e,this.path=t}},z=e=>e.split(` `),Oe=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`])]),ke=[...z(`type data y path totals aggregate sort limit format titles text yDomain xDomain select`),...z(`colors colorBy theme`),...Object.keys(Oe)],Ae=[`bar`,`line`,`area`,`dumbbell`],je=[`treemap`,`sunburst`,`sankey`],B=`bar,line,area`,Me=`treemap,sunburst,sankey`,Ne=Object.fromEntries(z(`horizontal:bar,dumbbell y2:bar size:scatter name:scatter path:${B},dumbbell,${Me} totals:waterfall series:${B},scatter,heatmap,dumbbell sort:${B},heatmap,dumbbell limit:${B},heatmap,dumbbell stack:bar,area colorBy:${B},waterfall,scatter,dumbbell,kpi,treemap,sunburst,hexmap xDomain:scatter drill:${B},dumbbell,${Me} select:${B},waterfall,scatter,heatmap,dumbbell,treemap,sunburst,hexmap zoom:line,area,scatter`).map(e=>e.split(`:`)).map(([e,t])=>[e,t.split(`,`)])),Pe=z(`sum mean count min max`),Fe=z(`auto integer decimal compact percent currency date month year time datetime`),Ie=z(`dateStyle timeStyle weekday era year month day dayPeriod hour minute second fractionalSecondDigits timeZoneName timeZone hour12 hourCycle calendar`),Le=e=>Ie.some(t=>Object.hasOwn(e,t)),Re=[...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)],ze={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`},Be=`Use horizontal: true to put categories on the left axis.`,Ve=`Size comes from the element's CSS box, or render(spec, { width, height }).`,He=`Pie and donut charts are not supported: use "bar" or "treemap" to compare parts.`,Ue=`Use type: "hexmap" (import "mayacharts/geo").`,We=`Example: { type: "bar", data: [{ month: "Jan", revenue: 10 }], x: "month", y: "revenue" }`,Ge={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:Be,orientation:Be,width:Ve,height:Ve,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.`},Ke={column:`Use type: "bar".`,barh:`Use type: "bar" with horizontal: true.`,bubble:`Use type: "scatter" with size: "<field>".`,choropleth:Ue,map:Ue,pie:He,donut:He},qe=z(`rgb rgba hsl hsla oklch oklab lab lch color color-mix light-dark var calc`),Je=String.raw`\s*(?:"[\w\s.\-]*"|'[\w\s.\-]*'|[\w\-]+(?:\s+[\w\-]+)*)\s*`,Ye=RegExp(`^${Je}(?:,${Je})*$`),Xe=(e,t)=>Object.hasOwn(e,t)?e[t]:void 0,V=e=>typeof e==`object`&&!!e&&!Array.isArray(e),H=(e,t=0)=>Array.isArray(e)&&e.length>=t&&e.every(e=>typeof e==`string`),U=e=>e===null?`null`:Array.isArray(e)?`array`:typeof e,W=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},G=(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}"?`},K=(e,t,n,...r)=>{throw new De(e,t,`mayacharts: ${n}\n${[...r,`-> https://bbekshr.github.io/mayacharts/errors.html#${e}`].filter(Boolean).map(e=>` `+e).join(`
|
|
3
|
-
`)}`)},q=(e,t,n)=>K(`invalid-option`,e,`spec.${e} must be ${n}, received ${W(t)}.`,Xe(Ge,`${e}:${U(t)}`)??``),Ze=(e,t,n)=>{let r=n?Ye.test(t):/^[#\w\s.,%()+\-\/]*$/.test(t)&&[...t.matchAll(/([\w-]*)\s*\(/g)].every(e=>qe.includes(e[1].toLowerCase()));(!t||!r)&&K(`unsafe-css-value`,e,`spec.${e} = ${W(t)} is not a safe CSS value.`,`Allowed: colours, lengths, numbers and ${qe.join(`() `)}(); fonts are family names.`,`Not allowed: url(), image-set(), other functions, ; { } < > \\ and (outside fonts) quotes.`)},J=(e,t,...n)=>K(`invalid-format`,e,t,...n),Qe=(e,t,n)=>{if(typeof t==`string`){Fe.includes(t)||J(e,`spec.${e} = ${W(t)} is not a format preset.`,`Presets: ${Fe.join(`, `)}. Or per field: { <field>: preset or Intl options }.`,G(t,Fe));return}V(t)||J(e,`spec.${e} must be a preset or Intl options, received ${W(t)}.`);let{prefix:r,suffix:i,...a}=t;for(let[t,n]of[[`prefix`,r],[`suffix`,i]])n!==void 0&&typeof n!=`string`&&J(`${e}.${t}`,`spec.${e}.${t} must be a string, received ${W(n)}.`);let o=Le(a);try{o?new Intl.DateTimeFormat(n,a):new Intl.NumberFormat(n,a)}catch(n){J(e,`spec.${e} = ${W(t)} is not valid ${o?`Intl.DateTimeFormat`:`Intl.NumberFormat`} options.`,n instanceof Error?n.message:String(n))}},$e=[[`y`,`a field name or a non-empty array of field names`,e=>typeof e==`string`||H(e,1)],[`path`,`a non-empty array of field names`,e=>H(e,1)],[`totals`,`an array of x values (strings)`,e=>H(e)],[`aggregate`,`one of ${Pe.join(`, `)}`,e=>Pe.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 et(e){V(e)||K(`spec-not-object`,`spec`,`spec must be a plain object, received ${U(e)}.`,`Received: ${W(e)}`);let t=e;for(let e of Object.keys(t))ke.includes(e)||K(`unknown-option`,e,`spec.${e} is not a known option.`,Xe(Ge,e)??G(e,ke),`Known options: ${ke.join(`, `)}.`);let n=t.type;n===void 0&&K(`missing-field`,`type`,`spec.type is required but missing.`,`Required fields: type, data, x, y.`,We);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:Xe(o,s);e&&K(`unknown-type`,`type`,`spec.type = "${n}" needs the "${e}" module, which is not loaded.`,`Add: import "mayacharts/${e}"`),K(`unknown-type`,`type`,`spec.type = ${W(n)} is not a chart type.`,`Valid types: ${r.join(`, `)}.`,s===void 0?``:Xe(Ke,s)??G(s,[...r,...Object.keys(o)]))}let u=n,d=je.includes(u),f=d?`path`:`x`,p=e.path;u===`sankey`&&Array.isArray(p)&&p.length<2&&K(`invalid-option`,`path`,`spec.path needs at least two levels for a sankey.`,`Example: path: ["region", "family"]`);let m=e=>K(`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" }`:We);t.data===void 0&&m(`data`),Array.isArray(t.data)||K(`data-not-array`,`data`,`spec.data must be an array of rows, received ${U(t.data)}.`);let h=t.data;h.forEach((e,t)=>{V(e)||K(`row-not-object`,`data[${t}]`,`spec.data[${t}] must be an object, received ${U(e)}.`,`Received: ${W(e)}`)}),t[f]===void 0&&u!==`kpi`&&!(f===`x`&&Ae.includes(u)&&t.path!==void 0)&&m(f),t.y===void 0&&m(`y`),u===`dumbbell`&&t.series===void 0&&m(`series`);for(let e in Oe)t[e]!==void 0&&typeof t[e]!==Oe[e]&&q(e,t[e],`a ${Oe[e]}`);for(let[e,n,r]of $e)t[e]!==void 0&&!r(t[e])&&q(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)||q(`text`,S,`an object of strings`);for(let[e,t]of Object.entries(S))Object.hasOwn(l,e)||K(`invalid-option`,`text.${e}`,`spec.text.${e} is not a text key.`,G(e,Object.keys(l)),`Text keys: ${Object.keys(l).join(`, `)}.`),typeof t!=`string`&&q(`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])&&n[0]<n[1])&&K(`invalid-domain`,e,`spec.${e} = ${W(n)} is not a valid domain.`,`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||J(`locale`,`spec.locale = ${W(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{J(`currency`,`spec.currency = ${W(t.currency)} is not an ISO 4217 currency code.`,`Use a three-letter code such as "USD" or "EUR".`)}if(typeof t.format==`string`)Qe(`format`,t.format,C);else if(t.format!==void 0){V(t.format)||q(`format`,t.format,`a preset or an object keyed by field`);for(let[e,n]of Object.entries(t.format))Qe(`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`))&&q(`colors`,y,`an array of colours, or an object of colours by series value`),e.length>8&&K(`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)Ze(`colors${t}`,n,!1)}if(x!==void 0){V(x)&&Object.values(x).every(e=>typeof e==`string`)||q(`theme`,x,`an object of string values`);for(let e of Object.keys(x))Re.includes(e)||K(`invalid-theme`,`theme.${e}`,`spec.theme.${e} is not a theme token.`,`Valid tokens: ${Re.join(`, `)}.`,G(e,Re));for(let[e,t]of Object.entries(x))Ze(`theme.${e}`,t,e===`font`)}t.stack===!0&&u===`line`&&K(`stack-unsupported`,`stack`,`spec.stack is not supported with spec.type = "line".`,`Use type "area" (or "bar") to stack series.`);for(let e in Ne)t[e]!==void 0&&t[e]!==!1&&!Ne[e].includes(u)&&K(`option-unsupported`,e,`spec.${e} is not supported with spec.type = "${u}".`,`spec.${e} works with: ${Ne[e].join(`, `)}.`);let w=Ae.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&&K(`option-unsupported`,t,n,r);if(h.length){let e=[...new Set(h.flatMap(e=>Object.keys(e)))],n=(t,n,r,i)=>K(`unknown-field`,t,n,`Fields found: ${e.slice(0,20).join(`, `)}.`,G(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} = ${W(r)} is not a field in spec.data.`,r,`spec.${i} names the field used for ${ze[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 ${ze[r]}.`);b===`sign`&&e.includes(`sign`)&&K(`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)||K(t,i,`spec.${i} is ${W(r)} (a ${U(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&&K(`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&&K(`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,K)}function tt(e){if(e===void 0)return;V(e)||K(`invalid-option`,`options`,`options must be a plain object, received ${U(e)}.`);let t=e,n=(e,t,n)=>K(`unknown-option`,`${e}.${t}`,`${e}.${t} is not a known render option.`,G(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)=>K(`invalid-option`,`options.${e}`,`options.${e} must be ${n}, received ${W(t)}.`);for(let e of[`width`,`height`]){let n=t[e];n!==void 0&&!(typeof n==`number`&&Number.isFinite(n)&&n>0)&&K(`invalid-size`,`options.${e}`,`options.${e} = ${W(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`);for(let t of Object.keys(a))e.includes(t)||n(`options.view`,t,e);let{measure:t,drill:r,window:o,hidden:s}=a;t!==void 0&&!(Number.isInteger(t)&&t>=0)&&i(`view.measure`,t,`an index (integer >= 0)`),r!==void 0&&!H(r)&&i(`view.drill`,r,`an array of strings`),s!==void 0&&!H(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 nt(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??(Ae.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,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),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 rt={bar:se,waterfall:se,line:he,area:ge,scatter:ye,heatmap:le,kpi:fe,dumbbell:ce},it=e=>e.replace(/[A-Z]|\d+/g,e=>`-`+e.toLowerCase());function at(e,t,n){et(e),t!==void 0&&tt(t);let r=Object.hasOwn(rt,e.type)?rt[e.type]:i.get(e.type),a=nt(e,t?.view),o=t?.width??640,s=t?.height??320,c=re(a,t?.view??{}),l=e=>e>5e3&&K(`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:K,t:(e,...t)=>u(a,e,...t)};r.check?.(e,K);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-${it(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?`<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 ot(e,t){return at(e,t,null)}function st(e,t){return at(e,t,R).svg}function ct(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 lt(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 ut(e,t){let n=ot(e,t),r=JSON.stringify(lt(e)).replace(/</g,`\\u003c`);return`<maya-chart><template shadowrootmode="open">${ct(n,R,t?.nonce)}</template><script type="application/json">${r}<\/script></maya-chart>`}var dt,ft=e=>{let t=globalThis.trustedTypes;if(!t)return e;if(dt?.[0]!==t){let e=null;try{e=t.createPolicy(`mayacharts`,{createHTML:e=>e})}catch{e=t.getPolicy?.(`mayacharts`)??null}dt=[t,e]}return dt[1]?dt[1].createHTML(e):e},pt=!1,mt=`cubic-bezier(.2,.8,.2,1)`,Y={duration:280,easing:mt},ht={duration:160,easing:mt},gt=1500,_t=1e-6,X=(e,t)=>+(e.getAttribute(t)??0),Z=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]}},vt=e=>{let t=e.getBBox?.();return Z(e)??(t?[t.x,t.y,t.width,t.height]:void 0)},yt=(e,t)=>`translate(${t[0]-e[0]}px,${t[1]-e[1]}px) scale(${Math.max(t[2],_t)/Math.max(e[2],_t)},${Math.max(t[3],_t)/Math.max(e[3],_t)})`,bt=(e,t,n,r)=>{let i=pt?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 xt(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 St(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 Ct(e,t,n,r=Y){let i=[{opacity:0},{opacity:1}];bt(e,t?i.reverse():i,t?{...r,fill:`forwards`}:r,n)}function wt(e,t){let n=Z(e);if(n)bt(e,[{transform:yt(n,St(e,n,t)),opacity:0},{transform:`none`,opacity:1}],Y);else if(e.matches(`path[data-maya=line]`)){e.setAttribute(`pathLength`,`1`);let t=e=>({strokeDasharray:`1`,strokeDashoffset:e});bt(e,[t(`1`),t(`0`)],Y)}else Ct(e,!1)}function Tt(e,t){e.removeAttribute(`data-key`),e.removeAttribute(`data-maya`);let n=Z(e),r=()=>e.remove();n?bt(e,[{transform:`none`,opacity:1},{transform:yt(n,St(e,n,t)),opacity:0}],{...Y,fill:`forwards`},r):Ct(e,!0,r)}function Et(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 Dt(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=Z(n),o=a&&Et(n,a);xt(n,e);let s=Z(n);o&&s&&o.some((e,t)=>Math.abs(e-s[t])>.01)&&bt(n,[{transform:yt(s,o)},{transform:`none`}],Y),i.push(n)}for(let e of r.values())Tt(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&&wt(t,n)}}}function Ot(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)kt(e);for(let e of s)Ct(e,!1,void 0,ht)}function kt(e){e.removeAttribute(`data-maya`);for(let t of e.querySelectorAll(`[data-maya]`))t.removeAttribute(`data-maya`);Ct(e,!0,()=>e.remove(),ht)}function At(e,t,n,r={}){let i=document.createElement(`template`);i.innerHTML=ft(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>gt||s.childElementCount>gt?e.replaceChildren(a):(pt=!!r.instant,xt(o,a),xt(s,c),Dt(s,c,r.origin),Ot(o,a,s,c),pt=!1),r.after?.(e.firstElementChild)}var jt=(e=[],t=[])=>e.length===t.length&&e.every((e,n)=>e===t[n]),Mt=(e,t)=>jt(e.view.drill,t)?e:{view:{...e.view,drill:t},selected:[]},Nt=(e,t)=>{let n=e.view.drill??[];if(t.type===`pop`)return Mt(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?Mt(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||!jt(r.path,i.path)))return Mt(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 Mt(e,s)},Pt=(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}},Ft=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=Nt(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=Pt(a,(o.view.drill??[]).length);if(s===void 0)return!1;let c=Nt(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=>Pt(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)}},It=`.maya-ctl [role=radio]`,Lt=(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}}},Rt=e=>{let t=()=>[...e.root.querySelectorAll(It)],n=!1,r=t=>{let n=e.spec(),r=n&&Array.isArray(n.y)?n.y:[],i=e.state(),a=Lt(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?.(It),i=n?t().indexOf(n):-1;i>=0&&r(i)},a=i=>{let a=i.key,s=t(),c=s.indexOf(i.target.closest?.(It));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)}}},zt=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Bt=[`x`,`series`,`name`],Vt=e=>{try{return decodeURIComponent(e)}catch{return e}};function Ht(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=>zt(e,t.sel)),r=t.multi?n?e.selected.filter(e=>!zt(e,t.sel)):[...e.selected,t.sel]:n&&e.selected.length===1?[]:[t.sel];return{...e,selected:r}}function Ut(e,t){let n=e.getAttribute(`data-key`);if(!n)return;let r=n.split(`~`).map(Vt);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 Wt(e,t,n){let r=Ut(t,n);return r?Bt.every(t=>e[t]===void 0||String(e[t])===String(r[t])):!1}function Gt(e){let{root:t}=e,n=()=>e.spec()?.type,r=(t,n)=>{let r=e.spec();if(!r?.select)return;let i=Ht(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&&Ut(s,n());s&&c&&r(c,s)};return t.addEventListener(`click`,i),{escape(){return e.state().selected.length?(e.commit(Ht(e.state(),{type:`clear`})),e.announce(u(e.spec()??{},`selectionCleared`)),!0):!1},enter(t){let i=Ut(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=>Wt(t,e,n()))?e.setAttribute(`data-selected`,``):e.removeAttribute(`data-selected`)},off:()=>t.removeEventListener(`click`,i)}}var 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},Kt=`[data-maya=hit],[data-maya=mark]`,qt=120;function Jt(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(Q(e,`data-key`),e),!e.hasAttribute(`data-c`))continue;let t=Q(e,`data-c`);p.set(t,[...p.get(t)??[],e])}},x=e=>e.hasAttribute(`data-c`)&&p.get(Q(e,`data-c`))||[e],S=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=+(Q(n,`viewBox`).split(` `)[2]||i.width)||1;t.style.transform=`translateX(${(r.left+r.width/2-i.left)*o/(i.width||o)}px)`},C=()=>{m?.removeAttribute(`data-active`),m=void 0,g=!1,S(void 0),o.classList.remove(`maya-open`),h&&(h=!1,clearTimeout(v),v=setTimeout(()=>h||o.hidePopover(),qt))},w=(e,t)=>{let n=e?.closest?.(Kt);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},T=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`)},E=(e,t=!1)=>{m?.removeAttribute(`data-active`),m=e,e.setAttribute(`data-active`,``);let r=x(e);o.replaceChildren($(`b`,Q(e,`data-x`)),...r.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))),n.append($(`span`,Q(t,`data-f`)));let i=T(t);return i&&n.append($(`span`,i)),n})),S(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(`${Q(e,`data-x`)}: ${r.map(e=>[Q(e,`data-series`),Q(e,`data-f`),T(e)].filter(Boolean).join(` `)).join(`, `)}`)},D=e=>{if(_=!1,!t()||e.pointerType!==`mouse`)return;let n=w(e.target,e);n?n!==m&&E(n):C()},O=[[a,`pointerover`,D],[a,`pointermove`,D],[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=w(e.target,e);i&&E(i)}],[a,`pointerleave`,e=>e.pointerType===`mouse`&&C()],[a,`keydown`,e=>{let n=e.key;if(!t())return;if(_=!0,n===`Escape`)return g&&e.preventDefault(),C();let r;if(n===` `){if(r=m??d[0],!r)return;g=!g,g&&E(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(Q(d[t],`data-c`))+e]);r=i?.find(e=>Q(e,`data-s`)===Q(d[t],`data-s`))??i?.[0]}r&&E(r,!0)}else return;e.preventDefault()}],[a,`focusout`,()=>g||C()],[document,`pointerdown`,e=>{let t=e.composedPath();(!t.includes(a)||!w(t[0],e))&&C()},{capture:!0}],[window,`scroll`,()=>_||C(),{capture:!0,passive:!0}]];for(let[e,t,n,r]of O)e.addEventListener(t,n,r);return b(),{off:()=>(C(),clearTimeout(v),O.forEach(([e,t,n,r])=>e.removeEventListener(t,n,r))),hide:C,active:()=>m,refresh(){let e=m&&Q(m,`data-key`);b();let n=e?f.get(e):void 0;n&&t()?E(n):C()}}}var Yt=e=>{if(!e.view.window)return e;let{window:t,...n}=e.view;return{...e,view:n}},Xt=(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 Yt(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))?Yt(e):e},Zt=4,Qt=2,$t=`http://www.w3.org/2000/svg`,en=e=>(e??``).trim().split(/\s+/).map(Number),tn=e=>String(+e.toPrecision(4)),nn=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=en(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]=en(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($t,`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)<Zt)){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<Qt:g<Qt||v<Qt)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(Xt(y,{type:`zoom`,window:[n+i,n+o]}),null)}else{let t=en(a.getAttribute(`data-xd`)),n=en(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(Xt(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(Xt(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`,tn(o[0]),tn(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)}}},rn,an=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`}),rn??=new CSSStyleSheet,rn.cssRules.length||rn.replaceSync(R),t.adoptedStyleSheets=[rn],t.innerHTML=ft(ct({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:Rt(n),drill:Ft(n),select:Gt(n),zoom:nn(n)};let r=t.querySelector(`.maya-box`);this.#p=Jt(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([...R.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=`${R}.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=vt(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=Ht(Xt(Nt(Lt(this.#r,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=ot(t,{width:r,height:i,view:this.#r.view,selected:this.#r.selected})}catch(e){this.#p?.hide();let t=e instanceof De?{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`,ft(a[t])))}),this.#s.table!==a.table&&(this.#s.table=a.table,e.querySelector(`table.maya-sr`)?.remove(),n.insertAdjacentHTML(`afterend`,ft(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,At(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 on){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=on.find(([e])=>e===n)[1];t.querySelectorAll(i)[+r]?.focus({preventScroll:!0})}},on=[[`svg`,`.maya-svg`],[`legend`,`[data-maya=legend] button`],[`measure`,`.maya-ctl [role=radio]`],[`crumb`,`.maya-crumbs :is(button,a)`],[`reset`,`.maya-reset`]],sn=t({MayaChart:()=>an,MayaSpecError:()=>De,render:()=>st,renderParts:()=>ot,renderShell:()=>ut,validateSpec:()=>et,version:()=>n});if(typeof customElements<`u`){let e=customElements.get(`maya-chart`);e?e.version!==`0.1.1`&&console.warn(`mayacharts: <maya-chart> ${e.version??`(unknown)`} is already defined; ${n} is not used.`):customElements.define(`maya-chart`,an)}function cn(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 ln(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 un(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=cn(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 dn=e=>e.length*7.2+4,fn={noun:`Treemap`,draw(e){let{plot:t,spec:n}=e,{root:r,attrs:i}=un(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&&dn(t.name)<=g&&dn(l)<=g?e.label(s,c-8,t.name,`center`)&&e.label(s,c+8,l,`center`):dn(u)<=g?e.label(s,c,u,`center`):dn(l)<=g&&e.label(s,c,l,`center`);return}t.depth===1&&dn(t.name)<=g&&v>=30&&e.label(f+g/2,h+9,t.name,`center`);for(let[e,n,r,i,a]of ln(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}}},pn=Math.PI*2;s(`treemap`,fn),s(`sunburst`,{noun:`Sunburst`,draw(e){let{plot:t,spec:n}=e,{root:r,attrs:i}=un(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+pn*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,pn),{marks:u,hits:``}}});var mn=12,hn=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-hn*(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+hn}let h=e=>n.x+e.lv*(n.w-mn)/(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)+mn,h(n.t),n.v*f,(h(n.s)+mn+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:mn,height:p(r)});let a=n.lv===i-1;e.label(a?h(n)-4:h(n)+mn+4,n.y+r/2,n.name,a?`end`:`start`)}return{marks:v,hits:``}}});var gn=`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]}}),_n=new Map;for(let e of gn)_n.set(e.code.toLowerCase(),e).set(e.name.toLowerCase(),e);var vn=e=>_n.get(String(e).trim().toLowerCase()),yn=e=>{let t=e.trim().toLowerCase(),n=``,r=4;for(let[e,i]of _n){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},bn=Math.sqrt(3),xn=Math.max(...gn.map(e=>e.c))+1.5,Sn=Math.max(...gn.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||vn(i))return;let a=yn(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/(bn*xn),r.h/(1.5*(Sn-1)+2)),a=r.x+(r.w-bn*i*xn)/2,o=r.y+(r.h-i*(1.5*(Sn-1)+2))/2,s=i*.94,c=e=>[a+bn*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=vn(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 gn)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}}}),globalThis.maya=sn})();
|
|
1
|
+
/*! mayacharts v0.2.1 | 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.2.1`,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}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=``,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,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=labels] [data-dark]{fill:var(--maya-bg)}[data-maya=hit]{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: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}}@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),dt=(e,t=0)=>Array.isArray(e)&&e.length>=t&&e.every(e=>typeof e==`string`),U=e=>e===null?`null`:Array.isArray(e)?`array`:typeof e,W=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},G=(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}"?`},K=(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
|
+
`)}`)},q=(e,t,n)=>K(`invalid-option`,e,`spec.${e} must be ${n}, received ${W(t)}.`,ut(at,`${e}:${U(t)}`)??``),ft=(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)&&K(`unsafe-css-value`,e,`spec.${e} = ${W(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.`)},J=(e,t,...n)=>K(`invalid-format`,e,t,...n),pt=(e,t,n)=>{if(typeof t==`string`){Ye.includes(t)||J(e,`spec.${e} = ${W(t)} is not a format preset.`,`Presets: ${Ye.join(`, `)}. Or per field: { <field>: preset or Intl options }.`,G(t,Ye));return}H(t)||J(e,`spec.${e} must be a preset or Intl options, received ${W(t)}.`);let{prefix:r,suffix:i,...a}=t;for(let[t,n]of[[`prefix`,r],[`suffix`,i]])n!==void 0&&typeof n!=`string`&&J(`${e}.${t}`,`spec.${e}.${t} must be a string, received ${W(n)}.`);let o=Ze(a);try{o?new Intl.DateTimeFormat(n,a):new Intl.NumberFormat(n,a)}catch(n){J(e,`spec.${e} = ${W(t)} is not valid ${o?`Intl.DateTimeFormat`:`Intl.NumberFormat`} options.`,n instanceof Error?n.message:String(n))}},mt=[[`y`,`a field name or a non-empty array of field names`,e=>typeof e==`string`||dt(e,1)],[`path`,`a non-empty array of field names`,e=>dt(e,1)],[`totals`,`an array of x values (strings)`,e=>dt(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 ht(e){H(e)||K(`spec-not-object`,`spec`,`spec must be a plain object, received ${U(e)}.`,`Received: ${W(e)}`);let t=e;for(let e of Object.keys(t))He.includes(e)||K(`unknown-option`,e,`spec.${e} is not a known option.`,ut(at,e)??G(e,He),`Known options: ${He.join(`, `)}.`);let n=t.type;n===void 0&&K(`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&&K(`unknown-type`,`type`,`spec.type = "${n}" needs the "${e}" module, which is not loaded.`,`Add: import "mayacharts/${e}"`),K(`unknown-type`,`type`,`spec.type = ${W(n)} is not a chart type.`,`Valid types: ${r.join(`, `)}.`,s===void 0?``:ut(ot,s)??G(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&&K(`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&&K(`invalid-option`,`path`,`spec.path needs exactly two levels for a chord: from and to.`,`Example: path: ["region", "family"]`);let m=e=>K(`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)||K(`data-not-array`,`data`,`spec.data must be an array of rows, received ${U(t.data)}.`);let h=t.data;h.forEach((e,t)=>{H(e)||K(`row-not-object`,`data[${t}]`,`spec.data[${t}] must be an object, received ${U(e)}.`,`Received: ${W(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)&&K(`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]&&q(e,t[e],`a ${Ve[e]}`);for(let[e,n,r]of mt)t[e]!==void 0&&!r(t[e])&&q(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)||q(`text`,S,`an object of strings`);for(let[e,t]of Object.entries(S))Object.hasOwn(l,e)||K(`invalid-option`,`text.${e}`,`spec.text.${e} is not a text key.`,G(e,Object.keys(l)),`Text keys: ${Object.keys(l).join(`, `)}.`),typeof t!=`string`&&q(`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]))&&K(`invalid-domain`,e,`spec.${e} = ${W(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||J(`locale`,`spec.locale = ${W(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{J(`currency`,`spec.currency = ${W(t.currency)} is not an ISO 4217 currency code.`,`Use a three-letter code such as "USD" or "EUR".`)}if(typeof t.format==`string`)pt(`format`,t.format,C);else if(t.format!==void 0){H(t.format)||q(`format`,t.format,`a preset or an object keyed by field`);for(let[e,n]of Object.entries(t.format))pt(`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`))&&q(`colors`,y,`an array of colours, or an object of colours by series value`),e.length>8&&K(`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)ft(`colors${t}`,n,!1)}if(x!==void 0){H(x)&&Object.values(x).every(e=>typeof e==`string`)||q(`theme`,x,`an object of string values`);for(let e of Object.keys(x))Qe.includes(e)||K(`invalid-theme`,`theme.${e}`,`spec.theme.${e} is not a theme token.`,`Valid tokens: ${Qe.join(`, `)}.`,G(e,Qe));for(let[e,t]of Object.entries(x))ft(`theme.${e}`,t,e===`font`)}t.stack===!0&&u===`line`&&K(`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)&&K(`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&&K(`option-unsupported`,t,n,r);if(h.length){let e=[...new Set(h.flatMap(e=>Object.keys(e)))],n=(t,n,r,i)=>K(`unknown-field`,t,n,`Fields found: ${e.slice(0,20).join(`, `)}.`,G(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} = ${W(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`)&&K(`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)||K(t,i,`spec.${i} is ${W(r)} (a ${U(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&&K(`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&&K(`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,K)}function gt(e){if(e===void 0)return;H(e)||K(`invalid-option`,`options`,`options must be a plain object, received ${U(e)}.`);let t=e,n=(e,t,n)=>K(`unknown-option`,`${e}.${t}`,`${e}.${t} is not a known render option.`,G(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)=>K(`invalid-option`,`options.${e}`,`options.${e} must be ${n}, received ${W(t)}.`);for(let e of[`width`,`height`]){let n=t[e];n!==void 0&&!(typeof n==`number`&&Number.isFinite(n)&&n>0)&&K(`invalid-size`,`options.${e}`,`options.${e} = ${W(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&&!dt(r)&&i(`view.drill`,r,`an array of strings`),s!==void 0&&!dt(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 _t(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 vt={bar:se,waterfall:se,line:we,area:Te,scatter:Oe,heatmap:fe,kpi:he,dumbbell:de,ridgeline:xe,beeswarm:ue,parallel:be,table:je},yt=e=>e.replace(/[A-Z]|\d+/g,e=>`-`+e.toLowerCase());function bt(e,t,n){ht(e),t!==void 0&>(t);let r=Object.hasOwn(vt,e.type)?vt[e.type]:i.get(e.type),a=_t(e,t?.view),o=t?.width??640,s=t?.height??320,c=re(a,t?.view??{}),l=e=>e>5e3&&K(`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:K,t:(e,...t)=>u(a,e,...t)};r.check?.(e,K);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=(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-${yt(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 xt(e,t){return bt(e,t,null)}function St(e,t){return bt(e,t,ze).svg}function Ct(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 wt(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 Tt(e,t){let n=xt(e,t),r=JSON.stringify(wt(e)).replace(/</g,`\\u003c`);return`<maya-chart><template shadowrootmode="open">${Ct(n,ze,t?.nonce)}</template><script type="application/json">${r}<\/script></maya-chart>`}var Et,Dt=e=>{let t=globalThis.trustedTypes;if(!t)return e;if(Et?.[0]!==t){let e=null;try{e=t.createPolicy(`mayacharts`,{createHTML:e=>e})}catch{e=t.getPolicy?.(`mayacharts`)??null}Et=[t,e]}return Et[1]?Et[1].createHTML(e):e},Ot=!1,kt=`cubic-bezier(.2,.8,.2,1)`,At={duration:280,easing:kt},jt={duration:160,easing:kt},Mt=1500,Nt=1e-6,Y=(e,t)=>+(e.getAttribute(t)??0),Pt=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]}},Ft=e=>{let t=e.getBBox?.();return Pt(e)??(t?[t.x,t.y,t.width,t.height]:void 0)},It=(e,t)=>`translate(${t[0]-e[0]}px,${t[1]-e[1]}px) scale(${Math.max(t[2],Nt)/Math.max(e[2],Nt)},${Math.max(t[3],Nt)/Math.max(e[3],Nt)})`,Lt=(e,t,n,r)=>{let i=Ot?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 Rt(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 zt(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 Bt(e,t,n,r=At){let i=[{opacity:0},{opacity:1}];Lt(e,t?i.reverse():i,t?{...r,fill:`forwards`}:r,n)}function Vt(e,t){let n=Pt(e);if(n)Lt(e,[{transform:It(n,zt(e,n,t)),opacity:0},{transform:`none`,opacity:1}],At);else if(e.matches(`path[data-maya=line]`)){e.setAttribute(`pathLength`,`1`);let t=e=>({strokeDasharray:`1`,strokeDashoffset:e});Lt(e,[t(`1`),t(`0`)],At)}else Bt(e,!1)}function Ht(e,t){e.removeAttribute(`data-key`),e.removeAttribute(`data-maya`);let n=Pt(e),r=()=>e.remove();n?Lt(e,[{transform:`none`,opacity:1},{transform:It(n,zt(e,n,t)),opacity:0}],{...At,fill:`forwards`},r):Bt(e,!0,r)}function Ut(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 Wt(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=Pt(n),o=a&&Ut(n,a);Rt(n,e);let s=Pt(n);o&&s&&o.some((e,t)=>Math.abs(e-s[t])>.01)&&Lt(n,[{transform:It(s,o)},{transform:`none`}],At),i.push(n)}for(let e of r.values())Ht(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&&Vt(t,n)}}}function Gt(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)Kt(e);for(let e of s)Bt(e,!1,void 0,jt)}function Kt(e){e.removeAttribute(`data-maya`);for(let t of e.querySelectorAll(`[data-maya]`))t.removeAttribute(`data-maya`);Bt(e,!0,()=>e.remove(),jt)}function qt(e,t,n,r={}){let i=document.createElement(`template`);i.innerHTML=Dt(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>Mt||s.childElementCount>Mt?e.replaceChildren(a):(Ot=!!r.instant,Rt(o,a),Rt(s,c),Wt(s,c,r.origin),Gt(o,a,s,c),Ot=!1),r.after?.(e.firstElementChild)}var Jt=(e=[],t=[])=>e.length===t.length&&e.every((e,n)=>e===t[n]),Yt=(e,t)=>Jt(e.view.drill,t)?e:{view:{...e.view,drill:t},selected:[]},Xt=(e,t)=>{let n=e.view.drill??[];if(t.type===`pop`)return Yt(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?Yt(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||!Jt(r.path,i.path)))return Yt(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 Yt(e,s)},Zt=(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}},Qt=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=Xt(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=Zt(a,(o.view.drill??[]).length);if(s===void 0)return!1;let c=Xt(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=>Zt(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)}},$t=`.maya-ctl [role=radio]`,en=(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}}},tn=e=>{let t=()=>[...e.root.querySelectorAll($t)],n=!1,r=t=>{let n=e.spec(),r=n&&Array.isArray(n.y)?n.y:[],i=e.state(),a=en(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?.($t),i=n?t().indexOf(n):-1;i>=0&&r(i)},a=i=>{let a=i.key,s=t(),c=s.indexOf(i.target.closest?.($t));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)}}},nn=(e,t)=>JSON.stringify(e)===JSON.stringify(t),rn=[`x`,`series`,`name`],an=e=>{try{return decodeURIComponent(e)}catch{return e}};function on(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=>nn(e,t.sel)),r=t.multi?n?e.selected.filter(e=>!nn(e,t.sel)):[...e.selected,t.sel]:n&&e.selected.length===1?[]:[t.sel];return{...e,selected:r}}function sn(e,t){let n=e.getAttribute(`data-key`);if(!n)return;let r=n.split(`~`).map(an);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 cn(e,t,n){let r=sn(t,n);return r?rn.every(t=>e[t]===void 0||String(e[t])===String(r[t])):!1}function ln(e){let{root:t}=e,n=()=>e.spec()?.type,r=(t,n)=>{let r=e.spec();if(!r?.select)return;let i=on(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&&sn(s,n());s&&c&&r(c,s)};return t.addEventListener(`click`,i),{escape(){return e.state().selected.length?(e.commit(on(e.state(),{type:`clear`})),e.announce(u(e.spec()??{},`selectionCleared`)),!0):!1},enter(t){let i=sn(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=>cn(t,e,n()))?e.setAttribute(`data-selected`,``):e.removeAttribute(`data-selected`)},off:()=>t.removeEventListener(`click`,i)}}var un=(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]}}},dn=`[data-maya=sort]`,fn=e=>{let t=null,n=n=>{let r=e.spec(),i=n.getAttribute(`data-field`);if(!r||r.type!==`table`||!i)return;let a=un(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?.(dn);t&&n(t)},i=e=>{let t=e.key,r=e.target.closest?.(dn);!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(dn)].find(e=>e.getAttribute(`data-field`)===n)?.focus({preventScroll:!0})},off(){e.root.removeEventListener(`click`,r),e.root.removeEventListener(`keydown`,i,!0)}}},X=(e,t)=>e.getAttribute(t)??``,Z=(e,t=``,n={})=>{let r=document.createElement(e);r.textContent=t;for(let e in n)r.setAttribute(e,n[e]);return r},pn=`[data-maya=hit],[data-maya=mark],[data-maya=link][data-key]`,mn=120,hn=[`position`,`position-area`,`left`,`top`,`margin`];function gn(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=()=>{d=[...a.querySelectorAll(`[data-maya=mark][data-key]`)],f=new Map,p=new Map;for(let e of d){if(f.set(X(e,`data-key`),e),!e.hasAttribute(`data-c`))continue;let t=X(e,`data-c`);p.set(t,[...p.get(t)??[],e])}},S=e=>X(e,`data-maya`)!==`link`&&e.hasAttribute(`data-c`)&&p.get(X(e,`data-c`))||[e],C=[],w=e=>{for(let e of C)e.removeAttribute(`data-active`);C=e?.hasAttribute(`data-c`)?[...a.querySelectorAll(`[data-maya=line][data-c="${CSS.escape(X(e,`data-c`))}"]`)]:[];for(let e of C)e.setAttribute(`data-active`,``)},T=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=+(X(n,`viewBox`).split(` `)[2]||i.width)||1;t.style.transform=`translateX(${(r.left+r.width/2-i.left)*o/(i.width||o)}px)`},E=()=>{m?.removeAttribute(`data-active`),w(void 0),m=void 0,g=!1,T(void 0),o.classList.remove(`maya-open`),h&&(h=!1,clearTimeout(y),y=setTimeout(()=>h||o.hidePopover(),mn))},D=(e,t)=>{let n=e?.closest?.(pn);if(!n||X(n,`data-maya`)!==`hit`)return n??void 0;if(n.hasAttribute(`data-key`))return f.get(X(n,`data-key`));let r=t?.clientY??0,i,a=1/0;for(let e of p.get(X(n,`data-c`))??[]){let t=e.getBoundingClientRect(),n=Math.abs(r-(t.top+t.height/2));n<a&&(a=n,i=e)}return i},O=e=>{let t=X(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`)},k=(e,t=!1)=>{m?.removeAttribute(`data-active`),m=e,e.setAttribute(`data-active`,``),w(e);let r=S(e);o.replaceChildren(Z(`b`,X(e,`data-x`)),...r.map(t=>{let n=Z(`div`,``,t===e?{"data-on":``}:{}),r=X(t,`data-series`);r&&(t.hasAttribute(`data-s`)&&n.append(Z(`i`,``,{"data-s":X(t,`data-s`)})),n.append(Z(`span`,r))),n.append(Z(`span`,X(t,`data-f`)));let i=O(t);return i&&n.append(Z(`span`,i)),n})),T(e);let i=e.getBoundingClientRect(),a=c.getBoundingClientRect();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(y),h||=(o.showPopover(),!0),o.classList.add(`maya-open`);let u=globalThis.visualViewport,d=u?.width??innerWidth,f=u?.height??innerHeight;if(_)for(let e of hn)o.style.removeProperty(e);_=!1;let p=o.getBoundingClientRect();if(!l||p.left<0||p.top<0||p.right>d||p.bottom>f){for(let e of[`left`,`top`,`margin`])o.style.setProperty(e,`0px`);o.style.setProperty(`position`,`fixed`),o.style.setProperty(`position-area`,`none`),p=o.getBoundingClientRect();let e=i.top-p.height-8;e<8&&(e=i.bottom+8),e=Math.max(8,Math.min(e,f-p.height-8));let t=Math.max(8,Math.min(i.left+i.width/2-p.width/2,d-p.width-8));o.style.setProperty(`left`,t+`px`),o.style.setProperty(`top`,e+`px`),_=!0}t&&n(`${X(e,`data-x`)}: ${r.map(e=>[X(e,`data-series`),X(e,`data-f`),O(e)].filter(Boolean).join(` `)).join(`, `)}`)},A=e=>{if(v=!1,!t()||e.pointerType!==`mouse`)return;let n=D(e.target,e);n?n!==m&&k(n):E()},j=[[a,`pointerover`,A],[a,`pointermove`,A],[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=D(e.target,e);i&&k(i)}],[a,`pointerleave`,e=>e.pointerType===`mouse`&&E()],[a,`keydown`,e=>{let n=e.key;if(!t())return;if(v=!0,n===`Escape`)return g&&e.preventDefault(),E();let r;if(n===` `){if(r=m??d[0],!r)return;g=!g,g&&k(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=S(d[t]);r=n[n.indexOf(d[t])+e]}else{let n=[...p.keys()],i=p.get(n[n.indexOf(X(d[t],`data-c`))+e]);r=i?.find(e=>X(e,`data-s`)===X(d[t],`data-s`))??i?.[0]}r&&k(r,!0)}else return;e.preventDefault()}],[a,`focusout`,()=>g||E()],[document,`pointerdown`,e=>{let t=e.composedPath();(!t.includes(a)||!D(t[0],e))&&E()},{capture:!0}],[window,`scroll`,()=>v||E(),{capture:!0,passive:!0}]];for(let[e,t,n,r]of j)e.addEventListener(t,n,r);return x(),{off:()=>(E(),clearTimeout(y),j.forEach(([e,t,n,r])=>e.removeEventListener(t,n,r))),hide:E,active:()=>m,refresh(){let e=m&&X(m,`data-key`);x();let n=e?f.get(e):void 0;n&&t()?k(n):E()}}}var _n=e=>{if(!e.view.window)return e;let{window:t,...n}=e.view;return{...e,view:n}},vn=(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 _n(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))?_n(e):e},yn=4,bn=2,xn=`http://www.w3.org/2000/svg`,Sn=e=>(e??``).trim().split(/\s+/).map(Number),Cn=e=>String(+e.toPrecision(4)),wn=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=Sn(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]=Sn(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(xn,`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)<yn)){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<bn:g<bn||v<bn)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(vn(y,{type:`zoom`,window:[n+i,n+o]}),null)}else{let t=Sn(a.getAttribute(`data-xd`)),n=Sn(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(vn(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(vn(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`,Cn(o[0]),Cn(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)}}},Tn,En=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`}),Tn??=new CSSStyleSheet,Tn.cssRules.length||Tn.replaceSync(ze),t.adoptedStyleSheets=[Tn],t.innerHTML=Dt(Ct({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:tn(n),drill:Qt(n),select:ln(n),zoom:wn(n),sort:fn(n)};let r=t.querySelector(`.maya-box`);this.#p=gn(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=Ft(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=on(vn(un(Xt(en(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=xt(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`,`.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`,Dt(a[t])))}),this.#s.table!==a.table&&(this.#s.table=a.table,e.querySelector(`table.maya-sr`)?.remove(),n.insertAdjacentHTML(`afterend`,Dt(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,qt(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 Dn){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=Dn.find(([e])=>e===n)[1];t.querySelectorAll(i)[+r]?.focus({preventScroll:!0})}},Dn=[[`svg`,`.maya-svg`],[`legend`,`[data-maya=legend] button`],[`measure`,`.maya-ctl [role=radio]`],[`crumb`,`.maya-crumbs :is(button,a)`],[`reset`,`.maya-reset`]],On=t({MayaChart:()=>En,MayaSpecError:()=>Be,render:()=>St,renderParts:()=>xt,renderShell:()=>Tt,validateSpec:()=>ht,version:()=>n});if(typeof customElements<`u`){let e=customElements.get(`maya-chart`);e?e.version!==`0.2.1`&&console.warn(`mayacharts: <maya-chart> ${e.version??`(unknown)`} is already defined; ${n} is not used.`):customElements.define(`maya-chart`,En)}function kn(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 An(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 jn(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=kn(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 Q=e=>e.length*7.2+4,Mn={noun:`Treemap`,draw(e){let{plot:t,spec:n}=e,{root:r,attrs:i}=jn(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&&Q(t.name)<=g&&Q(l)<=g?e.label(s,c-8,t.name,`center`)&&e.label(s,c+8,l,`center`):Q(u)<=g?e.label(s,c,u,`center`):Q(l)<=g&&e.label(s,c,l,`center`);return}t.depth===1&&Q(t.name)<=g&&v>=30&&e.label(f+g/2,h+9,t.name,`center`);for(let[e,n,r,i,a]of An(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}}},Nn=Math.PI*2;s(`treemap`,Mn),s(`sunburst`,{noun:`Sunburst`,draw(e){let{plot:t,spec:n}=e,{root:r,attrs:i}=jn(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+Nn*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&&Q(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,Nn),{marks:u,hits:``}}});var Pn=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} (${Pn(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=Pn(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)} (${Pn(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)} ${Pn((i[t]??0)/a)}</span>`).join(``)+`</div>`;return{marks:h,hits:_,legend:y}}});var $=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,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(Fn,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-$)/(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)+$,b(n.t),n.v*y,(b(n.s)+$+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:$,height:p(r)});let a=n.lv===i-1;e.label(a?b(n)-4:b(n)+$+4,n.y+r/2,n.name,a?`end`:`start`)}return{marks:S,hits:``}}});var In=8,Ln=(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=>[...Ln(e.name,y)].length))*7.2+4),x=Math.max(12,Math.min(n.h/2-In-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+In)}${E(a,o,x+In,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+In+4,[o,s]=[C+a*r,w-a*i],c=Ln(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 Rn=`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]}}),zn=new Map;for(let e of Rn)zn.set(e.code.toLowerCase(),e).set(e.name.toLowerCase(),e);var Bn=e=>zn.get(String(e).trim().toLowerCase()),Vn=e=>{let t=e.trim().toLowerCase(),n=``,r=4;for(let[e,i]of zn){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},Hn=Math.sqrt(3),Un=Math.max(...Rn.map(e=>e.c))+1.5,Wn=Math.max(...Rn.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||Bn(i))return;let a=Vn(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/(Hn*Un),r.h/(1.5*(Wn-1)+2)),a=r.x+(r.w-Hn*i*Un)/2,o=r.y+(r.h-i*(1.5*(Wn-1)+2))/2,s=i*.94,c=e=>[a+Hn*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=Bn(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 Rn)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 Gn=Math.PI*2,Kn=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>Kn?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=(Gn-S)/i,w=Math.min(C*.1,.04),T=(e,t,n,r)=>{let i=Math.min(r,n+Gn*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=On})();
|
|
4
4
|
//# sourceMappingURL=maya.global.js.map
|