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/element.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! mayacharts v0.
|
|
2
|
-
var e=`0.1.1`,t=Symbol.for(`mayacharts.marks@0`);Object.hasOwn(globalThis,t)||Object.defineProperty(globalThis,t,{value:/* @__PURE__ */ new Map});var n=globalThis[t],r=[`bar`,`line`,`area`,`scatter`,`heatmap`,`waterfall`,`kpi`,`dumbbell`],i={treemap:`hierarchy`,sunburst:`hierarchy`,sankey:`flow`,hexmap:`geo`},a=()=>[...n.keys()],o={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 s(e,t,...n){return((e.text&&Object.hasOwn(e.text,t)?e.text[t]:void 0)??o[t]).replace(/\{(\d)\}/g,(e,t)=>String(n[+t]??``))}var c={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`};function l(e){return String(e).replace(/[&<>"']/g,e=>c[e])}function u(e){return Math.round(e*100)/100}function d(e,t,n){let r=``;for(let e in t){let n=t[e];n!=null&&n!==!1&&(r+=n===!0?` ${e}=""`:` ${e}="${l(n)}"`)}return n===void 0?`<${e}${r}/>`:`<${e}${r}>${n}</${e}>`}var f=`\0other`,p=(...e)=>e.map(e=>encodeURIComponent(String(e).replace(/\p{Cs}/gu,`�`)).replace(/~/g,`%7E`)).join(`~`);function m(e,t,n,r,i){let[a,o]=[Math.max(r,24),Math.max(i,24)];return r<24||i<24?d(`rect`,Object.assign({"data-maya":`hit`},e,{"data-maya":`hit`,x:u(t-(a-r)/2),y:u(n-(o-i)/2),width:u(a),height:u(o),fill:`transparent`})):``}var h=e=>e.title??`${e.titles.get(e.y)??e.y} by ${e.titles.get(e.x)??(e.x||e.path.join(` / `))}`,g=[`scatter`,`treemap`,`sunburst`,`sankey`,`hexmap`],_=1e3;function v(e,t,n,r){if(e.description!==null)return e.description;let i=t=>e.titles.get(t)??t,a=s(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(`, `)})`),g.includes(e.type))return`${a}. ${e.data.length} rows.`;let o=0,c=1/0,l=-1/0;for(let e of t.cells)e.value!==null&&(o++,c=Math.min(c,e.value),l=Math.max(l,e.value));let u=t=>n(e.y,t);return o?o===1?`${a}. 1 value: ${u(c)}.`:`${a}. ${o} values from ${u(c)} to ${u(l)}.`:a+`. No data.`}function y(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 l(n(t,i))+(a?` (${l(a)})`:``)},o=t=>t>_?s(e,`firstOf`,_,t):h(e),c,u,d;if(g.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))];d=e.data.length,c=t.map(e=>`<th>${l(i(e))}</th>`).join(``),u=e.data.slice(0,_).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]);d=t.categories.length,c=`<th>${l(i(e.x))}</th>`+n.map(e=>`<th>${l(e)}</th>`).join(``);let r=new Map(t.cells.map(e=>[e.ci+`,`+e.si,e.value]));u=``;for(let n=0;n<Math.min(d,_);n++){u+=`<tr><th scope="row">${l(t.categories[n])}</th>`;for(let i of t.visible)u+=`<td>${a(e.y,r.get(n+`,`+i))}</td>`;u+=`</tr>`}}return`<table class="maya-sr"><caption>${l(o(d))}</caption><thead><tr>${c}</tr></thead><tbody>${u}</tbody></table>`}var b=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},x=`year month day hour minute second weekday era timeZone dateStyle timeStyle fractionalSecondDigits hour12 dayPeriod timeZoneName`.split(` `),S={date:{dateStyle:`medium`},month:{month:`short`,year:`numeric`},year:{year:`numeric`},time:{timeStyle:`short`},datetime:{dateStyle:`medium`,timeStyle:`short`}};function C(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:b(n),o=``,s=``,c=null,l=null,u=typeof r==`string`?r:`auto`;if(typeof r==`string`&&Object.hasOwn(S,r))c=new Intl.DateTimeFormat(i,{timeZone:`UTC`,...S[r]});else if(typeof r==`object`&&r){let{prefix:e=``,suffix:t=``,...n}=r;[o,s]=[String(e),String(t)],x.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)?/* @__PURE__ */ 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 w(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 T(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 E=e=>parseFloat(e.toPrecision(12));function D(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(E(e*i));return{domain:[E(s*i),E(c*i)],values:l,step:E(i)}}var O=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,k=e=>{let t=0,n=0;for(let r of e)O(r.codePointAt(0))?n++:t++;return t*7.2+n*12},A=e=>k(e)+8,j=e=>e.reduce((e,t)=>Math.max(e,A(t)),0);function ee(e,t){if(k(e)<=t)return e;let n=``,r=0;for(let i of e){if(r+=k(i),r+7.2>t)break;n+=i}return n+`…`}function M(e,t,n){let r=(t.field===e.y?e.yDomain:e.xDomain)??null,[i,a]=r??t.domain,o=D(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 N(e,[t,n,r],i,a){let{width:o,height:s}=i,c=t&&t.kind===`linear`?M(e,t,a):null,f=n&&n.kind===`linear`?M(e,n,a):null,p=t&&!c?t.domain.map(e=>a(t.field,e)):[],m=n&&!f?n.domain.map(e=>a(n.field,e)):[],h=f?f.labels:m.map(e=>ee(e,o*.4-8)),g=r&&r.kind===`linear`?M(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?j(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?j(g.labels)+4:8)+(_?18:0):Math.max(12,c?k(c.labels.at(-1)??``)/2+2:0))),h:Math.max(1,s-10-x)},C=t?t.kind===`band`?w(t.domain,[S.x,S.x+S.w]):T(c.domain,[S.x,S.x+S.w]):null,E=n?n.kind===`band`?w(n.domain,[S.y,S.y+S.h]):T(f.domain,[S.y+S.h,S.y]):null,D=g?T(g.domain,[S.y+S.h,S.y]):null,O=``;if(e.grid){let e=u(S.x+S.w);if(f)for(let t of f.values){let n=u(E.of(t));O+=d(`line`,{x1:u(S.x),x2:e,y1:n,y2:n})}if(c)for(let e of c.values){let t=u(C.of(e));O+=d(`line`,{x1:t,x2:t,y1:u(S.y),y2:u(S.y+S.h)})}}let A=``;if(e.yAxis&&n){if(f)f.values.forEach((e,t)=>{A+=d(`text`,{x:u(S.x-6),y:u(E.of(e)),"text-anchor":`end`,"dominant-baseline":`middle`},l(f.labels[t]))});else{let e=E,t=Math.max(1,Math.ceil(14/(S.h/Math.max(1,n.domain.length))));m.forEach((n,r)=>{if(r%t)return;let i=h[r];A+=d(`text`,{x:u(S.x-6),y:u(e.at(r)+e.bandwidth/2),"text-anchor":`end`,"dominant-baseline":`middle`},l(i)+(i===n?``:d(`title`,{},l(n))))})}}if(v){let e=u(S.y+S.h/2);A+=d(`text`,{x:9,y:e,"text-anchor":`middle`,transform:`rotate(-90 9 ${e})`},l(v))}if(g&&D&&(e.yAxis&&g.values.forEach((e,t)=>{A+=d(`text`,{x:u(S.x+S.w+6),y:u(D.of(e)),"text-anchor":`start`,"dominant-baseline":`middle`},l(g.labels[t]))}),_)){let[e,t]=[o-9,u(S.y+S.h/2)];A+=d(`text`,{x:e,y:t,"text-anchor":`middle`,transform:`rotate(90 ${e} ${t})`},l(_))}let N=``;if(e.xAxis&&t){let e=u(S.y+S.h+16);if(c){let t=Math.max(1,Math.ceil(j(c.labels)/(S.w/Math.max(1,c.values.length-1))));c.values.forEach((n,r)=>{r%t||(N+=d(`text`,{x:u(C.of(n)),y:e,"text-anchor":`middle`},l(c.labels[r])))})}else{let t=C,n=Math.max(1,Math.ceil(j(p)/(S.w/Math.max(1,p.length))));p.forEach((r,i)=>{i%n===0&&(N+=d(`text`,{x:u(t.at(i)+t.bandwidth/2),y:e,"text-anchor":`middle`},l(r)))})}}y&&(N+=d(`text`,{x:u(S.x+S.w/2),y:s-4,"text-anchor":`middle`},l(y)));let P=c&&f,te=t?.kind===`band`?t:n?.kind===`band`?n:null;return{plot:S,x:C,y:E,y2:D,grid:O,ay:A,ax:N,attrs:{"data-plot":`${u(S.x)} ${u(S.y)} ${u(S.w)} ${u(S.h)}`,"data-n":P||!te?null:te.domain.length,"data-xd":P?c.domain.join(` `):null,"data-yd":P?f.domain.join(` `):null}}}function P(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 te(e,t={}){let{hidden:n=[],window:r}=Array.isArray(t)?{hidden:t}:t,i=[],a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ 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=/* @__PURE__ */ new Map;for(let[r,i]of t){let t=n.get(r);t||n.set(r,t=P(e.aggregate)),typeof i==`number`&&t.add(i)}return i.map((e,t)=>n.get(t)?.value()??null)},c=t=>{let n=P(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:f,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`,p=/* @__PURE__ */ new Map;if(d){let t=0;for(let n of l)e.totals.includes(n.label)?p.set(n,[0,t]):p.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 m=[];i.forEach((e,t)=>n.includes(e)||m.push(t));let h=[],g=0,_=0;return l.forEach((t,n)=>{let r=0,i=0;for(let a of m){let o=t.vals[a]??null,s=o??0,[c,l]=d?p.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),h.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:m,cells:h,extent:[g,_],y2:e.y2===null?[]:l.map(e=>e.y2??null)}}function ne(e){let t=typeof e.colorBy==`string`&&e.colorBy!==`sign`?e.colorBy:null,n=/* @__PURE__ */ 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,P(e.aggregate)).get(a)).add(i)}return(e,t)=>n.get(e+`\0`+t)?.value()??null}function re(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 F=(e,t)=>e.type===`waterfall`?re(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}]),ie={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 re(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=w(n.visible.map(e=>n.series[e]),[0,i.bandwidth],.1,0),s=ne(t),c=``,l=``;for(let h of F(t,n)){let g=n.visible.indexOf(h.si),_=i.at(h.ci)+(t.stack||t.type===`waterfall`?0:o.at(g)),v=t.stack||t.type===`waterfall`?i.bandwidth:o.bandwidth,[y,b]=[a.of(h.y0),a.of(h.y1)],x=Math.min(y,b),S=Math.abs(y-b),[C,w,T,E]=r?[x,_,S,v]:[_,x,v,S],D=n.categories[h.ci],O=n.series[h.si],k=s(D,O),A={"data-key":p(O,D),"data-c":h.ci,"data-s":h.s,"data-x":e.fmt(t.x,D),"data-series":O,"data-f":e.fmt(t.y,h.v),"data-y":h.v,"data-neg":h.v<0,"data-tone":e.tone(h.v),"data-q":k===null?null:e.q(k),"data-other":D===f,"data-total":n.totals[h.ci]};if(c+=d(`rect`,{"data-maya":`mark`,...A,x:u(C),y:u(w),width:u(T),height:u(E)}),l+=m(A,C,w,T,E),t.labels){let n=e.fmt(t.y,h.v),i=n.length*7.2+4,[a,o]=[C+T/2,w+E/2],s=h.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=``,f=!0,h=``;n.y2.forEach((c,g)=>{if(c===null){f=!0;return}let _=u(i.at(g)+i.bandwidth/2),v=u(e.y2.of(c));s+=`${f?`M`:`L`}${_} ${v}`,f=!1;let y=n.categories[g],b={"data-key":p(`\0y2`,y),"data-c":g,"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};h+=d(`circle`,{"data-maya":`mark`,...b,r:3,cx:_,cy:v}),l+=m(b,_-3,v-3,6,6),t.labels&&e.label(+_,+v,e.fmt(r,c),`above`)}),c+=d(`path`,{"data-maya":`line`,"data-key":p(`l`,`\0y2`),"data-s":a,pathLength:1,d:s||null})+h}return{marks:c,hits:l}}},ae={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=/* @__PURE__ */ 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=``,h=``;for(let[g,_]of[...s].sort((e,t)=>e[0]-t[0])){let s=n.categories[g],v=i.at(g)+i.bandwidth/2,y=e=>r?[a.of(e),v]:[v,a.of(e)],[b,x]=_;if(b!==void 0&&x!==void 0){let[t,n]=y(b),[r,i]=y(x);c+=d(`line`,{"data-maya":`link`,"data-key":p(`k`,s),"data-c":g,"data-tone":e.tone(x-b),"stroke-width":2,x1:u(t),y1:u(n),x2:u(r),y2:u(i)})}for(let i of[0,1]){let a=_[i];if(a===void 0)continue;let[c,v]=y(a),b=n.series[i],x={"data-key":p(b,s),"data-c":g,"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===f};if(l+=d(`circle`,{"data-maya":`mark`,...x,cx:u(c),cy:u(v),r:o}),h+=m(x,c-o,v-o,o*2,o*2),t.labels){let n=_[1-i],[s,l]=y(n??a),u=e.fmt(t.y,a),d=r?c>=s:v>=l,f=n===void 0?r:i===1?d:!d;r?e.label(c+(f?o+4:-o-4),v,u,f?`start`:`end`):e.label(c,v+(f?o:-o),u,f?`below`:`above`)}}}return{marks:c+l,hits:h}}},oe={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,f=``,h=``;for(let[o,s]of a.entries()){let a=s.value,l=n.visible.indexOf(s.si),g=r.at(s.ci)+1,_=i.at(l)+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":p(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)};f+=d(`rect`,{"data-maya":`mark`,...S,x:u(g),y:u(_),width:u(v),height:u(y)}),h+=m(S,g,_,v,y),t.labels!==!1&&v>=24&&y>=24&&e.label(g+v/2,_+y/2,e.fmt(t.y,a),`center`)}let g=a.length>0?`<div class="maya-legend" data-maya="ramp"><span>${l(e.fmt(t.y,o))}</span><i></i><span>${l(e.fmt(t.y,s))}</span></div>`:``;return{marks:f,hits:h,grid:``,legend:g}}},I=12,se=e=>typeof e==`number`?e:null;function ce(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],f=t.x?c?.value??null:e.agg(t.aggregate)(t.data.map(e=>se(e[t.y]))),m=r/2;if(f===null)return{marks:``,hits:``,labels:d(`text`,{"data-maya":`empty`,x:u(m),y:u(i/2),"text-anchor":`middle`},l(e.t(`noData`)))};let h=c?.ci??0,g=t.x?e.fmt(t.x,a[h]):``,_=e.fmt(t.y,f),v=u(Math.max(16,Math.min(i*.32,72,(r-24)/(_.length*.62)))),y={"data-c":h,"data-s":0,"data-x":g,"data-series":``,"data-y":f,"data-f":_},b=(e,t)=>d(`text`,{"dominant-baseline":`hanging`,x:I,...e},l(t)),x=d(`text`,{"data-maya":`mark`,"data-key":`v`,...y,"font-size":v,x:I,y:I,"dominant-baseline":`hanging`},l(_)),S=``,C=``,w=I+v+4,T=s[s.length-2];if(c&&T&&T.value){let n=(f-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:u(w),"font-size":12},e.t(`vs`,r,e.fmt(t.x,a[T.ci]))),w+=16}g&&(S+=b({"data-kpi":`period`,y:u(w),"font-size":11},g)),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(f/D,0),1.2)/1.2,a=new Intl.NumberFormat(t.locale,{style:`percent`,maximumFractionDigits:1});O-=8,E=d(`rect`,{"data-kpi":`track`,x:I,y:O,width:u(n),height:8,rx:4}),x+=d(`rect`,{"data-maya":`mark`,"data-key":`b`,...y,"data-kpi":`fill`,"data-tone":e.tone(f),x:I,y:O,width:u(n*i),height:8,rx:4}),S+=d(`line`,{"data-kpi":`target`,"stroke-width":2,x1:u(I+n/1.2),x2:u(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(f/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),f=Math.max(...n)-l||1,m=a.length-1,h=(r-24)/m,g=e=>u(I+e*h),_=e=>u(O-(e-l)/f*(O-w-4)-2),v=``,y=!0;o.forEach(n=>{if(n.value===null)return void(y=!0);v+=`${y?`M`:`L`}${g(n.ci)} ${_(n.value)}`,y=!1,x+=d(`circle`,{"data-maya":`mark`,"data-key":p(``,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:g(n.ci),cy:_(n.value)})}),x=d(`path`,{"data-maya":`line`,"data-key":p(`l`,``),"data-s":0,pathLength:1,d:v||null})+x,a.forEach((e,t)=>{C+=d(`rect`,{"data-maya":`hit`,"data-c":t,x:u(Math.max(0,I+t*h-h/2)),y:0,width:u(h),height:i,fill:`transparent`})})}return{marks:x,hits:C,labels:S,grid:E}}var le={noun:`KPI`,draw:ce},ue=(e,t)=>[{kind:`band`,field:e.x,domain:t.categories},{kind:`linear`,field:e.y,domain:t.extent}];function de(e,t){let{spec:n,shaped:r,plot:i}=e,a=e.x,o=e.y,s=ne(n),c=e=>u(a.at(e)+a.bandwidth/2),l=``,m=``,h=``;for(let i of r.visible){let a=r.series[i],g=r.cells.filter(e=>e.si===i).sort((e,t)=>e.ci-t.ci),_=``,v=!0,y=[[]];for(let t of g){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)} ${u(o.of(t.y1))}`,v=!1;let l=r.categories[t.ci],m=s(l,a),g=l===f,b=e.fmt(n.x,l);h+=d(`circle`,{"data-maya":`mark`,"data-key":p(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":m===null?null:e.q(m),"data-other":g,r:3,cx:c(t.ci),cy:u(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)} ${u(o.of(e.y1))}`).join(``)+[...e].reverse().map(e=>`L${c(e.ci)} ${u(o.of(e.y0))}`).join(``)+`Z`).join(``);e&&(l+=d(`path`,{"data-maya":`area`,"data-key":p(`a`,a),"data-s":i%8,d:e}))}m+=d(`path`,{"data-maya":`line`,"data-key":p(`l`,a),"data-s":i%8,pathLength:1,d:_||null})}let g=``;return r.categories.forEach((e,t)=>{g+=d(`rect`,{"data-maya":`hit`,"data-c":t,x:u(a.at(t)),y:u(i.y),width:u(a.bandwidth),height:u(i.h),fill:`transparent`})}),{marks:l+m+h,hits:g,cross:d(`line`,{x1:0,x2:0,y1:u(i.y),y2:u(i.y+i.h)})}}var fe={noun:`Line`,axes:ue,draw:e=>de(e,!1)},pe={noun:`Area`,axes:ue,draw:e=>de(e,!0)},me=24;function he(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 ge={noun:`Scatter`,axes(e,t){let n=1/0,r=-1/0,i=1/0,a=-1/0;for(let o of he(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=he(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,f=/* @__PURE__ */ new Map,m=o.map(r=>{let o=r.sz!==null&&s>0?2+Math.sqrt(Math.abs(r.sz)/s)*c:4,u=r.i;if(r.name!==null){let e=(f.get(r.name)??0)+1;f.set(r.name,e),u=e>1?`${r.name}#${e}`:r.name}let d=n.series[r.si],m=e.fmt(t.x,r.x),h=e.fmt(t.y,r.y),g=l?r.row[l]:null;return{p:r,rad:o,d:{"data-key":p(d,u),"data-c":r.i,"data-s":r.si%8,"data-x":r.name??m,"data-series":d,"data-y":r.y,"data-f":r.name===null&&r.sz===null?h:[m,h,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 g==`number`?e.q(g):null},cx:i.of(r.x),cy:a.of(r.y)}});m.sort((e,t)=>t.rad-e.rad);let h=``,g=``;for(let{p:n,rad:r,d:i,cx:a,cy:o}of m)h+=d(`circle`,{"data-maya":`mark`,...i,r:u(r),cx:u(a),cy:u(o)}),r*2<me&&(g+=d(`circle`,{"data-maya":`hit`,...i,r:u(Math.max(r,12)),cx:u(a),cy:u(o),fill:`transparent`})),t.labels&&e.label(a,o-r,e.fmt(t.y,n.y),`above`);return{marks:h,hits:g}}},_e=`--maya-fg:#1f2328;--maya-fg-muted:#656d76;--maya-bg:#fff`,ve=`--maya-fg:#e6edf3;--maya-fg-muted:#9198a1;--maya-bg:#0d1117`,L=(e,t=0)=>Array.from({length:e},(e,n)=>n+t),ye=L(8).map(e=>`[data-s="${e}"]{--c:var(--maya-series-${e+1})}`).join(``),be=L(10).map(e=>`[data-q="${e}"]{--q:${Math.round(20+e*80/9)}%}`).join(``),xe=L(8).map(e=>`.maya:has([data-s="${e}"]:hover) [data-maya=mark]:not([data-s="${e}"]){opacity:.3}`).join(``),Se=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(``),Ce=`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{${_e}}@media (prefers-color-scheme:dark){:host,.maya-root{${ve}}}}: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;${Ce};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}`+Se+`.maya-ctl [role=radio]{${Ce};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}`+ye+`[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))}`+be+`[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}`+xe+`[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}}`,we=class extends Error{code;path;constructor(e,t,n){super(n),this.name=`MayaSpecError`,this.code=e,this.path=t}},z=e=>e.split(` `),Te=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`])]),Ee=[...z(`type data y path totals aggregate sort limit format titles text yDomain xDomain select`),...z(`colors colorBy theme`),...Object.keys(Te)],De=[`bar`,`line`,`area`,`dumbbell`],Oe=[`treemap`,`sunburst`,`sankey`],B=`bar,line,area`,ke=`treemap,sunburst,sankey`,Ae=Object.fromEntries(z(`horizontal:bar,dumbbell y2:bar size:scatter name:scatter path:${B},dumbbell,${ke} 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,${ke} select:${B},waterfall,scatter,heatmap,dumbbell,treemap,sunburst,hexmap zoom:line,area,scatter`).map(e=>e.split(`:`)).map(([e,t])=>[e,t.split(`,`)])),je=z(`sum mean count min max`),Me=z(`auto integer decimal compact percent currency date month year time datetime`),Ne=z(`dateStyle timeStyle weekday era year month day dayPeriod hour minute second fractionalSecondDigits timeZoneName timeZone hour12 hourCycle calendar`),Pe=e=>Ne.some(t=>Object.hasOwn(e,t)),Fe=[...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)],Ie={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`},Le=`Use horizontal: true to put categories on the left axis.`,Re=`Size comes from the element's CSS box, or render(spec, { width, height }).`,ze=`Pie and donut charts are not supported: use "bar" or "treemap" to compare parts.`,Be=`Use type: "hexmap" (import "mayacharts/geo").`,Ve=`Example: { type: "bar", data: [{ month: "Jan", revenue: 10 }], x: "month", y: "revenue" }`,He={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:Le,orientation:Le,width:Re,height:Re,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.`},Ue={column:`Use type: "bar".`,barh:`Use type: "bar" with horizontal: true.`,bubble:`Use type: "scatter" with size: "<field>".`,choropleth:Be,map:Be,pie:ze,donut:ze},We=z(`rgb rgba hsl hsla oklch oklab lab lch color color-mix light-dark var calc`),Ge=String.raw`\s*(?:"[\w\s.\-]*"|'[\w\s.\-]*'|[\w\-]+(?:\s+[\w\-]+)*)\s*`,Ke=RegExp(`^${Ge}(?:,${Ge})*$`),qe=(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 we(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)}.`,qe(He,`${e}:${U(t)}`)??``),Je=(e,t,n)=>{let r=n?Ke.test(t):/^[#\w\s.,%()+\-\/]*$/.test(t)&&[...t.matchAll(/([\w-]*)\s*\(/g)].every(e=>We.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 ${We.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),Ye=(e,t,n)=>{if(typeof t==`string`){Me.includes(t)||J(e,`spec.${e} = ${W(t)} is not a format preset.`,`Presets: ${Me.join(`, `)}. Or per field: { <field>: preset or Intl options }.`,G(t,Me));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=Pe(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))}},Xe=[[`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 ${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||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 Ze(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))Ee.includes(e)||K(`unknown-option`,e,`spec.${e} is not a known option.`,qe(He,e)??G(e,Ee),`Known options: ${Ee.join(`, `)}.`);let s=t.type;s===void 0&&K(`missing-field`,`type`,`spec.type is required but missing.`,`Required fields: type, data, x, y.`,Ve);let c=[...r,...a()],l=typeof s==`string`?s:void 0;if(l===void 0||!c.includes(l)){let e=l===void 0?void 0:qe(i,l);e&&K(`unknown-type`,`type`,`spec.type = "${s}" needs the "${e}" module, which is not loaded.`,`Add: import "mayacharts/${e}"`),K(`unknown-type`,`type`,`spec.type = ${W(s)} is not a chart type.`,`Valid types: ${c.join(`, `)}.`,l===void 0?``:qe(Ue,l)??G(l,[...c,...Object.keys(i)]))}let u=s,d=Oe.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" }`:Ve);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`&&De.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 Te)t[e]!==void 0&&typeof t[e]!==Te[e]&&q(e,t[e],`a ${Te[e]}`);for(let[e,n,r]of Xe)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(o,e)||K(`invalid-option`,`text.${e}`,`spec.text.${e} is not a text key.`,G(e,Object.keys(o)),`Text keys: ${Object.keys(o).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`)Ye(`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))Ye(`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)Je(`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))Fe.includes(e)||K(`invalid-theme`,`theme.${e}`,`spec.theme.${e} is not a theme token.`,`Valid tokens: ${Fe.join(`, `)}.`,G(e,Fe));for(let[e,t]of Object.entries(x))Je(`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 Ae)t[e]!==void 0&&t[e]!==!1&&!Ae[e].includes(u)&&K(`option-unsupported`,e,`spec.${e} is not supported with spec.type = "${u}".`,`spec.${e} works with: ${Ae[e].join(`, `)}.`);let w=De.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 ${Ie[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 ${Ie[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".`)})}n.get(u)?.check?.(e,K)}function Qe(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 $e(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??(De.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 et={bar:ie,waterfall:ie,line:fe,area:pe,scatter:ge,heatmap:oe,kpi:le,dumbbell:ae},tt=e=>e.replace(/[A-Z]|\d+/g,e=>`-`+e.toLowerCase());function nt(e,t,r){Ze(e),t!==void 0&&Qe(t);let i=Object.hasOwn(et,e.type)?et[e.type]:n.get(e.type),a=$e(e,t?.view),o=t?.width??640,c=t?.height??320,f=te(a,t?.view??{}),p=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.`);p(f.cells.length);let m=/* @__PURE__ */ new Map,g=(e,t,n)=>{if(t===`\0other`)return s(a,`other`);let r=e+`\0`+n,i=m.get(r);return i||m.set(r,i=C(a,e,n)),i(t)},_=a.colorBy,b=1/0,x=-1/0;if(typeof _==`string`&&_!==`sign`)for(let e of a.data){let t=e[_];typeof t==`number`&&(b=Math.min(b,t),x=Math.max(x,t))}let S=e=>_===`sign`?e<0?`bad`:`good`:_&&typeof _==`object`?e>=_.target?`good`:`bad`:null,w=e=>{let t=S(e);return t===null?null:s(a,_===`sign`?t===`good`?`positive`:`negative`:t===`good`?`above`:`below`)},T=[],E=``,D=(e,t,n,r)=>{let i=n.length*7.2+4,a=r===`start`?e:r===`end`?e-i:e-i/2,s=r===`above`?t-16:r===`below`?t+2:t-7;return a<0||s<0||a+i>o||s+14>c||T.some(e=>a<e[2]&&a+i>e[0]&&s<e[3]&&s+14>e[1])?!1:(T.push([a,s,a+i,s+14]),E+=d(`text`,{x:u(e),y:u(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`},l(n)),!0)},O=i.axes?N(a,i.axes(a,f),{width:o,height:c},g):null,k=O?.plot??{x:0,y:0,w:o,h:c},A={spec:a,shaped:f,width:o,height:c,plot:k,x:O?.x??null,y:O?.y??null,y2:O?.y2??null,fmt:g,label:D,tone:S,q:e=>x>b?Math.min(9,Math.max(0,Math.floor((e-b)/(x-b)*10))):9,agg:e=>t=>{let n=P(e);for(let e of t)typeof e==`number`&&n.add(e);return n.value()},fail:K,t:(e,...t)=>s(a,e,...t)};i.check?.(e,K);let j=null,ee=``;if(a.data.length===0)ee=d(`text`,{"data-maya":`empty`,x:o/2,y:c/2,"text-anchor":`middle`,"dominant-baseline":`middle`},l(s(a,`noData`)));else{let e=(e,t)=>d(`g`,{"data-maya":e},t),t=i.draw(A);p(t.marks.split(` data-maya="mark"`).length-1),j=t.legend??null,ee=e(`grid`,t.grid??O?.grid??``)+e(`axis-y`,O?.ay??``)+e(`axis-x`,O?.ax??``)+e(`marks`,t.marks)+e(`labels`,(t.labels??``)+E)+e(`cross`,t.cross??``)+e(`hits`,t.hits)}let M=[];if(Array.isArray(a.colors))a.colors.forEach((e,t)=>M.push([`--maya-series-${t+1}`,e]));else if(a.colors)for(let[e,t]of a.colors){let n=f.series.indexOf(e);n>=0&&M.push([`--maya-series-${n%8+1}`,t])}for(let e in a.theme)M.push([`--maya-${tt(e)}`,a.theme[e]]);let ne=M.map(([e,t])=>`${e}:${t};`).join(``),re=d(`svg`,{class:r===null?`maya-svg`:`maya-root maya-svg`,viewBox:`0 0 ${o} ${c}`,width:o,height:c,role:`img`,"aria-label":r===null?null:h(a),"aria-labelledby":r===null?`maya-t`:null,"aria-describedby":r===null?`maya-d`:null,tabindex:r===null?`0`:null,style:r===null?null:ne||null,"data-plot":`${u(k.x)} ${u(k.y)} ${u(k.w)} ${u(k.h)}`,...O?.attrs,"data-dir":a.horizontal?`h`:null},(r?`<style>${r}</style>`:``)+d(`title`,{id:r===null?`maya-t`:null},l(h(a)))+d(`desc`,{id:r===null?`maya-d`:null},l(v(a,f,g,i.noun)))+ee),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>${l(a.titles.get(a.y)??a.y)}</span>`:``)+(a.series===null?[]:f.series).map((e,t)=>d(`button`,{type:`button`,"data-si":t,"data-s":t%8,"data-key":e,"aria-pressed":String(f.visible.includes(t))},`<i></i>${l(e)}`)).join(``)+(a.y2===null?``:`<span data-s="${f.series.length%8}" data-line><i></i>${l(a.titles.get(a.y2)??a.y2)}</span>`)+`</div>`:e.legend!==!1&&_!==null&&a.series===null&&a.type!==`kpi`&&(F=_===`sign`||typeof _==`object`?`<div class="maya-legend" data-maya="tone">`+[`good`,`bad`].map(e=>`<span data-tone="${e}"><i></i>${l(s(a,_===`sign`?e===`good`?`positive`:`negative`:e===`good`?`above`:`below`))}</span>`).join(``)+`</div>`:x>b?`<div class="maya-legend" data-maya="ramp"><span>${l(g(_,b))}</span><i></i><span>${l(g(_,x))}</span></div>`:``),{svg:re,legend:F,controls:a.measures.length>1?`<div class="maya-ctl" role="radiogroup" aria-label="${l(s(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}">${l(a.titles.get(e)??e)}</button>`).join(``)+`</div>`:``,crumbs:a.drilled.length>0?`<nav class="maya-crumbs" aria-label="${l(s(a,`crumbs`))}"><button type="button" data-depth="0">${l(s(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"`:``}>${l(String(e))}</button>`).join(``)+`</nav>`:a.drill?`<div class="maya-crumbs" aria-hidden="true"></div>`:``,table:a.table?y(a,f,g,w):``,title:a.title===null?``:`<div class="maya-title">${l(a.title)}</div>`,style:ne,vars:M,warnings:[]}}function rt(e,t){return nt(e,t,null)}function it(e,t){return nt(e,t,R).svg}function at(e,t,n){let r=e.style?` style="${l(e.style)}"`:``,i=n?` nonce="${l(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 ot(e){let t=e=>typeof e==`object`?Object.keys(e):[],n=/* @__PURE__ */ 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 st(e,t){let n=rt(e,t),r=JSON.stringify(ot(e)).replace(/</g,`\\u003c`);return`<maya-chart><template shadowrootmode="open">${at(n,R,t?.nonce)}</template><script type="application/json">${r}<\/script></maya-chart>`}var ct,lt=e=>{let t=globalThis.trustedTypes;if(!t)return e;if(ct?.[0]!==t){let e=null;try{e=t.createPolicy(`mayacharts`,{createHTML:e=>e})}catch{e=t.getPolicy?.(`mayacharts`)??null}ct=[t,e]}return ct[1]?ct[1].createHTML(e):e},ut=!1,dt=`cubic-bezier(.2,.8,.2,1)`,Y={duration:280,easing:dt},ft={duration:160,easing:dt},pt=1500,mt=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]}},ht=e=>{let t=e.getBBox?.();return Z(e)??(t?[t.x,t.y,t.width,t.height]:void 0)},gt=(e,t)=>`translate(${t[0]-e[0]}px,${t[1]-e[1]}px) scale(${Math.max(t[2],mt)/Math.max(e[2],mt)},${Math.max(t[3],mt)/Math.max(e[3],mt)})`,_t=(e,t,n,r)=>{let i=ut?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 vt(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 yt(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=Y){let i=[{opacity:0},{opacity:1}];_t(e,t?i.reverse():i,t?{...r,fill:`forwards`}:r,n)}function xt(e,t){let n=Z(e);if(n)_t(e,[{transform:gt(n,yt(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});_t(e,[t(`1`),t(`0`)],Y)}else bt(e,!1)}function St(e,t){e.removeAttribute(`data-key`),e.removeAttribute(`data-maya`);let n=Z(e),r=()=>e.remove();n?_t(e,[{transform:`none`,opacity:1},{transform:gt(n,yt(e,n,t)),opacity:0}],{...Y,fill:`forwards`},r):bt(e,!0,r)}function Ct(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=/* @__PURE__ */ 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&&Ct(n,a);vt(n,e);let s=Z(n);o&&s&&o.some((e,t)=>Math.abs(e-s[t])>.01)&&_t(n,[{transform:gt(s,o)},{transform:`none`}],Y),i.push(n)}for(let e of r.values())St(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&&xt(t,n)}}}function Tt(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)Et(e);for(let e of s)bt(e,!1,void 0,ft)}function Et(e){e.removeAttribute(`data-maya`);for(let t of e.querySelectorAll(`[data-maya]`))t.removeAttribute(`data-maya`);bt(e,!0,()=>e.remove(),ft)}function Dt(e,t,n,r={}){let i=document.createElement(`template`);i.innerHTML=lt(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>pt||s.childElementCount>pt?e.replaceChildren(a):(ut=!!r.instant,vt(o,a),vt(s,c),wt(s,c,r.origin),Tt(o,a,s,c),ut=!1),r.after?.(e.firstElementChild)}var Ot=(e=[],t=[])=>e.length===t.length&&e.every((e,n)=>e===t[n]),kt=(e,t)=>Ot(e.view.drill,t)?e:{view:{...e.view,drill:t},selected:[]},At=(e,t)=>{let n=e.view.drill??[];if(t.type===`pop`)return kt(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?kt(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||!Ot(r.path,i.path)))return kt(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 kt(e,s)},jt=(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}},Mt=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(s(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=At(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=jt(a,(o.view.drill??[]).length);if(s===void 0)return!1;let c=At(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=>jt(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)}},Nt=`.maya-ctl [role=radio]`,Pt=(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}}},Ft=e=>{let t=()=>[...e.root.querySelectorAll(Nt)],n=!1,r=t=>{let n=e.spec(),r=n&&Array.isArray(n.y)?n.y:[],i=e.state(),a=Pt(i,{type:`measure`,index:t,count:r.length||void 0});if(a===i)return;e.commit(a);let o=a.view.measure??0,c=r[o]??String(o);e.announce(s(n??{},`showing`,n?.titles?.[c]??c))},i=e=>{let n=e.target.closest?.(Nt),i=n?t().indexOf(n):-1;i>=0&&r(i)},a=i=>{let a=i.key,s=t(),c=s.indexOf(i.target.closest?.(Nt));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)}}},It=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Lt=[`x`,`series`,`name`],Rt=e=>{try{return decodeURIComponent(e)}catch{return e}};function zt(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=>It(e,t.sel)),r=t.multi?n?e.selected.filter(e=>!It(e,t.sel)):[...e.selected,t.sel]:n&&e.selected.length===1?[]:[t.sel];return{...e,selected:r}}function Bt(e,t){let n=e.getAttribute(`data-key`);if(!n)return;let r=n.split(`~`).map(Rt);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 Vt(e,t,n){let r=Bt(t,n);return r?Lt.every(t=>e[t]===void 0||String(e[t])===String(r[t])):!1}function Ht(e){let{root:t}=e,n=()=>e.spec()?.type,r=(t,n)=>{let r=e.spec();if(!r?.select)return;let i=zt(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?s(r,`selected`,o):s(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&&Bt(s,n());s&&c&&r(c,s)};return t.addEventListener(`click`,i),{escape(){return e.state().selected.length?(e.commit(zt(e.state(),{type:`clear`})),e.announce(s(e.spec()??{},`selectionCleared`)),!0):!1},enter(t){let i=Bt(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=>Vt(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},Ut=`[data-maya=hit],[data-maya=mark]`,Wt=120;function Gt(e,t,n=()=>{},r=()=>void 0){let i=t=>e.querySelector(t),a=i(`.maya-box`),o=i(`.maya-tip`),c=i(`.maya-probe`),l=e.host,u=!!globalThis.CSS?.supports?.(`anchor-name: --x`),d=[],f=/* @__PURE__ */ new Map,p=/* @__PURE__ */ new Map,m,h=!1,g=!1,_=!1,v,y,b=()=>{d=[...a.querySelectorAll(`[data-maya=mark][data-key]`)],f=/* @__PURE__ */ new Map,p=/* @__PURE__ */ 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(),Wt))},w=(e,t)=>{let n=e?.closest?.(Ut);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 s(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=l.getBoundingClientRect();if(Object.assign(c.style,{left:i.left-a.left-l.clientLeft+`px`,top:i.top-a.top-l.clientTop+`px`,width:i.width+`px`,height:i.height+`px`}),clearTimeout(v),h||=(o.showPopover(),!0),o.classList.add(`maya-open`),!u){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 Kt=e=>{if(!e.view.window)return e;let{window:t,...n}=e.view;return{...e,view:n}},qt=(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 Kt(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))?Kt(e):e},Jt=4,Yt=2,Xt=`http://www.w3.org/2000/svg`,Zt=e=>(e??``).trim().split(/\s+/).map(Number),Qt=e=>String(+e.toPrecision(4)),$t=e=>{let{root:t}=e,n,r,i=``,a=JSON.stringify(e.state().view.drill),o=e=>e.target?.closest?.(`svg.maya-svg`),c=e=>{let t=e.getBoundingClientRect(),n=Zt(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]=Zt(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}},l=(e,t,n)=>Math.min(n,Math.max(t,e)),u=()=>{r?.remove(),r=void 0,n=void 0},d=(e,t)=>{let n=c(e);return{g:n,x:l((t.clientX-n.r.left)*n.k+n.vx,n.px,n.px+n.pw),y:l((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=c(e);(!r||r.ownerSVGElement!==e)&&(r?.remove(),r=document.createElementNS(Xt,`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),s=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(${s},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&&(u(),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)<Jt)){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,c=d(a,i),p=c.g;try{a.releasePointerCapture(i.pointerId)}catch{}if(u(),m=void 0,!o)return;_();let h=f(a),g=Math.abs(s.x-c.x)/p.k,v=Math.abs(s.y-c.y)/p.ky;if(h?g<Yt:g<Yt||v<Yt)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=>l(Math.floor((e-p.px)/p.pw*t),0,t-1),i=r(Math.min(s.x,c.x)),o=r(Math.max(s.x,c.x));e.commit(qt(y,{type:`zoom`,window:[n+i,n+o]}),null)}else{let t=Zt(a.getAttribute(`data-xd`)),n=Zt(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(qt(y,{type:`zoom`,window:[r(s.x),r(c.x),i(s.y),i(c.y)]}),null)}},y=()=>{let t=e.state();return t.view.window?(e.commit(qt(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=()=>{u(),m=void 0};return t.addEventListener(`pointercancel`,S),t.addEventListener(`click`,b),t.addEventListener(`dblclick`,x),{cancel(){return r?(u(),m=void 0,!0):!1},escape:y,painted(){let n=e.state(),r=e.spec(),o=n.view.window,c=JSON.stringify(n.view.drill),l=c!==a;if(a=c,o&&l)return void y();let u=t.querySelector(`svg.maya-svg`);u&&r?.zoom&&(u.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=s(r,`reset`));let p=o.join(`,`);if(p!==i){if(i=p,o.length===4)e.announce(s(r,`zoomedTo`,Qt(o[0]),Qt(o[1])));else{let n=[...t.querySelectorAll(`[data-maya=mark][data-x]`)].map(e=>e.getAttribute(`data-x`));n.length&&e.announce(s(r,`zoomedTo`,n[0],n[n.length-1]))}}},off(){u(),t.removeEventListener(`pointerdown`,h),t.removeEventListener(`pointermove`,g),t.removeEventListener(`pointerup`,v),t.removeEventListener(`pointercancel`,S),t.removeEventListener(`click`,b),t.removeEventListener(`dblclick`,x)}}},en,tn=class extends HTMLElement{static observedAttributes=[`spec`];static version=e;#e;#t;#n;#r={view:{},selected:[]};#i;#a;#o;#s={};#c=[0,0];#l=0;#u;#d=!1;#f;#p;#m;#h=/* @__PURE__ */ 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`}),en??=new CSSStyleSheet,en.cssRules.length||en.replaceSync(R),t.adoptedStyleSheets=[en],t.innerHTML=lt(at({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:Ft(n),drill:Mt(n),select:Ht(n),zoom:$t(n)};let r=t.querySelector(`.maya-box`);this.#p=Gt(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=ht(r)),this.#r=e,this.#w(),JSON.stringify(n.view)!==JSON.stringify(e.view)&&this.#b(`maya-view`,e.view),JSON.stringify(n.selected)!==JSON.stringify(e.selected)&&this.#b(`maya-select`,{selected:[...e.selected],target:t})}#S=e=>{let t=this.#a;if(!t||e.defaultPrevented)return;let n=e.key,r;if(n===`Escape`)r=t.zoom.cancel?.()||t.select.escape?.()||t.zoom.escape?.()||t.drill.escape?.();else if(n===`Enter`){let e=this.#p?.active();r=!!e&&(t.drill.enter?.(e)||t.select.enter?.(e))}r&&e.preventDefault()};#C=e=>{if(this.spec?.select)return;let t=e.target.closest(`[data-maya=legend] button`);if(!t)return;let n=t.getAttribute(`data-key`)??``,r=new Set(this.#r.view.hidden);if(r.has(n))r.delete(n);else if(this.shadowRoot.querySelectorAll(`[data-maya=legend] [aria-pressed=true]`).length>1)r.add(n);else return;this.#x({...this.#r,view:{...this.#r.view,hidden:[...r]}},null)};#w(){this.isConnected&&!this.#l&&(this.#l=requestAnimationFrame(()=>(this.#l=0,this.#T())))}#T(){let e=this.shadowRoot,t=this.spec,n=e.querySelector(`.maya-box`);if(!t)return;if(t!==this.#i){let e={type:`spec`,prev:this.#i,next:t};this.#r=zt(qt(At(Pt(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=rt(t,{width:r,height:i,view:this.#r.view,selected:this.#r.selected})}catch(e){this.#p?.hide();let t=e instanceof we?{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`,lt(a[t])))}),this.#s.table!==a.table&&(this.#s.table=a.table,e.querySelector(`table.maya-sr`)?.remove(),n.insertAdjacentHTML(`afterend`,lt(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,Dt(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 nn){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=nn.find(([e])=>e===n)[1];t.querySelectorAll(i)[+r]?.focus({preventScroll:!0})}},nn=[[`svg`,`.maya-svg`],[`legend`,`[data-maya=legend] button`],[`measure`,`.maya-ctl [role=radio]`],[`crumb`,`.maya-crumbs :is(button,a)`],[`reset`,`.maya-reset`]];if(typeof customElements<`u`){let t=customElements.get(`maya-chart`);t?t.version!==`0.1.1`&&console.warn(`mayacharts: <maya-chart> ${t.version??`(unknown)`} is already defined; ${e} is not used.`):customElements.define(`maya-chart`,tn)}export{tn as MayaChart,we as MayaSpecError,it as render,rt as renderParts,st as renderShell,Ze as validateSpec,e as version};
|
|
1
|
+
/*! mayacharts v0.2.1 | MIT | https://github.com/BbekShr/mayacharts */
|
|
2
|
+
var e=`0.2.1`,t=Symbol.for(`mayacharts.marks@0`);Object.hasOwn(globalThis,t)||Object.defineProperty(globalThis,t,{value:/* @__PURE__ */ new Map});var n=globalThis[t],r=[`bar`,`line`,`area`,`scatter`,`heatmap`,`waterfall`,`kpi`,`dumbbell`,`ridgeline`,`beeswarm`,`parallel`,`table`],i={treemap:`hierarchy`,sunburst:`hierarchy`,marimekko:`hierarchy`,waffle:`hierarchy`,sankey:`flow`,chord:`flow`,radial:`radial`,hexmap:`geo`},a=()=>[...n.keys()],o={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 s(e,t,...n){return((e.text&&Object.hasOwn(e.text,t)?e.text[t]:void 0)??o[t]).replace(/\{(\d)\}/g,(e,t)=>String(n[+t]??``))}var c={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`};function l(e){return String(e).replace(/[&<>"']/g,e=>c[e])}function u(e){return Math.round(e*100)/100}function d(e,t,n){let r=``;for(let e in t){let n=t[e];n!=null&&n!==!1&&(r+=n===!0?` ${e}=""`:` ${e}="${l(n)}"`)}return n===void 0?`<${e}${r}/>`:`<${e}${r}>${n}</${e}>`}var f=`\0other`,p=(...e)=>e.map(e=>encodeURIComponent(String(e).replace(/\p{Cs}/gu,`�`)).replace(/~/g,`%7E`)).join(`~`);function m(e,t,n,r,i){let[a,o]=[Math.max(r,24),Math.max(i,24)];return r<24||i<24?d(`rect`,Object.assign({"data-maya":`hit`},e,{"data-maya":`hit`,x:u(t-(a-r)/2),y:u(n-(o-i)/2),width:u(a),height:u(o),fill:`transparent`})):``}var h=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(` / `))}`:``),g=[`scatter`,`treemap`,`sunburst`,`sankey`,`hexmap`],_=1e3;function v(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?s(e,`chartOf`,r,i(e.y),e.x?i(e.x):e.path.join(` / `)):s(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(`, `)})`),g.includes(e.type))return`${a}. ${e.data.length} rows.`;let o=0,c=1/0,l=-1/0;for(let e of t.cells)e.value!==null&&(o++,c=Math.min(c,e.value),l=Math.max(l,e.value));let u=t=>n(e.y,t);return o?o===1?`${a}. 1 value: ${u(c)}.`:`${a}. ${o} values from ${u(c)} to ${u(l)}.`:a+`. No data.`}function y(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 l(n(t,i))+(a?` (${l(a)})`:``)},o=t=>t>_?s(e,`firstOf`,_,t):h(e),c,u,d;if(g.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))];d=e.data.length,c=t.map(e=>`<th>${l(i(e))}</th>`).join(``),u=e.data.slice(0,_).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]);d=t.categories.length,c=`<th>${l(i(e.x))}</th>`+n.map(e=>`<th>${l(e)}</th>`).join(``);let r=new Map(t.cells.map(e=>[e.ci+`,`+e.si,e.value]));u=``;for(let n=0;n<Math.min(d,_);n++){u+=`<tr><th scope="row">${l(t.categories[n])}</th>`;for(let i of t.visible)u+=`<td>${a(e.y,r.get(n+`,`+i))}</td>`;u+=`</tr>`}}return`<table class="maya-sr"><caption>${l(o(d))}</caption><thead><tr>${c}</tr></thead><tbody>${u}</tbody></table>`}var b=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},x=`year month day hour minute second weekday era timeZone dateStyle timeStyle fractionalSecondDigits hour12 dayPeriod timeZoneName`.split(` `),S={date:{dateStyle:`medium`},month:{month:`short`,year:`numeric`},year:{year:`numeric`},time:{timeStyle:`short`},datetime:{dateStyle:`medium`,timeStyle:`short`}};function C(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:b(n),o=``,s=``,c=null,l=null,u=null,d=typeof r==`string`?r:`auto`;if(typeof r==`string`&&Object.hasOwn(S,r))c=new Intl.DateTimeFormat(i,{timeZone:`UTC`,...S[r]});else if(typeof r==`object`&&r){let{prefix:e=``,suffix:t=``,...n}=r;[o,s]=[String(e),String(t)],x.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:b(n*100),maximumFractionDigits:n===void 0?1:Math.max(1,b(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)?/* @__PURE__ */ 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 w(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 T(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 E=e=>parseFloat(e.toPrecision(12));function D(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(E(e*i));return{domain:[E(s*i),E(c*i)],values:l,step:E(i)}}var O=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,k=e=>{let t=0,n=0;for(let r of e)O(r.codePointAt(0))?n++:t++;return t*7.2+n*12},A=e=>k(e)+8,j=e=>e.reduce((e,t)=>Math.max(e,A(t)),0);function ee(e,t){if(k(e)<=t)return e;let n=``,r=0;for(let i of e){if(r+=k(i),r+7.2>t)break;n+=i}return n+`…`}function M(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=D(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`?M(e,t,a):null,f=n&&n.kind===`linear`?M(e,n,a):null,p=t&&!c?t.domain.map(e=>a(t.field,e)):[],m=n&&!f?n.domain.map(e=>a(n.field,e)):[],h=f?f.labels:m.map(e=>ee(e,o*.4-8)),g=r&&r.kind===`linear`?M(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?j(h)+10:8)+(v?18:0),c?k(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?j(g.labels)+4:8)+(_?18:0):Math.max(12,c?k(c.labels.at(-1)??``)/2+2:0))),h:Math.max(1,s-10-x)},C=t?t.kind===`band`?w(t.domain,[S.x,S.x+S.w]):T(c.domain,[S.x,S.x+S.w]):null,E=n?n.kind===`band`?w(n.domain,[S.y,S.y+S.h]):T(f.domain,[S.y+S.h,S.y]):null,D=g?T(g.domain,[S.y+S.h,S.y]):null,O=``;if(e.grid){let e=u(S.x+S.w);if(f)for(let t of f.values){let n=u(E.of(t));O+=d(`line`,{x1:u(S.x),x2:e,y1:n,y2:n})}if(c)for(let e of c.values){let t=u(C.of(e));O+=d(`line`,{x1:t,x2:t,y1:u(S.y),y2:u(S.y+S.h)})}}let A=``;if(e.yAxis&&n){if(f)f.values.forEach((e,t)=>{A+=d(`text`,{x:u(S.x-6),y:u(E.of(e)),"text-anchor":`end`,"dominant-baseline":`middle`},l(f.labels[t]))});else{let e=E,t=Math.max(1,Math.ceil(14/(S.h/Math.max(1,n.domain.length))));m.forEach((n,r)=>{if(r%t)return;let i=h[r];A+=d(`text`,{x:u(S.x-6),y:u(e.at(r)+e.bandwidth/2),"text-anchor":`end`,"dominant-baseline":`middle`},l(i)+(i===n?``:d(`title`,{},l(n))))})}}if(v){let e=u(S.y+S.h/2);A+=d(`text`,{x:9,y:e,"text-anchor":`middle`,transform:`rotate(-90 9 ${e})`},l(v))}if(g&&D&&(e.yAxis&&g.values.forEach((e,t)=>{A+=d(`text`,{x:u(S.x+S.w+6),y:u(D.of(e)),"text-anchor":`start`,"dominant-baseline":`middle`},l(g.labels[t]))}),_)){let[e,t]=[o-9,u(S.y+S.h/2)];A+=d(`text`,{x:e,y:t,"text-anchor":`middle`,transform:`rotate(90 ${e} ${t})`},l(_))}let te=``;if(e.xAxis&&t){let e=u(S.y+S.h+16);if(c){let t=Math.max(1,Math.ceil(j(c.labels)/(S.w/Math.max(1,c.values.length-1))));c.values.forEach((n,r)=>{r%t||(te+=d(`text`,{x:u(C.of(n)),y:e,"text-anchor":`middle`},l(c.labels[r])))})}else{let t=C,n=Math.max(1,Math.ceil(j(p)/(S.w/Math.max(1,p.length))));p.forEach((r,i)=>{i%n===0&&(te+=d(`text`,{x:u(t.at(i)+t.bandwidth/2),y:e,"text-anchor":`middle`},l(r)))})}}y&&(te+=d(`text`,{x:u(S.x+S.w/2),y:s-4,"text-anchor":`middle`},l(y)));let N=c&&f,ne=t?.kind===`band`?t:n?.kind===`band`?n:null;return{plot:S,x:C,y:E,y2:D,grid:O,ay:A,ax:te,attrs:{"data-plot":`${u(S.x)} ${u(S.y)} ${u(S.w)} ${u(S.h)}`,"data-n":N||!ne?null:ne.domain.length,"data-xd":N?c.domain.join(` `):null,"data-yd":N?f.domain.join(` `):null}}}function N(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 ne(e,t={}){let{hidden:n=[],window:r}=Array.isArray(t)?{hidden:t}:t,i=[],a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ 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=/* @__PURE__ */ new Map;for(let[r,i]of t){let t=n.get(r);t||n.set(r,t=N(e.aggregate)),typeof i==`number`&&t.add(i)}return i.map((e,t)=>n.get(t)?.value()??null)},c=t=>{let n=N(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:f,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`,p=/* @__PURE__ */ new Map;if(d){let t=0;for(let n of l)e.totals.includes(n.label)?p.set(n,[0,t]):p.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 m=[];i.forEach((e,t)=>n.includes(e)||m.push(t));let h=[],g=0,_=0;return l.forEach((t,n)=>{let r=0,i=0;for(let a of m){let o=t.vals[a]??null,s=o??0,[c,l]=d?p.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),h.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:m,cells:h,extent:[g,_],y2:e.y2===null?[]:l.map(e=>e.y2??null)}}function P(e){let t=typeof e.colorBy==`string`&&e.colorBy!==`sign`?e.colorBy:null,n=/* @__PURE__ */ 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,N(e.aggregate)).get(a)).add(i)}return(e,t)=>n.get(e+`\0`+t)?.value()??null}function re(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 F=(e,t)=>e.type===`waterfall`?re(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}]),ie={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 re(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=w(n.visible.map(e=>n.series[e]),[0,i.bandwidth],.1,0),s=P(t),c=``,l=``;for(let h of F(t,n)){let g=n.visible.indexOf(h.si),_=i.at(h.ci)+(t.stack||t.type===`waterfall`?0:o.at(g)),v=t.stack||t.type===`waterfall`?i.bandwidth:o.bandwidth,[y,b]=[a.of(h.y0),a.of(h.y1)],x=Math.min(y,b),S=Math.abs(y-b),[C,w,T,E]=r?[x,_,S,v]:[_,x,v,S],D=n.categories[h.ci],O=n.series[h.si],k=s(D,O),A={"data-key":p(O,D),"data-c":h.ci,"data-s":h.s,"data-x":e.fmt(t.x,D),"data-series":O,"data-f":e.fmt(t.y,h.v),"data-y":h.v,"data-neg":h.v<0,"data-tone":e.tone(h.v),"data-q":k===null?null:e.q(k),"data-other":D===f,"data-total":n.totals[h.ci]};if(c+=d(`rect`,{"data-maya":`mark`,...A,x:u(C),y:u(w),width:u(T),height:u(E)}),l+=m(A,C,w,T,E),t.labels){let n=e.fmt(t.y,h.v),i=n.length*7.2+4,[a,o]=[C+T/2,w+E/2],s=h.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=``,f=!0,h=``;n.y2.forEach((c,g)=>{if(c===null){f=!0;return}let _=u(i.at(g)+i.bandwidth/2),v=u(e.y2.of(c));s+=`${f?`M`:`L`}${_} ${v}`,f=!1;let y=n.categories[g],b={"data-key":p(`\0y2`,y),"data-c":g,"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};h+=d(`circle`,{"data-maya":`mark`,...b,r:3,cx:_,cy:v}),l+=m(b,_-3,v-3,6,6),t.labels&&e.label(+_,+v,e.fmt(r,c),`above`)}),c+=d(`path`,{"data-maya":`line`,"data-key":p(`l`,`\0y2`),"data-s":a,pathLength:1,d:s||null})+h}return{marks:c,hits:l}}};function ae(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 oe(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 se={noun:`Beeswarm`,axes(e,t){let n=1/0,r=-1/0;for(let i of ae(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=ae(t,n),s=a?a.bandwidth:r.h,c=/* @__PURE__ */ 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 f=Math.max(3,Math.min(6,Math.sqrt(r.w*s/l)/4)),h=typeof t.colorBy==`string`&&t.colorBy!==`sign`?t.colorBy:null,g=/* @__PURE__ */ new Map,_=``,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=oe(y,f+.5,Math.max(0,s/2-f));l.forEach((r,i)=>{let s=r.i;if(r.name!==null){let e=(g.get(r.name)??0)+1;g.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=h?r.row[h]:null,C={"data-key":p(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];_+=d(`circle`,{"data-maya":`mark`,...C,r:u(f),cx:u(w),cy:u(T)}),v+=m(C,w-f,T-f,f*2,f*2),t.labels&&e.label(w,T-f,x,`above`)})}return{marks:_,hits:v}}},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=/* @__PURE__ */ 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=``,h=``;for(let[g,_]of[...s].sort((e,t)=>e[0]-t[0])){let s=n.categories[g],v=i.at(g)+i.bandwidth/2,y=e=>r?[a.of(e),v]:[v,a.of(e)],[b,x]=_;if(b!==void 0&&x!==void 0){let[t,n]=y(b),[r,i]=y(x);c+=d(`line`,{"data-maya":`link`,"data-key":p(`k`,s),"data-c":g,"data-tone":e.tone(x-b),"stroke-width":2,x1:u(t),y1:u(n),x2:u(r),y2:u(i)})}for(let i of[0,1]){let a=_[i];if(a===void 0)continue;let[c,v]=y(a),b=n.series[i],x={"data-key":p(b,s),"data-c":g,"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===f};if(l+=d(`circle`,{"data-maya":`mark`,...x,cx:u(c),cy:u(v),r:o}),h+=m(x,c-o,v-o,o*2,o*2),t.labels){let n=_[1-i],[s,l]=y(n??a),u=e.fmt(t.y,a),d=r?c>=s:v>=l,f=n===void 0?r:i===1?d:!d;r?e.label(c+(f?o+4:-o-4),v,u,f?`start`:`end`):e.label(c,v+(f?o:-o),u,f?`below`:`above`)}}}return{marks:c+l,hits:h}}},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,f=``,h=``,g=``;for(let[o,s]of a.entries()){let a=s.value,_=n.visible.indexOf(s.si),v=r.at(s.ci)+1,y=i.at(_)+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":p(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)};f+=d(`rect`,{"data-maya":`mark`,...w,x:u(v),y:u(y),width:u(b),height:u(x)}),h+=m(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&&(g+=d(`text`,{x:u(v+b/2),y:u(y+x/2),"text-anchor":`middle`,"dominant-baseline":`middle`,"data-in":!0,"data-dark":w[`data-q`]>=6},l(T)))}let _=a.length>0?`<div class="maya-legend" data-maya="ramp"><span>${l(e.fmt(t.y,o))}</span><i></i><span>${l(e.fmt(t.y,s))}</span></div>`:``;return{marks:f,hits:h,labels:g,grid:``,legend:_}}},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],f=t.x?c?.value??null:e.agg(t.aggregate)(t.data.map(e=>ue(e[t.y]))),m=r/2;if(f===null)return{marks:``,hits:``,labels:d(`text`,{"data-maya":`empty`,x:u(m),y:u(i/2),"text-anchor":`middle`},l(e.t(`noData`)))};let h=c?.ci??0,g=t.x?e.fmt(t.x,a[h]):``,_=e.fmt(t.y,f),v=u(Math.max(16,Math.min(i*.32,72,(r-24)/(_.length*.62)))),y={"data-c":h,"data-s":0,"data-x":g,"data-series":``,"data-y":f,"data-f":_},b=(e,t)=>d(`text`,{"dominant-baseline":`hanging`,x:I,...e},l(t)),x=d(`text`,{"data-maya":`mark`,"data-key":`v`,...y,"font-size":v,x:I,y:I,"dominant-baseline":`hanging`},l(_)),S=``,C=``,w=I+v+4,T=s[s.length-2];if(c&&T&&T.value){let n=(f-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:u(w),"font-size":12},e.t(`vs`,r,e.fmt(t.x,a[T.ci]))),w+=16}g&&(S+=b({"data-kpi":`period`,y:u(w),"font-size":11},g)),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(f/D,0),1.2)/1.2,a=new Intl.NumberFormat(t.locale,{style:`percent`,maximumFractionDigits:1});O-=8,E=d(`rect`,{"data-kpi":`track`,x:I,y:O,width:u(n),height:8,rx:4}),x+=d(`rect`,{"data-maya":`mark`,"data-key":`b`,...y,"data-kpi":`fill`,"data-tone":e.tone(f),x:I,y:O,width:u(n*i),height:8,rx:4}),S+=d(`line`,{"data-kpi":`target`,"stroke-width":2,x1:u(I+n/1.2),x2:u(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(f/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),f=Math.max(...n)-l||1,m=a.length-1,h=(r-24)/m,g=e=>u(I+e*h),_=e=>u(O-(e-l)/f*(O-w-4)-2),v=``,y=!0;o.forEach(n=>{if(n.value===null)return void(y=!0);v+=`${y?`M`:`L`}${g(n.ci)} ${_(n.value)}`,y=!1,x+=d(`circle`,{"data-maya":`mark`,"data-key":p(``,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:g(n.ci),cy:_(n.value)})}),x=d(`path`,{"data-maya":`line`,"data-key":p(`l`,``),"data-s":0,pathLength:1,d:v||null})+x,a.forEach((e,t)=>{C+=d(`rect`,{"data-maya":`hit`,"data-c":t,x:u(Math.max(0,I+t*h-h/2)),y:0,width:u(h),height:i,fill:`transparent`})})}return{marks:x,hits:C,labels:S,grid:E}}var fe={noun:`KPI`,draw:de},pe=26,me=12,he=48,ge=14,_e={noun:`Parallel coordinates`,draw(e){let{spec:t,shaped:n,width:r,height:i}=e,a=t.measures,o=/* @__PURE__ */ 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}]:[]}),f=he,m=Math.max(49,r-ge),[h,g]=[pe,Math.max(27,i-me)],_=e=>u(a.length<2?f:f+(m-f)*e/(a.length-1)),v=``,y=``,b=a.map((n,r)=>{let i=c.map(e=>e.vals[r]).filter(e=>e!==null),o=D(Math.min(0,...i),Math.max(0,...i),4),[s,f]=o.domain,p=e=>u(g-(e-s)/(f-s||1)*(g-h)),m=_(r);v+=d(`line`,{x1:m,x2:m,y1:u(h),y2:u(g)});for(let t of o.values){let r=p(t);v+=d(`line`,{x1:m-3,x2:m,y1:r,y2:r}),y+=d(`text`,{x:m-6,y:r,"text-anchor":`end`,"dominant-baseline":`middle`,"data-in":!0},l(e.fmt(n,t,o.step)))}return y+=d(`text`,{x:m,y:12,"text-anchor":r===0?`start`:r===a.length-1?`end`:`middle`,"font-weight":600,"data-in":!0},l(t.titles.get(n)??n)),p}),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[f,m]=[_(u),b[u](i)];c+=`${l?`M`:`L`}${f} ${m}`,l=!1,x+=d(`circle`,{"data-maya":`mark`,"data-key":p(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:f,cy:m})}),c&&(S+=d(`path`,{"data-maya":`line`,"data-key":p(`l`,n),"data-c":r,"data-s":o%8,pathLength:1,d:c}),C+=d(`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}}},ve={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=P(t),s=e=>u(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,m=Math.min(1.4*a.step,l(0)-r.y),h=``,g=``;n.visible.forEach((r,i)=>{let a=n.series[r],_=l(i),v=e=>u(_-e/c*m),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);g+=d(`circle`,{"data-maya":`mark`,"data-key":p(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===f,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)} ${u(_)}L${s(e[0].ci)} ${u(_)}Z`).join(``);C&&(h+=d(`path`,{"data-maya":`area`,"data-ridge":!0,"data-key":p(`a`,a),"data-s":r%8,d:C})),h+=d(`path`,{"data-maya":`line`,"data-key":p(`l`,a),"data-s":r%8,pathLength:1,d:S.map(e=>x(e).join(``)).join(``)||null})});let _=``;return n.categories.forEach((e,t)=>{_+=d(`rect`,{"data-maya":`hit`,"data-c":t,x:u(i.at(t)),y:u(r.y),width:u(i.bandwidth),height:u(r.h),fill:`transparent`})}),{marks:h+g,hits:_,cross:d(`line`,{x1:0,x2:0,y1:u(r.y),y2:u(r.y+r.h)})}}},ye=(e,t)=>[{kind:`band`,field:e.x,domain:t.categories},{kind:`linear`,field:e.y,domain:t.extent}];function be(e,t){let{spec:n,shaped:r,plot:i}=e,a=e.x,o=e.y,s=P(n),c=e=>u(a.at(e)+a.bandwidth/2),l=``,m=``,h=``;for(let i of r.visible){let a=r.series[i],g=r.cells.filter(e=>e.si===i).sort((e,t)=>e.ci-t.ci),_=``,v=!0,y=[[]];for(let t of g){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)} ${u(o.of(t.y1))}`,v=!1;let l=r.categories[t.ci],m=s(l,a),g=l===f,b=e.fmt(n.x,l);h+=d(`circle`,{"data-maya":`mark`,"data-key":p(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":m===null?null:e.q(m),"data-other":g,r:3,cx:c(t.ci),cy:u(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)} ${u(o.of(e.y1))}`).join(``)+[...e].reverse().map(e=>`L${c(e.ci)} ${u(o.of(e.y0))}`).join(``)+`Z`).join(``);e&&(l+=d(`path`,{"data-maya":`area`,"data-key":p(`a`,a),"data-s":i%8,d:e}))}m+=d(`path`,{"data-maya":`line`,"data-key":p(`l`,a),"data-s":i%8,pathLength:1,d:_||null})}let g=``;return r.categories.forEach((e,t)=>{g+=d(`rect`,{"data-maya":`hit`,"data-c":t,x:u(a.at(t)),y:u(i.y),width:u(a.bandwidth),height:u(i.h),fill:`transparent`})}),{marks:l+m+h,hits:g,cross:d(`line`,{x1:0,x2:0,y1:u(i.y),y2:u(i.y+i.h)})}}var xe={noun:`Line`,axes:ye,draw:e=>be(e,!1)},Se={noun:`Area`,axes:ye,draw:e=>be(e,!0)},Ce=24;function we(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 Te={noun:`Scatter`,axes(e,t){let n=1/0,r=-1/0,i=1/0,a=-1/0;for(let o of we(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=we(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,f=/* @__PURE__ */ new Map,m=o.map(r=>{let o=r.sz!==null&&s>0?2+Math.sqrt(Math.abs(r.sz)/s)*c:4,u=r.i;if(r.name!==null){let e=(f.get(r.name)??0)+1;f.set(r.name,e),u=e>1?`${r.name}#${e}`:r.name}let d=n.series[r.si],m=e.fmt(t.x,r.x),h=e.fmt(t.y,r.y),g=l?r.row[l]:null;return{p:r,rad:o,d:{"data-key":p(d,u),"data-c":r.i,"data-s":r.si%8,"data-x":r.name??m,"data-series":d,"data-y":r.y,"data-f":r.name===null&&r.sz===null?h:[m,h,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 g==`number`?e.q(g):null},cx:i.of(r.x),cy:a.of(r.y)}});m.sort((e,t)=>t.rad-e.rad);let h=``,g=``;for(let{p:n,rad:r,d:i,cx:a,cy:o}of m)h+=d(`circle`,{"data-maya":`mark`,...i,r:u(r),cx:u(a),cy:u(o)}),r*2<Ce&&(g+=d(`circle`,{"data-maya":`hit`,...i,r:u(Math.max(r,12)),cx:u(a),cy:u(o),fill:`transparent`})),t.labels&&e.label(a,o-r,e.fmt(t.y,n.y),`above`);return{marks:h,hits:g}}},L=30,Ee=26,R=8,De=e=>typeof e==`number`?e:null,Oe={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=/* @__PURE__ */ 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(De(e[t])))}let c=[...s].map(([e,t])=>({name:e,vals:t.map(e=>o(e))})),f=(e,t)=>e===null?1/0:e*t,h=(e,t)=>(n,r)=>f(n.vals[e],t)-f(r.vals[e],t)||0;t.limit!==null&&c.length>t.limit&&(c=c.sort(h(0,-1)).slice(0,t.limit));let g=t.sortBy&&(t.sortBy[0]===t.x||i.includes(t.sortBy[0]))?t.sortBy:null;if(g){let e=g[1]===`asc`?1:-1,n=i.indexOf(g[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(h(0,t.sort===`asc`?1:-1));let _=Math.max(80,Math.min(n*.34,180)),v=(n-_)/i.length,y=e=>_+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:_,o=g?.[0]===t?g[1]:null,s=x(a(t),i-(o?14:0))+(o?o===`asc`?` ▲`:` ▼`:``);C+=d(`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)},d(`rect`,{x:u(r),y:0,width:u(i),height:L,fill:`transparent`})+d(`text`,{"data-th":!0,x:u(n?r+i-R:R),y:L/2,"text-anchor":n?`end`:`start`,"dominant-baseline":`middle`},l(s)))}),S+=d(`line`,{x1:0,x2:n,y1:L,y2:L});let w=Math.max(0,Math.floor((r-L)/Ee)),T=``;return c.slice(0,w).forEach((n,r)=>{let o=L+r*Ee,s=e.fmt(t.x,n.name);T+=d(`text`,{"data-key":p(`t`,n.name),x:R,y:o+Ee/2-2,"dominant-baseline":`middle`,"data-td":`label`},l(x(s,_))),i.forEach((t,c)=>{let f=n.vals[c],h=y(c)+v-R,g=f===null?`–`:e.fmt(t,f);if(T+=d(`text`,{"data-key":p(`v`,t,n.name),x:u(h),y:o+Ee/2-2,"text-anchor":`end`,"dominant-baseline":`middle`},l(g)),f===null)return;let _=b[c]?(v-16)*Math.abs(f)/b[c]:0,x={"data-key":p(t,n.name),"data-c":r,"data-s":i.length>1?c%8:0,"data-x":s,"data-series":a(t),"data-f":g,"data-y":f,"data-neg":f<0},S=o+Ee-7;T+=d(`rect`,{"data-maya":`mark`,...x,x:u(y(c)+R),y:S,width:u(_),height:4}),C+=m(x,y(c)+R,S,_,4)})}),{marks:T,hits:C,labels:``,grid:S}}},ke=`--maya-fg:#1f2328;--maya-fg-muted:#656d76;--maya-bg:#fff`,Ae=`--maya-fg:#e6edf3;--maya-fg-muted:#9198a1;--maya-bg:#0d1117`,z=(e,t=0)=>Array.from({length:e},(e,n)=>n+t),je=z(8).map(e=>`[data-s="${e}"]{--c:var(--maya-series-${e+1})}`).join(``),Me=z(10).map(e=>`[data-q="${e}"]{--q:${Math.round(20+e*80/9)}%}`).join(``),Ne=z(8).map(e=>`.maya:has([data-s="${e}"]:hover) [data-maya=mark]:not([data-s="${e}"]){opacity:.3}`).join(``),Pe=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(``),Fe=`border:0;background:none;padding:0;font:inherit;color:var(--maya-fg-muted);cursor:pointer`,B=`: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{${ke}}@media (prefers-color-scheme:dark){:host,.maya-root{${Ae}}}}: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;${Fe};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}`+Pe+`.maya-ctl [role=radio]{${Fe};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}`+je+`[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))}`+Me+`[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}`+Ne+`[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}}`,Ie=class extends Error{code;path;constructor(e,t,n){super(n),this.name=`MayaSpecError`,this.code=e,this.path=t}},V=e=>e.split(` `),Le=Object.fromEntries([...V(`$schema x y2 series size name title description locale currency`).map(e=>[e,`string`]),...V(`stack horizontal labels legend tooltip drill zoom grid xAxis yAxis table animate`).map(e=>[e,`boolean`])]),Re=[...V(`type data y path totals aggregate sort limit format titles text yDomain xDomain select`),...V(`colors colorBy theme`),...Object.keys(Le)],ze=[`bar`,`line`,`area`,`dumbbell`],Be=[`treemap`,`sunburst`,`sankey`,`chord`],Ve=[`parallel`,`table`],H=`bar,line,area`,He=`treemap,sunburst,sankey,chord`,Ue=Object.fromEntries(V(`horizontal:bar,dumbbell y2:bar size:scatter name:scatter,beeswarm path:${H},dumbbell,${He} totals:waterfall series:${H},scatter,heatmap,dumbbell,ridgeline,beeswarm,parallel,marimekko,radial sort:${H},heatmap,dumbbell,table,radial,waffle limit:${H},heatmap,dumbbell,table,waffle,radial stack:bar,area colorBy:${H},waterfall,scatter,dumbbell,kpi,treemap,sunburst,hexmap xDomain:scatter drill:${H},dumbbell,${He} select:${H},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(`,`)])),We=V(`sum mean count min max`),Ge=V(`auto integer decimal compact percent currency date month year time datetime`),Ke=V(`dateStyle timeStyle weekday era year month day dayPeriod hour minute second fractionalSecondDigits timeZoneName timeZone hour12 hourCycle calendar`),qe=e=>Ke.some(t=>Object.hasOwn(e,t)),Je=[...V(`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)],Ye={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`},Xe=`Use horizontal: true to put categories on the left axis.`,Ze=`Size comes from the element's CSS box, or render(spec, { width, height }).`,Qe=`Pie and donut charts are not supported: use "bar" or "treemap" to compare parts.`,$e=`Use type: "hexmap" (import "mayacharts/geo").`,et=`Example: { type: "bar", data: [{ month: "Jan", revenue: 10 }], x: "month", y: "revenue" }`,tt={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:Xe,orientation:Xe,width:Ze,height:Ze,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.`},nt={column:`Use type: "bar".`,barh:`Use type: "bar" with horizontal: true.`,bubble:`Use type: "scatter" with size: "<field>".`,choropleth:$e,map:$e,pie:Qe,donut:Qe},rt=V(`rgb rgba hsl hsla oklch oklab lab lch color color-mix light-dark var calc`),it=String.raw`\s*(?:"[\w\s.\-]*"|'[\w\s.\-]*'|[\w\-]+(?:\s+[\w\-]+)*)\s*`,at=RegExp(`^${it}(?:,${it})*$`),ot=(e,t)=>Object.hasOwn(e,t)?e[t]:void 0,U=e=>typeof e==`object`&&!!e&&!Array.isArray(e),W=(e,t=0)=>Array.isArray(e)&&e.length>=t&&e.every(e=>typeof e==`string`),G=e=>e===null?`null`:Array.isArray(e)?`array`:typeof e,K=e=>{let t=typeof e==`string`||U(e)||Array.isArray(e)?JSON.stringify(e):String(e);return t.length>60?t.slice(0,59)+`…`:t},q=(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}"?`},J=(e,t,n,...r)=>{throw new Ie(e,t,`mayacharts: ${n}\n${[...r,`-> https://bbekshr.github.io/mayacharts/errors.html#${e}`].filter(Boolean).map(e=>` `+e).join(`
|
|
3
|
+
`)}`)},Y=(e,t,n)=>J(`invalid-option`,e,`spec.${e} must be ${n}, received ${K(t)}.`,ot(tt,`${e}:${G(t)}`)??``),st=(e,t,n)=>{let r=n?at.test(t):/^[#\w\s.,%()+\-\/]*$/.test(t)&&[...t.matchAll(/([\w-]*)\s*\(/g)].every(e=>rt.includes(e[1].toLowerCase()));(!t||!r)&&J(`unsafe-css-value`,e,`spec.${e} = ${K(t)} is not a safe CSS value.`,`Allowed: colours, lengths, numbers and ${rt.join(`() `)}(); fonts are family names.`,`Not allowed: url(), image-set(), other functions, ; { } < > \\ and (outside fonts) quotes.`)},X=(e,t,...n)=>J(`invalid-format`,e,t,...n),ct=(e,t,n)=>{if(typeof t==`string`){Ge.includes(t)||X(e,`spec.${e} = ${K(t)} is not a format preset.`,`Presets: ${Ge.join(`, `)}. Or per field: { <field>: preset or Intl options }.`,q(t,Ge));return}U(t)||X(e,`spec.${e} must be a preset or Intl options, received ${K(t)}.`);let{prefix:r,suffix:i,...a}=t;for(let[t,n]of[[`prefix`,r],[`suffix`,i]])n!==void 0&&typeof n!=`string`&&X(`${e}.${t}`,`spec.${e}.${t} must be a string, received ${K(n)}.`);let o=qe(a);try{o?new Intl.DateTimeFormat(n,a):new Intl.NumberFormat(n,a)}catch(n){X(e,`spec.${e} = ${K(t)} is not valid ${o?`Intl.DateTimeFormat`:`Intl.NumberFormat`} options.`,n instanceof Error?n.message:String(n))}},lt=[[`y`,`a field name or a non-empty array of field names`,e=>typeof e==`string`||W(e,1)],[`path`,`a non-empty array of field names`,e=>W(e,1)],[`totals`,`an array of x values (strings)`,e=>W(e)],[`aggregate`,`one of ${We.join(`, `)}`,e=>We.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||U(e)&&Object.keys(e).join()===`target`&&Number.isFinite(e.target)],[`titles`,`an object of strings keyed by field`,e=>U(e)&&Object.values(e).every(e=>typeof e==`string`)]];function ut(e){U(e)||J(`spec-not-object`,`spec`,`spec must be a plain object, received ${G(e)}.`,`Received: ${K(e)}`);let t=e;for(let e of Object.keys(t))Re.includes(e)||J(`unknown-option`,e,`spec.${e} is not a known option.`,ot(tt,e)??q(e,Re),`Known options: ${Re.join(`, `)}.`);let s=t.type;s===void 0&&J(`missing-field`,`type`,`spec.type is required but missing.`,`Required fields: type, data, x, y.`,et);let c=[...r,...a()],l=typeof s==`string`?s:void 0;if(l===void 0||!c.includes(l)){let e=l===void 0?void 0:ot(i,l);e&&J(`unknown-type`,`type`,`spec.type = "${s}" needs the "${e}" module, which is not loaded.`,`Add: import "mayacharts/${e}"`),J(`unknown-type`,`type`,`spec.type = ${K(s)} is not a chart type.`,`Valid types: ${c.join(`, `)}.`,l===void 0?``:ot(nt,l)??q(l,[...c,...Object.keys(i)]))}let u=s,d=Be.includes(u),f=d?`path`:`x`,p=e.path;u===`sankey`&&Array.isArray(p)&&p.length<2&&J(`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&&J(`invalid-option`,`path`,`spec.path needs exactly two levels for a chord: from and to.`,`Example: path: ["region", "family"]`);let m=e=>J(`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" }`:et);t.data===void 0&&m(`data`),Array.isArray(t.data)||J(`data-not-array`,`data`,`spec.data must be an array of rows, received ${G(t.data)}.`);let h=t.data;h.forEach((e,t)=>{U(e)||J(`row-not-object`,`data[${t}]`,`spec.data[${t}] must be an object, received ${G(e)}.`,`Received: ${K(e)}`)}),t[f]===void 0&&u!==`kpi`&&u!==`beeswarm`&&!(f===`x`&&ze.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)&&J(`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 Le)t[e]!==void 0&&typeof t[e]!==Le[e]&&Y(e,t[e],`a ${Le[e]}`);for(let[e,n,r]of lt)t[e]!==void 0&&!r(t[e])&&Y(e,t[e],n);let{y:g,path:_,select:v,colors:y,colorBy:b,theme:x,text:S}=t;if(S!==void 0){U(S)||Y(`text`,S,`an object of strings`);for(let[e,t]of Object.entries(S))Object.hasOwn(o,e)||J(`invalid-option`,`text.${e}`,`spec.text.${e} is not a text key.`,q(e,Object.keys(o)),`Text keys: ${Object.keys(o).join(`, `)}.`),typeof t!=`string`&&Y(`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]))&&J(`invalid-domain`,e,`spec.${e} = ${K(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||X(`locale`,`spec.locale = ${K(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{X(`currency`,`spec.currency = ${K(t.currency)} is not an ISO 4217 currency code.`,`Use a three-letter code such as "USD" or "EUR".`)}if(typeof t.format==`string`)ct(`format`,t.format,C);else if(t.format!==void 0){U(t.format)||Y(`format`,t.format,`a preset or an object keyed by field`);for(let[e,n]of Object.entries(t.format))ct(`format.${e}`,n,C)}if(y!==void 0){let e=Array.isArray(y)?y.map((e,t)=>[`[${t}]`,e]):U(y)?Object.entries(y).map(([e,t])=>[`.${e}`,t]):null;(!e||!e.every(([,e])=>typeof e==`string`))&&Y(`colors`,y,`an array of colours, or an object of colours by series value`),e.length>8&&J(`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)st(`colors${t}`,n,!1)}if(x!==void 0){U(x)&&Object.values(x).every(e=>typeof e==`string`)||Y(`theme`,x,`an object of string values`);for(let e of Object.keys(x))Je.includes(e)||J(`invalid-theme`,`theme.${e}`,`spec.theme.${e} is not a theme token.`,`Valid tokens: ${Je.join(`, `)}.`,q(e,Je));for(let[e,t]of Object.entries(x))st(`theme.${e}`,t,e===`font`)}t.stack===!0&&u===`line`&&J(`stack-unsupported`,`stack`,`spec.stack is not supported with spec.type = "line".`,`Use type "area" (or "bar") to stack series.`);for(let e in Ue)t[e]!==void 0&&t[e]!==!1&&!Ue[e].includes(u)&&J(`option-unsupported`,e,`spec.${e} is not supported with spec.type = "${u}".`,`spec.${e} works with: ${Ue[e].join(`, `)}.`);let w=ze.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&&!U(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&&J(`option-unsupported`,t,n,r);if(h.length){let e=[...new Set(h.flatMap(e=>Object.keys(e)))],n=(t,n,r,i)=>J(`unknown-field`,t,n,`Fields found: ${e.slice(0,20).join(`, `)}.`,q(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} = ${K(r)} is not a field in spec.data.`,r,`spec.${i} names the field used for ${Ye[i]}.`)}for(let r of[`format`,`titles`])if(U(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 ${Ye[r]}.`);b===`sign`&&e.includes(`sign`)&&J(`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)||J(t,i,`spec.${i} is ${K(r)} (a ${G(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&&J(`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&&J(`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".`)})}n.get(u)?.check?.(e,J)}function dt(e){if(e===void 0)return;U(e)||J(`invalid-option`,`options`,`options must be a plain object, received ${G(e)}.`);let t=e,n=(e,t,n)=>J(`unknown-option`,`${e}.${t}`,`${e}.${t} is not a known render option.`,q(t,n),`Known options: ${n.join(`, `)}.`),r=V(`width height view selected nonce`);for(let e of Object.keys(t))r.includes(e)||n(`options`,e,r);let i=(e,t,n)=>J(`invalid-option`,`options.${e}`,`options.${e} must be ${n}, received ${K(t)}.`);for(let e of[`width`,`height`]){let n=t[e];n!==void 0&&!(typeof n==`number`&&Number.isFinite(n)&&n>0)&&J(`invalid-size`,`options.${e}`,`options.${e} = ${K(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){U(a)||i(`view`,a,`an object`);let e=V(`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&&!W(r)&&i(`view.drill`,r,`an array of strings`),s!==void 0&&!W(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=>U(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 ft(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??(ze.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 pt={bar:ie,waterfall:ie,line:xe,area:Se,scatter:Te,heatmap:le,kpi:fe,dumbbell:ce,ridgeline:ve,beeswarm:se,parallel:_e,table:Oe},mt=e=>e.replace(/[A-Z]|\d+/g,e=>`-`+e.toLowerCase());function ht(e,t,r){ut(e),t!==void 0&&dt(t);let i=Object.hasOwn(pt,e.type)?pt[e.type]:n.get(e.type),a=ft(e,t?.view),o=t?.width??640,c=t?.height??320,f=ne(a,t?.view??{}),p=e=>e>5e3&&J(`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.`);p(f.cells.length);let m=/* @__PURE__ */ new Map,g=(e,t,n)=>{if(t===`\0other`)return s(a,`other`);let r=e+`\0`+n,i=m.get(r);return i||m.set(r,i=C(a,e,n)),i(t)},_=a.colorBy,b=1/0,x=-1/0;if(typeof _==`string`&&_!==`sign`)for(let e of a.data){let t=e[_];typeof t==`number`&&(b=Math.min(b,t),x=Math.max(x,t))}let S=e=>_===`sign`?e<0?`bad`:`good`:_&&typeof _==`object`?e>=_.target?`good`:`bad`:null,w=e=>{let t=S(e);return t===null?null:s(a,_===`sign`?t===`good`?`positive`:`negative`:t===`good`?`above`:`below`)},T=[],E=``,D=(e,t,n,r)=>{let i=n.length*7.2+4,a=r===`start`?e:r===`end`?e-i:e-i/2,s=r===`above`?t-16:r===`below`?t+2:t-7;return a<0||s<0||a+i>o||s+14>c||T.some(e=>a<e[2]&&a+i>e[0]&&s<e[3]&&s+14>e[1])?!1:(T.push([a,s,a+i,s+14]),E+=d(`text`,{x:u(e),y:u(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`},l(n)),!0)},O=i.axes?te(a,i.axes(a,f),{width:o,height:c},g):null,k=O?.plot??{x:0,y:0,w:o,h:c},A={spec:a,shaped:f,width:o,height:c,plot:k,x:O?.x??null,y:O?.y??null,y2:O?.y2??null,fmt:g,label:D,tone:S,q:e=>x>b?Math.min(9,Math.max(0,Math.floor((e-b)/(x-b)*10))):9,agg:e=>t=>{let n=N(e);for(let e of t)typeof e==`number`&&n.add(e);return n.value()},fail:J,t:(e,...t)=>s(a,e,...t)};i.check?.(e,J);let j=null,ee=``;if(a.data.length===0)ee=d(`text`,{"data-maya":`empty`,x:o/2,y:c/2,"text-anchor":`middle`,"dominant-baseline":`middle`},l(s(a,`noData`)));else{let e=(e,t)=>d(`g`,{"data-maya":e},t),t=i.draw(A);p(t.marks.split(` data-maya="mark"`).length-1),j=t.legend??null,ee=e(`grid`,t.grid??O?.grid??``)+e(`axis-y`,O?.ay??``)+e(`axis-x`,O?.ax??``)+e(`marks`,t.marks)+e(`labels`,(t.labels??``)+E)+e(`cross`,t.cross??``)+e(`hits`,t.hits)}let M=[];if(Array.isArray(a.colors))a.colors.forEach((e,t)=>M.push([`--maya-series-${t+1}`,e]));else if(a.colors)for(let[e,t]of a.colors){let n=(a.type===`waffle`?f.categories:f.series).indexOf(e);n>=0&&M.push([`--maya-series-${n%8+1}`,t])}for(let e in a.theme)M.push([`--maya-${mt(e)}`,a.theme[e]]);let P=M.map(([e,t])=>`${e}:${t};`).join(``),re=d(`svg`,{class:r===null?`maya-svg`:`maya-root maya-svg`,viewBox:`0 0 ${o} ${c}`,width:o,height:c,role:`img`,"aria-label":r===null?null:h(a),"aria-labelledby":r===null?`maya-t`:null,"aria-describedby":r===null?`maya-d`:null,tabindex:r===null?`0`:null,style:r===null?null:P||null,"data-plot":`${u(k.x)} ${u(k.y)} ${u(k.w)} ${u(k.h)}`,...O?.attrs,"data-dir":a.horizontal?`h`:null},(r?`<style>${r}</style>`:``)+d(`title`,{id:r===null?`maya-t`:null},l(h(a)))+d(`desc`,{id:r===null?`maya-d`:null},l(v(a,f,g,i.noun)))+ee),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>${l(a.titles.get(a.y)??a.y)}</span>`:``)+(a.series===null?[]:f.series).map((e,t)=>d(`button`,{type:`button`,"data-si":t,"data-s":t%8,"data-key":e,"aria-pressed":String(f.visible.includes(t))},`<i></i>${l(e)}`)).join(``)+(a.y2===null?``:`<span data-s="${f.series.length%8}" data-line><i></i>${l(a.titles.get(a.y2)??a.y2)}</span>`)+`</div>`:e.legend!==!1&&_!==null&&a.series===null&&a.type!==`kpi`&&(F=_===`sign`||typeof _==`object`?`<div class="maya-legend" data-maya="tone">`+[`good`,`bad`].map(e=>`<span data-tone="${e}"><i></i>${l(s(a,_===`sign`?e===`good`?`positive`:`negative`:e===`good`?`above`:`below`))}</span>`).join(``)+`</div>`:x>b?`<div class="maya-legend" data-maya="ramp"><span>${l(g(_,b))}</span><i></i><span>${l(g(_,x))}</span></div>`:``),{svg:re,legend:F,controls:a.measures.length>1&&!Ve.includes(a.type)?`<div class="maya-ctl" role="radiogroup" aria-label="${l(s(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}">${l(a.titles.get(e)??e)}</button>`).join(``)+`</div>`:``,crumbs:a.drilled.length>0?`<nav class="maya-crumbs" aria-label="${l(s(a,`crumbs`))}"><button type="button" data-depth="0">${l(s(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"`:``}>${l(String(e))}</button>`).join(``)+`</nav>`:a.drill?`<div class="maya-crumbs" aria-hidden="true"></div>`:``,table:a.table?y(a,f,g,w):``,title:a.title===null?``:`<div class="maya-title">${l(a.title)}</div>`,style:P,vars:M,warnings:[]}}function gt(e,t){return ht(e,t,null)}function _t(e,t){return ht(e,t,B).svg}function vt(e,t,n){let r=e.style?` style="${l(e.style)}"`:``,i=n?` nonce="${l(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 yt(e){let t=e=>typeof e==`object`?Object.keys(e):[],n=/* @__PURE__ */ 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 bt(e,t){let n=gt(e,t),r=JSON.stringify(yt(e)).replace(/</g,`\\u003c`);return`<maya-chart><template shadowrootmode="open">${vt(n,B,t?.nonce)}</template><script type="application/json">${r}<\/script></maya-chart>`}var xt,St=e=>{let t=globalThis.trustedTypes;if(!t)return e;if(xt?.[0]!==t){let e=null;try{e=t.createPolicy(`mayacharts`,{createHTML:e=>e})}catch{e=t.getPolicy?.(`mayacharts`)??null}xt=[t,e]}return xt[1]?xt[1].createHTML(e):e},Ct=!1,wt=`cubic-bezier(.2,.8,.2,1)`,Tt={duration:280,easing:wt},Et={duration:160,easing:wt},Dt=1500,Ot=1e-6,Z=(e,t)=>+(e.getAttribute(t)??0),kt=e=>{if(e.localName===`rect`)return[Z(e,`x`),Z(e,`y`),Z(e,`width`),Z(e,`height`)];if(e.localName===`circle`){let t=Z(e,`r`);return[Z(e,`cx`)-t,Z(e,`cy`)-t,2*t,2*t]}},At=e=>{let t=e.getBBox?.();return kt(e)??(t?[t.x,t.y,t.width,t.height]:void 0)},jt=(e,t)=>`translate(${t[0]-e[0]}px,${t[1]-e[1]}px) scale(${Math.max(t[2],Ot)/Math.max(e[2],Ot)},${Math.max(t[3],Ot)/Math.max(e[3],Ot)})`,Mt=(e,t,n,r)=>{let i=Ct?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 Nt(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 Pt(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 Ft(e,t,n,r=Tt){let i=[{opacity:0},{opacity:1}];Mt(e,t?i.reverse():i,t?{...r,fill:`forwards`}:r,n)}function It(e,t){let n=kt(e);if(n)Mt(e,[{transform:jt(n,Pt(e,n,t)),opacity:0},{transform:`none`,opacity:1}],Tt);else if(e.matches(`path[data-maya=line]`)){e.setAttribute(`pathLength`,`1`);let t=e=>({strokeDasharray:`1`,strokeDashoffset:e});Mt(e,[t(`1`),t(`0`)],Tt)}else Ft(e,!1)}function Lt(e,t){e.removeAttribute(`data-key`),e.removeAttribute(`data-maya`);let n=kt(e),r=()=>e.remove();n?Mt(e,[{transform:`none`,opacity:1},{transform:jt(n,Pt(e,n,t)),opacity:0}],{...Tt,fill:`forwards`},r):Ft(e,!0,r)}function Rt(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 zt(e,t,n){let r=/* @__PURE__ */ 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=kt(n),o=a&&Rt(n,a);Nt(n,e);let s=kt(n);o&&s&&o.some((e,t)=>Math.abs(e-s[t])>.01)&&Mt(n,[{transform:jt(s,o)},{transform:`none`}],Tt),i.push(n)}for(let e of r.values())Lt(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&&It(t,n)}}}function Bt(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)Vt(e);for(let e of s)Ft(e,!1,void 0,Et)}function Vt(e){e.removeAttribute(`data-maya`);for(let t of e.querySelectorAll(`[data-maya]`))t.removeAttribute(`data-maya`);Ft(e,!0,()=>e.remove(),Et)}function Ht(e,t,n,r={}){let i=document.createElement(`template`);i.innerHTML=St(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>Dt||s.childElementCount>Dt?e.replaceChildren(a):(Ct=!!r.instant,Nt(o,a),Nt(s,c),zt(s,c,r.origin),Bt(o,a,s,c),Ct=!1),r.after?.(e.firstElementChild)}var Ut=(e=[],t=[])=>e.length===t.length&&e.every((e,n)=>e===t[n]),Wt=(e,t)=>Ut(e.view.drill,t)?e:{view:{...e.view,drill:t},selected:[]},Gt=(e,t)=>{let n=e.view.drill??[];if(t.type===`pop`)return Wt(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?Wt(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||!Ut(r.path,i.path)))return Wt(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 Wt(e,s)},Kt=(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(s(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=Gt(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=Kt(a,(o.view.drill??[]).length);if(s===void 0)return!1;let c=Gt(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=>Kt(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)}},Jt=`.maya-ctl [role=radio]`,Yt=(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}}},Xt=e=>{let t=()=>[...e.root.querySelectorAll(Jt)],n=!1,r=t=>{let n=e.spec(),r=n&&Array.isArray(n.y)?n.y:[],i=e.state(),a=Yt(i,{type:`measure`,index:t,count:r.length||void 0});if(a===i)return;e.commit(a);let o=a.view.measure??0,c=r[o]??String(o);e.announce(s(n??{},`showing`,n?.titles?.[c]??c))},i=e=>{let n=e.target.closest?.(Jt),i=n?t().indexOf(n):-1;i>=0&&r(i)},a=i=>{let a=i.key,s=t(),c=s.indexOf(i.target.closest?.(Jt));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),Qt=[`x`,`series`,`name`],$t=e=>{try{return decodeURIComponent(e)}catch{return e}};function en(e,t){if(t.type===`clear`)return e.selected.length?{...e,selected:[]}:e;if(t.type===`spec`){let n=t.prev;if(!n||!e.selected.length)return e;let r=t.next;return n.type!==r.type||n.x!==r.x||JSON.stringify(n.path)!==JSON.stringify(r.path)?{...e,selected:[]}:e}if(t.type!==`toggle`)return e;let n=e.selected.some(e=>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 tn(e,t){let n=e.getAttribute(`data-key`);if(!n)return;let r=n.split(`~`).map($t);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 nn(e,t,n){let r=tn(t,n);return r?Qt.every(t=>e[t]===void 0||String(e[t])===String(r[t])):!1}function rn(e){let{root:t}=e,n=()=>e.spec()?.type,r=(t,n)=>{let r=e.spec();if(!r?.select)return;let i=en(e.state(),{type:`toggle`,sel:t,multi:r.select===`multi`}),a=n?.getAttribute(`data-y`)??``;e.commit(i,n?{...t,value:a!==``&&!isNaN(+a)?+a:a}:null);let o=i.selected.length;e.announce(o?s(r,`selected`,o):s(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&&tn(s,n());s&&c&&r(c,s)};return t.addEventListener(`click`,i),{escape(){return e.state().selected.length?(e.commit(en(e.state(),{type:`clear`})),e.announce(s(e.spec()??{},`selectionCleared`)),!0):!1},enter(t){let i=tn(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=>nn(t,e,n()))?e.setAttribute(`data-selected`,``):e.removeAttribute(`data-selected`)},off:()=>t.removeEventListener(`click`,i)}}var an=(e,t)=>{if(t.type===`spec`){let{prev:n,next:r}=t;if(!e.view.sortBy||n&&n.type===r.type&&n.x===r.x&&JSON.stringify(n.y)===JSON.stringify(r.y))return e;let{sortBy:i,...a}=e.view;return{...e,view:a}}let n=e.view.sortBy,r=n?.[0]===t.field?n[1]===`asc`?`desc`:`asc`:t.label?`asc`:`desc`;return{...e,view:{...e.view,sortBy:[t.field,r]}}},on=`[data-maya=sort]`,sn=e=>{let t=null,n=n=>{let r=e.spec(),i=n.getAttribute(`data-field`);if(!r||r.type!==`table`||!i)return;let a=an(e.state(),{type:`sort`,field:i,label:i===r.x}),[,o]=a.view.sortBy;t=i,e.commit(a);let c=r.titles;e.announce(s(r,`sortedBy`,c?.[i]??i,s(r,o===`asc`?`ascending`:`descending`)))},r=e=>{let t=e.target.closest?.(on);t&&n(t)},i=e=>{let t=e.key,r=e.target.closest?.(on);!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(on)].find(e=>e.getAttribute(`data-field`)===n)?.focus({preventScroll:!0})},off(){e.root.removeEventListener(`click`,r),e.root.removeEventListener(`keydown`,i,!0)}}},Q=(e,t)=>e.getAttribute(t)??``,$=(e,t=``,n={})=>{let r=document.createElement(e);r.textContent=t;for(let e in n)r.setAttribute(e,n[e]);return r},cn=`[data-maya=hit],[data-maya=mark],[data-maya=link][data-key]`,ln=120,un=[`position`,`position-area`,`left`,`top`,`margin`];function dn(e,t,n=()=>{},r=()=>void 0){let i=t=>e.querySelector(t),a=i(`.maya-box`),o=i(`.maya-tip`),c=i(`.maya-probe`),l=e.host,u=!!globalThis.CSS?.supports?.(`anchor-name: --x`),d=[],f=/* @__PURE__ */ new Map,p=/* @__PURE__ */ new Map,m,h=!1,g=!1,_=!1,v=!1,y,b,x=()=>{d=[...a.querySelectorAll(`[data-maya=mark][data-key]`)],f=/* @__PURE__ */ new Map,p=/* @__PURE__ */ 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])}},S=e=>Q(e,`data-maya`)!==`link`&&e.hasAttribute(`data-c`)&&p.get(Q(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(Q(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=+(Q(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(),ln))},D=(e,t)=>{let n=e?.closest?.(cn);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},O=e=>{let t=Q(e,`data-tone`),n=r();if(!t)return``;let i=typeof n?.colorBy==`object`;return s(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($(`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=O(t);return i&&n.append($(`span`,i)),n})),T(e);let i=e.getBoundingClientRect(),a=l.getBoundingClientRect();Object.assign(c.style,{left:i.left-a.left-l.clientLeft+`px`,top:i.top-a.top-l.clientTop+`px`,width:i.width+`px`,height:i.height+`px`}),clearTimeout(y),h||=(o.showPopover(),!0),o.classList.add(`maya-open`);let s=globalThis.visualViewport,d=s?.width??innerWidth,f=s?.height??innerHeight;if(_)for(let e of un)o.style.removeProperty(e);_=!1;let p=o.getBoundingClientRect();if(!u||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(`${Q(e,`data-x`)}: ${r.map(e=>[Q(e,`data-series`),Q(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(Q(d[t],`data-c`))+e]);r=i?.find(e=>Q(e,`data-s`)===Q(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&&Q(m,`data-key`);x();let n=e?f.get(e):void 0;n&&t()?k(n):E()}}}var fn=e=>{if(!e.view.window)return e;let{window:t,...n}=e.view;return{...e,view:n}},pn=(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 fn(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))?fn(e):e},mn=4,hn=2,gn=`http://www.w3.org/2000/svg`,_n=e=>(e??``).trim().split(/\s+/).map(Number),vn=e=>String(+e.toPrecision(4)),yn=e=>{let{root:t}=e,n,r,i=``,a=JSON.stringify(e.state().view.drill),o=e=>e.target?.closest?.(`svg.maya-svg`),c=e=>{let t=e.getBoundingClientRect(),n=_n(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]=_n(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}},l=(e,t,n)=>Math.min(n,Math.max(t,e)),u=()=>{r?.remove(),r=void 0,n=void 0},d=(e,t)=>{let n=c(e);return{g:n,x:l((t.clientX-n.r.left)*n.k+n.vx,n.px,n.px+n.pw),y:l((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=c(e);(!r||r.ownerSVGElement!==e)&&(r?.remove(),r=document.createElementNS(gn,`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),s=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(${s},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&&(u(),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)<mn)){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,c=d(a,i),p=c.g;try{a.releasePointerCapture(i.pointerId)}catch{}if(u(),m=void 0,!o)return;_();let h=f(a),g=Math.abs(s.x-c.x)/p.k,v=Math.abs(s.y-c.y)/p.ky;if(h?g<hn:g<hn||v<hn)return;let y=e.state();if(h){let t=Math.max(1,+(a.getAttribute(`data-n`)??1)),n=y.view.window?.[0]??0,r=e=>l(Math.floor((e-p.px)/p.pw*t),0,t-1),i=r(Math.min(s.x,c.x)),o=r(Math.max(s.x,c.x));e.commit(pn(y,{type:`zoom`,window:[n+i,n+o]}),null)}else{let t=_n(a.getAttribute(`data-xd`)),n=_n(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(pn(y,{type:`zoom`,window:[r(s.x),r(c.x),i(s.y),i(c.y)]}),null)}},y=()=>{let t=e.state();return t.view.window?(e.commit(pn(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=()=>{u(),m=void 0};return t.addEventListener(`pointercancel`,S),t.addEventListener(`click`,b),t.addEventListener(`dblclick`,x),{cancel(){return r?(u(),m=void 0,!0):!1},escape:y,painted(){let n=e.state(),r=e.spec(),o=n.view.window,c=JSON.stringify(n.view.drill),l=c!==a;if(a=c,o&&l)return void y();let u=t.querySelector(`svg.maya-svg`);u&&r?.zoom&&(u.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=s(r,`reset`));let p=o.join(`,`);if(p!==i){if(i=p,o.length===4)e.announce(s(r,`zoomedTo`,vn(o[0]),vn(o[1])));else{let n=[...t.querySelectorAll(`[data-maya=mark][data-x]`)].map(e=>e.getAttribute(`data-x`));n.length&&e.announce(s(r,`zoomedTo`,n[0],n[n.length-1]))}}},off(){u(),t.removeEventListener(`pointerdown`,h),t.removeEventListener(`pointermove`,g),t.removeEventListener(`pointerup`,v),t.removeEventListener(`pointercancel`,S),t.removeEventListener(`click`,b),t.removeEventListener(`dblclick`,x)}}},bn,xn=class extends HTMLElement{static observedAttributes=[`spec`];static version=e;#e;#t;#n;#r={view:{},selected:[]};#i;#a;#o;#s={};#c=[0,0];#l=0;#u;#d=!1;#f;#p;#m;#h=/* @__PURE__ */ 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`}),bn??=new CSSStyleSheet,bn.cssRules.length||bn.replaceSync(B),t.adoptedStyleSheets=[bn],t.innerHTML=St(vt({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:Xt(n),drill:qt(n),select:rn(n),zoom:yn(n),sort:sn(n)};let r=t.querySelector(`.maya-box`);this.#p=dn(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([...B.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=`${B}.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=At(r)),this.#r=e,this.#w(),JSON.stringify(n.view)!==JSON.stringify(e.view)&&this.#b(`maya-view`,e.view),JSON.stringify(n.selected)!==JSON.stringify(e.selected)&&this.#b(`maya-select`,{selected:[...e.selected],target:t})}#S=e=>{let t=this.#a;if(!t||e.defaultPrevented)return;let n=e.key,r;if(n===`Escape`)r=t.zoom.cancel?.()||t.select.escape?.()||t.zoom.escape?.()||t.drill.escape?.();else if(n===`Enter`){let e=this.#p?.active();r=!!e&&(t.drill.enter?.(e)||t.select.enter?.(e))}r&&e.preventDefault()};#C=e=>{if(this.spec?.select)return;let t=e.target.closest(`[data-maya=legend] button`);if(!t)return;let n=t.getAttribute(`data-key`)??``,r=new Set(this.#r.view.hidden);if(r.has(n))r.delete(n);else if(this.shadowRoot.querySelectorAll(`[data-maya=legend] [aria-pressed=true]`).length>1)r.add(n);else return;this.#x({...this.#r,view:{...this.#r.view,hidden:[...r]}},null)};#w(){this.isConnected&&!this.#l&&(this.#l=requestAnimationFrame(()=>(this.#l=0,this.#T())))}#T(){let e=this.shadowRoot,t=this.spec,n=e.querySelector(`.maya-box`);if(!t)return;if(t!==this.#i){let e={type:`spec`,prev:this.#i,next:t};this.#r=en(pn(an(Gt(Yt(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=gt(t,{width:r,height:i,view:this.#r.view,selected:this.#r.selected})}catch(e){this.#p?.hide();let t=e instanceof Ie?{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`,St(a[t])))}),this.#s.table!==a.table&&(this.#s.table=a.table,e.querySelector(`table.maya-sr`)?.remove(),n.insertAdjacentHTML(`afterend`,St(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,Ht(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 Sn){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=Sn.find(([e])=>e===n)[1];t.querySelectorAll(i)[+r]?.focus({preventScroll:!0})}},Sn=[[`svg`,`.maya-svg`],[`legend`,`[data-maya=legend] button`],[`measure`,`.maya-ctl [role=radio]`],[`crumb`,`.maya-crumbs :is(button,a)`],[`reset`,`.maya-reset`]];if(typeof customElements<`u`){let t=customElements.get(`maya-chart`);t?t.version!==`0.2.1`&&console.warn(`mayacharts: <maya-chart> ${t.version??`(unknown)`} is already defined; ${e} is not used.`):customElements.define(`maya-chart`,xn)}export{xn as MayaChart,Ie as MayaSpecError,_t as render,gt as renderParts,bt as renderShell,ut as validateSpec,e as version};
|
|
4
4
|
//# sourceMappingURL=element.js.map
|